[
  {
    "path": "Dockerfile",
    "content": "FROM ubuntu:18.04\n\nMAINTAINER ray<tsbc@vip.qq.com>\n\nLABEL version=\"2.0\" by=\"ray\" descriptio=\"python3.6 django 3.2.3\"\n\nENV TZ=Asia/Shanghai\nENV PATH=/usr/bin:$PATH\nENV DEBIAN_FRONTEND=noninteractive\nENV LANG C.UTF-8\n\n\nRUN mkdir /opt/automagic\nWORKDIR /opt/automagic\n\nRUN set -x;apt-get update \\\n&& apt-get install -y vim \\\n&& apt-get install -y tzdata \\\n&& apt-get install -y python3 \\\n&& apt-get install -y python3-pip \\\n&& pip3 install --upgrade pip \n\nCOPY . /opt/automagic\n\nRUN pip3 --no-cache-dir install -r /opt/automagic/requirements/base.txt \\\n     -i http://mirrors.aliyun.com/pypi/simple --trusted-host mirrors.aliyun.com\nRUN pip3 --no-cache-dir install -r /opt/automagic/requirements/seleniumreq.txt \\\n     -i http://mirrors.aliyun.com/pypi/simple --trusted-host mirrors.aliyun.com\n\nENTRYPOINT [\"python3\",\"start.py\"]\n"
  },
  {
    "path": "LICENSE",
    "content": "                    GNU GENERAL PUBLIC LICENSE\n                       Version 2, June 1991\n\n Copyright (C) 1989, 1991 Free Software Foundation, Inc., [http://fsf.org/]\n 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n                            Preamble\n\n  The licenses for most software are designed to take away your\nfreedom to share and change it.  By contrast, the GNU General Public\nLicense is intended to guarantee your freedom to share and change free\nsoftware--to make sure the software is free for all its users.  This\nGeneral Public License applies to most of the Free Software\nFoundation's software and to any other program whose authors commit to\nusing it.  (Some other Free Software Foundation software is covered by\nthe GNU Lesser General Public License instead.)  You can apply it to\nyour programs, too.\n\n  When we speak of free software, we are referring to freedom, not\nprice.  Our General Public Licenses are designed to make sure that you\nhave the freedom to distribute copies of free software (and charge for\nthis service if you wish), that you receive source code or can get it\nif you want it, that you can change the software or use pieces of it\nin new free programs; and that you know you can do these things.\n\n  To protect your rights, we need to make restrictions that forbid\nanyone to deny you these rights or to ask you to surrender the rights.\nThese restrictions translate to certain responsibilities for you if you\ndistribute copies of the software, or if you modify it.\n\n  For example, if you distribute copies of such a program, whether\ngratis or for a fee, you must give the recipients all the rights that\nyou have.  You must make sure that they, too, receive or can get the\nsource code.  And you must show them these terms so they know their\nrights.\n\n  We protect your rights with two steps: (1) copyright the software, and\n(2) offer you this license which gives you legal permission to copy,\ndistribute and/or modify the software.\n\n  Also, for each author's protection and ours, we want to make certain\nthat everyone understands that there is no warranty for this free\nsoftware.  If the software is modified by someone else and passed on, we\nwant its recipients to know that what they have is not the original, so\nthat any problems introduced by others will not reflect on the original\nauthors' reputations.\n\n  Finally, any free program is threatened constantly by software\npatents.  We wish to avoid the danger that redistributors of a free\nprogram will individually obtain patent licenses, in effect making the\nprogram proprietary.  To prevent this, we have made it clear that any\npatent must be licensed for everyone's free use or not licensed at all.\n\n  The precise terms and conditions for copying, distribution and\nmodification follow.\n\n                    GNU GENERAL PUBLIC LICENSE\n   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\n\n  0. This License applies to any program or other work which contains\na notice placed by the copyright holder saying it may be distributed\nunder the terms of this General Public License.  The \"Program\", below,\nrefers to any such program or work, and a \"work based on the Program\"\nmeans either the Program or any derivative work under copyright law:\nthat is to say, a work containing the Program or a portion of it,\neither verbatim or with modifications and/or translated into another\nlanguage.  (Hereinafter, translation is included without limitation in\nthe term \"modification\".)  Each licensee is addressed as \"you\".\n\nActivities other than copying, distribution and modification are not\ncovered by this License; they are outside its scope.  The act of\nrunning the Program is not restricted, and the output from the Program\nis covered only if its contents constitute a work based on the\nProgram (independent of having been made by running the Program).\nWhether that is true depends on what the Program does.\n\n  1. You may copy and distribute verbatim copies of the Program's\nsource code as you receive it, in any medium, provided that you\nconspicuously and appropriately publish on each copy an appropriate\ncopyright notice and disclaimer of warranty; keep intact all the\nnotices that refer to this License and to the absence of any warranty;\nand give any other recipients of the Program a copy of this License\nalong with the Program.\n\nYou may charge a fee for the physical act of transferring a copy, and\nyou may at your option offer warranty protection in exchange for a fee.\n\n  2. You may modify your copy or copies of the Program or any portion\nof it, thus forming a work based on the Program, and copy and\ndistribute such modifications or work under the terms of Section 1\nabove, provided that you also meet all of these conditions:\n\n    a) You must cause the modified files to carry prominent notices\n    stating that you changed the files and the date of any change.\n\n    b) You must cause any work that you distribute or publish, that in\n    whole or in part contains or is derived from the Program or any\n    part thereof, to be licensed as a whole at no charge to all third\n    parties under the terms of this License.\n\n    c) If the modified program normally reads commands interactively\n    when run, you must cause it, when started running for such\n    interactive use in the most ordinary way, to print or display an\n    announcement including an appropriate copyright notice and a\n    notice that there is no warranty (or else, saying that you provide\n    a warranty) and that users may redistribute the program under\n    these conditions, and telling the user how to view a copy of this\n    License.  (Exception: if the Program itself is interactive but\n    does not normally print such an announcement, your work based on\n    the Program is not required to print an announcement.)\n\nThese requirements apply to the modified work as a whole.  If\nidentifiable sections of that work are not derived from the Program,\nand can be reasonably considered independent and separate works in\nthemselves, then this License, and its terms, do not apply to those\nsections when you distribute them as separate works.  But when you\ndistribute the same sections as part of a whole which is a work based\non the Program, the distribution of the whole must be on the terms of\nthis License, whose permissions for other licensees extend to the\nentire whole, and thus to each and every part regardless of who wrote it.\n\nThus, it is not the intent of this section to claim rights or contest\nyour rights to work written entirely by you; rather, the intent is to\nexercise the right to control the distribution of derivative or\ncollective works based on the Program.\n\nIn addition, mere aggregation of another work not based on the Program\nwith the Program (or with a work based on the Program) on a volume of\na storage or distribution medium does not bring the other work under\nthe scope of this License.\n\n  3. You may copy and distribute the Program (or a work based on it,\nunder Section 2) in object code or executable form under the terms of\nSections 1 and 2 above provided that you also do one of the following:\n\n    a) Accompany it with the complete corresponding machine-readable\n    source code, which must be distributed under the terms of Sections\n    1 and 2 above on a medium customarily used for software interchange; or,\n\n    b) Accompany it with a written offer, valid for at least three\n    years, to give any third party, for a charge no more than your\n    cost of physically performing source distribution, a complete\n    machine-readable copy of the corresponding source code, to be\n    distributed under the terms of Sections 1 and 2 above on a medium\n    customarily used for software interchange; or,\n\n    c) Accompany it with the information you received as to the offer\n    to distribute corresponding source code.  (This alternative is\n    allowed only for noncommercial distribution and only if you\n    received the program in object code or executable form with such\n    an offer, in accord with Subsection b above.)\n\nThe source code for a work means the preferred form of the work for\nmaking modifications to it.  For an executable work, complete source\ncode means all the source code for all modules it contains, plus any\nassociated interface definition files, plus the scripts used to\ncontrol compilation and installation of the executable.  However, as a\nspecial exception, the source code distributed need not include\nanything that is normally distributed (in either source or binary\nform) with the major components (compiler, kernel, and so on) of the\noperating system on which the executable runs, unless that component\nitself accompanies the executable.\n\nIf distribution of executable or object code is made by offering\naccess to copy from a designated place, then offering equivalent\naccess to copy the source code from the same place counts as\ndistribution of the source code, even though third parties are not\ncompelled to copy the source along with the object code.\n\n  4. You may not copy, modify, sublicense, or distribute the Program\nexcept as expressly provided under this License.  Any attempt\notherwise to copy, modify, sublicense or distribute the Program is\nvoid, and will automatically terminate your rights under this License.\nHowever, parties who have received copies, or rights, from you under\nthis License will not have their licenses terminated so long as such\nparties remain in full compliance.\n\n  5. You are not required to accept this License, since you have not\nsigned it.  However, nothing else grants you permission to modify or\ndistribute the Program or its derivative works.  These actions are\nprohibited by law if you do not accept this License.  Therefore, by\nmodifying or distributing the Program (or any work based on the\nProgram), you indicate your acceptance of this License to do so, and\nall its terms and conditions for copying, distributing or modifying\nthe Program or works based on it.\n\n  6. Each time you redistribute the Program (or any work based on the\nProgram), the recipient automatically receives a license from the\noriginal licensor to copy, distribute or modify the Program subject to\nthese terms and conditions.  You may not impose any further\nrestrictions on the recipients' exercise of the rights granted herein.\nYou are not responsible for enforcing compliance by third parties to\nthis License.\n\n  7. If, as a consequence of a court judgment or allegation of patent\ninfringement or for any other reason (not limited to patent issues),\nconditions are imposed on you (whether by court order, agreement or\notherwise) that contradict the conditions of this License, they do not\nexcuse you from the conditions of this License.  If you cannot\ndistribute so as to satisfy simultaneously your obligations under this\nLicense and any other pertinent obligations, then as a consequence you\nmay not distribute the Program at all.  For example, if a patent\nlicense would not permit royalty-free redistribution of the Program by\nall those who receive copies directly or indirectly through you, then\nthe only way you could satisfy both it and this License would be to\nrefrain entirely from distribution of the Program.\n\nIf any portion of this section is held invalid or unenforceable under\nany particular circumstance, the balance of the section is intended to\napply and the section as a whole is intended to apply in other\ncircumstances.\n\nIt is not the purpose of this section to induce you to infringe any\npatents or other property right claims or to contest validity of any\nsuch claims; this section has the sole purpose of protecting the\nintegrity of the free software distribution system, which is\nimplemented by public license practices.  Many people have made\ngenerous contributions to the wide range of software distributed\nthrough that system in reliance on consistent application of that\nsystem; it is up to the author/donor to decide if he or she is willing\nto distribute software through any other system and a licensee cannot\nimpose that choice.\n\nThis section is intended to make thoroughly clear what is believed to\nbe a consequence of the rest of this License.\n\n  8. If the distribution and/or use of the Program is restricted in\ncertain countries either by patents or by copyrighted interfaces, the\noriginal copyright holder who places the Program under this License\nmay add an explicit geographical distribution limitation excluding\nthose countries, so that distribution is permitted only in or among\ncountries not thus excluded.  In such case, this License incorporates\nthe limitation as if written in the body of this License.\n\n  9. The Free Software Foundation may publish revised and/or new versions\nof the General Public License from time to time.  Such new versions will\nbe similar in spirit to the present version, but may differ in detail to\naddress new problems or concerns.\n\nEach version is given a distinguishing version number.  If the Program\nspecifies a version number of this License which applies to it and \"any\nlater version\", you have the option of following the terms and conditions\neither of that version or of any later version published by the Free\nSoftware Foundation.  If the Program does not specify a version number of\nthis License, you may choose any version ever published by the Free Software\nFoundation.\n\n  10. If you wish to incorporate parts of the Program into other free\nprograms whose distribution conditions are different, write to the author\nto ask for permission.  For software which is copyrighted by the Free\nSoftware Foundation, write to the Free Software Foundation; we sometimes\nmake exceptions for this.  Our decision will be guided by the two goals\nof preserving the free status of all derivatives of our free software and\nof promoting the sharing and reuse of software generally.\n\n                            NO WARRANTY\n\n  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY\nFOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN\nOTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES\nPROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED\nOR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS\nTO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE\nPROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,\nREPAIR OR CORRECTION.\n\n  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\nWILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR\nREDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,\nINCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING\nOUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED\nTO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY\nYOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER\nPROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGES.\n\n                     END OF TERMS AND CONDITIONS\n\n            How to Apply These Terms to Your New Programs\n\n  If you develop a new program, and you want it to be of the greatest\npossible use to the public, the best way to achieve this is to make it\nfree software which everyone can redistribute and change under these terms.\n\n  To do so, attach the following notices to the program.  It is safest\nto attach them to the start of each source file to most effectively\nconvey the exclusion of warranty; and each file should have at least\nthe \"copyright\" line and a pointer to where the full notice is found.\n\n    {description}\n    Copyright (C) 2018  tsbc\n\n    This program is free software; you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation; either version 2 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License along\n    with this program; if not, write to the Free Software Foundation, Inc.,\n    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.\n\nAlso add information on how to contact you by electronic and paper mail.\n\nIf the program is interactive, make it output a short notice like this\nwhen it starts in an interactive mode:\n\n    Gnomovision version 69, Copyright (C) year name of author\n    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\n    This is free software, and you are welcome to redistribute it\n    under certain conditions; type `show c' for details.\n\nThe hypothetical commands `show w' and `show c' should show the appropriate\nparts of the General Public License.  Of course, the commands you use may\nbe called something other than `show w' and `show c'; they could even be\nmouse-clicks or menu items--whatever suits your program.\n\nYou should also get your employer (if you work as a programmer) or your\nschool, if any, to sign a \"copyright disclaimer\" for the program, if\nnecessary.  Here is a sample; alter the names:\n\n  Yoyodyne, Inc., hereby disclaims all copyright interest in the program\n  `Gnomovision' (which makes passes at compilers) written by James Hacker.\n\n  {signature of Ty Coon}, 1 April 1989\n  Ty Coon, President of Vice\n\nThis General Public License does not permit incorporating your program into\nproprietary programs.  If your program is a subroutine library, you may\nconsider it more useful to permit linking proprietary applications with the\nlibrary.  If this is what you want to do, use the GNU Lesser General\nPublic License instead of this License.\n"
  },
  {
    "path": "README.md",
    "content": "# 自动化测试平台 \n## python3.8+   Django 3.2.10框架\n>python3.8以下版本 使用Django 3.0.5 以上版本 ，django的 /admin/后台会异常退出，不使用/admin/后台不影响，安装请注意版本\n\n### [新用户指导使用指南](https://github.com/radiateboy/automagic/wiki)\n\n# (一)源码安装\n> pip3 install -r requirements/base.txt\n>\n> pip3 install -r requirements/seleniumreq.txt\n\n### Mysql/Mariadb 数据库 automatic/settings/common.py\n```python\nMYSQL_USERNAME =  os.environ.get('MYSQL_USERNAME', 'root')\nMYSQL_PASSWORD =  os.environ.get('MYSQL_PASSWORD', '123456')\nMYSQL_HOST =  os.environ.get('MYSQL_HOST', 'localhost')\nMYSQL_PORT =  os.environ.get('MYSQL_PORT', '3306')\nMYSQL_DBNAME =  os.environ.get('MYSQL_DBNAME', 'automatic')\n\nDATABASES = {\n    'default': {\n        'ENGINE': 'django.db.backends.mysql',\n        'NAME': MYSQL_DBNAME,\n        'USER': MYSQL_USERNAME,\n        'PASSWORD': MYSQL_PASSWORD,\n        'HOST': MYSQL_HOST,\n        'PORT': MYSQL_PORT,\n    }\n}\n```\n#### 初始化并启动服务\n\n```shell\npython3 start.py\n```\n\n另：内置关键字 在wiki #关键字创建# 页面（可以了解一下）\n\n_http://127.0.0.1:8000_   访问登录即可\n\n默认管理员用户：admin， 密码：admin@123 \n# (二)docker安装\n## 方法一: 命令安装启动\n```shell script\ndocker pull tsbc520/automagic:2.0\n```\n启动docker容器：\n```shell script\ndocker run -d -p 8000:8000 \\\n-e MYSQL_HOST=192.168.10.167 \\\n-e MYSQL_PORT=3306 \\\n-e MYSQL_DBNAME=automatic \\\n-e MYSQL_USERNAME=root \\\n-e MYSQL_PASSWORD=123456 \\\ntsbc520/automagic:2.0 \n```\n\n## 方法二: docker-compose\n```shell script\ndocker-compose up\n```\n\n## 如何执行测试脚本 \n[点击查看如何执行测试](https://github.com/radiateboy/automagic/wiki/Seleniumkeyword%E4%BB%8B%E7%BB%8D)\n## 公众号\n扫一扫关注公众号\n\n![开源优测](https://gitee.com/tsbc/automagic/raw/master/%E5%85%AC%E4%BC%97%E5%8F%B7.jpg)\n"
  },
  {
    "path": "auto_auth/__init__.py",
    "content": ""
  },
  {
    "path": "auto_auth/admin.py",
    "content": "from django.contrib import admin\n\n# Register your models here.\n"
  },
  {
    "path": "auto_auth/apps.py",
    "content": "from django.apps import AppConfig\n\n\nclass AutoAuthConfig(AppConfig):\n    name = 'auto_auth'\n"
  },
  {
    "path": "auto_auth/forms.py",
    "content": "# -*- coding: utf-8 -*-\nfrom django import forms\nfrom django.contrib.auth.models import User\nfrom django.contrib.auth.forms import UserCreationForm\nfrom django.utils.translation import ugettext_lazy as _\n\nfrom auto_auth.models import UserActivationKey\n\nclass RegistrationForm(UserCreationForm):\n    email = forms.EmailField()\n\n    class Meta:\n        model = User\n        fields = (\"username\",)\n\n    def clean_email(self):\n        email = self.cleaned_data['email']\n        try:\n            User.objects.get(email=email)\n        except User.DoesNotExist:\n            return email\n        raise forms.ValidationError(\n            _(\"A user with that email already exists.\"))\n\n    def save(self, commit=True):\n        user = super(RegistrationForm, self).save(commit=False)\n        user.email = self.cleaned_data['email']\n        user.is_active = False\n        user.set_password(self.cleaned_data[\"password1\"])\n\n        if User.objects.filter(is_superuser=True).count() == 0:\n            user.is_superuser = True\n\n        if commit:\n            user.save()\n            # initiate_user_with_default_setups(user)\n        return user\n\n    def set_activation_key(self):\n        return UserActivationKey.set_random_key_for_user(user=self.instance)\n"
  },
  {
    "path": "auto_auth/migrations/0001_initial.py",
    "content": "# Generated by Django 3.0.2 on 2020-01-15 10:02\n\nfrom django.conf import settings\nimport django.contrib.auth.models\nimport django.contrib.auth.validators\nfrom django.db import migrations, models\nimport django.db.models.deletion\nimport django.utils.timezone\n\n\nclass Migration(migrations.Migration):\n\n    initial = True\n\n    dependencies = [\n        ('auth', '0011_update_proxy_permissions'),\n    ]\n\n    operations = [\n        migrations.CreateModel(\n            name='User',\n            fields=[\n                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),\n                ('password', models.CharField(max_length=128, verbose_name='password')),\n                ('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')),\n                ('is_superuser', models.BooleanField(default=False, help_text='Designates that this user has all permissions without explicitly assigning them.', verbose_name='superuser status')),\n                ('username', models.CharField(error_messages={'unique': 'A user with that username already exists.'}, help_text='Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.', max_length=150, unique=True, validators=[django.contrib.auth.validators.UnicodeUsernameValidator()], verbose_name='username')),\n                ('first_name', models.CharField(blank=True, max_length=30, verbose_name='first name')),\n                ('last_name', models.CharField(blank=True, max_length=150, verbose_name='last name')),\n                ('is_staff', models.BooleanField(default=False, help_text='Designates whether the user can log into this admin site.', verbose_name='staff status')),\n                ('date_joined', models.DateTimeField(default=django.utils.timezone.now, verbose_name='date joined')),\n                ('realname', models.CharField(blank=True, max_length=50, null=True, verbose_name='真实姓名')),\n                ('mobile', models.CharField(blank=True, max_length=11, null=True, verbose_name='电话号码')),\n                ('email', models.EmailField(max_length=255, unique=True, verbose_name='邮箱')),\n                ('dept', models.CharField(choices=[('测试', '测试'), ('开发', '开发')], default='测试', max_length=100, verbose_name='部门')),\n                ('is_active', models.BooleanField(default=True, verbose_name='激活状态')),\n                ('is_admin', models.BooleanField(default=False, verbose_name='是否管理员')),\n                ('testrailuser', models.CharField(blank=True, max_length=50, null=True, verbose_name='TestRail用户名')),\n                ('testrailpass', models.CharField(blank=True, max_length=50, null=True, verbose_name='TestRail密码')),\n                ('groups', models.ManyToManyField(blank=True, help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.', related_name='user_set', related_query_name='user', to='auth.Group', verbose_name='groups')),\n                ('user_permissions', models.ManyToManyField(blank=True, help_text='Specific permissions for this user.', related_name='user_set', related_query_name='user', to='auth.Permission', verbose_name='user permissions')),\n            ],\n            options={\n                'verbose_name': 'user',\n                'verbose_name_plural': 'users',\n                'abstract': False,\n            },\n            managers=[\n                ('objects', django.contrib.auth.models.UserManager()),\n            ],\n        ),\n        migrations.CreateModel(\n            name='UserActivationKey',\n            fields=[\n                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),\n                ('activation_key', models.CharField(blank=True, max_length=64, null=True)),\n                ('key_expires', models.DateTimeField(blank=True, null=True)),\n                ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),\n            ],\n        ),\n    ]\n"
  },
  {
    "path": "auto_auth/migrations/__init__.py",
    "content": ""
  },
  {
    "path": "auto_auth/models.py",
    "content": "# -*- coding: utf-8 -*-\n\nimport datetime\nimport secrets\n\nfrom django.db import models\nfrom django.conf import settings\nfrom django.contrib.auth.models import BaseUserManager, AbstractUser\n\nclass UserActivationKey(models.Model):\n    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)\n    activation_key = models.CharField(max_length=64, null=True, blank=True)\n    key_expires = models.DateTimeField(null=True, blank=True)\n\n    @classmethod\n    def set_random_key_for_user(cls, user, force=False):\n        activation_key = secrets.token_hex()\n\n        # Create and save their profile\n        user_activation_key, created = cls.objects.get_or_create(user=user)\n        if created or force:\n            user_activation_key.activation_key = activation_key\n            user_activation_key.key_expires = datetime.datetime.today() + datetime.timedelta(7)\n            user_activation_key.save()\n\n        return user_activation_key\n\n\nclass MyUserManager(BaseUserManager):\n    # def current_time(self):\n    #     \"\"\"get current time \"\"\"\n    #     from datetime import datetime\n    #     return datetime.now().strftime(\"%Y-%m-%d\")\n\n    def create_user(self, username, email, password):\n        \"\"\"\n        Creates and saves a User with the given email, date of\n        birth and password.\n        \"\"\"\n\n        if not username:\n            raise ValueError('username is unique')\n        user = self.model(username=username, email=self.normalize_email(email))\n        user.set_password(password)\n        user.save(using=self._db)\n        return user\n\n    def create_superuser(self, username, email, password):\n        \"\"\"\n        Creates and saves a superuser with the given email, password.\n        \"\"\"\n        user = self.create_user(username, email, password)\n        user.is_admin = True\n        user.is_staff = True\n        user.save(using=self._db)\n        return user\n\n\nclass User(AbstractUser):\n    Dept_Choice = (\n        ('测试', '测试'),\n        ('开发', '开发'),\n    )\n    realname = models.CharField(max_length=50, verbose_name=\"真实姓名\", null=True, blank=True, editable=True)\n    mobile = models.CharField(max_length=11, verbose_name=\"电话号码\", null=True, blank=True, editable=True)\n    email = models.EmailField(verbose_name='邮箱', max_length=255, unique=True)\n    dept = models.CharField(verbose_name=u'部门', choices=Dept_Choice, default='测试', max_length=100)\n    is_active = models.BooleanField(default=True, verbose_name='激活状态')\n    is_admin = models.BooleanField(default=False, verbose_name='是否管理员')\n    testrailuser = models.CharField(max_length=50, verbose_name=\"TestRail用户名\", null=True, blank=True, editable=True)\n    testrailpass = models.CharField(max_length=50, verbose_name=\"TestRail密码\", null=True, blank=True, editable=True)\n    def get_full_name(self):\n        # The user is identified by their email address\n        return self.username\n\n    def get_short_name(self):\n        # The user is identified by their email address\n        return self.username\n\n    def __unicode__(self):  # __unicode__ on Python 2\n        return self.username\n\n    def has_perm(self, perm, obj=None):\n        \"Does the user have a specific permission?\"\n        # Simplest possible answer: Yes, always\n        return True\n\n    def has_module_perms(self, app_label):\n        \"Does the user have permissions to view the app `app_label`?\"\n        # Simplest possible answer: Yes, always\n        return True"
  },
  {
    "path": "auto_auth/tests.py",
    "content": "from django.test import TestCase\n\n# Create your tests here.\n"
  },
  {
    "path": "auto_auth/urls.py",
    "content": "# -*- coding: utf-8 -*-\n\nfrom django.conf.urls import url\nfrom django.urls import reverse_lazy\nfrom django.contrib.auth import views as contrib_auth_views\nfrom django.contrib.auth.decorators import login_required\nfrom auto_auth import views\n\nurlpatterns = [\n    url(r'^(?P<username>[\\w.@+-]+)/profile/$', views.profile,\n        name='auto-profile'),\n\n    url(r'^register/$', views.register, name='auto-register'),\n\n    url(r'^confirm/(?P<activation_key>[A-Za-z0-9\\-]+)/$', views.confirm,\n        name='auto-confirm'),\n\n    url(r'^user/add/$', views.add_user, name='adduser'),\n    url(r'^user/list/$', login_required(views.UserListIndex.as_view()), name='userlist'),\n    url(r'^user/update/$', views.update_user, name='userupdate'),\n    url(r'^user/del/(?P<id>\\d+)/$', views.del_user, name='userdel'),\n    url(r'^setedit/user/$', views.set_edit_user, name='setedituser'),\n\n    url(r'^login/$', views.LoginViewWithCustomTemplate.as_view(), name='auto-login'),\n    url(r'^logout/$',\n        contrib_auth_views.LogoutView.as_view(next_page=reverse_lazy('auto-login')),\n        name='auto-logout'),\n\n    url(r'^passwordreset/$', contrib_auth_views.PasswordResetView.as_view(),\n        name='auto-password_reset'),\n    url(r'^passwordreset/done/$', contrib_auth_views.PasswordResetDoneView.as_view(),\n        name='password_reset_done'),\n    url(r'^passwordreset/confirm/(?P<uidb64>[0-9A-Za-z]+)-(?P<token>.+)/$',\n        contrib_auth_views.PasswordResetConfirmView.as_view(), name='password_reset_confirm'),\n    url(r'^passwordreset/complete/$',\n        contrib_auth_views.PasswordResetCompleteView.as_view(), name='password_reset_complete'),\n]\n"
  },
  {
    "path": "auto_auth/views.py",
    "content": "# -*- coding: utf-8 -*-\nimport json\n\nfrom datetime import datetime\nfrom django.urls import reverse\nfrom django.conf import settings\nfrom django.contrib import messages\nfrom django.contrib.auth import views\nfrom django.views.decorators.http import require_GET\nfrom django.utils.translation import ugettext_lazy as _\n# from django.utils import timezone\nfrom django.contrib.auth.decorators import login_required\nfrom django.contrib.auth import logout, authenticate, login\nfrom django.shortcuts import render, redirect, get_object_or_404\nfrom django.http import HttpResponse,HttpResponseRedirect\nfrom django.contrib.auth.hashers import make_password\nfrom django.views.generic import ListView\nfrom django.views.decorators.csrf import csrf_exempt\nfrom django.db.models import Q\nfrom auto_auth.models import User\nfrom automatic.management.models import Product, UserAndProduct\nfrom automatic.signals import USER_REGISTERED_SIGNAL\nfrom auto_auth.forms import RegistrationForm\nfrom auto_auth.models import UserActivationKey\n\n\nclass LoginViewWithCustomTemplate(views.LoginView):\n    def get_template_names(self):\n        return ['registration/custom_login.html', 'registration/login.html']\n\n\n@login_required()\ndef index(request):\n    return render(request, 'index.html')\n\n\ndef register(request):\n    \"\"\"Register method of account\"\"\"\n    if request.method == 'POST':\n        form = RegistrationForm(data=request.POST, files=request.FILES)\n        if form.is_valid():\n            new_user = form.save()\n            activation_key = form.set_activation_key()\n            # send a signal that new user has been registered\n            USER_REGISTERED_SIGNAL.send(sender=form.__class__,\n                                        request=request,\n                                        user=new_user)\n\n            # Send confirmation email to new user\n            if settings.DEFAULT_FROM_EMAIL and settings.AUTO_APPROVE_NEW_USERS:\n                form.send_confirm_mail(request, activation_key)\n\n                messages.add_message(\n                    request,\n                    messages.SUCCESS,\n                    _('Your account has been created, please check your mailbox for confirmation')\n                )\n            else:\n                messages.add_message(\n                    request,\n                    messages.WARNING,\n                    _('Your account has been created, but you need an administrator to activate it')\n                )\n                messages.add_message(\n                    request,\n                    messages.INFO,\n                    _('Following is the administrator list')\n                )\n\n                # super-users can approve others\n                for user in User.objects.filter(is_superuser=True):\n                    messages.add_message(\n                        request,\n                        messages.INFO,\n                        '<a href=\"mailto:{}\">{}</a>'.format(user.email,\n                                                            user.get_full_name() or user.username)\n                    )\n\n                # site admins should be able to do so too\n                for name, email in settings.ADMINS:\n                    messages.add_message(\n                        request,\n                        messages.WARNING,\n                        '<a href=\"mailto:{}\">{}</a>'.format(email, name)\n                    )\n\n            return HttpResponseRedirect(reverse('core-views-index'))\n    else:\n        form = RegistrationForm()\n\n    context_data = {\n        'form': form,\n    }\n    return render(request, 'registration/registration_form.html', context_data)\n\n\n@require_GET\ndef confirm(request, activation_key):\n    \"\"\"Confirm the user registration\"\"\"\n\n    # Get the object\n    try:\n        _activation_key = UserActivationKey.objects.select_related('user')\n        _activation_key = _activation_key.get(activation_key=activation_key)\n    except UserActivationKey.DoesNotExist:\n        messages.add_message(\n            request,\n            messages.ERROR,\n            _('This activation key no longer exists in the database')\n        )\n        return HttpResponseRedirect(request.GET.get('next', reverse('core-views-index')))\n\n    if _activation_key.key_expires <= datetime.now():\n        messages.add_message(request, messages.ERROR, _('This activation key has expired'))\n        return HttpResponseRedirect(request.GET.get('next', reverse('core-views-index')))\n\n    # All thing done, start to active the user and use the user login\n    user = _activation_key.user\n    user.is_active = True\n    user.save(update_fields=['is_active'])\n    _activation_key.delete()\n\n    messages.add_message(\n        request,\n        messages.SUCCESS,\n        _('Your account has been activated successfully')\n    )\n    return HttpResponseRedirect(request.GET.get('next', reverse('core-views-index')))\n\n\ndef profile(request, username):\n    \"\"\"Show user profiles\"\"\"\n    user = get_object_or_404(User, username=username)\n    return HttpResponseRedirect(reverse('admin:auth_user_change', args=[user.pk]))\n\n\ndef verify(request, query_dict):\n    \"\"\"验证用户名密码\"\"\"\n    user = authenticate(username=query_dict[\"username\"], password=query_dict[\"password\"])\n    if user is not None:\n        login(request, user)\n        return \"verify_success\"\n    else:\n        return u\"用户名密码错误\"\n\n\ndef login_page(request):\n    if request.method == \"POST\":\n        return HttpResponse(verify(request, request.POST))\n    return render(request, \"registration/login.html\")\n\n\ndef _logout(request):\n    logout(request)\n    return redirect(\"/login\")\n\n@csrf_exempt\n@login_required()\ndef add_user(request):\n    if request.method == 'POST':\n        post_dict = request.POST\n        user_dict = {\"username\": post_dict['username'],\n                     \"realname\": post_dict['realname'],\n                     \"password\":post_dict['password'],\n                     \"email\": post_dict['email'],\n                     \"mobile\": post_dict['mobile'],\n                     \"dept\": post_dict['dept'],\n                     \"testrailuser\": post_dict['testrailuser'] if 'testrailuser' in post_dict else None,\n                     \"testrailpass\": post_dict['testrailpass'] if 'testrailpass' in post_dict else None,\n                     }\n        if 'is_admin' in post_dict:\n            is_admin = True\n            is_staff = True\n        else:\n            is_admin = False\n            is_staff = False\n\n        if 'is_active' in post_dict:\n            is_active = True\n        else:\n            is_active = False\n        username = user_dict.get('username')\n        password = make_password(user_dict.get('password'), None, 'pbkdf2_sha256')\n        realname = user_dict.get('realname')\n        email = user_dict.get('email')\n        mobile = user_dict.get('mobile')\n        dept = user_dict.get('dept')\n        # is_admin = is_admin\n        # is_active = is_active\n        testrailuser = user_dict.get('testrailuser')\n        testrailpass = user_dict.get('testrailpass')\n        # print username,password,realname,email,mobile,is_admin,is_active,testrailuser,testrailpass\n        try:\n            User.objects.get(username=username).username\n            return HttpResponse('用户名已经存在')\n        except:\n            pass\n        try:\n            User.objects.get(email=email).email\n            return HttpResponse('邮箱地址已经被注册')\n        except:\n            pass\n        user = User(username=username, password=password, realname=realname, email=email, mobile=mobile, dept=dept,\n                    is_active=is_active, is_admin=is_admin, is_staff=is_staff,\n                    testrailuser=testrailuser, testrailpass=testrailpass)\n        user.save()\n        return HttpResponse('创建成功')\n    else:\n        return HttpResponse('创建失败')\n\n\n@csrf_exempt\n@login_required()\ndef update_user(request):\n    if request.method == 'POST':\n        post_dict = request.POST\n        user_dict = {\"userid\":post_dict['userid'],\n                         \"username\": post_dict['username'],\n                         \"password\": post_dict['password'],\n                         \"email\":post_dict['email'],\n                         \"mobile\": post_dict['mobile'],\n                         \"dept\": post_dict['dept'],\n                         \"realname\": post_dict['realname'],\n                         \"testrailuser\": post_dict['testrailuser'] if 'testrailuser' in post_dict else None,\n                         \"testrailpass\": post_dict['testrailpass'] if 'testrailpass' in post_dict else None,\n                         }\n        if 'is_admin' in post_dict:\n            is_admin = True\n            is_staff = True\n        else:\n            is_admin = False\n            is_staff = False\n        if 'is_active' in post_dict:\n            is_active = True\n        else:\n            is_active = False\n        userid = user_dict.get('userid')\n        username = user_dict.get('username')\n        realname = user_dict.get('realname')\n        email = user_dict.get('email')\n        mobile = user_dict.get('mobile')\n        dept_str = user_dict.get('dept')\n        dept = dept_str if dept_str else '测试'\n        # is_admin = is_admin\n        # is_active = is_active\n        testrailuser = user_dict.get('testrailuser')\n        testrailpass = user_dict.get('testrailpass')\n        # updatetime = timezone.now()\n        u = User.objects.filter(id=int(userid))\n        # passwd = user_dict.get('password')\n        if user_dict.get('password') == '':\n            # print \"AAA\",username,user_dict.get('password')\n            u.update(username=username, realname=realname, email=email,mobile=mobile, dept=dept,is_active=is_active,\n                     is_admin=is_admin, is_staff=is_staff, testrailuser=testrailuser,testrailpass=testrailpass)\n        else:\n            # print \"BBB\", username, user_dict.get('password')\n            password = make_password(user_dict.get('password'), None, 'pbkdf2_sha256')\n            u.update(username=username, password=password, realname=realname, dept=dept, email=email, mobile=mobile, is_active=is_active,\n                        is_admin=is_admin, testrailuser=testrailuser, testrailpass=testrailpass)\n        return HttpResponse('修改成功')\n    else:\n        return HttpResponse('修改失败')\n\n\n@csrf_exempt\ndef del_user(request,id):\n    user = get_object_or_404(User, pk=int(id))\n    user.delete()\n    return HttpResponseRedirect(reverse('userlist'))\n\n\n@csrf_exempt\n@login_required()\ndef set_edit_user(request):\n    userid = request.GET['userid']\n    user = User.objects.get(pk=userid)\n    userinfo = {}\n    userinfo['id'] = user.pk\n    userinfo['username'] = user.username\n    userinfo['password'] = user.password\n    userinfo['email'] = user.email\n    userinfo['mobile'] = user.mobile\n    userinfo['is_admin'] = user.is_admin\n    userinfo['is_staff'] = user.is_staff\n    userinfo['is_active'] = user.is_active\n    userinfo['realname'] = user.realname\n    userinfo['dept'] = user.dept\n    userinfo['testrailuser'] = user.testrailuser\n    userinfo['testrailpass'] = user.testrailpass\n    userlist = [userinfo]\n    return HttpResponse(json.dumps(userlist))\n\n\nclass UserListIndex(ListView):\n    context_object_name = 'userlist'\n    template_name = 'oauth/userlist.html'\n    paginate_by = 10\n    model = User\n    usersum = 0\n    http_method_names = [u'get']\n    alluser=[]\n\n    def get_queryset(self):\n        userlist = User.objects.all().order_by('-pk')\n        self.alluser = User.objects.filter(is_active='True')\n        keyword = self.request.GET.get('keyword')\n        if keyword:\n            userlist = userlist.filter(Q(username__icontains=keyword)|Q(email__icontains=keyword)|Q(mobile__icontains=keyword))\n        self.usersum = len(userlist)\n        return userlist\n\n    def get_context_data(self, **kwargs):\n        context = super(UserListIndex,self).get_context_data(**kwargs)\n        # userlist = User.objects.values('username').annotate()\n        context['productlist'] = Product.objects.all().order_by('-sortby')\n        context['userandproduct'] = UserAndProduct.objects.all()\n        context['usersum'] = self.usersum\n        context['alluser']=self.alluser\n        return context\n"
  },
  {
    "path": "automatic/__init__.py",
    "content": "# -*- coding: utf-8 -*-\n__version__ = '2.0'\n\nimport pymysql\npymysql.install_as_MySQLdb()\n"
  },
  {
    "path": "automatic/asgi.py",
    "content": "\"\"\"\nASGI config for automatic project.\n\nIt exposes the ASGI callable as a module-level variable named ``application``.\n\nFor more information on this file, see\nhttps://docs.djangoproject.com/en/3.0/howto/deployment/asgi/\n\"\"\"\n\nimport os\n\nfrom django.core.asgi import get_asgi_application\n\nos.environ.setdefault('DJANGO_SETTINGS_MODULE', 'automatic.settings.common')\n\napplication = get_asgi_application()\n"
  },
  {
    "path": "automatic/element/__init__.py",
    "content": ""
  },
  {
    "path": "automatic/element/admin.py",
    "content": "from django.contrib import admin\n\n# Register your models here.\n\nfrom automatic.element import models\n\n\nclass ElementAdmin(admin.ModelAdmin):\n    list_display = (id, 'descr', 'projectid', 'moduleid', 'locmode', 'location', 'createat', 'createtime', 'updateat', 'updatetime')\n    search_fields = ('keyword', 'kwdescr')\n\n\nadmin.site.register(models.Element, ElementAdmin)"
  },
  {
    "path": "automatic/element/apps.py",
    "content": "from django.apps import AppConfig\n\n\nclass ElementConfig(AppConfig):\n    name = 'automatic.element'\n"
  },
  {
    "path": "automatic/element/forms.py",
    "content": "# -*- coding:utf-8 -*-\n\"\"\"\n__author__ = 'Ray'\nmail:tsbc@vip.qq.com\n2020-01-08\n\"\"\"\nfrom django import forms\nfrom automatic.element.models import Element\nfrom django.forms import ModelForm, Textarea, Select, TextInput\n\n\nclass FormElement(forms.ModelForm):\n    class Meta:\n        model = Element\n        fields = ('descr','projectid','moduleid','locmode','location')\n        widgets = {'locmode': Select(attrs={'class':'ak-left ac-aselect','required':''}),\n                   'descr':TextInput(attrs={'class':'form-control','placeholder':'请输入元素描述','required':''}),\n                   'location': TextInput(attrs={'class': 'form-control','placeholder':'（如：id_username）','required':''}),\n                   }"
  },
  {
    "path": "automatic/element/migrations/0001_initial.py",
    "content": "# Generated by Django 3.0.2 on 2020-01-15 10:02\n\nfrom django.db import migrations, models\nimport django.db.models.deletion\n\n\nclass Migration(migrations.Migration):\n\n    initial = True\n\n    dependencies = [\n        ('management', '0001_initial'),\n    ]\n\n    operations = [\n        migrations.CreateModel(\n            name='Element',\n            fields=[\n                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),\n                ('descr', models.CharField(max_length=100)),\n                ('locmode', models.CharField(blank=True, choices=[('id', 'id'), ('name', 'name'), ('css selector', 'css selector'), ('xpath', 'xpath'), ('class_name', 'class name'), ('tag_name', 'tag name'), ('link_text', 'link text'), ('portial_link_text', 'portial link text')], max_length=32, null=True)),\n                ('location', models.CharField(blank=True, max_length=200, null=True)),\n                ('createtime', models.DateTimeField(auto_now_add=True)),\n                ('createat', models.CharField(blank=True, max_length=32, null=True)),\n                ('updatetime', models.DateTimeField(auto_now=True)),\n                ('updateat', models.CharField(blank=True, max_length=32, null=True)),\n                ('moduleid', models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, to='management.Module')),\n                ('projectid', models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, to='management.Project')),\n            ],\n        ),\n    ]\n"
  },
  {
    "path": "automatic/element/migrations/__init__.py",
    "content": ""
  },
  {
    "path": "automatic/element/models.py",
    "content": "# -*- coding:utf-8 -*-\n\"\"\"\n__author__ = 'Ray'\nmail:tsbc@vip.qq.com\n2020-01-06\n\"\"\"\nfrom django.db import models\nfrom automatic.management.models import Project, Module\n# Create your models here.\n\nclass Element(models.Model):\n    Element_Choice = (\n        ('id','id'),\n        ('name','name'),\n        ('css selector','css selector'),\n        ('xpath','xpath'),\n        ('class name','class name'),\n        ('tag name','tag name'),\n        ('link text','link text'),\n        ('portial link_text','portial link text')\n    )\n    projectid = models.ForeignKey(Project, editable=True, on_delete=models.DO_NOTHING)\n    moduleid = models.ForeignKey(Module, editable=True, on_delete=models.DO_NOTHING)\n    descr = models.CharField(max_length=100, editable=True)\n    locmode = models.CharField(max_length=32, choices=Element_Choice, null=True, blank=True, editable=True)\n    location = models.CharField(max_length=200, null=True, blank=True, editable=True)\n    createtime = models.DateTimeField(auto_now_add=True)\n    createat = models.CharField(max_length=32, null=True, blank=True, editable=True)\n    updatetime = models.DateTimeField(auto_now=True)\n    updateat = models.CharField(max_length=32, null=True, blank=True, editable=True)\n\n    def __unicode__(self):\n        return self.descr\n"
  },
  {
    "path": "automatic/element/tests.py",
    "content": "from django.test import TestCase\n\n# Create your tests here.\n"
  },
  {
    "path": "automatic/element/urls.py",
    "content": "from django.conf.urls import url\nfrom django.contrib.auth.decorators import login_required\nfrom automatic.element import views\n\nurlpatterns = [\n    url(r'list/$', login_required(views.ElementListIndex.as_view()), name='elementlist'),\n    url(r'add/$', views.add_element, name='elementadd'),\n    url(r'update/$', views.update_element, name='elementupdate'),\n    url(r'del/(?P<id>\\d+)/$', views.del_element, name='elementdel'),\n    url(r'get/$', views.get_element, name='getelement'),\n    url(r'setedit/$', views.set_edit_element, name='seteditelement'),\n]"
  },
  {
    "path": "automatic/element/views.py",
    "content": "# -*- coding:utf-8 -*-\n\"\"\"\n__author__ = 'Ray'\nmail:tsbc@vip.qq.com\n2020-01-08\n\"\"\"\nimport json\nfrom django.utils import timezone\nfrom django.contrib.auth.decorators import login_required\nfrom django.shortcuts import render, redirect, get_object_or_404\nfrom django.http import HttpResponse,HttpResponseRedirect\nfrom django.views.decorators.csrf import csrf_exempt\n\nfrom automatic.element.forms import *\nfrom django.views.generic import ListView\nfrom automatic.element.models import *\nfrom django.db.models import Q\nfrom django.urls import reverse\nfrom automatic.management.models import Project, UserAndProduct\nfrom automatic.element.models import Element\n\n# Create your views here.\n\n\nclass ElementListIndex(ListView):\n    context_object_name = 'elementlist'\n    template_name = 'element/element.html'\n    paginate_by = 10\n    elementsum = 0\n    model = Element\n    http_method_names = [u'get']\n\n    def get_queryset(self):\n        prodcutid = UserAndProduct.objects.filter(username=self.request.user).values('productname')\n        elementlist = Element.objects.filter(projectid__in=Project.objects.filter(productid__in=prodcutid).values('id')).order_by('-pk')\n        prodcutid = self.request.GET.get('check_productname')\n        projectid = self.request.GET.get('projectid')\n        moduleid = self.request.GET.get('moduleid')\n        keyword = self.request.GET.get('keyword')\n        if prodcutid and int(prodcutid):\n            elementlist = elementlist.filter(projectid__in=Project.objects.filter(productid=prodcutid).values('id'))\n        if projectid:\n            elementlist = elementlist.filter(projectid=projectid)\n        if moduleid:\n            elementlist = elementlist.filter(moduleid=moduleid)\n        if keyword:\n            elementlist = elementlist.filter(Q(id__icontains=keyword)|Q(location__icontains=keyword)|Q(descr__icontains=keyword))\n        self.elementsum = len(elementlist)\n        return  elementlist\n\n    def get_context_data(self, **kwargs):\n        context = super(ElementListIndex,self).get_context_data(**kwargs)\n        namelist = Element.objects.values('descr').annotate()\n        context['descr'] = namelist\n        context['elementsum'] = self.elementsum\n        context['elementform'] = FormElement()\n        context['userandproduct'] = UserAndProduct.objects.all()\n        return context\n\n@csrf_exempt\n@login_required()\ndef add_element(request):\n    if request.method == 'POST':\n        descr = request.POST['descr']\n        projectid = request.POST['projectid']\n        moduleid = request.POST['moduleid']\n        locmode = request.POST['locmode']\n        location = request.POST['location']\n        createat = request.user.username\n        updateat = request.user.username\n        mid = Module.objects.get(pk=int(moduleid))\n        pid = Project.objects.get(pk=int(projectid))\n        ele = Element(moduleid=mid, projectid=pid, descr=descr, locmode=locmode, location=location, createat=createat, updateat=updateat)\n        ele.save()\n        # return HttpResponse(descr + '@' + locmode + '@' + location + '@' + str(mid.pk))\n        return HttpResponse('添加元素成功。')\n    else:\n        return HttpResponse('添加元素失败。')\n\n\n@csrf_exempt\n@login_required()\ndef update_element(request):\n    if request.method == 'POST':\n        post_dict = request.POST\n        element_dict = {\"id\":post_dict['elementid'],\n                        \"descr\": post_dict['eledescr'],\n                        \"projectid\":post_dict['ele_add_projectid'],\n                        \"moduleid\": post_dict['moduleid'],\n                        \"locmode\": post_dict['locmode'],\n                        \"location\": post_dict['elelocation'],\n                        }\n        id = element_dict.get('id')\n        descr = element_dict.get('descr')\n        projectid = element_dict.get('projectid')\n        moduleid = element_dict.get('moduleid')\n        locmode = element_dict.get('locmode')\n        location = element_dict.get('location')\n        updateat = request.user.username\n        updatetime = timezone.now()\n        e = Element.objects.filter(id=int(id))\n        e.update(descr=descr, projectid=projectid,moduleid=moduleid,locmode=locmode, location=location,updateat=updateat,updatetime=updatetime)\n        return HttpResponse('修改成功')\n    else:\n        return HttpResponse('修改失败')\n\n\n@login_required()\ndef del_element(request, id):\n    element = get_object_or_404(Element, pk=int(id))\n    element.delete()\n    return HttpResponseRedirect(reverse('elementlist'))\n\n\n@login_required()\ndef get_element(request):\n    elementlist = []\n    projectid = request.GET['projectid']\n    elelista = Element.objects.raw(\"select id,(select name from management_module where id= moduleid_id) as modulename,locmode,location,descr from element_element where projectid_id=\"+projectid)\n    for i in elelista:\n        element = {}\n        element['moduleid'] = i.modulename\n        element['key'] = i.id\n        location = i.locmode + \",\" + i.location\n        element['location'] = location\n        element['value'] = \"[\"+str(i.id)+\"][\" + i.modulename + \"]\" + i.descr\n        elementlist.append(element)\n    return HttpResponse(json.dumps(elementlist))\n\n\n@login_required()\ndef set_edit_element(request):\n    elementid = request.GET['elementid']\n    element = Element.objects.get(pk=elementid)\n    elementinfo = {}\n    elementinfo['id'] = element.pk\n    elementinfo['descr'] = element.descr\n    elementinfo['projectid'] = element.projectid.pk\n    elementinfo['moduleid'] = element.moduleid.pk\n    elementinfo['locmode'] = element.locmode\n    elementinfo['location'] = element.location\n    elementlist = [elementinfo]\n    return HttpResponse(json.dumps(elementlist))\n"
  },
  {
    "path": "automatic/keywords/__init__.py",
    "content": ""
  },
  {
    "path": "automatic/keywords/admin.py",
    "content": "from django.contrib import admin\n\n# Register your models here.\n\nfrom automatic.keywords import models\n\n\nclass KeywordAdmin(admin.ModelAdmin):\n    list_display = (id, 'keyword', 'kwdescr','createat', 'createtime', 'updateat', 'updatetime')\n    search_fields = ('keyword', 'kwdescr')\n\n\nadmin.site.register(models.Keyword, KeywordAdmin)"
  },
  {
    "path": "automatic/keywords/apps.py",
    "content": "from django.apps import AppConfig\n\n\nclass KeywordsConfig(AppConfig):\n    name = 'automatic.keywords'\n"
  },
  {
    "path": "automatic/keywords/fixtures/initial_data.json",
    "content": "[\n    {\n        \"model\": \"keywords.keyword\",\n        \"pk\": 1,\n        \"fields\": {\n            \"productid\": 0,\n            \"keyword\": \"click\",\n            \"kwdescr\": \"点击\",\n            \"createtime\": \"2016-09-19T10:17:50Z\",\n            \"createat\": \"tsbc\",\n            \"updatetime\": \"2016-09-19T10:17:50Z\",\n            \"updateat\": \"tsbc\"\n        }\n    },\n    {\n        \"model\": \"keywords.keyword\",\n        \"pk\": 2,\n        \"fields\": {\n            \"productid\": 0,\n            \"keyword\": \"InputText\",\n            \"kwdescr\": \"输入文本\",\n            \"createtime\": \"2016-09-19T10:18:03Z\",\n            \"createat\": \"tsbc\",\n            \"updatetime\": \"2016-09-19T10:18:03Z\",\n            \"updateat\": \"tsbc\"\n        }\n    },\n    {\n        \"model\": \"keywords.keyword\",\n        \"pk\": 3,\n        \"fields\": {\n            \"productid\": 0,\n            \"keyword\": \"navigate\",\n            \"kwdescr\": \"页面跳转\",\n            \"createtime\": \"2016-09-19T10:18:47Z\",\n            \"createat\": \"tsbc\",\n            \"updatetime\": \"2016-09-19T10:18:47Z\",\n            \"updateat\": \"tsbc\"\n        }\n    },\n    {\n        \"model\": \"keywords.keyword\",\n        \"pk\": 4,\n        \"fields\": {\n            \"productid\": 0,\n            \"keyword\": \"sleep\",\n            \"kwdescr\": \"等待[n]秒\",\n            \"createtime\": \"2016-09-19T10:19:14Z\",\n            \"createat\": \"tsbc\",\n            \"updatetime\": \"2016-09-19T10:19:14Z\",\n            \"updateat\": \"tsbc\"\n        }\n    },\n    {\n        \"model\": \"keywords.keyword\",\n        \"pk\": 5,\n        \"fields\": {\n            \"productid\": 0,\n            \"keyword\": \"switchframe\",\n            \"kwdescr\": \"切换iframe\",\n            \"createtime\": \"2016-09-19T10:19:50Z\",\n            \"createat\": \"tsbc\",\n            \"updatetime\": \"2016-09-19T10:19:50Z\",\n            \"updateat\": \"tsbc\"\n        }\n    },\n    {\n        \"model\": \"keywords.keyword\",\n        \"pk\": 6,\n        \"fields\": {\n            \"productid\": 0,\n            \"keyword\": \"defaultframe\",\n            \"kwdescr\": \"返回默认Frame\",\n            \"createtime\": \"2016-09-19T10:20:06Z\",\n            \"createat\": \"tsbc\",\n            \"updatetime\": \"2016-09-19T10:20:06Z\",\n            \"updateat\": \"tsbc\"\n        }\n    },\n        {\n        \"model\": \"keywords.keyword\",\n        \"pk\": 7,\n        \"fields\": {\n            \"productid\": 0,\n            \"keyword\": \"select\",\n            \"kwdescr\": \"下来选择框 input:[value]\",\n            \"createtime\": \"2016-09-28T06:46:58Z\",\n            \"createat\": \"tsbc\",\n            \"updatetime\": \"2016-11-07T09:00:03Z\",\n            \"updateat\": \"tsbc\"\n        }\n    },\n    {\n        \"model\": \"keywords.keyword\",\n        \"pk\": 8,\n        \"fields\": {\n            \"productid\": 0,\n            \"keyword\": \"selectText\",\n            \"kwdescr\": \"下拉选择框input:[Text]\",\n            \"createtime\": \"2016-11-07T08:59:39Z\",\n            \"createat\": \"tsbc\",\n            \"updatetime\": \"2016-11-07T08:59:39Z\",\n            \"updateat\": \"tsbc\"\n        }\n    },\n    {\n        \"model\": \"keywords.keyword\",\n        \"pk\": 9,\n        \"fields\": {\n            \"productid\": 0,\n            \"keyword\": \"uploadfile\",\n            \"kwdescr\": \"上传文件\",\n            \"createtime\": \"2016-10-10T09:06:07Z\",\n            \"createat\": \"tsbc\",\n            \"updatetime\": \"2016-10-10T09:06:07Z\",\n            \"updateat\": \"tsbc\"\n        }\n    },\n    {\n        \"model\": \"keywords.keyword\",\n        \"pk\": 10,\n        \"fields\": {\n            \"productid\": 0,\n            \"keyword\": \"moveScroll\",\n            \"kwdescr\": \"移动滚动条到某元素位置\",\n            \"createtime\": \"2016-10-14T10:09:01Z\",\n            \"createat\": \"tsbc\",\n            \"updatetime\": \"2016-10-14T10:09:01Z\",\n            \"updateat\": \"tsbc\"\n        }\n    },\n    {\n        \"model\": \"keywords.keyword\",\n        \"pk\": 11,\n        \"fields\": {\n            \"productid\": 0,\n            \"keyword\": \"checkclick\",\n            \"kwdescr\": \"循环勾选一组复选框 [location:父级元素]\",\n            \"createtime\": \"2016-10-18T02:40:57Z\",\n            \"createat\": \"tsbc\",\n            \"updatetime\": \"2016-11-07T09:10:59Z\",\n            \"updateat\": \"tsbc\"\n        }\n    },\n    {\n        \"model\": \"keywords.keyword\",\n        \"pk\": 12,\n        \"fields\": {\n            \"productid\": 0,\n            \"keyword\": \"refresh\",\n            \"kwdescr\": \"页面刷新\",\n            \"createtime\": \"2017-04-05T10:16:14Z\",\n            \"createat\": \"tsbc\",\n            \"updatetime\": \"2017-04-05T10:16:14Z\",\n            \"updateat\": \"tsbc\"\n        }\n    },\n        {\n        \"model\": \"keywords.keyword\",\n        \"pk\": 13,\n        \"fields\": {\n            \"productid\": 0,\n            \"keyword\": \"clicks\",\n            \"kwdescr\": \"点击一组元素中的第n个元素 input:[n]\",\n            \"createtime\": \"2016-11-07T09:02:40Z\",\n            \"createat\": \"tsbc\",\n            \"updatetime\": \"2016-11-07T09:02:40Z\",\n            \"updateat\": \"tsbc\"\n        }\n    },\n    {\n        \"model\": \"keywords.keyword\",\n        \"pk\": 14,\n        \"fields\": {\n            \"productid\": 0,\n            \"keyword\": \"timestamp\",\n            \"kwdescr\": \"文本框输入当前时间戳\",\n            \"createtime\": \"2016-11-07T09:03:41Z\",\n            \"createat\": \"tsbc\",\n            \"updatetime\": \"2016-11-07T09:03:41Z\",\n            \"updateat\": \"tsbc\"\n        }\n    },\n    {\n        \"model\": \"keywords.keyword\",\n        \"pk\": 15,\n        \"fields\": {\n            \"productid\": 0,\n            \"keyword\": \"submit\",\n            \"kwdescr\": \"表单提交\",\n            \"createtime\": \"2016-11-07T09:06:07Z\",\n            \"createat\": \"tsbc\",\n            \"updatetime\": \"2016-11-07T09:06:07Z\",\n            \"updateat\": \"tsbc\"\n        }\n    },\n    {\n        \"model\": \"keywords.keyword\",\n        \"pk\": 16,\n        \"fields\": {\n            \"productid\": 0,\n            \"keyword\": \"jscript\",\n            \"kwdescr\": \"执行javascript脚本\",\n            \"createtime\": \"2016-10-14T09:36:26Z\",\n            \"createat\": \"tsbc\",\n            \"updatetime\": \"2016-10-14T09:36:26Z\",\n            \"updateat\": \"tsbc\"\n        }\n    },\n    {\n        \"model\": \"keywords.keyword\",\n        \"pk\": 18,\n        \"fields\": {\n            \"productid\": 0,\n            \"keyword\": \"closeBrowser\",\n            \"kwdescr\": \"关闭浏览器\",\n            \"createtime\": \"2016-11-07T09:05:36Z\",\n            \"createat\": \"tsbc\",\n            \"updatetime\": \"2016-11-07T09:05:36Z\",\n            \"updateat\": \"tsbc\"\n        }\n    },\n    {\n        \"model\": \"keywords.keyword\",\n        \"pk\": 19,\n        \"fields\": {\n            \"productid\": 0,\n            \"keyword\": \"assert\",\n            \"kwdescr\": \"通用断言\",\n            \"createtime\": \"2016-09-19T10:18:25Z\",\n            \"createat\": \"tsbc\",\n            \"updatetime\": \"2016-09-19T10:18:25Z\",\n            \"updateat\": \"tsbc\"\n        }\n    },\n    {\n        \"model\": \"keywords.keyword\",\n        \"pk\": 20,\n        \"fields\": {\n            \"productid\": 0,\n            \"keyword\": \"assertTrue\",\n            \"kwdescr\": \"验证元素存在\",\n            \"createtime\": \"2016-09-19T10:20:17Z\",\n            \"createat\": \"tsbc\",\n            \"updatetime\": \"2016-10-13T09:57:37Z\",\n            \"updateat\": \"tsbc\"\n        }\n    },\n    {\n        \"model\": \"keywords.keyword\",\n        \"pk\": 21,\n        \"fields\": {\n            \"productid\": 0,\n            \"keyword\": \"assertFalse\",\n            \"kwdescr\": \"验证元素不存在\",\n            \"createtime\": \"2016-10-13T09:50:05Z\",\n            \"createat\": \"tsbc\",\n            \"updatetime\": \"2016-10-13T09:50:05Z\",\n            \"updateat\": \"tsbc\"\n        }\n    },\n    {\n        \"model\": \"keywords.keyword\",\n        \"pk\": 22,\n        \"fields\": {\n            \"productid\": 0,\n            \"keyword\": \"assertUrl\",\n            \"kwdescr\": \"验证当前页面Url地址[input:期望值]\",\n            \"createtime\": \"2016-10-08T03:26:42Z\",\n            \"createat\": \"tsbc\",\n            \"updatetime\": \"2016-10-08T03:26:42Z\",\n            \"updateat\": \"tsbc\"\n        }\n    },\n    {\n        \"model\": \"keywords.keyword\",\n        \"pk\": 23,\n        \"fields\": {\n            \"productid\": 0,\n            \"keyword\": \"isEnabled\",\n            \"kwdescr\": \"验证元素是否置灰\",\n            \"createtime\": \"2016-11-09T06:06:29Z\",\n            \"createat\": \"wenjuan.wang\",\n            \"updatetime\": \"2016-11-09T06:06:29Z\",\n            \"updateat\": \"tsbc\"\n        }\n    },\n    {\n        \"model\": \"keywords.keyword\",\n        \"pk\": 24,\n        \"fields\": {\n            \"productid\": 0,\n            \"keyword\": \"Notassert\",\n            \"kwdescr\": \"通用断言【反向】\",\n            \"createtime\": \"2016-12-07T07:55:49Z\",\n            \"createat\": \"tsbc\",\n            \"updatetime\": \"2016-12-07T07:55:49Z\",\n            \"updateat\": \"tsbc\"\n        }\n    },\n    {\n        \"model\": \"keywords.keyword\",\n        \"pk\": 25,\n        \"fields\": {\n            \"productid\": 0,\n            \"keyword\": \"untilshow\",\n            \"kwdescr\": \"等待页面加载直到发现当前元素\",\n            \"createtime\": \"2017-05-17T08:37:16Z\",\n            \"createat\": \"tsbc\",\n            \"updatetime\": \"2017-05-17T08:52:30Z\",\n            \"updateat\": \"tsbc\"\n        }\n    },\n    {\n        \"model\": \"keywords.keyword\",\n        \"pk\": 26,\n        \"fields\": {\n            \"productid\": 0,\n            \"keyword\": \"exists_file\",\n            \"kwdescr\": \"验证data目录中某个文件是否存在\",\n            \"createtime\": \"2017-05-25T02:57:09Z\",\n            \"createat\": \"tsbc\",\n            \"updatetime\": \"2017-05-25T02:57:09Z\",\n            \"updateat\": \"tsbc\"\n        }\n    },\n    {\n        \"model\": \"keywords.keyword\",\n        \"pk\": 27,\n        \"fields\": {\n            \"productid\": 0,\n            \"keyword\": \"udpsend\",\n            \"kwdescr\": \"udp协议发送syslog日志|使用参数看工具syslog\",\n            \"createtime\": \"2017-05-31T03:27:29Z\",\n            \"createat\": \"tsbc\",\n            \"updatetime\": \"2017-05-31T03:27:29Z\",\n            \"updateat\": \"tsbc\"\n        }\n    },\n    {\n        \"model\": \"keywords.keyword\",\n        \"pk\": 28,\n        \"fields\": {\n            \"productid\": 0,\n            \"keyword\": \"ssh\",\n            \"kwdescr\": \"ssh访问设备执行命令[host,port,user,pass,cmd]\",\n            \"createtime\": \"2016-10-10T12:02:18Z\",\n            \"createat\": \"tsbc\",\n            \"updatetime\": \"2016-10-10T12:02:18Z\",\n            \"updateat\": \"tsbc\"\n        }\n    }\n]\n"
  },
  {
    "path": "automatic/keywords/migrations/0001_initial.py",
    "content": "# Generated by Django 3.0.2 on 2020-01-15 10:02\n\nfrom django.db import migrations, models\n\n\nclass Migration(migrations.Migration):\n\n    initial = True\n\n    dependencies = [\n    ]\n\n    operations = [\n        migrations.CreateModel(\n            name='Keyword',\n            fields=[\n                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),\n                ('productid', models.IntegerField(blank=True, null=True, verbose_name='所属产品')),\n                ('keyword', models.CharField(max_length=32, unique=True)),\n                ('kwdescr', models.TextField(blank=True, null=True)),\n                ('createtime', models.DateTimeField(auto_now_add=True)),\n                ('createat', models.CharField(blank=True, max_length=32, null=True)),\n                ('updatetime', models.DateTimeField(auto_now=True)),\n                ('updateat', models.CharField(blank=True, max_length=32, null=True)),\n            ],\n            options={\n                'ordering': ['productid'],\n            },\n        ),\n    ]\n"
  },
  {
    "path": "automatic/keywords/migrations/__init__.py",
    "content": ""
  },
  {
    "path": "automatic/keywords/models.py",
    "content": "# -*- coding:utf-8 -*-\n\"\"\"\n__author__ = 'Ray'\nmail:tsbc@vip.qq.com\n2020-01-06\n\"\"\"\nfrom django.db import models\n# Create your models here.\n\n\nclass Keyword(models.Model):\n    productid = models.IntegerField(verbose_name='所属产品', null=True, blank=True, editable=True)\n    keyword = models.CharField(max_length=32, unique=True)\n    kwdescr = models.TextField(null=True,blank=True,editable=True)\n    createtime = models.DateTimeField(auto_now_add=True)\n    createat = models.CharField(max_length=32, null=True, blank=True, editable=True)\n    updatetime = models.DateTimeField(auto_now=True)\n    updateat = models.CharField(max_length=32, null=True, blank=True, editable=True)\n\n    def __unicode__(self):\n        return self.keyword\n\n    class Meta:\n        ordering = [\"productid\"]"
  },
  {
    "path": "automatic/keywords/tests.py",
    "content": "from django.test import TestCase\n\n# Create your tests here.\n"
  },
  {
    "path": "automatic/keywords/urls.py",
    "content": "from django.conf.urls import url\nfrom django.contrib.auth.decorators import login_required\nfrom automatic.keywords import views\n\nurlpatterns = [\n    url(r'list/$', login_required(views.KeyWordListIndex.as_view()), name='keywordlist'),\n    url(r'add/$', views.add_keyword, name='keywordadd'),\n    url(r'update/$', views.update_keyword, name='keywordupdate'),\n    url(r'del/(?P<id>\\d+)/$', views.del_keyword, name='keyworddel'),\n    url(r'get/$', views.get_keyword, name='getkeyword'),\n    url(r'setedit/$', views.set_edit_keyword, name='seteditelement'),\n]"
  },
  {
    "path": "automatic/keywords/views.py",
    "content": "# -*- coding:utf-8 -*-\n\"\"\"\n__author__ = 'Ray'\nmail:tsbc@vip.qq.com\n2020-01-08\n\"\"\"\nimport json\n\nfrom django.utils import timezone\nfrom django.contrib.auth.decorators import login_required\nfrom django.shortcuts import render, redirect, get_object_or_404\nfrom django.http import HttpResponse,HttpResponseRedirect\nfrom django.views.decorators.csrf import csrf_exempt\n\nfrom automatic.element.forms import *\nfrom django.views.generic import ListView\nfrom automatic.element.models import *\nfrom django.db.models import Q\nfrom django.urls import reverse\nfrom automatic.management.models import Product, Project, UserAndProduct\nfrom automatic.keywords.models import Keyword\n\n\nclass KeyWordListIndex(ListView):\n    context_object_name = 'keywordlist'\n    template_name = 'keywords/keyword.html'\n    paginate_by = 10\n    keywordsum = 0\n    model = Keyword\n    http_method_names = [u'get']\n\n    def get_queryset(self):\n        keywordlist = Keyword.objects.all().order_by('-pk')\n        keyword = self.request.GET.get('keyword')\n        if keyword:\n            keywordlist = keywordlist.filter(Q(keyword__icontains=keyword)|Q(kwdescr__icontains=keyword))\n        self.keywordsum = len(keywordlist)\n        return  keywordlist\n\n    def get_context_data(self, **kwargs):\n        context = super(KeyWordListIndex,self).get_context_data(**kwargs)\n        context['userandproduct'] = UserAndProduct.objects.all()\n        context['productlist'] = Product.objects.all()\n        context['keywordsum'] = self.keywordsum\n        return context\n\n\n@login_required()\ndef add_keyword(request):\n    if request.method == 'POST':\n        name = request.POST['keyword']\n        descr = request.POST['kwdescr']\n        productid = request.POST['productid']\n        createat = request.user.username\n        updateat = request.user.username\n        keyword = Keyword(productid=productid, keyword=name, kwdescr=descr, createat=createat, updateat=updateat)\n        try:\n            keyword.save()\n        except Exception as e:\n            return HttpResponse(e)\n        return HttpResponse('添加关键字成功。')\n    else:\n        return HttpResponse('添加关键字失败。')\n\n\n@csrf_exempt\n@login_required()\ndef update_keyword(request):\n    if request.method == 'POST':\n        id = request.POST['keywordid']\n        name = request.POST['keyword']\n        descr = request.POST['kwdescr']\n        productid = request.POST['productname']\n        updateat = request.user.username\n        updatetime = timezone.now()\n        k = Keyword.objects.filter(id=int(id))\n        k.update(productid=productid, keyword=name, kwdescr=descr, updateat=updateat, updatetime=updatetime)\n        return HttpResponse('修改关键字成功。')\n    else:\n        return HttpResponse('修改关键字失败。')\n\n\n@login_required()\ndef del_keyword(request, id):\n    keyword = get_object_or_404(Keyword, pk=int(id))\n    keyword.delete()\n    return HttpResponseRedirect(reverse('keywordlist'))\n\n\n@login_required()\ndef get_keyword(request):\n    keywordlist = []\n    productid = request.GET['productid']\n    kwlist = Keyword.objects.filter(Q(productid=productid)|Q(productid=0))\n    for i in kwlist:\n        keywordinfo = {}\n        keywordinfo['key'] = i.id\n        keywordinfo['kwdescr'] = i.kwdescr\n        keywordinfo['keyword'] = i.keyword\n        keywordinfo['productid'] = i.productid\n        keywordlist.append(keywordinfo)\n    return HttpResponse(json.dumps(keywordlist))\n\n\n@login_required()\ndef set_edit_keyword(request):\n    keywordid = request.GET['keywordid']\n    kw = Keyword.objects.get(pk=keywordid)\n    keywordinfo = {}\n    keywordinfo['id'] = kw.pk\n    keywordinfo['descr'] = kw.kwdescr\n    keywordinfo['name'] = kw.keyword\n    keywordinfo['productid'] = kw.productid\n    keywordlist = [keywordinfo]\n    return HttpResponse(json.dumps(keywordlist))"
  },
  {
    "path": "automatic/management/__init__.py",
    "content": ""
  },
  {
    "path": "automatic/management/admin.py",
    "content": "from django.contrib import admin\n\n# Register your models here.\n\nfrom automatic.management import models\n\n\nclass ProductAdmin(admin.ModelAdmin):\n    list_display = (id, 'name', 'isenabled', 'descr','createat', 'createtime', 'updateat', 'updatetime')\n    search_fields = ('name','descr')\n\n\nclass ProjectAdmin(admin.ModelAdmin):\n    list_display = (id, 'name', 'isenabled','version','descr','createat', 'createtime', 'updateat', 'updatetime')\n    search_fields = ('name','descr','version')\n\n\nclass ModuleAdmin(admin.ModelAdmin):\n    list_display = (id, 'name', 'isenabled', 'createat', 'createtime', 'updateat', 'updatetime')\n    search_fields = ('name',)\n\n\nadmin.site.register(models.Product, ProductAdmin)\nadmin.site.register(models.Project, ProjectAdmin)\nadmin.site.register(models.Module, ModuleAdmin)"
  },
  {
    "path": "automatic/management/apps.py",
    "content": "from django.apps import AppConfig\n\n\nclass ManagementConfig(AppConfig):\n    name = 'automatic.management'\n"
  },
  {
    "path": "automatic/management/migrations/0001_initial.py",
    "content": "# Generated by Django 3.0.2 on 2020-01-15 10:02\n\nfrom django.conf import settings\nfrom django.db import migrations, models\nimport django.db.models.deletion\n\n\nclass Migration(migrations.Migration):\n\n    initial = True\n\n    dependencies = [\n        migrations.swappable_dependency(settings.AUTH_USER_MODEL),\n    ]\n\n    operations = [\n        migrations.CreateModel(\n            name='Product',\n            fields=[\n                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),\n                ('name', models.CharField(max_length=32, unique=True, verbose_name='产品名称')),\n                ('isenabled', models.BooleanField(blank=True, default=True, verbose_name='产品状态')),\n                ('descr', models.TextField(blank=True, null=True, verbose_name='产品描述')),\n                ('createtime', models.DateTimeField(auto_now_add=True, null=True, verbose_name='创建时间')),\n                ('createat', models.CharField(blank=True, max_length=32, null=True, verbose_name='创建者')),\n                ('updatetime', models.DateTimeField(auto_now=True, null=True, verbose_name='更新时间')),\n                ('updateat', models.CharField(blank=True, max_length=32, null=True, verbose_name='更新者')),\n                ('sortby', models.IntegerField(blank=True, default=0, null=True, verbose_name='排序')),\n            ],\n            options={\n                'ordering': ['-sortby'],\n            },\n        ),\n        migrations.CreateModel(\n            name='UserAndProduct',\n            fields=[\n                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),\n                ('productname', models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, to='management.Product')),\n                ('username', models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, to=settings.AUTH_USER_MODEL)),\n            ],\n        ),\n        migrations.CreateModel(\n            name='Project',\n            fields=[\n                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),\n                ('name', models.CharField(max_length=32, unique=True, verbose_name='项目名称')),\n                ('version', models.CharField(blank=True, max_length=32, null=True, verbose_name='版本')),\n                ('isenabled', models.BooleanField(default=True, verbose_name='状态')),\n                ('descr', models.TextField(blank=True, null=True, verbose_name='项目描述')),\n                ('createtime', models.DateTimeField(auto_now_add=True, null=True, verbose_name='创建时间')),\n                ('createat', models.CharField(blank=True, max_length=32, null=True, verbose_name='创建者')),\n                ('updatetime', models.DateTimeField(auto_now=True, null=True, verbose_name='更新时间')),\n                ('updateat', models.CharField(blank=True, max_length=32, null=True, verbose_name='更新者')),\n                ('sortby', models.IntegerField(blank=True, default=0, null=True, verbose_name='排序')),\n                ('productid', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='management.Product', verbose_name='产品名称')),\n            ],\n            options={\n                'ordering': ['-sortby'],\n            },\n        ),\n        migrations.CreateModel(\n            name='Module',\n            fields=[\n                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),\n                ('name', models.CharField(max_length=32, verbose_name='模块名称')),\n                ('isenabled', models.BooleanField(default=True, verbose_name='状态')),\n                ('createtime', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),\n                ('createat', models.CharField(blank=True, max_length=32, null=True, verbose_name='创建者')),\n                ('updatetime', models.DateTimeField(auto_now=True, verbose_name='更新时间')),\n                ('updateat', models.CharField(blank=True, max_length=32, null=True, verbose_name='更新者')),\n                ('sortby', models.IntegerField(blank=True, default=0, null=True, verbose_name='排序')),\n                ('projectid', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='management.Project', verbose_name='所属项目')),\n            ],\n            options={\n                'ordering': ['-sortby'],\n            },\n        ),\n    ]\n"
  },
  {
    "path": "automatic/management/migrations/__init__.py",
    "content": ""
  },
  {
    "path": "automatic/management/models.py",
    "content": "# -*- coding:utf-8 -*-\n\"\"\"\n__author__ = 'Ray'\nmail:tsbc@vip.qq.com\n2020-01-06\n\"\"\"\nfrom __future__ import unicode_literals\n\nimport datetime\nfrom django.db import models\nfrom auto_auth.models import User\n# Create your models here.\n\n\nclass Product(models.Model):\n    name = models.CharField(max_length=32, verbose_name='产品名称', unique=True)\n    # version = models.CharField(max_length=32)\n    isenabled = models.BooleanField(default=True, blank=True, verbose_name='产品状态')\n    descr = models.TextField(null=True, blank=True, verbose_name='产品描述')\n    createtime = models.DateTimeField(auto_now_add=True, null=True, blank=True, verbose_name='创建时间')\n    createat = models.CharField(max_length=32, null=True, blank=True, editable=True, verbose_name='创建者')\n    updatetime = models.DateTimeField(auto_now=True,null=True, blank=True, verbose_name='更新时间')\n    updateat = models.CharField(max_length=32, null=True, blank=True, editable=True, verbose_name='更新者')\n    sortby = models.IntegerField(null=True, blank=True, editable=True, default=0, verbose_name='排序')\n\n    def __unicode__(self):\n        return self.name\n\n    def save(self, *args, **kwargs):\n        if not self.id:\n            self.createtime = datetime.datetime.now()\n            self.updatetime = datetime.datetime.now()\n\n        super(Product, self).save(*args, **kwargs)\n\n    class Meta:\n        ordering = [\"-sortby\"]\n\n\nclass Project(models.Model):\n    productid = models.ForeignKey(Product, verbose_name='产品名称', on_delete=models.CASCADE)\n    name = models.CharField(max_length=32, unique=True, verbose_name='项目名称')\n    version = models.CharField(max_length=32, null=True, blank=True, editable=True, verbose_name='版本')\n    isenabled = models.BooleanField(default=True, verbose_name='状态')\n    descr = models.TextField(null=True, blank=True, editable=True,verbose_name='项目描述')\n    createtime = models.DateTimeField(auto_now_add=True, null=True, blank=True, editable=True,verbose_name='创建时间')\n    createat = models.CharField( max_length=32, null=True, blank=True, editable=True, verbose_name='创建者')\n    updatetime = models.DateTimeField(auto_now=True,null=True, blank=True, verbose_name='更新时间')\n    updateat = models.CharField(max_length=32, null=True, blank=True, editable=True, verbose_name='更新者')\n    sortby = models.IntegerField(null=True, blank=True, editable=True, default=0, verbose_name='排序')\n\n    def __unicode__(self):\n        return self.name\n\n    class Meta:\n        ordering = [\"-sortby\"]\n\n\nclass Module(models.Model):\n    projectid = models.ForeignKey(Project, verbose_name='所属项目', on_delete=models.CASCADE)\n    name = models.CharField(max_length=32, verbose_name='模块名称')\n    isenabled = models.BooleanField(default=True, verbose_name='状态')\n    createtime = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')\n    createat = models.CharField(max_length=32 ,null=True, blank=True, editable=True, verbose_name='创建者')\n    updatetime = models.DateTimeField(auto_now=True, verbose_name='更新时间')\n    updateat = models.CharField(max_length=32, null=True, blank=True, editable=True, verbose_name='更新者')\n    sortby = models.IntegerField(null=True, blank=True, editable=True, default=0, verbose_name='排序')\n\n    def __unicode__(self):\n        return self.name\n\n    class Meta:\n        ordering = [\"-sortby\"]\n\nclass UserAndProduct(models.Model):\n    username = models.ForeignKey(User, on_delete=models.DO_NOTHING)\n    productname = models.ForeignKey(Product, on_delete=models.DO_NOTHING)\n\n\n\n"
  },
  {
    "path": "automatic/management/tests.py",
    "content": "from django.test import TestCase\n\n# Create your tests here.\n"
  },
  {
    "path": "automatic/management/urls.py",
    "content": "from django.conf.urls import url\nfrom django.contrib.auth.decorators import login_required\nfrom automatic.management import views\n\nurlpatterns = [\n    url(r'^product/add/$', views.add_product, name='productadd'),\n    url(r'^product/view/(?P<id>\\d+)', views.view_product, name='productview'),\n    url(r'^product/list/$', login_required(views.ProductListIndex.as_view()), name='productlist'),\n    url(r'^product/update/$', views.update_product, name='productupdate'),\n    url(r'^product/del/(?P<id>\\d+)/$', views.del_product, name='productdel'),\n    url(r'^project/add/$', views.add_project, name='projectadd'),\n    url(r'^project/list/$', login_required(views.ProjectListIndex.as_view()), name='projectlist'),\n    url(r'^project/view/(?P<id>\\d+)', views.view_project, name='projectview'),\n    url(r'^project/update/$', views.update_project, name='projectupdate'),\n    url(r'^project/del/(?P<id>\\d+)/$', views.del_project, name='projectdel'),\n    url(r'^module/add/$', views.add_module, name='moduleadd'),\n    # url(r'^module/list/$', login_required(views.ModuleListIndex.as_view()), name='modulelist'),\n    url(r'^module/update/$', views.update_module, name='moduleupdate'),\n    url(r'^module/del/(?P<id>\\d+)/$', views.del_module, name='moduledel'),\n    url(r'^get/project/$', views.get_project, name='getproject'),\n    url(r'^get/module/$', views.get_module, name='getmodule'),\n    url(r'^get/connecteduser/$', views.get_connected_user, name='getconnecteduser'),\n    url(r'^product/user/$', views.product_user, name='productuser'),\n    url(r'^get/moduleList/$', views.get_module_list, name='getmodulelist'),\n    url(r'^setedit/product/$', views.set_edit_product, name='seteditproduct'),\n    url(r'^setedit/project/$', views.set_edit_project, name='seteditproject'),\n    url(r'^setedit/module/$', views.set_edit_module, name='seteditmodule'),\n    url(r'^syslog/home/$', views.page_syslog, name='toolsyslog'),\n    url(r'^snmp/home/$', views.comingsoon, name='toolsnmp'),\n]"
  },
  {
    "path": "automatic/management/views.py",
    "content": "# -*- coding:utf-8 -*-\n\"\"\"\n__author__ = 'Ray'\nmail:tsbc@vip.qq.com\n2020-01-06\n\"\"\"\nimport logging,json\nfrom django.utils import timezone\nfrom django.contrib.auth.decorators import login_required\nfrom django.shortcuts import render, redirect, get_object_or_404\nfrom django.http import HttpResponse,HttpResponseRedirect\nfrom django.views.decorators.csrf import csrf_exempt\nfrom django.views.generic import ListView\nfrom django.db.models import Q\nfrom django.urls import reverse\n\nfrom automatic.management.models import Product, Project, Module, User, UserAndProduct\nfrom automatic.testcase.models import Case\n# Create your views here.\n@login_required()\ndef add_product(request):\n    if request.method == 'POST':\n        post_dict = request.POST\n        product_dict = {\"name\": post_dict['productname'],\n                        \"descr\": post_dict['descr'],\n                        \"sortby\":post_dict['sortby'],\n                        # \"isenabled\": post_dict['isenabled'],\n                        }\n        if 'isenabled' in post_dict:\n            isenabled = True\n        else:\n            isenabled = False\n        name = product_dict.get('name')\n        isenabled = isenabled\n        descr = product_dict.get('descr')\n        sortby = product_dict.get('sortby')\n        createat = request.user.username\n        updateat = request.user.username\n        product = Product(name=name, isenabled=isenabled,descr=descr,sortby=sortby, createat=createat, updateat=updateat)\n        product.save()\n        return HttpResponse('创建成功')\n    else:\n        return HttpResponse('创建失败')\n\n@csrf_exempt\n@login_required()\ndef update_product(request):\n    if request.method == 'POST':\n        post_dict = request.POST\n        product_dict = {\"id\":post_dict['productid'],\n                        \"name\": post_dict['productname'],\n                        \"descr\": post_dict['descr'],\n                        \"sortby\":post_dict['sortby'],\n                        # \"isenabled\": post_dict['isenabled'],\n                        }\n        if 'isenabled' in post_dict:\n            isenabled = True\n        else:\n            isenabled = False\n        id = product_dict.get('id')\n        name = product_dict.get('name')\n        isenabled = isenabled\n        descr = product_dict.get('descr')\n        sortby = product_dict.get('sortby')\n        updateat = request.user.username\n        updatetime = timezone.now()\n        p = Product.objects.filter(id=int(id))\n        p.update(name=name, isenabled=isenabled,descr=descr,sortby=sortby, updateat=updateat, updatetime=updatetime)\n        return HttpResponse('修改成功')\n    else:\n        return HttpResponse('修改失败')\n\n@login_required()\ndef del_product(request,id):\n    product = get_object_or_404(Product,pk=int(id))\n    product.delete()\n    return HttpResponseRedirect(reverse('productlist'))\n\n@csrf_exempt\n@login_required()\ndef view_product(request, id):\n    product = get_object_or_404(Product, pk=int(id))\n    errors = []\n    if int(id):\n        product = Product.objects.get(pk=int(id))\n        projectlist = product.project_set.all()\n        return render(request, 'management/productview.html', {'product':product,'projectlist':projectlist})\n    else:\n        errors.append('Error!!!')\n        return render(request, 'management/productlist.html', {'errors', errors})\n#\n# def productlist(request):\n#    productlist = Product.objects.all()\n#    return render_to_response('productlist.html', {'productlist': productlist})\n\n\nclass ProductListIndex(ListView):\n    context_object_name = 'productlist'\n    template_name = 'management/productlist.html'\n    paginate_by = 10\n    productsum = 0\n    model = Product\n    http_method_names = [u'get',]\n\n    def get_queryset(self):\n        productlist = Product.objects.all().order_by('-sortby')\n        productname = self.request.GET.get('productname')\n        keyword = self.request.GET.get('keyword')\n\n        if productname:\n            productlist = productlist.filter(name=productname)\n        if keyword:\n            productlist = productlist.filter(Q(name__icontains=keyword)|Q(descr__icontains=keyword))\n        self.productsum = len(productlist)\n        return  productlist\n\n    def get_context_data(self, **kwargs):\n        context = super(ProductListIndex,self).get_context_data(**kwargs)\n        namelist = Product.objects.values('name').annotate()\n        context['name'] = namelist\n        context['productsum'] = self.productsum\n        return context\n\n\nclass ProjectListIndex(ListView):\n    context_object_name = 'projectlist'\n    template_name = 'management/projectlist.html'\n    paginate_by = 10\n    projectsum = 0\n    model = Project\n    http_method_names = [u'get',]\n\n    def get_queryset(self):\n        projectlist = Project.objects.all().order_by('-sortby')\n        productid = self.request.GET.get('productid')\n        projectid = self.request.GET.get('projectid')\n        keyword = self.request.GET.get('keyword')\n        if productid:\n            projectlist = projectlist.filter(productid=productid)\n        if projectid:\n            projectlist = projectlist.filter(id=projectid)\n        if keyword:\n            projectlist = projectlist.filter(Q(name__icontains=keyword)|Q(descr__icontains=keyword))\n        self.projectsum = len(projectlist)\n        return  projectlist\n\n    def get_context_data(self, **kwargs):\n        context = super(ProjectListIndex,self).get_context_data(**kwargs)\n        namelist = Project.objects.values('name').annotate()\n        context['name'] = namelist\n        context['productlist'] = Product.objects.all().order_by('-sortby')\n        context['productsum'] = self.projectsum\n        return context\n\n\n@csrf_exempt\n@login_required()\ndef add_project(request):\n    if request.method == 'POST':\n        post_dict = request.POST\n        project_dict = {\"productid\":post_dict['productid'],\n                        \"name\": post_dict['projectname'],\n                        \"descr\": post_dict['descr'],\n                        \"sortby\":post_dict['sortby'],\n                        \"version\": post_dict['version'],\n                        }\n        if 'isenabled' in post_dict:\n            isenabled = True\n        else:\n            isenabled = False\n        productid = project_dict.get('productid')\n        name = project_dict.get('name')\n        isenabled = isenabled\n        descr = project_dict.get('descr')\n        version = project_dict.get('version')\n        sortby = project_dict.get('sortby')\n        createat = request.user.username\n        updateat = request.user.username\n\n        project = Project(productid=Product.objects.get(pk=productid), name=name, isenabled=isenabled, version=version, descr=descr,sortby=sortby,\n                              createat=createat, updateat=updateat)\n        project.save()\n\n        return HttpResponse('创建成功')\n    else:\n        return HttpResponse('创建失败')\n\n\n@csrf_exempt\n@login_required()\ndef update_project(request):\n    if request.method == 'POST':\n        post_dict = request.POST\n        project_dict = {\"id\":post_dict['projectid'],\n                        \"name\": post_dict['projectname'],\n                        \"descr\": post_dict['descr'],\n                        \"version\":post_dict['version'],\n                        \"sortby\":post_dict['sortby'],\n                        # \"isenabled\": post_dict['isenabled'],\n                        }\n        if 'isenabled' in post_dict:\n            isenabled = True\n        else:\n            isenabled = False\n        id = project_dict.get('id')\n        name = project_dict.get('name')\n        isenabled = isenabled\n        descr = project_dict.get('descr')\n        version = project_dict.get('version')\n        sortby = project_dict.get('sortby')\n        updateat = request.user.username\n        updatetime = timezone.now()\n        p = Project.objects.filter(id=int(id))\n        p.update(name=name, isenabled=isenabled,descr=descr, version=version ,sortby=sortby, updateat=updateat, updatetime=updatetime)\n        return HttpResponse('修改成功')\n    else:\n        return HttpResponse('修改失败')\n\n@login_required()\ndef del_project(request,id):\n    project = get_object_or_404(Project,pk=int(id))\n    x = project.productid\n    project.delete()\n    return HttpResponseRedirect('/setting/product/view/' + str(Product.objects.get(name=x).id))\n\n\n@csrf_exempt\n@login_required()\ndef view_project(request, id):\n    project = get_object_or_404(Project, pk=int(id))\n    errors = []\n    if int(id):\n        product = project.productid\n        modulelist = project.module_set.all().order_by('-sortby')\n        return render(request, 'management/projectview.html', {'project':project,'product':product,'modulelist':modulelist})\n    else:\n        errors.append('Error!!!')\n        return render(request, 'management/projectview.html', {'errors', errors})\n\n\nclass ModuleListIndex(ListView):\n    context_object_name = 'modulelist'\n    template_name = 'management/modulelist.html'\n    paginate_by = 10\n    model = Module\n    modulesum = 0\n    http_method_names = [u'get']\n\n    def get_queryset(self):\n        modulelist = Module.objects.all().order_by('-sortby')\n        projectid = self.request.GET.get('projectid')\n        modulename = self.request.GET.get('modulename')\n        keyword = self.request.GET.get('keyword')\n        if projectid:\n            modulelist = modulelist.filter(projectid=Project.objects.get(name=projectid).id)\n        if modulename:\n            modulelist = modulelist.filter(name=modulename)\n        if keyword:\n            modulelist = modulelist.filter(Q(name__icontains=keyword)|Q(descr__icontains=keyword))\n        self.modulesum = len(modulelist)\n        return  modulelist\n\n    def get_context_data(self, **kwargs):\n        context = super(ModuleListIndex,self).get_context_data(**kwargs)\n        namelist = Module.objects.values('name').annotate()\n        context['name'] = namelist\n        context['modulesum'] = self.modulesum\n        return context\n\n@csrf_exempt\n@login_required()\ndef add_module(request):\n    if request.method == 'POST':\n        post_dict = request.POST\n        project_dict = {\"projectid\":post_dict['projectid'],\n                        \"name\": post_dict['modulename'],\n                        \"sortby\":post_dict['sortby'],\n                        }\n        if 'isenabled' in post_dict:\n            isenabled = True\n        else:\n            isenabled = False\n        projectid = project_dict.get('projectid')\n        name = project_dict.get('name')\n        isenabled = isenabled\n        sortby = project_dict.get('sortby')\n        createat = request.user.username\n        updateat = request.user.username\n\n        module = Module(projectid=Project.objects.get(pk=projectid), name=name, isenabled=isenabled, sortby=sortby,\n                              createat=createat, updateat=updateat)\n        module.save()\n\n        return HttpResponse('创建成功')\n    else:\n        return HttpResponse('创建失败')\n\n@csrf_exempt\n@login_required()\ndef update_module(request):\n    if request.method == 'POST':\n        post_dict = request.POST\n        module_dict = {\"id\":post_dict['moduleid'],\n                        \"name\": post_dict['modulename'],\n                        \"sortby\":post_dict['sortby'],\n                        # \"isenabled\": post_dict['isenabled'],\n                        }\n        if 'isenabled' in post_dict:\n            isenabled = True\n        else:\n            isenabled = False\n        id = module_dict.get('id')\n        name = module_dict.get('name')\n        isenabled = isenabled\n        sortby = module_dict.get('sortby')\n        updateat = request.user.username\n        updatetime = timezone.now()\n        m = Module.objects.filter(id=int(id))\n        m.update(name=name, isenabled=isenabled,sortby=sortby, updateat=updateat, updatetime=updatetime)\n        return HttpResponse('修改成功')\n    else:\n        return HttpResponse('修改失败')\n\n@login_required()\ndef del_module(request, id):\n    module = get_object_or_404(Module,pk=int(id))\n    module.delete()\n    return HttpResponseRedirect('/setting/project/view/'+str(module.projectid_id))\n\n\n@login_required()\ndef get_project(request):\n    projectlist = []\n    productid = request.GET['productid']\n    pjlist = Project.objects.filter(productid=productid)\n\n    for i in pjlist:\n        project = {}\n        project['key'] = i.id\n        project['value'] = i.name\n        projectlist.append(project)\n    return HttpResponse(json.dumps(projectlist))\n\n@login_required()\ndef get_module(request):\n    modulelist = []\n    projectid = request.GET['projectid']\n    if projectid == u'':\n        return HttpResponse(u'[]')\n    modlist = Module.objects.filter(projectid=projectid, isenabled=True)\n    for i in modlist:\n        module = {}\n        module['key'] = i.id\n        module['value'] = i.name\n        modulelist.append(module)\n    return HttpResponse(json.dumps(modulelist))\n\n@login_required()\ndef get_connected_user(request):\n    connecteduserlist=[]\n    productid = request.GET['productid']\n    #product = Product.objects.filter(pk=productid)[0].name\n    userandproduct = UserAndProduct.objects.filter(productname=productid)\n    useridlist=userandproduct.values('username')\n    for i in useridlist:\n        user={}\n        user['key'] = User.objects.get(pk=i['username']).pk\n        user['username'] = User.objects.get(pk=i['username']).username\n        user['realname'] = User.objects.get(pk=i['username']).realname\n        connecteduserlist.append(user)\n    return HttpResponse(json.dumps(connecteduserlist))\n\n\n@login_required()\ndef get_module_list(request):\n    post_dict = request.GET\n    caselist = []\n    projectid = post_dict['projectid']\n    if post_dict['issmoke'] == '1':\n        issmoke = True\n    else:\n        issmoke = False\n    if projectid == u'':\n        return HttpResponse(u'[]')\n    if issmoke:\n        cases = Case.objects.filter(projectid=projectid, issmoke=issmoke, isenabled=True).order_by(\"moduleid_id\", \"id\")\n    else:\n        cases = Case.objects.filter(projectid=projectid, isenabled=True).order_by(\"moduleid_id\", \"id\")\n\n    moduleid = -1\n    for case in cases:\n        if moduleid != case.moduleid_id:\n            moduleid = case.moduleid_id\n            caselist.append(u'{id:9999999%s, pId:99999990, name:\"%s\"}' % (case.moduleid_id, case.moduleid.name))\n        caselist.append(u'{id:%s, pId:9999999%s, name:\"%s、%s\"}' % (case.id, case.moduleid_id, case.id, case.casedesc))\n\n    if caselist:\n        caselist.insert(0, u'{id:99999990, pId:0, name:\"%s\", open:true}' % (case.projectid.name))\n    caseData = u'[%s]' % u','.join(caselist)\n    return HttpResponse(caseData)\n\n\n@login_required()\ndef set_edit_product(request):\n    productid = request.GET['productid']\n    product = Product.objects.get(pk=productid)\n    pd = {}\n    pd['id'] = product.pk\n    pd['name'] = product.name\n    pd['descr'] = product.descr\n    pd['isenabled'] = product.isenabled\n    pd['sortby'] = product.sortby\n    productlist = [pd]\n    return HttpResponse(json.dumps(productlist))\n\n@login_required()\ndef set_edit_project(request):\n    projectid = request.GET['projectid']\n    project = Project.objects.get(pk=projectid)\n    pj = {}\n    pj['id'] = project.pk\n    pj['name'] = project.name\n    pj['descr'] = project.descr\n    pj['isenabled'] = project.isenabled\n    pj['version'] = project.version\n    pj['sortby'] = project.sortby\n    projectlist = [pj]\n    return HttpResponse(json.dumps(projectlist))\n\n@login_required()\ndef set_edit_module(request):\n    moduleid = request.GET['moduleid']\n    module = Module.objects.get(pk=moduleid)\n    md = {}\n    md['id'] = module.pk\n    md['name'] = module.name\n    md['isenabled'] = module.isenabled\n    md['sortby'] = module.sortby\n    modulelist = [md]\n    return HttpResponse(json.dumps(modulelist))\n\n\n\n@csrf_exempt\n@login_required()\ndef product_user(request):\n    if request.method == 'POST':\n        post_dict = request.POST\n        username = post_dict.getlist('realname')\n        productname = post_dict['product']\n        UserAndProduct.objects.filter(productname=productname).delete()\n        for i in range(0, len(username)):\n            userandproduct = UserAndProduct(username=User.objects.get(pk=username[i]),productname=Product.objects.get(pk=productname))\n            userandproduct.save()\n        return HttpResponse('授权成功')\n    else:\n        return HttpResponse('授权失败')\n\n\ndef page_syslog(request):\n    return render(request, 'management/syslog.html')\n\n\ndef comingsoon(request):\n    return render(request, 'comingsoon.html')\n"
  },
  {
    "path": "automatic/settings/__init__.py",
    "content": ""
  },
  {
    "path": "automatic/settings/common.py",
    "content": "\"\"\"\nDjango settings for automatic project.\n\nGenerated by 'django-admin startproject' using Django 3.0.2.\n\nFor more information on this file, see\nhttps://docs.djangoproject.com/en/3.0/topics/settings/\n\nFor the full list of settings and their values, see\nhttps://docs.djangoproject.com/en/3.0/ref/settings/\n\"\"\"\n\nimport os\n\n# Build paths inside the project like this: os.path.join(BASE_DIR, ...)\nBASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))\nROOT_PATH = os.path.abspath(os.path.join(os.path.dirname(__file__), '..').replace('\\\\', '/'))\n\n# Quick-start development settings - unsuitable for production\n# See https://docs.djangoproject.com/en/3.0/howto/deployment/checklist/\n\n# SECURITY WARNING: keep the secret key used in production secret!\nSECRET_KEY = '$%rn58oxcu-y8$gn!8+y&&92klv0a5hdwa1v-mn5tezm$w+7x4'\n\n# SECURITY WARNING: don't run with debug turned on in production!\nDEBUG = True\n\nALLOWED_HOSTS = ['*']\n\n# Application definition\n\nINSTALLED_APPS = [\n    'django.contrib.admin',\n    'django.contrib.auth',\n    'django.contrib.contenttypes',\n    'django.contrib.sessions',\n    'django.contrib.messages',\n    'django.contrib.staticfiles',\n    'auto_auth',\n    'automatic.management',\n    'automatic.element',\n    'automatic.keywords',\n    'automatic.testcase',\n    'automatic.testtask',\n    'automatic.webinterface',\n]\n\nAUTH_USER_MODEL = \"auto_auth.User\"\n\nMIDDLEWARE = [\n    'django.middleware.security.SecurityMiddleware',\n    'django.contrib.sessions.middleware.SessionMiddleware',\n    'django.middleware.locale.LocaleMiddleware',\n    'django.middleware.common.CommonMiddleware',\n    'django.middleware.csrf.CsrfViewMiddleware',\n    'django.contrib.auth.middleware.AuthenticationMiddleware',\n    'django.contrib.messages.middleware.MessageMiddleware',\n    'django.middleware.clickjacking.XFrameOptionsMiddleware',\n]\n\nROOT_URLCONF = 'automatic.urls'\n\nTEMPLATES = [\n    {\n        'BACKEND': 'django.template.backends.django.DjangoTemplates',\n        'DIRS': [],\n        'APP_DIRS': True,\n        'OPTIONS': {\n            'context_processors': [\n                'django.template.context_processors.debug',\n                'django.template.context_processors.request',\n                'django.contrib.auth.context_processors.auth',\n                'django.contrib.messages.context_processors.messages',\n            ],\n        },\n    },\n]\n\nWSGI_APPLICATION = 'automatic.wsgi.application'\n\n\n# Database\n# https://docs.djangoproject.com/en/3.0/ref/settings/#databases\n\nMYSQL_USERNAME = os.environ.get('MYSQL_USERNAME', 'root')\nMYSQL_PASSWORD = os.environ.get('MYSQL_PASSWORD', '123456')\nMYSQL_HOST = os.environ.get('MYSQL_HOST', 'localhost')\nMYSQL_PORT = os.environ.get('MYSQL_PORT', '3306')\nMYSQL_DBNAME = os.environ.get('MYSQL_DBNAME', 'automatic')\n\nDATABASES = {\n    'default': {\n        'ENGINE': 'django.db.backends.mysql',\n        'NAME': MYSQL_DBNAME,\n        'USER': MYSQL_USERNAME,\n        'PASSWORD': MYSQL_PASSWORD,\n        'HOST': MYSQL_HOST,\n        'PORT': MYSQL_PORT,\n    }\n}\n\nDEFAULT_AUTO_FIELD = 'django.db.models.AutoField'\n\n#RabbitMq\n\nRABBITMQ_STATUS = False\nRABBITMQ_CONFIG = {'AMQP_URI': \"amqp://guest:guest@192.168.72.127:31141\"}\n\n# Password validation\n# https://docs.djangoproject.com/en/3.0/ref/settings/#auth-password-validators\n\nAUTH_PASSWORD_VALIDATORS = [\n    {\n        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',\n    },\n    {\n        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',\n    },\n    {\n        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',\n    },\n    {\n        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',\n    },\n]\n\n# Internationalization\n# https://docs.djangoproject.com/en/3.0/topics/i18n/\n\n# LANGUAGE_CODE = 'en-us'\n# LANGUAGE_CODE = 'zh-Hans'\n\nTIME_ZONE = 'Asia/Shanghai'\n\nUSE_I18N = True\n\nUSE_L10N = True\n\nUSE_TZ = True\n\n\n# Static files (CSS, JavaScript, Images)\n# https://docs.djangoproject.com/en/3.0/howto/static-files/\n\nSTATIC_URL = '/static/'\n\nSTATICFILES_DIRS = [\n    # Put strings here, like \"/home/html/static\" or \"C:/www/django/static\".\n    # Always use forward slashes, even on Windows.\n    # Don't forget to use absolute paths, not relative paths.\n    os.path.join(ROOT_PATH, 'static').replace('\\\\', '/'),\n]\n\nLOGIN_REDIRECT_URL = '/index/'\nLOGIN_URL = '/account/login/'\n\nTEMPLATES = [\n    {\n        'BACKEND': 'django.template.backends.django.DjangoTemplates',\n        'DIRS': [\n            os.path.join(ROOT_PATH, 'templates/').replace('\\\\', '/'),\n        ],\n        'OPTIONS': {\n            'context_processors': [\n                'django.template.context_processors.debug',\n                'django.template.context_processors.static',\n                'django.template.context_processors.request',\n                'django.contrib.auth.context_processors.auth',\n                'django.contrib.messages.context_processors.messages',\n                'django.template.context_processors.i18n',\n            ],\n            'loaders': [\n                'django.template.loaders.filesystem.Loader',\n                'django.template.loaders.app_directories.Loader',\n            ]\n        },\n    },\n]\n"
  },
  {
    "path": "automatic/signals.py",
    "content": "from django.dispatch import Signal\n\nUSER_REGISTERED_SIGNAL = Signal(providing_args=['user'])"
  },
  {
    "path": "automatic/static/css/ak-base-style.css",
    "content": "@charset \"utf-8\";\nbody { font-size:12px; font-family:Arial,'Microsoft Yahei'; color:#555;} \n\n.ak-clear       { clear:both;}\n.ak-left        { float:left;}\n.ak-right       { float:right;}\n.ak-ellipsis\t{ overflow:hidden; white-space:nowrap !important;text-overflow:ellipsis;}\n.ak-font-normal\t{ font-size:12px; font-family: Arial,'Microsoft Yahei'; color:#555;}\n.ak-clearfix    { zoom:1;}\n.ak-clearfix:after { content:\".\"; overflow:hidden; clear:both; visibility:hidden; display:block; height:0;}\n\n/*a*/\na { color: #555; text-decoration: none;}\na,a:focus, \na:hover, \na:active,\nbutton,\nbutton:hover {\n   outline: 0 !important; \n}\na:hover,a:focus {  text-decoration: none;}\na:hover {  color: #327de4;}\n\n/*Images*/\nimg.img-circle{ border-radius: 50% !important;  }\nimg.img-w40  { width: 40px;height: 40px;}\nimg.img-w50  { width: 50px; height: 50px;}\nimg.img-w60  { width: 60px; height: 60px;}\nimg.img-100 { width: 100px; height: 100px;}\nimg.img-center,.img-center img {  margin-left: auto;  margin-right: auto;}\n\nimg.btn-img {width: 120px; height: 45px;}\npre.pre-high {width:100%; height: 330px; margin: 0 auto; text-align: left;}\n.main-mid {width:50%;margin: 0 auto; text-align: left;}\n\n/*radius*/\n.no-radius {border-radius:0!important;}\n\n/*Full Width*/\n.full-width { width: 100%;}\n/*margin*/\n.no-margin {  margin: 0px!important;}\n.m-0   { margin:0px!important;}\n.m-5   { margin:5px!important;}\n.m-10  { margin:10px!important;}\n.m-15  { margin:15px!important;}\n.m-20  { margin:20px!important;}\n.m-25  { margin:25px!important;}\n.m-30  { margin:30px!important;}\n.m-35  { margin:35px!important;}\n.m-40  { margin:40px!important;}\n.m-45  { margin:45px!important;}\n.m-50  { margin:50px!important;}\n.m-100 { margin:100px!important;}\n\n.m-lr-0   { margin-left:0px!important; margin-right:0px!important;}\n.m-lr-5   { margin-left:5px!important; margin-right:5px!important;}\n.m-lr-10  { margin-left:10px!important; margin-right:10px!important;}\n.m-lr-15  { margin-left:15px!important; margin-right:15px!important;}\n.m-lr-20  { margin-left:20px!important; margin-right:20px!important;}\n.m-lr-25  { margin-left:25px!important; margin-right:25px!important;}\n.m-lr-30  { margin-left:30px!important; margin-right:30px!important;}\n.m-lr-35  { margin-left:35px!important; margin-right:35px!important;}\n.m-lr-40  { margin-left:40px!important; margin-right:40px!important;}\n.m-lr-45  { margin-left:45px!important; margin-right:45px!important;}\n.m-lr-50  { margin-left:50px!important; margin-right:50px!important;}\n.m-lr-100 { margin-left:100px!important; margin-right:100px!important;}\n\n.m-tb-0   { margin-top:0px!important; margin-bottom:0px!important;}\n.m-tb-5   { margin-top:5px!important; margin-bottom:5px!important;}\n.m-tb-10  { margin-top:10px!important; margin-bottom:10px!important;}\n.m-tb-15  { margin-top:15px!important; margin-bottom:15px!important;}\n.m-tb-20  { margin-top:20px!important; margin-bottom:20px!important;}\n/*.m-tb-25  { margin-top:25px!important; margin-bottom:25!important;}*/\n.m-tb-30  { margin-top:30px!important; margin-bottom:30px!important;}\n.m-tb-35  { margin-top:35px!important; margin-bottom:35px!important;}\n.m-tb-40  { margin-top:40px!important; margin-bottom:40px!important;}\n.m-tb-45  { margin-top:45px!important; margin-bottom:45px!important;}\n.m-tb-50  { margin-top:50px!important; margin-bottom:50px!important;}\n.m-tb-100 { margin-top:100px!important; margin-bottom:100px!important;}\n\n.m-t-0   { margin-top:0px!important;}\n.m-t-5   { margin-top:5px!important;}\n.m-t-10  { margin-top:10px!important;}\n.m-t-15  { margin-top:15px!important;}\n.m-t-20  { margin-top:20px!important;}\n.m-t-25  { margin-top:25px!important;}\n.m-t-30  { margin-top:30px!important;}\n.m-t-35  { margin-top:35px!important;}\n.m-t-40  { margin-top:40px!important;}\n.m-t-45  { margin-top:45px!important;}\n.m-t-50  { margin-top:50px!important;}\n.m-t-100 { margin-top:100px!important;}\n\n.m-r-0   { margin-right:0px!important;}\n.m-r-5   { margin-right:5px!important;}\n.m-r-10  { margin-right:10px!important;}\n.m-r-15  { margin-right:15px!important;}\n.m-r-20  { margin-right:20px!important;}\n.m-r-25  { margin-right:25px!important;}\n.m-r-30  { margin-right:30px!important;}\n.m-r-35  { margin-right:35px!important;}\n.m-r-40  { margin-right:40px!important;}\n.m-r-45  { margin-right:45px!important;}\n.m-r-50  { margin-right:50px!important;}\n.m-r-100 { margin-right:100px!important;}\n\n.m-b-0   { margin-bottom:0px!important;}\n.m-b-5   { margin-bottom:5px!important;}\n.m-b-10  { margin-bottom:10px!important;}\n.m-b-15  { margin-bottom:15px!important;}\n.m-b-20  { margin-bottom:20px!important;}\n.m-b-25  { margin-bottom:25px!important;}\n.m-b-30  { margin-bottom:30px!important;}\n.m-b-35  { margin-bottom:35px!important;}\n.m-b-40  { margin-bottom:40px!important;}\n.m-b-45  { margin-bottom:45px!important;}\n.m-b-50  { margin-bottom:50px!important;}\n.m-b-100 { margin-bottom:100px!important;}\n\n.m-l-0   { margin-left:0px!important;}\n.m-l-5   { margin-left:5px!important;}\n.m-l-10  { margin-left:10px!important;}\n.m-l-15  { margin-left:15px!important;}\n.m-l-20  { margin-left:20px!important;}\n.m-l-25  { margin-left:25px!important;}\n.m-l-30  { margin-left:30px!important;}\n.m-l-35  { margin-left:35px!important;}\n.m-l-40  { margin-left:40px!important;}\n.m-l-45  { margin-left:45px!important;}\n.m-l-50  { margin-left:50px!important;}\n.m-l-100 { margin-left:100px!important;}\n/*padding*/\n.no-padding {  padding: 0px!important;}\n.p-0   { padding:0px!important;}\n.p-5   { padding:5px!important;}\n.p-10  { padding:10px!important;}\n.p-15  { padding:15px!important;}\n.p-20  { padding:20px!important;}\n.p-25  { padding:25px!important;}\n.p-30  { padding:30px!important;}\n.p-35  { padding:35px!important;}\n.p-40  { padding:40px!important;}\n.p-45  { padding:45px!important;}\n.p-50  { padding:50px!important;}\n.p-100 { padding:100px!important;}\n\n.p-lr-0   { padding-left:0px!important; padding-right:0px!important;}\n.p-lr-5   { padding-left:5px!important; padding-right:5px!important;}\n.p-lr-10  { padding-left:10px!important; padding-right:10px!important;}\n.p-lr-15  { padding-left:15px!important; padding-right:15px!important;}\n.p-lr-20  { padding-left:20px!important; padding-right:20px!important;}\n.p-lr-25  { padding-left:25px!important; padding-right:25px!important;}\n.p-lr-30  { padding-left:30px!important; padding-right:30px!important;}\n.p-lr-35  { padding-left:35px!important; padding-right:35px!important;}\n.p-lr-40  { padding-left:40px!important; padding-right:40px!important;}\n.p-lr-45  { padding-left:45px!important; padding-right:45px!important;}\n.p-lr-50  { padding-left:50px!important; padding-right:50px!important;}\n.p-lr-100 { padding-left:100px!important; padding-right:100px!important;}\n\n.p-tb-0   { padding-top:0px!important; padding-bottom:0px!important;}\n.p-tb-5   { padding-top:5px!important; padding-bottom:5px!important;}\n.p-tb-10  { padding-top:10px!important; padding-bottom:10px!important;}\n.p-tb-15  { padding-top:15px!important; padding-bottom:15px!important;}\n.p-tb-20  { padding-top:20px!important; padding-bottom:20px!important;}\n.p-tb-25  { padding-top:25px!important; padding-bottom:25px!important;}\n.p-tb-30  { padding-top:30px!important; padding-bottom:30px!important;}\n.p-tb-35  { padding-top:35px!important; padding-bottom:35px!important;}\n.p-tb-40  { padding-top:40px!important; padding-bottom:40px!important;}\n.p-tb-45  { padding-top:45px!important; padding-bottom:45px!important;}\n.p-tb-50  { padding-top:50px!important; padding-bottom:50px!important;}\n.p-tb-100 { padding-top:100px!important; padding-bottom:100px!important;}\n\n\n.p-t-0   { padding-top:0px!important;}\n.p-t-5   { padding-top:5px!important;}\n.p-t-10  { padding-top:10px!important;}\n.p-t-15  { padding-top:15px!important;}\n.p-t-20  { padding-top:20px!important;}\n.p-t-25  { padding-top:25px!important;}\n.p-t-30  { padding-top:30px!important;}\n.p-t-35  { padding-top:35px!important;}\n.p-t-40  { padding-top:40px!important;}\n.p-t-45  { padding-top:45px!important;}\n.p-t-50  { padding-top:50px!important;}\n.p-t-100 { padding-top:100px!important;}\n\n.p-r-0   { padding-right:0px!important;}\n.p-r-5   { padding-right:5px!important;}\n.p-r-10  { padding-right:10px!important;}\n.p-r-15  { padding-right:15px!important;}\n.p-r-20  { padding-right:20px!important;}\n.p-r-25  { padding-right:25px!important;}\n.p-r-30  { padding-right:30px!important;}\n.p-r-35  { padding-right:35px!important;}\n.p-r-40  { padding-right:40px!important;}\n.p-r-45  { padding-right:45px!important;}\n.p-r-50  { padding-right:50px!important;}\n.p-r-100 { padding-right:100px!important;}\n\n.p-b-0   { padding-bottom:0px!important;}\n.p-b-5   { padding-bottom:5px!important;}\n.p-b-10  { padding-bottom:10px!important;}\n.p-b-15  { padding-bottom:15px!important;}\n.p-b-20  { padding-bottom:20px!important;}\n.p-b-25  { padding-bottom:25px!important;}\n.p-b-30  { padding-bottom:30px!important;}\n.p-b-35  { padding-bottom:35px!important;}\n.p-b-40  { padding-bottom:40px!important;}\n.p-b-45  { padding-bottom:45px!important;}\n.p-b-50  { padding-bottom:50px!important;}\n.p-b-100 { padding-bottom:100px!important;}\n\n.p-l-0   { padding-left:0px!important;}\n.p-l-5   { padding-left:5px!important;}\n.p-l-10  { padding-left:10px!important;}\n.p-l-15  { padding-left:15px!important;}\n.p-l-20  { padding-left:20px!important;}\n.p-l-25  { padding-left:25px!important;}\n.p-l-30  { padding-left:30px!important;}\n.p-l-35  { padding-left:35px!important;}\n.p-l-40  { padding-left:40px!important;}\n.p-l-45  { padding-left:45px!important;}\n.p-l-50  { padding-left:50px!important;}\n.p-l-100 { padding-left:100px!important;}\n\n/*upload btn*/\n.ak-zupload-btn { cursor: pointer; font-weight: 400; padding: 6px 13px;  position: relative;  background: #e6e6e6; white-space: nowrap;   display: inline-block; overflow:hidden;}\n.ak-zupload-btn input[type=\"file\"] {   position: absolute;  right: 0;  top: 0; opacity: 0;  filter: alpha(opacity=0);  cursor: pointer; z-index:100;}\n\n/*switch btn*/\n.ak-switch-check input{display: none;}\n.ak-switch-check i{display: inline-block;cursor: pointer;padding-right: 25px;transition: all ease 0.2s;-webkit-transition: all ease 0.2s;border-radius: 25px;border: solid 1px #ccc;}\n.ak-switch-check i:before{display: block;content: '';width: 25px;height: 25px;border-radius: 25px;background: white;box-shadow: 0 1px 2px rgba(0, 0, 0, 0.5);font-size: 8px;line-height: 25px;text-align:center;color:#747474;}\n.ak-switch-check :checked + i{padding-right: 0;padding-left: 25px;background: #6cbff0;box-shadow: inset 0 0 1px rgba(0, 0, 0, 0.5), inset 0 0 40px #0093ea;-webkit-box-shadow: inset 0 0 1px rgba(0, 0, 0, 0.5), inset 0 0 40px #0093ea;}\n.ak-switch-check i:before{content: \"off\";text-transform: uppercase;font-style: normal;}\n.ak-switch-check i:after{content: \"\";position: absolute;}\n.ak-switch-check :checked ~ i:before{content: \"on\";font-size:9px;color:#4684cf;}\n\n/*form*/\n.ak-form-wrap .form-control {\n    box-shadow: none;\n    border-radius: 0;\n}\n/*去掉移动端浏览器自动给input和textarea添加的内部阴影*/\ninput[type=text],textarea{-webkit-appearance: none;}\n/*select 统一样式*/\n.ak-zform-selectlabel {display: inline-block; margin:0!important; padding:0!important; font-weight:normal; width:100%; position:relative;}\nselect.ak-zform-select {-webkit-appearance: none;-moz-appearance: none; box-sizing:border-box; background:#fff;appearance:none;}\n.ak-zform-selectlabel .select-icon {height:20px;  right: 7px; top: 7px; width: 25px; position:absolute; background:#fff url(../images/ak-z-icon.png) no-repeat -305px -243px; cursor:pointer;pointer-events: none; z-index:999;}\n\n\n.space-15 {\n  margin: 15px 0;\n}\n.space-20 {\n  margin: 20px 0;\n}\n.space-25 {\n  margin: 25px 0;\n}\n.space-30 {\n  margin: 30px 0;\n}\nbody.modal-open {\n  padding-right: inherit !important;\n}\n.modal-backdrop {\n  z-index: 2040 !important;\n}\n.modal {\n  z-index: 2050 !important;\n    padding-top: 100px;\n}\n\n\n/*yeeoffice css*/\n/*scroll修改过的滚动条样式 start*/\n.content-zscroll{\n\toverflow: auto;\n\tposition: relative;\n\tpadding:0;\n\t-webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box;\n}\n\n.content-zscroll.hidden{ display: none; }\n.content-zscroll hr{\n\tmargin-bottom: -10px;\n\tborder-top: 1px solid rgba(0,0,0,0.7);\n}\n.content-zscroll.light hr{\n\tborder-bottom: 1px solid rgba(255,255,255,0.6);\n\tborder-top: 1px solid rgba(0,0,0,0.1);\n}\n/*scroll修改过的滚动条样式 end*/\n\n\n/*visible-xs hidden-xs*/\n.visible-xs769 {\n    display: none;\n}\n.hidden-xs769 {\n    display: block;\n}\n@media (max-width: 768px){\n.visible-xs769 {\n    display: block!important;\n}\n.hidden-xs769 {\n    display: none!important;\n}\n}\n\n\n/*移动端浏览网页元素时，自动给input和textarea添加了内部阴影的效果*/\ninput,textarea{-webkit-appearance: none;}\ninput[type=checkbox]{-webkit-appearance:checkbox;cursor:pointer;}\ninput[type=radio] {    -webkit-appearance: radio;cursor:pointer;}\n/*select 统一样式*/\n.ak-zform-selectlabel {display: inline-block; margin:0!important; padding:0!important; font-weight:normal; width:100%; position:relative;}\nselect.ak-zform-select {-webkit-appearance: none;-moz-appearance: none; box-sizing:border-box; background:#fff;appearance:none;}\n.ak-zform-selectlabel .select-icon {height:20px;  right: 7px; top: 7px; width: 25px; position:absolute; background:#fff url(../images/ak-z-icon.png) no-repeat -305px -243px; cursor:pointer;pointer-events: none; z-index:999;}\n\n.ak-mcol-padding8 { padding-left:8px!important; padding-right:8px!important;}\n@media (max-width:768px) {.col-md-4.col-sm-6.col-xs-12.item { width:100%!important;}}\n\n\n/*Sky-Forms start--*/\n.sky-form .label{display: block;margin-bottom: 6px;line-height: 19px;font-weight: 400;}\n.sky-form .toggle{position: relative;display: block;}\n.sky-form .radio,\n.sky-form .checkbox{margin-bottom: 4px;padding-left: 27px;font-size: 15px;line-height: 27px;color: #404040;cursor: pointer;}\n.sky-form .radio:last-child,\n.sky-form .checkbox:last-child{margin-bottom: 0;}\n.sky-form .radio input,\n.sky-form .checkbox input{position: absolute;left: -9999px;}\n.sky-form .radio i,\n.sky-form .checkbox i{position: absolute;top: 5px;left: 0;display: block;width: 13px;height: 13px;outline: none;border-width: 2px;border-style: solid;background: #fff;}\n.sky-form .radio i{border-radius: 50%;}\n.sky-form .radio input + i:after,\n.sky-form .checkbox input + i:after{position: absolute;opacity: 0;-ms-transition: opacity 0.1s;-moz-transition: opacity 0.1s;-webkit-transition: opacity 0.1s;}\n.sky-form .radio input + i:after{content: '';top: 4px;left: 4px;width: 5px;height: 5px;border-radius: 50%;}\n.sky-form .checkbox input + i:after{content: '\\f00c';top: -1px;left: -1px;width: 15px;height: 15px;font: normal 12px/16px FontAwesome;text-align: center;}\n.sky-form .radio input:checked + i:after,\n.sky-form .checkbox input:checked + i:after{opacity: 1;}\n.sky-form .toggle{margin-bottom: 4px;padding-right: 61px;font-size: 15px;line-height: 27px;color: #404040;cursor: pointer;font-weight: normal;}\n.sky-form .toggle:last-child{margin-bottom: 0;}\n.sky-form .toggle input{position: absolute;left: -9999px;}\n.sky-form .toggle i{content: '';position: absolute;top: -4px;right: 0;display: block;width: 49px;height: 17px;border-width: 2px;border-style: solid;border-radius: 12px;background: #fff;\n    left:8px;;}\n.sky-form .toggle i.col01{top:4px;left:0px;;}\n.sky-form .toggle i:after{content: '停用';position: absolute;top: 2px;right: 8px;left: 8px;font-style: normal;font-size: 9px;line-height: 13px;font-weight: 700;text-align: left;color: #5f5f5f;}\n.sky-form .toggle i:before{content: '';position: absolute;z-index: 1;top: 4px;right: 4px;display: block;width: 9px;height: 9px;border-radius: 50%;opacity: 1;-ms-transition: right 0.2s;-moz-transition: right 0.2s;-webkit-transition: right 0.2s;}\n.sky-form .toggle input:checked + i:after{content: '启用';text-align: right;}\n.sky-form .toggle input:checked + i:before{right: 36px;}\n.sky-form .radio i,\n.sky-form .checkbox i,\n.sky-form .toggle i{border-color: #e5e5e5;-ms-transition: border-color 0.3s;-moz-transition: border-color 0.3s;-webkit-transition: border-color 0.3s;}\n.sky-form .toggle i:before{background-color: #4684cf;}\n.sky-form .rating label{color: #ccc;-ms-transition: color 0.3s;-moz-transition: color 0.3s;-webkit-transition: color 0.3s;}\n.sky-form .radio:hover i,\n.sky-form .checkbox:hover i,\n/*.sky-form .toggle:hover i,{border-color: #8dc9e5;}*/\n.sky-form .radio input:focus + i,\n.sky-form .checkbox input:focus + i,\n.sky-form .toggle input:focus + i{border-color: #2da5da;}\n.sky-form .radio input + i:after{background-color: #2da5da;}\n.sky-form .checkbox input + i:after{color: #2da5da;}\n.sky-form .radio input:checked + i,\n.sky-form .checkbox input:checked + i,\n.sky-form .toggle input:checked + i{border-color: #2da5da;}\n.sky-form .label{border-radius: 0;font-size: 100%;text-align: left;white-space: normal;color: inherit;}\n.sky-form .radio,\n.sky-form .checkbox{font-weight: 400;}\n.sky-form .radio + .radio,\n.sky-form .checkbox + .checkbox{margin-top: 0;}\n\n.sky-form .input input{height: 34px;padding: 6px 12px;}\n.sky-form .input input,\n.sky-form .select select,\n.sky-form .textarea textarea{border-width: 1px;font-size: 14px;color: #404040;}\n.sky-form .select select{height: 33px;padding: 6px 10px;}\n.sky-form .select-multiple select{height: auto;}\n.sky-form .input input,\n.sky-form .select select,\n.sky-form .textarea textarea,\n.sky-form .radio i,\n.sky-form .checkbox i,\n.sky-form .toggle i,\n.sky-form .icon-append,\n.sky-form .icon-prepend{border-color: #bbb;}\n/*.sky-form .toggle i:before{background-color: #999;}\n*/.sky-form .button{background: #72c02c;}\n.sky-form .toggle i{width: 54px;height: 21px;border-width: 1px;}\n.sky-form .toggle i:after{top: 3px;}\n.sky-form .toggle i:before{top: 5px;right: 6px;}\n.radio, .checkbox{margin-top: 0;}\n.sky-form .radio i,\n.sky-form .checkbox i{width: 17px;height: 17px;border-width: 1px;}\n.sky-form .checkbox input + i:after{top: 2px;left: 0;font: normal 10px FontAwesome;}\n.sky-form .radio input + i:after{top: 5px;left: 5px;background-color: #999;}\n.sky-form .checkbox input + i:after{color: #999;}\n.sky-form .radio input:checked + i,\n.sky-form .checkbox input:checked + i,\n.sky-form .toggle input:checked + i{border-color: #999;}\n.sky-form .rating input:checked ~ label{color: #72c02c;}\n.sky-form .input input:focus,\n.sky-form .select select:focus,\n.sky-form .textarea textarea:focus{border-color: #bbb;box-shadow: 0 0 2px #c9c9c9;}\n.sky-form .radio input:focus + i,\n.sky-form .checkbox input:focus + i,\n.sky-form .toggle input:focus + i{border-color: #999;box-shadow: none;}\n.sky-form .input:hover input,\n.sky-form .select:hover select,\n.sky-form .textarea:hover textarea{border-color: #999;}\n.sky-form .radio:hover i,\n.sky-form .checkbox:hover i,\n.sky-form .toggle:hover i,\n.sky-form .ui-slider-handle:hover{border-color: #999;}\n.sky-form .input.state-disabled:hover input,\n.sky-form .select.state-disabled:hover select,\n.sky-form .textarea.state-disabled:hover textarea,\n.sky-form .radio.state-disabled:hover i,\n.sky-form .checkbox.state-disabled:hover i,\n.sky-form .toggle.state-disabled:hover i{border-color: #bbb;}\n.sky-form.ak-aqu-badge{padding-top:0;padding-bottom:0;margin-top:-5px;}\n.sky-form .toggle input + i:before{ background-color:#a8a7a7;}\n.sky-form .toggle input:checked + i:before{ background-color:#2da5da;}\n/*Sky-Forms end--*/\n\n/*分页 start*/\n.pagination.ak-zcommon-pagelist>li>a, .pagination.ak-zcommon-pagelist>li>span{position: relative;float: left;padding: 5px 10px;font-size: 12px;line-height: 1.42857143;color: #555!important;text-decoration: none;background-color: #fff!important;border: 1px solid #ddd;margin-left:5px!important;margin-right:5px!important;border-radius:4px!important;}\n.pagination.ak-zcommon-pagelist>a:focus, .pagination.ak-zcommon-pagelist>li>a:hover, .pagination.ak-zcommon-pagelist>li>span:focus, .pagination.ak-zcommon-pagelist>li>span:hover ,.pagination.ak-zcommon-pagelist>li>span:visited, .pagination.ak-zcommon-pagelist>li>span:visited{background-color: #fff!important;color: #0173f2!important;border-color: #0173f2!important;}\n.pagination.ak-zcommon-pagelist>a.active{background-color: #fff!important;color: #0173f2!important;border-color: #0173f2!important;}\n.pagination.ak-zcommon-pagelist > .active > a,\n.pagination.ak-zcommon-pagelist > .active > span,\n.pagination.ak-zcommon-pagelist > .active > a:hover,\n.pagination.ak-zcommon-pagelist > .active > span:hover,\n.pagination.ak-zcommon-pagelist > .active > a:focus,\n.pagination.ak-zcommon-pagelist > .active > span:focus{z-index: 2;color: #0173f2!important;cursor: default;background-color: #fff!important;border-color: #0173f2!important;}\n.ak-zpagelisticon{width:20px;height:21px;display:inline-block;background-image:url(../images/ak-z-icon.png);cursor:pointer; float:left;}\n.ak-zpagelisticon.left{background-position:0 -245px;}\n.ak-zpagelisticon.right{background-position:-27px -245px;}\n.pagination.ak-zcommon-pagelist>li:first-child>a, .pagination.ak-zcommon-pagelist>li:first-child>span{padding:3px;}\n.pagination.ak-zcommon-pagelist>li:last-child>a, .pagination>li:last-child>span{padding:3px;}\n/*分页 end*/\n\n\n/*=====loading start=====*/\n.zpage-loader{ display:none;width:100%;height:100%;position:fixed;top:0;left:0;background:rgba(250,250,250,0.8);z-index:100000}\n.sk-wave-loading {\n  width: 50px;\n  height: 30px;\n  text-align: center;\n  font-size: 10px; top:50%;left:50%; margin:-15px 0 0 -25px; position:absolute;}\n.sk-wave-loading .sk-rect {\n    background-color: #4684cf;\n    height: 100%;\n    width: 6px;\n    display: inline-block;\n    -webkit-animation: sk-waveStretchDelay 1.2s infinite ease-in-out;\n            animation: sk-waveStretchDelay 1.2s infinite ease-in-out; }\n.sk-wave-loading .sk-rect1 {\n    -webkit-animation-delay: -1.2s;\n            animation-delay: -1.2s; }\n.sk-wave-loading .sk-rect2 {\n    -webkit-animation-delay: -1.1s;\n            animation-delay: -1.1s; }\n.sk-wave-loading .sk-rect3 {\n    -webkit-animation-delay: -1s;\n            animation-delay: -1s; }\n.sk-wave-loading .sk-rect4 {\n    -webkit-animation-delay: -0.9s;\n            animation-delay: -0.9s; }\n.sk-wave-loading .sk-rect5 {\n    -webkit-animation-delay: -0.8s;\n            animation-delay: -0.8s; }\n\n@-webkit-keyframes sk-waveStretchDelay {\n  0%, 40%, 100% {\n    -webkit-transform: scaleY(0.4);\n            transform: scaleY(0.4); }\n  20% {\n    -webkit-transform: scaleY(1);\n            transform: scaleY(1); } }\n\n@keyframes sk-waveStretchDelay {\n  0%, 40%, 100% {\n    -webkit-transform: scaleY(0.4);\n            transform: scaleY(0.4); }\n  20% {\n    -webkit-transform: scaleY(1);\n            transform: scaleY(1); } }\n.sk-wave-text { color:#4684cf;}\n.ak-zloading-block { display:block!important;}\n.ak-zloading-none { display:none!important;}\n\n/*=====loading end=====*/\n.ak-znews-addsort-modal .control-label.ak-form-label {\n    text-align: left!important;\n    font-weight: normal;\n}\n\n.ak-zicon.ak-navphoneicon{ background-position:-339px -18px; margin-right:5px;margin-top:-4px;}\n.ak-zicon.ak-navkonwicon{ background-position:-304px -18px; margin-right:5px;margin-top:-4px;}\n\n/*modal*/\n.col-md-12.ak-back-header.clearfix { padding-left:0; padding-right:0;}\n/*modal start*/\n.ak-min-fullwidth-modal .modal-body { background:#f5f5f5; padding:15px 30px;}\n.ak-min-fullwidth-modal .modal-body.col01   {background:transparent;}\n.ak-min-fullwidth-modal .modal-content { background:#fff!important;}\n@media (max-width:768px) {\n  .ak-min-fullwidth-modal .modal-dialog  { margin:0;}\n  .ak-min-fullwidth-modal .modal-content {min-height: 100%; height:auto;\n    border-radius: 0!important;}\n  .add-doc-icon {margin-top:20%;}\n  }\n\n@media (max-width:768px) {.ak-min-fullwidth-modal .modal-header .close{ margin-top:5px; margin-right:5px; float:left;}}\n.ak-header-btnsm { padding:4px 7px; font-size:12px;}\n.ak-zdl-createbtn {padding: 6px 13px; background:#629cfa; color:#fff; border:none;}\n/*.ak-zdol-changebg-btn:hover {background:rgba(51, 51, 51, 0.6) url(../images/photo2.png) no-repeat center center;}*/\n.ak-zdl-createbtn.cancel { background:#f3f3f3; color:#555; margin-left:5px;}\n.form-control {\n    box-shadow: none;\n    /*border-radius: 0 !important;*/\n}\n.ak-min-fullwidth-modal .modal-content { border-radius:0!important;}\n@media (min-width: 992px)  {.ak-min-fullwidth-modal .modal-dialog { width:800px; /*margin-top:15%;*/}}\n@media (min-width: 768px) and (max-width:992px){\n.ak-min-fullwidth-modal .modal-dialog {\n    width: 90%;\n}}\n.ak-min-fullwidth-modal .close { width:16px; height:16px; background:url(../images/ak-z-icon.png) -150px -1px;  opacity: 1;color:transparent;margin-top:4px; outline:medium none;}\n/*.ak-min-fullwidth-modal .close:foucs { outline:none;}*/\n.ak-zdl-createbtn {padding: 5px 13px; background:#629cfa; color:#fff; margin-left:15px; border:solid 1px #4389f9;}\n/*.ak-zdol-changebg-btn:hover {background:rgba(51, 51, 51, 0.6) url(../images/photo2.png) no-repeat center center;}*/\n.ak-zdl-createbtn.cancel { background:#f3f3f3; color:#555; border:solid 1px #ddd;}\n@media (max-width:768px) {.ak-min-fullwidth-modal .close {background:url(../images/ak-z-icon.png) -186px -2px;}\n\n.ak-min-fullwidth-modal .modal-content { background:#f5f5f5!important;}\n\n.ak-min-fullwidth-modal .modal-content .modal-header {background:#fff!important;}}\n@media (max-width:768px) {.ak-min-fullwidth-modal .modal-body { padding:15px;}}\n\n/*modal end*/\n/*visible-xs hidden-xs*/\n.visible-zxs {\n    display: none!important;\n}\n.hidden-zxs {\n    display: block!important;\n}\n@media (max-width: 768px){\n.visible-zxs {\n    display: block!important;\n}\n.hidden-zxs {\n    display: none!important;\n}\n}\nh1{font-size: 28px;line-height: 35px;}\nh2{font-size: 24px;line-height: 33px;}\nh3{font-size: 20px;line-height: 27px;}\nh4{line-height: 25px;}\nh5{line-height: 20px;}\nh6{line-height: 18px;}\nh1, h2, h3, h4, h5, h6{color: #555;margin-top: 5px;text-shadow: none;font-weight: normal;font-family:Arial,'Microsoft yahei';}\nh1 i, h2 i, h3 i, h4 i, h5 i, h6 i{margin-right: 5px;}\np,\nli,\nli a,\nlabel{color: #555;}\n\n\n.ak-zdol-icon {\n    width: 25px;\n    height: 25px;\n    display: inline-block;\n    float: left;\n    /*background: url(../images/ak-common-icon.png) no-repeat 0 0;*/\n    margin-right: 10px;\n    cursor: pointer;\n}\n.ak-zdol-topsropbtn span {\n    margin-top: 0!important;\n}\n.ak-akdetail-titlewrap span {\n    float: left;\n    line-height: 25px;\n    margin-top: 4px;\n}\n.ak-zdol-icon.iconmore-light {\n    width: 20px;\n    height: 20px;\n    background: url(../images/ak-z-icon.png) no-repeat -304px -206px;\n}\n.ak-zgrey-back {\n    display: inline-block;\n    background: url(../images/ak-z-icon.png) -304px -55px;\n    background-repeat: no-repeat;\n    width: 25px;\n    height: 25px;\n    vertical-align: middle;\n    cursor: pointer;\n    margin-right: 0!important;\n    float: left;\n    margin-top: 14px;\n}\n\n.btn {\n    box-shadow: none;\n}\n.ak-zdol-topsropbtn {\n    width: 30px;\n    height: 30px;\n    padding: 6px 12px!important;\n    background: transparent;\n    border: none;\n    cursor: pointer;\n    margin-top: 10px;\n}\n.ak-zdol-searchbox {position: relative;\n    width: 230px; margin-top:11px;}\n.ak-zdol-searchbox input[type=\"text\"] {\n    background:#fff none repeat scroll 0 0;\n    border: 1px solid #d4d4d4;\n    color: #797979;\n    display: inline-block;\n    font-size: 0.975em;\n    outline: medium none;\n    padding: 0 2px 0 30px;\n    width: 100%;\n    height: 28px;\n}\n.ak-zdol-searchbox span.searchicon {\n    background:#fff url(\"../images/ak-z-icon.png\") no-repeat scroll 0 0;\n    border: 0 none;\n    display: inline-block;\n    height: 16px;\n    left: 6px;\n    outline: medium none;\n    position: absolute;\n    top: 6px;\n    width: 16px;\n}\n\n/*back to-top start*/\n#topcontrol{color: #fff;z-index: 99;width: 30px;height: 30px;font-size: 20px;background: #222;position: relative;right: 14px !important;bottom: 11px !important;border-radius: 3px !important;}\n#topcontrol:after{top: -2px;left: 8.5px;content: \"\\f106\";position: absolute;text-align: center;font-family: FontAwesome;}\n/* to-top  end*/\n\n/*upload*/\n.ak-upload {\n    font-size: 22px;\n    position: absolute;\n    cursor: pointer;\n    color: #fff;\n    border: none;\n    overflow: hidden;\n    display: inline-block;\n}\n.ak-zdol-changebg-btn {\n    width: 50px;\n    height: 50px;\n    -webkit-border-radius: 50%;\n    -moz-border-radius: 50%;\n    -o-border-radius: 50%;\n    -ms-border-radius: 50%;\n    border-radius: 50%;\n    position: absolute;\n    right: 15px;\n    bottom: 20px;\n    /*background: rgba(0, 0, 0, 0.6) url(../images/photo2.png) no-repeat center center!important;*/\n    border: none;\n    outline: none;\n    cursor: pointer;\n    z-index: 1046;\n}\n.ak-zdol-changebg-btn:hover {\n    /*background: rgba(51, 51, 51, 0.6) url(../images/photo2.png) no-repeat center center!important;*/\n}\n.ak-upload input {\n    position: absolute;\n    font-size: 100px;\n    right: 0;\n    top: 0;\n    opacity: 0;\n    filter: alpha(opacity=0);\n    cursor: pointer; z-index: 100;\n}\n\n\n@media (max-width: 768px){\n.modal-dialog {\n    position: absolute;\n    width: auto;\n    margin: 10px;\n    top: 0;\n    left: 0;\n    bottom: 0;\n    right: 0;\n}\n}\n\n.ak-required { color: red;}\n/*sm modal*/\n\n@media (min-width: 769px) {.zsm-modal .modal-dialog{ width: 400px!important;margin-top:13%;}\n.zsm-modal .modal-body { padding:15px; background: #fff; }.zsm-modal .modal-dialog {margin-top:13%;}\n}\n.zsm-modal .close { width:16px; height:16px; background:url(../images/ak-z-icon.png) -150px -1px;  opacity: 1;color:transparent;margin-top:4px; outline:medium none;}\n/*.zsm-modal .close:foucs { outline:none;}*/\n@media (max-width:768px) {.zsm-modal .modal-dialog{margin-top:5%;}}\n\n\n.ak-zsm-modal .modal-content {\n    border-radius: 0!important;\n}\n@media (min-width: 768px){\n.ak-zsm-modal .modal-sm { width:500px;}\n\n.ak-zsm-modal .modal-dialog { margin-top:15%;}\n.ak-zsm-modal10 .modal-dialog { margin-top:10%;}\n}\n.ak-zsm-modal .close {\n    width: 16px;\n    height: 16px;\n    /*background: url(../../images/ak-z-icon.png) -150px -1px;*/\n    opacity: 1;\n    color: transparent;\n    margin-top: 4px;\n    outline: medium none;\n}\n\n.ak-zgrey-back.ak-zdol-nback { display:none;}\n@media (max-width: 768px){\n\t.ak-zsm-modal .modal-header .close {\n    margin-top: 5px;\n    margin-right: 5px;\n    float: left;\n}\n.ak-zsm-modal .close {\n    /*background: url(../../images/ak-z-icon.png) -186px -2px;*/\n}\n\n.ak-zsm-modal .modal-content {\n   min-height: 100%;\n}}\n@media (max-width: 992px){\n\t.ak-zgrey-back.ak-zdol-nback { display:block;}\n\n}\n\nul li a:hover{background-color: #35b0ee; }\n\n/* */\nbody{margin:0;padding:0;overflow-x:hidden;}\nhtml, body{height:100%;}\nimg{border:none;}\n*{font-family:'微软雅黑';font-size:12px;}\ndl,dt,dd{display:block;margin:0;padding:0;}\na{text-decoration:none;}\n\n#bg{background-image:url(../images/dotted.png);}\n.container{width:100%;height:100%;margin:auto;}\n\n/*left*/\n.leftsidebar_box{float:left;width:150px;height:auto !important;overflow:visible !important;position:fixed;height:100% !important;background-color:#0277bd;}\n.line{width:100%;background-image:url(../images/line_bg.png);background-repeat:repeat-x;}\n.leftsidebar_box dt{padding-left:40px;padding-right:10px;background-repeat:no-repeat;background-position:10px center;color:#f5f5f5;font-size:14px;position:relative;line-height:48px;cursor:pointer;margin-bottom:1px;}\n.leftsidebar_box dd{background-color: #0277bd;}\n.leftsidebar_box dd a{display:block;color:#f5f5f5;line-height:20px;padding:7px 0 7px 40px!important;}\n.leftsidebar_box dd a:hover {background-color:#3992D0;}\n.leftsidebar_box dt img{position:absolute;right:10px;top:20px;}\n.functiontest dt{background-image:url(../images/system.png)}\n.interfacetest dt{background-image:url(../images/channel.png)}\n.channel dt{background-image:url(../images/channel.png)}\n.tools dt{background-image:url(../images/source.png)}\n.cloud dt{background-image:url(../images/cloud.png)}\n.setting dt{background-image:url(../images/syetem_management.png)}\n.source dt{background-image:url(../images/statistics.png)}\n.statistics dt{background-image:url(../images/app.png)}\n.leftsidebar_box dl dd:last-child{padding-bottom:10px;}"
  },
  {
    "path": "automatic/static/css/ak-schedule.css",
    "content": ".ak-zper-ltopbtnbox{background:#fafafa;height:50px;position:relative;border-bottom: solid 1px #eee;box-shadow: 0 0 8px #ddd;border-right: solid 1px #ddd;}\n.ak-zper-navbtn{width:25px;height:15px;display:inline-block;cursor:pointer;margin:17px 0 0 15px;}\n.ak-zper-adminbox{height:60px;padding-left:8px;}\n.ak-zper-adminbox .img-box{width:38px;height:38px;overflow:hidden;display:inline-block;cursor:pointer;border-radius:50%;margin:11px 10px 6px 10px;float:left;}\n.ak-zper-adminbox .img-box img{display: block;max-width: 100%;height: auto;min-width:100%;min-height:100%;}\n.ak-zper-adminbox .name{height:60px;line-height:60px;font-size:14px;cursor:pointer;float:left;color: #f0f0f0}\n.al-zper-dropdownicon{width:20px;height:30px;display:inline-block;cursor:pointer;margin-top:15px;float:left;}\n.ak-zpericon{width:20px;height:20px;display:inline-block;cursor:pointer;float:left;}\n.ak-zper-bellicon{width:20px;height:20px;margin-right:10px;font-size:18px;display:inline-block;opacity:0.7;}\n.ak-zper-chaticon{width:20px;height:20px;float:right;margin-top:20px;margin-right:20px;}\n.ak-zper-inbox-title{height:61px;background:#fafafa;color:#555;border-bottom: solid 1px #eee;/*box-shadow: 0 0 8px #ddd;*/position:relative;}\n.ak-zper-inbox-title .inbox-text{font-size:16px;height:50px;line-height:50px;margin-left:15px;cursor:pointer;}\n.ak-zper-inbox-con{padding:15px;}\n.ak-zper-addtask-box{height:50px;background-color:rgba(118,148,116,0.85);padding:0 50px 0 40px;position:relative;margin-bottom:10px;cursor:pointer;}\n.ak-zper-addtask-input{background:transparent;border-color:transparent;outline:none;color:#fff;font-size:14px;width:100%;height:50px;line-height:50px;padding-left:5px;}\n.ak-zper-addicon{background-position:-353px -206px;position:absolute;top:15px;left:15px;}\n\n\n.ak-zper-inbox-list.active{background:#e1f2fe;}\n.ak-zper-complete{display:inline-block;padding:5px 10px;background:#668964;cursor:pointer;color:#fff;margin-top:20px;}\n.ak-zper-inbox-listnew.conplete .ak-zper-inbox-list{background-color:rgba(255,255,255,1);}\n.ak-zper-leftbox,.ak-zper-midbox,.ak-zper-rightbox{padding-bottom: 9999px;margin-bottom: -9999px;overflow:hidden;padding-left:0!important;padding-right:0!important;min-height:100%;}\n.ak-zper-midbox{background:#fff}\n.ak-zper-remind-title{padding:10px 35px 10px 40px;height:auto;position:relative;}\n.ak-zper-remind-title .check-box{position:absolute;top:10px;left:15px;}\n.ak-zper-inboxstar.remaindbox{position:absolute;right:10px;top:13px;}\n.ak-zper-remind-title .text{font-size:16px;}\n.ak-zper-remindicon{width:25px;height:25px;display:inline-block;cursor:pointer;position:absolute;top:10px;left:10px;}\n.ak-zper-canicon{background-position:-4px -4px;}\n.ak-zper-remind-list{padding-left:40px;position:relative;}\n.ak-zper-remind-list .right-text{border-bottom: solid 1px #ddd;min-height:40px;}\n.ak-zper-remind-list .right-text input{border:none;background:transparent;outline:none;height:40px;padding-left:5px;width:100%;font-weight: normal;cursor:pointer;}\n.ak-zper-remind-list .right-text textarea{border:none;background:transparent;outline:none;height:auto;padding-left:5px;width:100%;}\n.ak-zper-leftbox, .ak-zper-rightbox{background:#fafafa;}\n.ak-zper-alarm-clockicon{background-position:-4px -51px;}\n.ak-zper-sight-addicon{background-position:-4px -99px;}\n.ak-zper-sight-editicon{background-position:-4px -148px;}\n.ak-zper-sight-fileicon{background-position:-4px -196px;}\n.ak-zperleftnav-ul{margin:0;padding:0;list-style:none;}\n.ak-zperleftnav-ul .list-group-item{cursor:pointer;border:none;font-size:14px;cursor:pointer;background:transparent;display: block;padding: 10px 15px;}\n.ak-zperleftnav-ul .list-group-item:hover{cursor:pointer;}\n.ak-zperleftnav-ul .list-group-item:first-child{border-top-left-radius: 0px;border-top-right-radius: 0px;}\n.ak-zperleftnav-ul .list-group-item:last-child{border-bottom-right-radius: 0px;border-bottom-left-radius: 0px;}\n.ak-zperleftnav-ul .list-group-item.active, .ak-zperleftnav-ul .list-group-item.active:focus, .ak-zperleftnav-ul .list-group-item.active:hover, .ak-zperleftnav-ul .list-group-item:hover{z-index: 2;color: #555;background: #cce8ff;}\n.ak-zper-navicon{width:25px;height:25px;display:inline-block;cursor:pointer;float:left;margin-right:10px;}\n.ak-zper-navicon img{margin:0 auto;}\n.ak-zper-nav-smred{width:25px;height:25px;font-size:12px;color:red;margin-right:5px;background:#ffd6d6;float:right;display:inline-block;border-radius:50%;text-align:center;line-height:25px;text-align:center;}\n.ak-zper-nav-smgrey{width:25px;height:25px;font-size:12px;color:#787878;float:right;display:inline-block;line-height:25px;text-align:center;}\n.ak-zperleftnav-ul .list-group-item.active .ak-zper-nav-smred , .ak-zperleftnav-ul .list-group-item.active:focus .ak-zper-nav-smred , .ak-zperleftnav-ul .list-group-item.active:hover .ak-zper-nav-smred , .ak-zperleftnav-ul .list-group-item:hover .ak-zper-nav-smred{background:#d96e6c;color:#fff;}\n.ak-zperleftnav-ul li a{display: block;}\n.ak-zperleftnav-ul .secondary{list-style:none;padding:0;margin:0;display:none;}\n.ak-zperleftnav-ul li a{display: block;padding: 10px 15px;}\n.ak-zper-inboxback{width:25px;height:25px;display:none;float:left;margin:12px 0 0 5px;cursor:pointer;}\n.ak-zper-remindback{width:25px;height:25px;display:none;float:left;cursor:pointer;position: absolute;top: 12px;left: 10px;}\n.ak-zper-md-3, .ak-zper-md-6, .ak-zper-md-9, .ak-zper-md-12{position: relative;min-height: 1px;padding-right: 15px;padding-left: 15px;width:100%;}\n.ak-zper-leftbox{float:left;width:150px;}\n/*.ak-zper-midbox{float:left;width:100%;}*/\n.ak-zper-rightbox{float:left;width:100%;}\n.ak-zper-rightbox-block{display:block!important;}\n.ak-zper-rightbox-none{display:none;}\n\n/*左、右、中 三块布局的宽度*/\n@media (min-width: 1200px){.ak-zper-md-3,.ak-zper-md-25， .ak-zper-md-6, .ak-zper-md-9, .ak-zper-md-12{float: left;}\n.ak-zper-md-3{width: 20%;}\n.ak-zper-md-6{width: 55%!important;}\n.ak-zper-md-9{width: 80%;}\n.ak-zper-md-25{width: 25%;}\n/*.ak-zper-leftbox{width:15%;}*/\n/*.ak-zper-midbox{width:85%;}*/\n.ak-zper-rightbox{width:25%;}}\n@media (min-width:992px) and (max-width:1199px){.ak-zper-md-3, .ak-zper-md-6, .ak-zper-md-9, .ak-zper-md-12{float: left;}\n.ak-zper-md-3{width: 25%;}\n.ak-zper-md-6{width: 50%!important;}\n.ak-zper-md-9{width: 50%;}\n.ak-zper-leftbox{width:25%;}\n.ak-zper-midbox{width:75%;}\n.ak-zper-rightbox{width:25%;}}\n@media (max-width:991px){.ak-zper-remind-title .check-box{display:none;}\n.ak-zper-inboxback{display:inline-block;}\n.ak-zper-remindback{display:inline-block;}\n.ak-zper-leftbox{display:none;}\n.ak-zper-rightbox{display:none;}\n.ak-zper-threebox-none{display:none!important;}\n.ak-zper-threebox-block{display:block!important;}}\n.ak-zper-shareicon{width:20px;height:20px;display:inline-block;cursor:pointer;margin:5px 0 5px 0;}\n.ak-zper-sorticon{width:20px;height:20px;display:inline-block;cursor:pointer;font-size:16px;color:#555;line-height:20px;font-weight:lighter;margin:5px 0 5px 0;opacity:0.85;}\n.ak-zper-sortbtnbox{display:inline-block;float:right;width:30px;text-align:center;height:50px;font-size:12px;color:#555;margin-right:10px;cursor:pointer;}\n.ak-zper-navbtext{color:#555;font-size:16px;height:50px;line-height:50px;margin-left:10px; cursor:pointer;}\n.ak-zper-detailed-listadd{width:25px;height:25px;display:inline-block;cursor:pointer;margin:17px 5px 0 10px;background-position: -386px -206px;}\n.ak-zper-midbox.ak-zper-md-6 .ak-zper-inbox-title{border-right: solid 1px #ddd;}\n@media (min-width:992px) and (max-width:1199px){.ak-zper-inbox-list .title{width:70%;}}\n.ak-zper-inbox-list .btn-box{position:absolute;top:0;right:0;bottom:0;padding:8px 8px 0px 8px;background:#fff;}\n.ak-zper-inbox-list.active .btn-box{background: #e1f2fe;}\n.ak-zper-inbox-listnew.conplete .ak-zper-inbox-list{opacity:0.7;}\n.ak-zper-inbox-listnew.conplete .ak-zper-inbox-list .title{text-decoration:line-through;}\n.ak-zper-remaind-taskcheck{width: 25px;height: 25px;display: inline-block;cursor: pointer;position: absolute;top: 10px;left: 10px;}\n.ak-zper-remind-list .subtask-text{display:inline-block;margin-top:13px;margin-left:5px;}\n.ak-zper-remind-list .right-text.subtask-textbox{min-height:30px;border-color:transparent;position:relative;padding-right:30px;}\n.ak-zper-remind-list .right-text.subtask-textbox .closebtn{position:absolute;width:20px;height:20px;display:inline-block;background-position: -220px 5px;right:0;top:10px;right:10px;cursor:pointer;}\n.ak-zper-remind-list .right-text .ak-zper-remind-upload{width:100%;height:40px;display:inline-block;cursor:pointer;}\n.ak-zper-remind-list .right-text .ak-zper-remind-upload input{position: absolute;font-size: 100px;right: 0;top: 0;opacity: 0;filter: alpha(opacity=0);cursor: pointer;z-index:100;height:40px;cursor:pointer;}\n.ak-zper-remind-list .right-text .ak-zper-remind-upload .add-text{color:#a9a9a9;font-size:12px;line-height:40px;}\n.ak-zper-remind-list .right-text .ak-zper-remind-upload:hover .add-text{color:#a9a9a9;}\n.ak-zper-upload-smbox{border: solid 1px #ddd;height:60px;position:relative;margin:8px 10px 8px 0;; padding:0 30px 0 65px;cursor:pointer;}\n.ak-zper-upload-smbox .img-box{width:60px;height:60px;overflow:hidden;cursor:pointer;display:inline-block;position:absolute;top:0;left:0;}\n.ak-zper-upload-smbox .img-box img{min-width:100%;min-height:100%;}\n.ak-zper-upload-smbox .title{font-size:14px;color:#555;margin-top:8px;margin-bottom:5px;overflow:hidden; white-space:nowrap !important;text-overflow:ellipsis;}\n.ak-zper-upload-smbox .time{font-size:12px;color:#a9a9a9;overflow:hidden; white-space:nowrap !important;text-overflow:ellipsis;}\n.ak-zper-upload-smbox .closebtn{cursor:pointer;position:absolute;width:20px;height:20px;display:inline-block;background-position: -220px 5px;right:0;top:20px;right:10px;}\n.ak-zper-alarm-shareicon{opacity:0.8;}\n.ak-zper-remind-list .right-text.reply{border-color:transparent;padding-right:100px;padding-top:8px;position:relative;}\n.ak-zper-remind-list .right-text.reply .title{font-weight:600;}\n.ak-zper-remind-list .right-text.reply .time-right{padding-right:10px;position:absolute;top:15px;right:0;width:100px;overflow:hidden;white-space:nowrap !important;text-overflow:ellipsis;-o-text-overflos:ellipsis;color:#a9a9a9;text-align:right;}\n.ak-zper-commentsbox{border:solid 1px #ddd;margin:10px 15px;height:40px;line-height:40px;padding-left:35px;position:relative;}\n.ak-zper-commentsbox input{border:none;width:100%;background:transparent;}\n.ak-zpericon.ak-zper-chaticon.commments{position:absolute;top:10px;left:10px;margin:0;}\n.ak-zper-fix-btnbox{height:60px;padding:0 10px;text-align:center;color:#555;line-height:50px;position:relative;}\n.ak-zpericon.ak-zper-fixback-icon{width:25px;height:25px;position:absolute;top:12px;left:10px;display:none;}\n.ak-zpericon.ak-zper-fixdelete-icon{width:25px;height:25px;position:absolute;top:12px;right:10px;}\n.ak-zper-fixedbox{height:100px;padding:15px 0;}\n.ak-zper-rightbox{position:relative;}\n.list-group-item.ak-zper-list-toggle.ak-zper-listgrey{background:#f3f3f3;}\n.list-group-item.ak-zper-list-toggle.ak-zper-listgrey .secondary .active,.list-group-item.ak-zper-list-toggle.ak-zper-listgrey .secondary li:hover{background:#cce8ff;}\n.ak-zperleftnav-ul .secondary li{padding-left:30px;}\n.ak-zperleftnav-ul .list-group-item.ak-zper-list-toggle.ak-zper-listgrey.active, .ak-zperleftnav-ul .list-group-item.ak-zper-list-toggle.ak-zper-listgrey.active:focus, .ak-zperleftnav-ul .list-group-item.ak-zper-list-toggle.ak-zper-listgrey.active:hover, .ak-zperleftnav-ul .list-group-item.ak-zper-list-toggle.ak-zper-listgrey:hover{background:#f3f3f3;}\n@media (min-width:992px){.ak-zper-remindback{display:none;}\n.ak-zpericon.ak-zper-fixback-icon{display:block!important;}}\n.ak-zper-remind-list .right-text .ak-time-icon{position: absolute;right: 1px;top: 0;width: 29px;height: 28px;line-height: 28px;text-align: center;cursor:pointer; border:none;}\n.ak-zper-remind-list .right-text .input-za.ak-append-box{width:100%;}\n.ui-datepicker-prev, .ui-datepicker-next{top:15px!important;}\n.form-control.ak-zperrepeat-select{border:none;background:transparent;height:40px;color:#555;font-size:12px;padding-left:0;line-height:40px;cursor:pointer;}\n.form-control.ak-zperrepeat-select:focus{border:none!important;box-shadow:none;outline:none;}\n.ak-zper-repeaticon{}\n.input-group-addon{background:transparent;border:none;cursor:pointer;}\n.ak-zper-remind-list .right-text input.form-control:focus{border:none!important;box-shadow:none;outline:none;}\n.form-control.ak-zperrepeat-select option{font-size:14px;}\n\n\n.ak-zmemo-modalback{width: 25px;height: 25px;background: url(../images/zkonw-back.png) no-repeat center center;display:inline-block;float: left;margin:0 0 0 -5px;cursor: pointer;}\n.ak-min-fullwidth-modal .close.close-back{width: 25px;height: 25px;background: url(../images/zkonw-back.png) no-repeat center center;opacity: 1;color: transparent;margin-top: 4px;outline: medium none;float: left;margin:0;}\n.ak-zmec-listedit{width: 25px;height: 25px;display: inline-block;cursor: pointer;margin: 11px 5px 0 10px;background-position: -360px -62px;}\n.ak-zmemo-leftnav.right-border.right-border{border-right: solid 1px #ddd;}\n.ak-zmemo-leftnav.right-border .ak-zper-ltopbtnbox{border-right:none;}\n.ak-zweichat-searchbox{padding:10px 15px;border-bottom: solid 1px #ddd;}\n.ak-zweichat-searchbox .ak-zdol-searchbox{width:100%;margin-top:0;}\n.ak-zper-rowpointer{width: 30px;height: 30px;display: inline-block;cursor: pointer;margin-right:5px;}\n.ak-zpernav-more-btn{width: 25px;height: 25px;padding: 6px 12px!important;background: transparent;border: none;cursor: pointer;}\n.ak-zperleftnav-ul.ak-zper-listgrey .list-group-item{background: #f3f3f3;}\n.ak-zperleftnav-ul.ak-zper-listgrey .list-group-item:hover{z-index: 2;color: #555;background: #cce8ff;}\n\n\n\n\n/*schedule css*/\n.ak-jsch-border{ border-right:#d7d7d7 1px solid;}\n.ak-zper-ltopbtnbox.ak-jsch-top{ box-shadow:none;border-right:none; border-color:#d7d7d7;}\n.ak-jsch-left-ul{ padding:0; margin:0; margin-top:10px;margin-bottom:10px; list-style:none;}\n.ak-jsch-left-ul li{ padding:8px 15px; font-size:14px; cursor:pointer;}\n.ak-jsch-left-ul li:hover{ background-color:#CCE8FF;}\n.ak-jsch-left-ul li p.ak-jsch-li-text{padding:0; margin:0; display:inline-block; margin-left:20px; font-size:16px;}\n.ak-jsch-li-img{ display:inline-block;}\n.ak-jsch-block{ background-color:#f0f0f5; border-top:#d7d7d7 1px solid;border-bottom:#d7d7d7 1px solid;}\n.ak-jsch-block h3{ padding:0; margin:0; padding:10px; font-size:16px;}\n.ak-jsch-searchbox{padding:15px 10px;border-bottom:#d7d7d7 1px solid;}\n.ak-jsch-searchbox .ak-zdol-searchbox{margin:0 auto; width:100%;}\n.ak-jsch-left-ul li span.ak-sch-icon{width:20px;height:20px;border-radius:3px; vertical-align:middle;}\n.ak-sch-icon.checkbox1-icon{ background-color:#e57b72;}\n.ak-sch-icon.checkbox2-icon{ background-color:#4184f3;}\n.ak-sch-icon.checkbox3-icon{ background-color:#7885ca;}\n.ak-sch-icon.checkbox4-icon{ background-color:#b29cda;}\n.ak-zper-midbox.ak-jsch-mid{ background-image:none; margin-left:150px;}\n.ak-zper-inbox-title.ak-jsch-title{ position:relative;padding-left:10px; box-shadow:none; border-color:#d7d7d7;background-color:#fff;}\n.ak-jsch-rightbox{ position:absolute; right:0;}\n.ak-jsch-title .ak-sch-icon{width:26px;height:30px;vertical-align:middle; cursor:pointer;}\n.ak-zper-inbox-title.ak-jsch-title .inbox-text{margin-left:0;}\n.ak-jsch-row3 span{ line-height:50px;}\n.ak-jsch-time span{ display:inline-block; padding:0 20px;}\n.ak-jsch-time span a{ color:inherit;}\n.ak-jsch-time span.selected{ color:#006ec4; border-bottom:#006ec4 3px solid; line-height:44px;}\n.ak-jsch-jia{ margin-right:15px; margin-top:10px;display:inline-block; width:30px; height:30px;cursor:pointer;}\n.ak-jsch-calendar{ width:100%; table-layout:fixed;}\n.ak-jsch-calendar th{ font-weight:normal; text-align:center; line-height:30px;border-bottom: #e7e9ea 1px solid;}\n.ak-jsch-calendar th,.ak-jsch-calendar td{font-size:14px;}\n.ak-jsch-calendar th.current{ color:#0978c7;}\n.ak-jsch-calendar td.current{ background-color:#f4f9fd;}\n.ak-jsch-calendar tr td:first-child{ text-align:right;}\n.ak-jsch-calendar tr.ak-jsch-tr{ text-align:right;border-bottom:2px #dfdfdf solid; height:60px;} \n.ak-jsch-calendar tbody td{ position:relative;border-bottom:#e7e9ea 1px solid;height:30px;}\n.ak-jcalendar-td{ float:left;width:98%; margin:0 auto;border-left:#c0392b 2px solid; background-color:#f1c5c0; color:#932c22; text-align:left; height:30px; overflow:hidden;font-size:12px;line-height:30px;overflow:hidden;cursor:pointer}\n.ak-jcalendar-time{position:absolute; left:42px;width:calc( 100% - 42px);}\n.ak-jcalendar-line {position:relative;border-bottom: #f8c8c9 2px solid;}\n/*新增*/\n.ak-jsch-wrapbox{ position:relative;}\n.ak-jcalendar-h1{ height:2px;}\n.ak-jcalendar-time .col-01{ width:14.3%;}\n.ak-jcalendar-time .col-02{ width:85.7%;}\n.ak-jsch-red{background-color:#e52126;}\n.ak-jsch-light{ background-color:#f8c8c9;}\n.ak-jcalendar-td.col-01{ width:10%;}\n.ak-jcalendar-td.col-02{ width:20%;}\n.ak-jcalendar-td.col-03{ width:30%;}\n.ak-jsch-event .ak-jcalendar-td.col-02{ width:20%;}\n.ak-jsch-event .ak-jcalendar-td.col-03{ width:30%;}\n.ak-jsch-mt12{ margin-top:12px;}\n.ak-jsch-left-ul .ak-zpernav-more-dropdown li:hover{ background-color:transparent;}\n.ak-jsch-left-ul .ak-zpernav-more-dropdown li{ padding:0;}\n.ak-jsch-left-ul .ak-zpernav-more-dropdown li a{padding:10px 15px;}\n.ak-jsch-block .ak-zper-detailed-listadd{ margin-top:14px;} \n\n.ak-zdol-trsmbtn.iconedit-sm {\n    width: 26px;\n    background-position: -111px -56px;\n    margin-right: 10px;\n}\n.ak-zdol-trsmbtn.icondelete-sm {\n    width: 26px;\n    background-position: -148px -56px;\n    margin-right: 10px;\n}\n.ak-zmemo-modal-tabnav.nav.ak-jsch-nav>li>a{ padding:6px 0; display: inline-block;}\n.ak-jcalendar-time.ak-jmin-47{ top:294px;}\n.ak-jcalendar-minute{ position:absolute; right:0;color:#e6373c; font-size:12px; line-height:12px;}\n.ak-jcalendar-minute.ak-jmin-47{margin-top:-14px;}\n.ak-jcalendar-point{ position:absolute;top:-3px;width:8px; height:8px;border-radius:4px; background-color:#e63237;}\n.ak-jcalendar-td.ak-jsch-h2{ height:60px;}\n.ak-jsch-dropdown .ak-sch-icon.btn{ border:none;}\n.ak-jsch-dropdown .dropdown-menu{ left:auto; right:0;}\n.btn-group.ak-jsch-dropdown{vertical-align:baseline;}\n.ak-jsch-dropdown.btn-group.open .dropdown-toggle{box-shadow:none;}\n.ak-jsch-dropdown.open>.dropdown-toggle.btn-default{ background-color:transparent;}\n@media(min-width:769px){.ak-jsch-row3.ak-zper-fix-btnbox{ text-align:left;}.ak-jsch-dropdown{ display:none;}.ak-jsch-row3:first-child{ width:44%;}}\n@media(max-width:991px){.ak-jsch-row3.ak-zper-fix-btnbox{ padding-left:36px;}}\n@media(max-width:768px){.ak-jsch-row3.ak-zper-fix-btnbox{width:calc(100% - 84px);}}\n@media(max-width:440px){.ak-jsch-calendar th span{ display:block;}.ak-zper-inbox-title.ak-jsch-title{ padding-left:0;}}\n\n/*schedule-day css*/\n.ak-jsch-total{height:60px;border-bottom:2px #dfdfdf solid;}\n.ak-jsch-tablewrap{border-bottom:#e7e9ea 1px solid;}\n.ak-jsch-div{ position:relative;height:60px;border-bottom:#e7e9ea 1px solid;}\n.ak-jsch-hour{ position:absolute;width:50px;font-size:14px;text-align:right;line-height:60px;}\n.ak-jsch-event{ padding-left:55px; width:100%;}\n.ak-jsch-event span{ position:relative;display:block; width:100%;height:30px;}\n.ak-jsch-event span+span{border-top:#e7e9ea 1px solid;}\n.ak-jsch-event .ak-jcalendar-td{ width:100%; padding-left:5px;}\n.ak-jsch-day{ table-layout:fixed;}\n.ak-jsch-day th,.ak-jsch-day td{ border-collapse:collapse; padding:5px; text-align:center; line-height:30px;}\n.ak-jsch-day th{ font-weight:normal; font-size:12px;}\n.ak-jsch-selected{ display:inline-block;width:30px;height:30px;color:#fff;border-radius:15px;background-color:#0072c6;}\n.ak-jcalendar-minute.ak-jmin-25{bottom:1px;}\n.ak-jcalendar-line.ak-jmin-25{ top:11px;}\n.ak-jsch-red{}\n@media(min-width:992px){.ak-jsch-day{width:80%; margin:0 auto;}}\n@media(max-width:991px){.ak-jsch-day{width:100%;}}\n\n/*schedule-detail css*/\n.ak-jsch-timebox{ padding:0 10px;color:#909090;font-size:14px;line-height:28px; background-color:#f8f8f8;border-bottom:#e7e9ea 1px solid;}\n.ak-jsch-timebox span+span{ margin-left:5px;}\n.ak-jsch-cell{position:relative;height:60px;border-bottom:#e7e9ea 1px solid;}\n.ak-jsch-cell-left{ position:absolute;padding:10px;width:120px;}\n.ak-jsch-cell-right{ padding:10px 10px 10px 120px; width:100%;}\n.ak-jsch-cell-left span{ display:block;font-size:14px;color:#2b2b2b;}\n.ak-jsch-cell-left em{ display:block;font-size:14px;color:#c0c0c0;font-style:normal;}\n.ak-jsch-point{ width:12px; height:12px; margin-top:4px; border-radius:6px; background-color:#c0392b;}\n.ak-jsch-cell-right .ak-jsch-cell-title{ display:block; width:100%;font-size:14px;color:#2b2b2b;overflow:hidden;text-overflow:ellipsis; white-space:nowrap; cursor:pointer;}\n.ak-jsch-cell-right p{ padding:0; margin:0; width:100%;font-size:14px;color:#c0c0c0;overflow:hidden;text-overflow:ellipsis; white-space:nowrap;}\n.ak-mt15{ margin-top:15px;}\n@media(max-width:768px){.ak-jsch-cell-left{ width:76px;}.ak-jsch-cell-right{ padding-left:76px;}.ak-jsch-cell-left span,.ak-jsch-cell-left em{ font-size:12px;margin-top:3px;}.ak-jsch-cell-left .ak-jsch-point{ margin-top:2px;}}\n\n\n/*modal css*/\n.ak-jsch-modal-row{ position:relative;padding-top:15px;background-color:#fff;/*border-top:#e1e1e1 1px solid; border-bottom:#e1e1e1 1px solid;*/}\n.ak-jsch-pos{ position:absolute; /*width:36px;*/}\n.ac-proname {margin-left:18px;}\n.ak-jsch-modal-text{ /*padding-left:36px;*/ width:100%;font-size:14px;}\n.ak-jsch-modal-item{padding:0;/*border-bottom:#e1e1e1 1px solid;*/}\n.ak-jsch-modal-row.ak-jsch-padding{ padding:0; /*padding-left:15px;*/}\n.ak-jsch-modal-row.ak-jsch-padding .ak-jsch-pos{ padding-top:15px;}\n.ak-jsch-modal-row .ak-jsch-pos{text-align:center;}\n.ak-jsch-pos .ak-jsch-point{ margin-left:auto; margin-right:auto;}\n.ak-jsch-modal-text .ak-jsch-modal-item:last-child{ border:none;}\n.ak-jsch-right-text .ak-sch-icon{ margin-left:10px;}\n.ak-jsch-modal-row.ak-jsch-noborder{ border-top:none;}\n.ak-jsch-modal-input{ width:100%;padding:3px 5px;border:1px solid #ccc;}\n.ak-append-box.ak-jsch-timepicker{ width:224px;margin-bottom:0;}\n.ak-jsch-modal-item .ak-jsch-item-left{ display:inline-block; width:75px;line-height:32px;text-align:right;}\n.ak-jsch-item-right{ width:calc(100% - 100px); margin-left:10px;}\n.ak-jsch-timepicker .input-group{ width:100%;}\n.ak-jsch-timepicker +.ak-jsch-timepicker{ margin-right:10px;}\n.ak-jsch-timepicker input.form-control{ border:none;}\n.ak-jsch-timepicker .input-group-addon{ border-left:1px solid #bbb;}\n.ak-jsch-timepicker .input-group-addon{ padding-left:8px;padding-right:9px;}\n.ak-jsch-timepicker .ak-time-input{padding-left:8px;padding-right:9px;}\n.ak-jsch-modal-item.ak-jsch-pt{ padding-top:10px;/*margin-left:20px;*/padding-bottom:10px;}\n.ak-jwk-btn{padding:5px 14px;font-size:12px;color:#fff;background-color:#4684cf;cursor:pointer;}\n.ak-jwk-btn:hover{color:#fff;background-color:#2F77CD;}\n.ak-jsch-item-right .input {right: 0;}\n@media(min-width:769px){.ak-jsch-modal-row{margin-left:-30px;margin-right:-30px;}.ak-jsch-modal-row.col01{margin-left:0;margin-right:0;}}\n@media(max-width:768px){.ak-jsch-modal-row{margin-left:-15px;margin-right:-15px;}.ak-jsch-pos{ width:20px;}.ak-jsch-modal-text{ padding-left:24px;}}\n@media(max-width:567px){.ak-jsch-timepicker +.ak-jsch-timepicker{ margin-right:0; margin-top:10px;}.ak-append-box.ak-jsch-timepicker{ width:90%;min-width:224px;}}\n.ac-acaseedit-textarea\t{width:100%;height:100px;margin-top:12px;line-height:30px;line-height:25px;border:1px solid #ccc;-moz-border-radius:5px;}\n.ak-jsch-modal-row.col01{padding-left:20px;}\n\n\n.ak-zdol-trsmbtn {\n    width: 20px;\n    height: 20px;\n    display: inline-block;\n    float: left;\n    margin-right: 5px;\n}\n\n.ak-zdol-trsmbtn.icondelete-sm {\n    width: 26px;\n    background-position: -148px -56px;\n    margin-right: 10px;\n}\n.ak-zdol-trsmbtn.iconedit-sm {\n    width: 26px;\n    background-position: -111px -56px;\n    margin-right: 10px;\n}\n\n\n.ak-append-box{display: block;position: relative;border: 1px solid #ccc;width: 100%;}\n.fa{cursor: pointer;}\n.ak-time-icon{position: absolute;right: 1px;top: 0;width: 29px;height: 32px;line-height: 33px;text-align: center;border-left: 1px solid #bbb;}\n.ak-time-input{width: 100%;height: 32px;padding: 6px 12px;font-weight: 400;border: none;}\n.ak-zmemo-modal-tabnav {\n    border-bottom: none;\n}\n\n\n/*add by Arlene 2016-8-29*/\n\n.ac-margin-tb20\t{margin-top:20px;margin-bottom:20px;}\n.ac-margin-tb15\t{margin-top:15px;margin-bottom:12px;}\n.ac-abtn\t{text-align:center;padding:3px 8px;border:none;border-radius:5px;color:#fff;font-size:12px;display: block;white-space:nowrap;overflow: hidden;text-overflow: ellipsis;}\n.orange\t{background-color:#f90;}\n.ac-abtn.orange:hover,.ac-btn-addcase:hover\t{background-color:#ef9002;color:#fff;}\n.ac-abtn.blue:hover,.ac-btn-adduser:hover\t{background-color:#2a9dd6;color:#fff;}\n.grey{background-color:#ccc}\n.blue{background-color:#00bcf2;}\n.green{background-color:#42c05d;}\n.ac-abtn.green:hover\t{background-color:#3aaa52;color:#fff;}\n.ac-abtn.blue:hover\t{background-color:#2a9dd6;color:#fff;}\n.ac-abtn.red\t{background-color:#e30202;}\n.ac-abtn.red:hover\t{background-color:#ce0808;color:#fff;}\n.ac-aselect\t{margin-right:15px;/*padding:5px;*/border:1px solid #ccc;border-radius:5px;}\n.ac-aselect.col01   {width:150px;}\n.ac-aselect.col02   {width:100px;}\n.case-next{height:60px;padding:0 10px;color:#555;line-height:50px;position:relative;}\n\n\n.ac-asearch-box\t{width:200px;margin-right:15px;padding:4px 5px;border:1px solid #ccc;border-radius:5px;}\n.ac-asearch-input\t{width:170px;border:none!important;background: transparent;}\n.ac-search-icon\t{margin-top:5px;}\n.ac-btn-addcase\t{padding:4px 10px;border-radius:5px;background-color:#f90;color:#fff;border:none;}\n.ac-btn-adduser\t{padding:4px 10px;border-radius:5px;background-color: #00bcf2;color:#fff;border:none;}\n.ac-aoffon-btn\t{display:inline-block;margin-left:10px;}\n.ak-jsch-item-right.col02{margin-left:10px;width:calc(100% - 100px)}\n.ac-acaseedit-state\t{margin-left:20px;}\n.ac-acaseedit-select {width:100%;padding:8px;background:transparent;border:1px solid #ccc;}\n.ac-acaseedit-input\t{padding:5px;background:transparent;border:1px solid #ccc;border-radius:5px;}\n.ac-element-input {width: 250px;padding:5px;background:transparent;border:1px solid #ccc;border-radius:5px;}\n.ac-keywordtext-input\t{width: 300px;padding:5px;background:transparent;border:1px solid #ccc;border-radius:5px;}\n.ac-acase-desc\t{width:60px;}\n.ac-acode-desc {width:300px;}\n.modal-body\t{padding-top:0!important;}\n@media screen and (-webkit-min-device-pixel-ratio:0) {  /*safari and chrome*/\n    .ac-acaseedit-select,.ac-product-select {\n        height:32px;\n        line-height:32px;\n    } \n.ac-aselect\t,.ac-product-select{height:32px;line-height:32px;}\n}\n.ac-margint8   {margin-top:15px;}\nselect.ac-acaseedit-select::-moz-focus-inner { /*Remove button padding in FF*/ \n    padding: 0;\n}\n.ac-aselect::-moz-focus-inner { /*Remove button padding in FF*/ height:32px;line-height:32px;}\n@-moz-document url-prefix() { /* targets Firefox only */\n    \n    .ac-aselect,.ac-product-select\t{height:32px;line-height:32px;}\n}        \n@media screen\\0 { /* IE Hacks: targets IE 8, 9 and 10 */        \n    select.ac-acaseedit-select,.ac-product-select {\n        height:32px;\n        line-height:32px;\n    }     \n    .ac-aselect\t,.ac-product-select{height:32px;line-height:32px;}\n}\n\n.ac-ml10\t{margin-left:10px;}\ntd.ac-alist-descp a {color:#00bcf2;}\ntd.ac-alist-descp a:hover\t{color:#2a9dd6;}\ntd.ac-alist-width-overflow {max-width:300px;white-space:nowrap;overflow:hidden;text-overflow: ellipsis;}\ntd.ac-alist-width-overflow-public {max-width:200px;white-space:nowrap;overflow:hidden;text-overflow: ellipsis;}\n.ac-product-select\t{width:200px;height:32px;margin:10px 20px auto auto;}\ndiv.ac-interlist-width-overflow {max-width:200px;white-space:nowrap;overflow:hidden;text-overflow: ellipsis;}\n.panel0{padding-top: 0px;padding-bottom: 0px;}\n\n/*leftnavbar*/\n.ak-aper-navicon\t{width:40px;height:40px;}\n.list-group-item.a-listitem\t{height:60px;}\n.ak-aper-navicon span\t{dispaly:block;height:40px;}\n.ak-zper-chaticon{width:20px;height:20px;background:url(../images/chat01.png) no-repeat 0 0;float:right;margin-top:20px;margin-right:20px;}\n\n.ak-jsch-jia {\n    margin-right:0;\n    margin-top:10px  ;\n    display: inline-block;\n    width: 36px;\n    height: 36px;\n    background: url(../images/ak-common.png) -480px -180px no-repeat;\n    cursor: pointer;\n}\n\n\n.gn-menu-main { height: 56px; }\n\n.ak-min-fullwidth-modal .close.close-back{width: 25px;height: 25px;background: url(../images/zkonw-back.png) no-repeat center center;opacity: 1;color: transparent;margin-top: 4px;outline: medium none;float: left;margin:0;}\n\n\n/*.ac-acedit-addlinebtn\t{margin-left:30px;}*/\n.ak-acedit-tablelist\t{margin:15px 30px;}\n\n.ac-addtips{display:none;position:absolute;left:40%;top:5px;width:200px;height:40px;margin-left:-100px;border-radius:5px;text-align:center;line-height:40px;font-size:14px;color: #ffffff;}\n.ac-aset-table  {width:700px;margin:0 auto;}\n.ac-aset-table td.col01 {width:80px;text-align:right;margin-right:10px;}\n.ak-jsch-modal-text.col01{padding-left:15px;}\n.sky-form.col01 .toggle i   {top:8px;left:0;}\n.ak-jsch-item-right.col01   {width:100%;}\n.ac-apro-span   {display:block;margin-top:12px;}\n\n\n.search-width{width: 300px !important;}\n.ac-amargin-r10 {margin-right:10px;}\n.ac-amargin-tb20  {margin-top:20px;margin-bottom:20px;}\n.ac-aelement-table th {padding:10px 5px!important;font-size:12px;}\n\n.ac-aelement-table td{padding:10px 5px!important;}\n.table-hover tr:hover   {background-color:#d4edfe!important;}\n\n.ui-autocomplete {\n    max-height: 200px;\n    overflow-y: auto;\n    /* 防止水平滚动条 */\n    overflow-x: hidden;\n    padding: 10px;\n  }\n  /* IE 6 不支持 max-height\n   * 我们使用 height 代替，但是这会强制菜单总是显示为那个高度\n   */\n  * html .ui-autocomplete {\n    height: 100px;\n  }\n\n/*2016-12-1 add*/\n.ke-icon {display:inline-block;width:25px;height:25px;background-image: url(\"../images/icon.png\");background-repeat: no-repeat;background-size:96px 48px;}\n\n.ke-icon.upicon {background-position: 0 0;}\n.ke-icon.downicon {background-position: -25px 0;}\n.ke-icon.deleteicon {background-position: -50px 0;}\n.ke-icon.copyicon {background-position: -75px 0;}\na:hover .ke-icon.upicon {background-position: 0 -25px;}\na:hover .ke-icon.downicon {background-position: -25px -25px;}\na:hover .ke-icon.deleteicon {background-position: -50px -25px;}\na:hover .ke-icon.copyicon {background-position: -75px -25px;}\n\n\n\na.ke-ablock  {display:inline-block;width:25px;height:25px;line-height: 25px; cursor: pointer}\n.glyphicon-play-circle:before{\n    color: #00B83F;\n}\n.glyphicon-edit:before{\n    color: #0AA5DF;\n}\n.glyphicon-trash:before{\n    color: red;\n}\n.glyphicon-eye-open:before{\n    color: #0AA5DF;\n}\n.glyphicon-eye-close:before{\n    color: #ec971f;\n}\n.ac-margint10  {margin-top:10px;}\n.ac-paddingt0  {padding-top:0px !important;}\n.ac-margin110  {margin-left:10px;}\n\n.status_200 {background-color: #5cb85c}\n.status_201 {background-color: #5cb85c}\n.status_202 {background-color: #5cb85c}\n.status_203 {background-color: #5cb85c}\n.status_304 {background-color: #5bc0de}\n.status_400 {background-color: #d9534f}\n.status_401 {background-color: #d9534f}\n.status_402 {background-color: #d9534f}\n.status_403 {background-color: #d9534f}\n.status_404 {background-color: #d9534f}\n.status_500 {background-color: #d9534f}\n.status_501 {background-color: #d9534f}\n"
  },
  {
    "path": "automatic/static/css/bootstrap-theme.css",
    "content": "/*!\n * Bootstrap v3.3.5 (http://getbootstrap.com)\n * Copyright 2011-2015 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n  text-shadow: 0 -1px 0 rgba(0, 0, 0, .2);\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);\n}\n.btn-default:active,\n.btn-primary:active,\n.btn-success:active,\n.btn-info:active,\n.btn-warning:active,\n.btn-danger:active,\n.btn-default.active,\n.btn-primary.active,\n.btn-success.active,\n.btn-info.active,\n.btn-warning.active,\n.btn-danger.active {\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n          box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n}\n.btn-default.disabled,\n.btn-primary.disabled,\n.btn-success.disabled,\n.btn-info.disabled,\n.btn-warning.disabled,\n.btn-danger.disabled,\n.btn-default[disabled],\n.btn-primary[disabled],\n.btn-success[disabled],\n.btn-info[disabled],\n.btn-warning[disabled],\n.btn-danger[disabled],\nfieldset[disabled] .btn-default,\nfieldset[disabled] .btn-primary,\nfieldset[disabled] .btn-success,\nfieldset[disabled] .btn-info,\nfieldset[disabled] .btn-warning,\nfieldset[disabled] .btn-danger {\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.btn-default .badge,\n.btn-primary .badge,\n.btn-success .badge,\n.btn-info .badge,\n.btn-warning .badge,\n.btn-danger .badge {\n  text-shadow: none;\n}\n.btn:active,\n.btn.active {\n  background-image: none;\n}\n.btn-default {\n  text-shadow: 0 1px 0 #fff;\n  background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%);\n  background-image:      -o-linear-gradient(top, #fff 0%, #e0e0e0 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0));\n  background-image:         linear-gradient(to bottom, #fff 0%, #e0e0e0 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #dbdbdb;\n  border-color: #ccc;\n}\n.btn-default:hover,\n.btn-default:focus {\n  background-color: #e0e0e0;\n  background-position: 0 -15px;\n}\n.btn-default:active,\n.btn-default.active {\n  background-color: #e0e0e0;\n  border-color: #dbdbdb;\n}\n.btn-default.disabled,\n.btn-default[disabled],\nfieldset[disabled] .btn-default,\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled.focus,\n.btn-default[disabled].focus,\nfieldset[disabled] .btn-default.focus,\n.btn-default.disabled:active,\n.btn-default[disabled]:active,\nfieldset[disabled] .btn-default:active,\n.btn-default.disabled.active,\n.btn-default[disabled].active,\nfieldset[disabled] .btn-default.active {\n  background-color: #e0e0e0;\n  background-image: none;\n}\n.btn-primary {\n  background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%);\n  background-image:      -o-linear-gradient(top, #337ab7 0%, #265a88 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#265a88));\n  background-image:         linear-gradient(to bottom, #337ab7 0%, #265a88 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #245580;\n}\n.btn-primary:hover,\n.btn-primary:focus {\n  background-color: #265a88;\n  background-position: 0 -15px;\n}\n.btn-primary:active,\n.btn-primary.active {\n  background-color: #265a88;\n  border-color: #245580;\n}\n.btn-primary.disabled,\n.btn-primary[disabled],\nfieldset[disabled] .btn-primary,\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled.focus,\n.btn-primary[disabled].focus,\nfieldset[disabled] .btn-primary.focus,\n.btn-primary.disabled:active,\n.btn-primary[disabled]:active,\nfieldset[disabled] .btn-primary:active,\n.btn-primary.disabled.active,\n.btn-primary[disabled].active,\nfieldset[disabled] .btn-primary.active {\n  background-color: #265a88;\n  background-image: none;\n}\n.btn-success {\n  background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);\n  background-image:      -o-linear-gradient(top, #5cb85c 0%, #419641 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641));\n  background-image:         linear-gradient(to bottom, #5cb85c 0%, #419641 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #3e8f3e;\n}\n.btn-success:hover,\n.btn-success:focus {\n  background-color: #419641;\n  background-position: 0 -15px;\n}\n.btn-success:active,\n.btn-success.active {\n  background-color: #419641;\n  border-color: #3e8f3e;\n}\n.btn-success.disabled,\n.btn-success[disabled],\nfieldset[disabled] .btn-success,\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled.focus,\n.btn-success[disabled].focus,\nfieldset[disabled] .btn-success.focus,\n.btn-success.disabled:active,\n.btn-success[disabled]:active,\nfieldset[disabled] .btn-success:active,\n.btn-success.disabled.active,\n.btn-success[disabled].active,\nfieldset[disabled] .btn-success.active {\n  background-color: #419641;\n  background-image: none;\n}\n.btn-info {\n  background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n  background-image:      -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2));\n  background-image:         linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #28a4c9;\n}\n.btn-info:hover,\n.btn-info:focus {\n  background-color: #2aabd2;\n  background-position: 0 -15px;\n}\n.btn-info:active,\n.btn-info.active {\n  background-color: #2aabd2;\n  border-color: #28a4c9;\n}\n.btn-info.disabled,\n.btn-info[disabled],\nfieldset[disabled] .btn-info,\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled.focus,\n.btn-info[disabled].focus,\nfieldset[disabled] .btn-info.focus,\n.btn-info.disabled:active,\n.btn-info[disabled]:active,\nfieldset[disabled] .btn-info:active,\n.btn-info.disabled.active,\n.btn-info[disabled].active,\nfieldset[disabled] .btn-info.active {\n  background-color: #2aabd2;\n  background-image: none;\n}\n.btn-warning {\n  background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n  background-image:      -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316));\n  background-image:         linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #e38d13;\n}\n.btn-warning:hover,\n.btn-warning:focus {\n  background-color: #eb9316;\n  background-position: 0 -15px;\n}\n.btn-warning:active,\n.btn-warning.active {\n  background-color: #eb9316;\n  border-color: #e38d13;\n}\n.btn-warning.disabled,\n.btn-warning[disabled],\nfieldset[disabled] .btn-warning,\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled.focus,\n.btn-warning[disabled].focus,\nfieldset[disabled] .btn-warning.focus,\n.btn-warning.disabled:active,\n.btn-warning[disabled]:active,\nfieldset[disabled] .btn-warning:active,\n.btn-warning.disabled.active,\n.btn-warning[disabled].active,\nfieldset[disabled] .btn-warning.active {\n  background-color: #eb9316;\n  background-image: none;\n}\n.btn-danger {\n  background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n  background-image:      -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a));\n  background-image:         linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #b92c28;\n}\n.btn-danger:hover,\n.btn-danger:focus {\n  background-color: #c12e2a;\n  background-position: 0 -15px;\n}\n.btn-danger:active,\n.btn-danger.active {\n  background-color: #c12e2a;\n  border-color: #b92c28;\n}\n.btn-danger.disabled,\n.btn-danger[disabled],\nfieldset[disabled] .btn-danger,\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled.focus,\n.btn-danger[disabled].focus,\nfieldset[disabled] .btn-danger.focus,\n.btn-danger.disabled:active,\n.btn-danger[disabled]:active,\nfieldset[disabled] .btn-danger:active,\n.btn-danger.disabled.active,\n.btn-danger[disabled].active,\nfieldset[disabled] .btn-danger.active {\n  background-color: #c12e2a;\n  background-image: none;\n}\n.thumbnail,\n.img-thumbnail {\n  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);\n          box-shadow: 0 1px 2px rgba(0, 0, 0, .075);\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n  background-color: #e8e8e8;\n  background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n  background-image:      -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));\n  background-image:         linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n  background-repeat: repeat-x;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n  background-color: #2e6da4;\n  background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n  background-image:      -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));\n  background-image:         linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n  background-repeat: repeat-x;\n}\n.navbar-default {\n  background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%);\n  background-image:      -o-linear-gradient(top, #fff 0%, #f8f8f8 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f8f8f8));\n  background-image:         linear-gradient(to bottom, #fff 0%, #f8f8f8 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .active > a {\n  background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n  background-image:      -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#dbdbdb), to(#e2e2e2));\n  background-image:         linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);\n  background-repeat: repeat-x;\n  -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);\n}\n.navbar-brand,\n.navbar-nav > li > a {\n  text-shadow: 0 1px 0 rgba(255, 255, 255, .25);\n}\n.navbar-inverse {\n  background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%);\n  background-image:      -o-linear-gradient(top, #3c3c3c 0%, #222 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222));\n  background-image:         linear-gradient(to bottom, #3c3c3c 0%, #222 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-radius: 4px;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .active > a {\n  background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n  background-image:      -o-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#080808), to(#0f0f0f));\n  background-image:         linear-gradient(to bottom, #080808 0%, #0f0f0f 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);\n  background-repeat: repeat-x;\n  -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);\n          box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);\n}\n.navbar-inverse .navbar-brand,\n.navbar-inverse .navbar-nav > li > a {\n  text-shadow: 0 -1px 0 rgba(0, 0, 0, .25);\n}\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  border-radius: 0;\n}\n@media (max-width: 767px) {\n  .navbar .navbar-nav .open .dropdown-menu > .active > a,\n  .navbar .navbar-nav .open .dropdown-menu > .active > a:hover,\n  .navbar .navbar-nav .open .dropdown-menu > .active > a:focus {\n    color: #fff;\n    background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n    background-image:      -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n    background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));\n    background-image:         linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n    background-repeat: repeat-x;\n  }\n}\n.alert {\n  text-shadow: 0 1px 0 rgba(255, 255, 255, .2);\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);\n          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);\n}\n.alert-success {\n  background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n  background-image:      -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc));\n  background-image:         linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #b2dba1;\n}\n.alert-info {\n  background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n  background-image:      -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0));\n  background-image:         linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #9acfea;\n}\n.alert-warning {\n  background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n  background-image:      -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0));\n  background-image:         linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #f5e79e;\n}\n.alert-danger {\n  background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n  background-image:      -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3));\n  background-image:         linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #dca7a7;\n}\n.progress {\n  background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n  background-image:      -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5));\n  background-image:         linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar {\n  background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%);\n  background-image:      -o-linear-gradient(top, #337ab7 0%, #286090 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#286090));\n  background-image:         linear-gradient(to bottom, #337ab7 0%, #286090 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar-success {\n  background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n  background-image:      -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44));\n  background-image:         linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar-info {\n  background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n  background-image:      -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5));\n  background-image:         linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar-warning {\n  background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n  background-image:      -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f));\n  background-image:         linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar-danger {\n  background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n  background-image:      -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c));\n  background-image:         linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar-striped {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.list-group {\n  border-radius: 4px;\n  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);\n          box-shadow: 0 1px 2px rgba(0, 0, 0, .075);\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n  text-shadow: 0 -1px 0 #286090;\n  background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n  background-image:      -o-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2b669a));\n  background-image:         linear-gradient(to bottom, #337ab7 0%, #2b669a 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #2b669a;\n}\n.list-group-item.active .badge,\n.list-group-item.active:hover .badge,\n.list-group-item.active:focus .badge {\n  text-shadow: none;\n}\n.panel {\n  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05);\n          box-shadow: 0 1px 2px rgba(0, 0, 0, .05);\n}\n.panel-default > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n  background-image:      -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));\n  background-image:         linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n  background-repeat: repeat-x;\n}\n.panel-primary > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n  background-image:      -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));\n  background-image:         linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n  background-repeat: repeat-x;\n}\n.panel-success > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n  background-image:      -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6));\n  background-image:         linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);\n  background-repeat: repeat-x;\n}\n.panel-info > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n  background-image:      -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3));\n  background-image:         linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);\n  background-repeat: repeat-x;\n}\n.panel-warning > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n  background-image:      -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc));\n  background-image:         linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);\n  background-repeat: repeat-x;\n}\n.panel-danger > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n  background-image:      -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc));\n  background-image:         linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);\n  background-repeat: repeat-x;\n}\n.well {\n  background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n  background-image:      -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5));\n  background-image:         linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #dcdcdc;\n  -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);\n          box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);\n}\n/*# sourceMappingURL=bootstrap-theme.css.map */\n"
  },
  {
    "path": "automatic/static/css/bootstrap.css",
    "content": "/*!\n * Bootstrap v3.3.5 (http://getbootstrap.com)\n * Copyright 2011-2015 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */\nhtml {\n  font-family: sans-serif;\n  -webkit-text-size-adjust: 100%;\n      -ms-text-size-adjust: 100%;\n}\nbody {\n  margin: 0;\n}\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n  display: block;\n}\naudio,\ncanvas,\nprogress,\nvideo {\n  display: inline-block;\n  vertical-align: baseline;\n}\naudio:not([controls]) {\n  display: none;\n  height: 0;\n}\n[hidden],\ntemplate {\n  display: none;\n}\na {\n  background-color: transparent;\n}\na:active,\na:hover {\n  outline: 0;\n}\nabbr[title] {\n  border-bottom: 1px dotted;\n}\nb,\nstrong {\n  font-weight: bold;\n}\ndfn {\n  font-style: italic;\n}\nh1 {\n  margin: .67em 0;\n  font-size: 2em;\n}\nmark {\n  color: #000;\n  background: #ff0;\n}\nsmall {\n  font-size: 80%;\n}\nsub,\nsup {\n  position: relative;\n  font-size: 75%;\n  line-height: 0;\n  vertical-align: baseline;\n}\nsup {\n  top: -.5em;\n}\nsub {\n  bottom: -.25em;\n}\nimg {\n  border: 0;\n}\nsvg:not(:root) {\n  overflow: hidden;\n}\nfigure {\n  margin: 1em 40px;\n}\nhr {\n  height: 0;\n  -webkit-box-sizing: content-box;\n     -moz-box-sizing: content-box;\n          box-sizing: content-box;\n}\npre {\n  overflow: auto;\n}\ncode,\nkbd,\npre,\nsamp {\n  font-family: monospace, monospace;\n  font-size: 1em;\n}\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n  margin: 0;\n  font: inherit;\n  color: inherit;\n}\nbutton {\n  overflow: visible;\n}\nbutton,\nselect {\n  text-transform: none;\n}\nbutton,\nhtml input[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n  -webkit-appearance: button;\n  cursor: pointer;\n}\nbutton[disabled],\nhtml input[disabled] {\n  cursor: default;\n}\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n  padding: 0;\n  border: 0;\n}\ninput {\n  line-height: normal;\n}\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n  padding: 0;\n}\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n  height: auto;\n}\ninput[type=\"search\"] {\n  -webkit-box-sizing: content-box;\n     -moz-box-sizing: content-box;\n          box-sizing: content-box;\n  -webkit-appearance: textfield;\n}\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\nfieldset {\n  padding: .35em .625em .75em;\n  margin: 0 2px;\n  border: 1px solid #c0c0c0;\n}\nlegend {\n  padding: 0;\n  border: 0;\n}\ntextarea {\n  overflow: auto;\n}\noptgroup {\n  font-weight: bold;\n}\ntable {\n  border-spacing: 0;\n  border-collapse: collapse;\n}\ntd,\nth {\n  padding: 0;\n}\n/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n@media print {\n  *,\n  *:before,\n  *:after {\n    color: #000 !important;\n    text-shadow: none !important;\n    background: transparent !important;\n    -webkit-box-shadow: none !important;\n            box-shadow: none !important;\n  }\n  a,\n  a:visited {\n    text-decoration: underline;\n  }\n  a[href]:after {\n    content: \" (\" attr(href) \")\";\n  }\n  abbr[title]:after {\n    content: \" (\" attr(title) \")\";\n  }\n  a[href^=\"#\"]:after,\n  a[href^=\"javascript:\"]:after {\n    content: \"\";\n  }\n  pre,\n  blockquote {\n    border: 1px solid #999;\n\n    page-break-inside: avoid;\n  }\n  thead {\n    display: table-header-group;\n  }\n  tr,\n  img {\n    page-break-inside: avoid;\n  }\n  img {\n    max-width: 100% !important;\n  }\n  p,\n  h2,\n  h3 {\n    orphans: 3;\n    widows: 3;\n  }\n  h2,\n  h3 {\n    page-break-after: avoid;\n  }\n  .navbar {\n    display: none;\n  }\n  .btn > .caret,\n  .dropup > .btn > .caret {\n    border-top-color: #000 !important;\n  }\n  .label {\n    border: 1px solid #000;\n  }\n  .table {\n    border-collapse: collapse !important;\n  }\n  .table td,\n  .table th {\n    background-color: #fff !important;\n  }\n  .table-bordered th,\n  .table-bordered td {\n    border: 1px solid #ddd !important;\n  }\n}\n@font-face {\n  font-family: 'Glyphicons Halflings';\n\n  src: url('../fonts/glyphicons-halflings-regular.eot');\n  src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');\n}\n.glyphicon {\n  position: relative;\n  top: 1px;\n  display: inline-block;\n  font-family: 'Glyphicons Halflings';\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1;\n\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n.glyphicon-asterisk:before {\n  content: \"\\2a\";\n}\n.glyphicon-plus:before {\n  content: \"\\2b\";\n}\n.glyphicon-euro:before,\n.glyphicon-eur:before {\n  content: \"\\20ac\";\n}\n.glyphicon-minus:before {\n  content: \"\\2212\";\n}\n.glyphicon-cloud:before {\n  content: \"\\2601\";\n}\n.glyphicon-envelope:before {\n  content: \"\\2709\";\n}\n.glyphicon-pencil:before {\n  content: \"\\270f\";\n}\n.glyphicon-glass:before {\n  content: \"\\e001\";\n}\n.glyphicon-music:before {\n  content: \"\\e002\";\n}\n.glyphicon-search:before {\n  content: \"\\e003\";\n}\n.glyphicon-heart:before {\n  content: \"\\e005\";\n}\n.glyphicon-star:before {\n  content: \"\\e006\";\n}\n.glyphicon-star-empty:before {\n  content: \"\\e007\";\n}\n.glyphicon-user:before {\n  content: \"\\e008\";\n}\n.glyphicon-film:before {\n  content: \"\\e009\";\n}\n.glyphicon-th-large:before {\n  content: \"\\e010\";\n}\n.glyphicon-th:before {\n  content: \"\\e011\";\n}\n.glyphicon-th-list:before {\n  content: \"\\e012\";\n}\n.glyphicon-ok:before {\n  content: \"\\e013\";\n}\n.glyphicon-remove:before {\n  content: \"\\e014\";\n}\n.glyphicon-zoom-in:before {\n  content: \"\\e015\";\n}\n.glyphicon-zoom-out:before {\n  content: \"\\e016\";\n}\n.glyphicon-off:before {\n  content: \"\\e017\";\n}\n.glyphicon-signal:before {\n  content: \"\\e018\";\n}\n.glyphicon-cog:before {\n  content: \"\\e019\";\n}\n.glyphicon-trash:before {\n  content: \"\\e020\";\n}\n.glyphicon-home:before {\n  content: \"\\e021\";\n}\n.glyphicon-file:before {\n  content: \"\\e022\";\n}\n.glyphicon-time:before {\n  content: \"\\e023\";\n}\n.glyphicon-road:before {\n  content: \"\\e024\";\n}\n.glyphicon-download-alt:before {\n  content: \"\\e025\";\n}\n.glyphicon-download:before {\n  content: \"\\e026\";\n}\n.glyphicon-upload:before {\n  content: \"\\e027\";\n}\n.glyphicon-inbox:before {\n  content: \"\\e028\";\n}\n.glyphicon-play-circle:before {\n  content: \"\\e029\";\n}\n.glyphicon-repeat:before {\n  content: \"\\e030\";\n}\n.glyphicon-refresh:before {\n  content: \"\\e031\";\n}\n.glyphicon-list-alt:before {\n  content: \"\\e032\";\n}\n.glyphicon-lock:before {\n  content: \"\\e033\";\n}\n.glyphicon-flag:before {\n  content: \"\\e034\";\n}\n.glyphicon-headphones:before {\n  content: \"\\e035\";\n}\n.glyphicon-volume-off:before {\n  content: \"\\e036\";\n}\n.glyphicon-volume-down:before {\n  content: \"\\e037\";\n}\n.glyphicon-volume-up:before {\n  content: \"\\e038\";\n}\n.glyphicon-qrcode:before {\n  content: \"\\e039\";\n}\n.glyphicon-barcode:before {\n  content: \"\\e040\";\n}\n.glyphicon-tag:before {\n  content: \"\\e041\";\n}\n.glyphicon-tags:before {\n  content: \"\\e042\";\n}\n.glyphicon-book:before {\n  content: \"\\e043\";\n}\n.glyphicon-bookmark:before {\n  content: \"\\e044\";\n}\n.glyphicon-print:before {\n  content: \"\\e045\";\n}\n.glyphicon-camera:before {\n  content: \"\\e046\";\n}\n.glyphicon-font:before {\n  content: \"\\e047\";\n}\n.glyphicon-bold:before {\n  content: \"\\e048\";\n}\n.glyphicon-italic:before {\n  content: \"\\e049\";\n}\n.glyphicon-text-height:before {\n  content: \"\\e050\";\n}\n.glyphicon-text-width:before {\n  content: \"\\e051\";\n}\n.glyphicon-align-left:before {\n  content: \"\\e052\";\n}\n.glyphicon-align-center:before {\n  content: \"\\e053\";\n}\n.glyphicon-align-right:before {\n  content: \"\\e054\";\n}\n.glyphicon-align-justify:before {\n  content: \"\\e055\";\n}\n.glyphicon-list:before {\n  content: \"\\e056\";\n}\n.glyphicon-indent-left:before {\n  content: \"\\e057\";\n}\n.glyphicon-indent-right:before {\n  content: \"\\e058\";\n}\n.glyphicon-facetime-video:before {\n  content: \"\\e059\";\n}\n.glyphicon-picture:before {\n  content: \"\\e060\";\n}\n.glyphicon-map-marker:before {\n  content: \"\\e062\";\n}\n.glyphicon-adjust:before {\n  content: \"\\e063\";\n}\n.glyphicon-tint:before {\n  content: \"\\e064\";\n}\n.glyphicon-edit:before {\n  content: \"\\e065\";\n}\n.glyphicon-share:before {\n  content: \"\\e066\";\n}\n.glyphicon-check:before {\n  content: \"\\e067\";\n}\n.glyphicon-move:before {\n  content: \"\\e068\";\n}\n.glyphicon-step-backward:before {\n  content: \"\\e069\";\n}\n.glyphicon-fast-backward:before {\n  content: \"\\e070\";\n}\n.glyphicon-backward:before {\n  content: \"\\e071\";\n}\n.glyphicon-play:before {\n  content: \"\\e072\";\n}\n.glyphicon-pause:before {\n  content: \"\\e073\";\n}\n.glyphicon-stop:before {\n  content: \"\\e074\";\n}\n.glyphicon-forward:before {\n  content: \"\\e075\";\n}\n.glyphicon-fast-forward:before {\n  content: \"\\e076\";\n}\n.glyphicon-step-forward:before {\n  content: \"\\e077\";\n}\n.glyphicon-eject:before {\n  content: \"\\e078\";\n}\n.glyphicon-chevron-left:before {\n  content: \"\\e079\";\n}\n.glyphicon-chevron-right:before {\n  content: \"\\e080\";\n}\n.glyphicon-plus-sign:before {\n  content: \"\\e081\";\n}\n.glyphicon-minus-sign:before {\n  content: \"\\e082\";\n}\n.glyphicon-remove-sign:before {\n  content: \"\\e083\";\n}\n.glyphicon-ok-sign:before {\n  content: \"\\e084\";\n}\n.glyphicon-question-sign:before {\n  content: \"\\e085\";\n}\n.glyphicon-info-sign:before {\n  content: \"\\e086\";\n}\n.glyphicon-screenshot:before {\n  content: \"\\e087\";\n}\n.glyphicon-remove-circle:before {\n  content: \"\\e088\";\n}\n.glyphicon-ok-circle:before {\n  content: \"\\e089\";\n}\n.glyphicon-ban-circle:before {\n  content: \"\\e090\";\n}\n.glyphicon-arrow-left:before {\n  content: \"\\e091\";\n}\n.glyphicon-arrow-right:before {\n  content: \"\\e092\";\n}\n.glyphicon-arrow-up:before {\n  content: \"\\e093\";\n}\n.glyphicon-arrow-down:before {\n  content: \"\\e094\";\n}\n.glyphicon-share-alt:before {\n  content: \"\\e095\";\n}\n.glyphicon-resize-full:before {\n  content: \"\\e096\";\n}\n.glyphicon-resize-small:before {\n  content: \"\\e097\";\n}\n.glyphicon-exclamation-sign:before {\n  content: \"\\e101\";\n}\n.glyphicon-gift:before {\n  content: \"\\e102\";\n}\n.glyphicon-leaf:before {\n  content: \"\\e103\";\n}\n.glyphicon-fire:before {\n  content: \"\\e104\";\n}\n.glyphicon-eye-open:before {\n  content: \"\\e105\";\n}\n.glyphicon-eye-close:before {\n  content: \"\\e106\";\n}\n.glyphicon-warning-sign:before {\n  content: \"\\e107\";\n}\n.glyphicon-plane:before {\n  content: \"\\e108\";\n}\n.glyphicon-calendar:before {\n  content: \"\\e109\";\n}\n.glyphicon-random:before {\n  content: \"\\e110\";\n}\n.glyphicon-comment:before {\n  content: \"\\e111\";\n}\n.glyphicon-magnet:before {\n  content: \"\\e112\";\n}\n.glyphicon-chevron-up:before {\n  content: \"\\e113\";\n}\n.glyphicon-chevron-down:before {\n  content: \"\\e114\";\n}\n.glyphicon-retweet:before {\n  content: \"\\e115\";\n}\n.glyphicon-shopping-cart:before {\n  content: \"\\e116\";\n}\n.glyphicon-folder-close:before {\n  content: \"\\e117\";\n}\n.glyphicon-folder-open:before {\n  content: \"\\e118\";\n}\n.glyphicon-resize-vertical:before {\n  content: \"\\e119\";\n}\n.glyphicon-resize-horizontal:before {\n  content: \"\\e120\";\n}\n.glyphicon-hdd:before {\n  content: \"\\e121\";\n}\n.glyphicon-bullhorn:before {\n  content: \"\\e122\";\n}\n.glyphicon-bell:before {\n  content: \"\\e123\";\n}\n.glyphicon-certificate:before {\n  content: \"\\e124\";\n}\n.glyphicon-thumbs-up:before {\n  content: \"\\e125\";\n}\n.glyphicon-thumbs-down:before {\n  content: \"\\e126\";\n}\n.glyphicon-hand-right:before {\n  content: \"\\e127\";\n}\n.glyphicon-hand-left:before {\n  content: \"\\e128\";\n}\n.glyphicon-hand-up:before {\n  content: \"\\e129\";\n}\n.glyphicon-hand-down:before {\n  content: \"\\e130\";\n}\n.glyphicon-circle-arrow-right:before {\n  content: \"\\e131\";\n}\n.glyphicon-circle-arrow-left:before {\n  content: \"\\e132\";\n}\n.glyphicon-circle-arrow-up:before {\n  content: \"\\e133\";\n}\n.glyphicon-circle-arrow-down:before {\n  content: \"\\e134\";\n}\n.glyphicon-globe:before {\n  content: \"\\e135\";\n}\n.glyphicon-wrench:before {\n  content: \"\\e136\";\n}\n.glyphicon-tasks:before {\n  content: \"\\e137\";\n}\n.glyphicon-filter:before {\n  content: \"\\e138\";\n}\n.glyphicon-briefcase:before {\n  content: \"\\e139\";\n}\n.glyphicon-fullscreen:before {\n  content: \"\\e140\";\n}\n.glyphicon-dashboard:before {\n  content: \"\\e141\";\n}\n.glyphicon-paperclip:before {\n  content: \"\\e142\";\n}\n.glyphicon-heart-empty:before {\n  content: \"\\e143\";\n}\n.glyphicon-link:before {\n  content: \"\\e144\";\n}\n.glyphicon-phone:before {\n  content: \"\\e145\";\n}\n.glyphicon-pushpin:before {\n  content: \"\\e146\";\n}\n.glyphicon-usd:before {\n  content: \"\\e148\";\n}\n.glyphicon-gbp:before {\n  content: \"\\e149\";\n}\n.glyphicon-sort:before {\n  content: \"\\e150\";\n}\n.glyphicon-sort-by-alphabet:before {\n  content: \"\\e151\";\n}\n.glyphicon-sort-by-alphabet-alt:before {\n  content: \"\\e152\";\n}\n.glyphicon-sort-by-order:before {\n  content: \"\\e153\";\n}\n.glyphicon-sort-by-order-alt:before {\n  content: \"\\e154\";\n}\n.glyphicon-sort-by-attributes:before {\n  content: \"\\e155\";\n}\n.glyphicon-sort-by-attributes-alt:before {\n  content: \"\\e156\";\n}\n.glyphicon-unchecked:before {\n  content: \"\\e157\";\n}\n.glyphicon-expand:before {\n  content: \"\\e158\";\n}\n.glyphicon-collapse-down:before {\n  content: \"\\e159\";\n}\n.glyphicon-collapse-up:before {\n  content: \"\\e160\";\n}\n.glyphicon-log-in:before {\n  content: \"\\e161\";\n}\n.glyphicon-flash:before {\n  content: \"\\e162\";\n}\n.glyphicon-log-out:before {\n  content: \"\\e163\";\n}\n.glyphicon-new-window:before {\n  content: \"\\e164\";\n}\n.glyphicon-record:before {\n  content: \"\\e165\";\n}\n.glyphicon-save:before {\n  content: \"\\e166\";\n}\n.glyphicon-open:before {\n  content: \"\\e167\";\n}\n.glyphicon-saved:before {\n  content: \"\\e168\";\n}\n.glyphicon-import:before {\n  content: \"\\e169\";\n}\n.glyphicon-export:before {\n  content: \"\\e170\";\n}\n.glyphicon-send:before {\n  content: \"\\e171\";\n}\n.glyphicon-floppy-disk:before {\n  content: \"\\e172\";\n}\n.glyphicon-floppy-saved:before {\n  content: \"\\e173\";\n}\n.glyphicon-floppy-remove:before {\n  content: \"\\e174\";\n}\n.glyphicon-floppy-save:before {\n  content: \"\\e175\";\n}\n.glyphicon-floppy-open:before {\n  content: \"\\e176\";\n}\n.glyphicon-credit-card:before {\n  content: \"\\e177\";\n}\n.glyphicon-transfer:before {\n  content: \"\\e178\";\n}\n.glyphicon-cutlery:before {\n  content: \"\\e179\";\n}\n.glyphicon-header:before {\n  content: \"\\e180\";\n}\n.glyphicon-compressed:before {\n  content: \"\\e181\";\n}\n.glyphicon-earphone:before {\n  content: \"\\e182\";\n}\n.glyphicon-phone-alt:before {\n  content: \"\\e183\";\n}\n.glyphicon-tower:before {\n  content: \"\\e184\";\n}\n.glyphicon-stats:before {\n  content: \"\\e185\";\n}\n.glyphicon-sd-video:before {\n  content: \"\\e186\";\n}\n.glyphicon-hd-video:before {\n  content: \"\\e187\";\n}\n.glyphicon-subtitles:before {\n  content: \"\\e188\";\n}\n.glyphicon-sound-stereo:before {\n  content: \"\\e189\";\n}\n.glyphicon-sound-dolby:before {\n  content: \"\\e190\";\n}\n.glyphicon-sound-5-1:before {\n  content: \"\\e191\";\n}\n.glyphicon-sound-6-1:before {\n  content: \"\\e192\";\n}\n.glyphicon-sound-7-1:before {\n  content: \"\\e193\";\n}\n.glyphicon-copyright-mark:before {\n  content: \"\\e194\";\n}\n.glyphicon-registration-mark:before {\n  content: \"\\e195\";\n}\n.glyphicon-cloud-download:before {\n  content: \"\\e197\";\n}\n.glyphicon-cloud-upload:before {\n  content: \"\\e198\";\n}\n.glyphicon-tree-conifer:before {\n  content: \"\\e199\";\n}\n.glyphicon-tree-deciduous:before {\n  content: \"\\e200\";\n}\n.glyphicon-cd:before {\n  content: \"\\e201\";\n}\n.glyphicon-save-file:before {\n  content: \"\\e202\";\n}\n.glyphicon-open-file:before {\n  content: \"\\e203\";\n}\n.glyphicon-level-up:before {\n  content: \"\\e204\";\n}\n.glyphicon-copy:before {\n  content: \"\\e205\";\n}\n.glyphicon-paste:before {\n  content: \"\\e206\";\n}\n.glyphicon-alert:before {\n  content: \"\\e209\";\n}\n.glyphicon-equalizer:before {\n  content: \"\\e210\";\n}\n.glyphicon-king:before {\n  content: \"\\e211\";\n}\n.glyphicon-queen:before {\n  content: \"\\e212\";\n}\n.glyphicon-pawn:before {\n  content: \"\\e213\";\n}\n.glyphicon-bishop:before {\n  content: \"\\e214\";\n}\n.glyphicon-knight:before {\n  content: \"\\e215\";\n}\n.glyphicon-baby-formula:before {\n  content: \"\\e216\";\n}\n.glyphicon-tent:before {\n  content: \"\\26fa\";\n}\n.glyphicon-blackboard:before {\n  content: \"\\e218\";\n}\n.glyphicon-bed:before {\n  content: \"\\e219\";\n}\n.glyphicon-apple:before {\n  content: \"\\f8ff\";\n}\n.glyphicon-erase:before {\n  content: \"\\e221\";\n}\n.glyphicon-hourglass:before {\n  content: \"\\231b\";\n}\n.glyphicon-lamp:before {\n  content: \"\\e223\";\n}\n.glyphicon-duplicate:before {\n  content: \"\\e224\";\n}\n.glyphicon-piggy-bank:before {\n  content: \"\\e225\";\n}\n.glyphicon-scissors:before {\n  content: \"\\e226\";\n}\n.glyphicon-bitcoin:before {\n  content: \"\\e227\";\n}\n.glyphicon-btc:before {\n  content: \"\\e227\";\n}\n.glyphicon-xbt:before {\n  content: \"\\e227\";\n}\n.glyphicon-yen:before {\n  content: \"\\00a5\";\n}\n.glyphicon-jpy:before {\n  content: \"\\00a5\";\n}\n.glyphicon-ruble:before {\n  content: \"\\20bd\";\n}\n.glyphicon-rub:before {\n  content: \"\\20bd\";\n}\n.glyphicon-scale:before {\n  content: \"\\e230\";\n}\n.glyphicon-ice-lolly:before {\n  content: \"\\e231\";\n}\n.glyphicon-ice-lolly-tasted:before {\n  content: \"\\e232\";\n}\n.glyphicon-education:before {\n  content: \"\\e233\";\n}\n.glyphicon-option-horizontal:before {\n  content: \"\\e234\";\n}\n.glyphicon-option-vertical:before {\n  content: \"\\e235\";\n}\n.glyphicon-menu-hamburger:before {\n  content: \"\\e236\";\n}\n.glyphicon-modal-window:before {\n  content: \"\\e237\";\n}\n.glyphicon-oil:before {\n  content: \"\\e238\";\n}\n.glyphicon-grain:before {\n  content: \"\\e239\";\n}\n.glyphicon-sunglasses:before {\n  content: \"\\e240\";\n}\n.glyphicon-text-size:before {\n  content: \"\\e241\";\n}\n.glyphicon-text-color:before {\n  content: \"\\e242\";\n}\n.glyphicon-text-background:before {\n  content: \"\\e243\";\n}\n.glyphicon-object-align-top:before {\n  content: \"\\e244\";\n}\n.glyphicon-object-align-bottom:before {\n  content: \"\\e245\";\n}\n.glyphicon-object-align-horizontal:before {\n  content: \"\\e246\";\n}\n.glyphicon-object-align-left:before {\n  content: \"\\e247\";\n}\n.glyphicon-object-align-vertical:before {\n  content: \"\\e248\";\n}\n.glyphicon-object-align-right:before {\n  content: \"\\e249\";\n}\n.glyphicon-triangle-right:before {\n  content: \"\\e250\";\n}\n.glyphicon-triangle-left:before {\n  content: \"\\e251\";\n}\n.glyphicon-triangle-bottom:before {\n  content: \"\\e252\";\n}\n.glyphicon-triangle-top:before {\n  content: \"\\e253\";\n}\n.glyphicon-console:before {\n  content: \"\\e254\";\n}\n.glyphicon-superscript:before {\n  content: \"\\e255\";\n}\n.glyphicon-subscript:before {\n  content: \"\\e256\";\n}\n.glyphicon-menu-left:before {\n  content: \"\\e257\";\n}\n.glyphicon-menu-right:before {\n  content: \"\\e258\";\n}\n.glyphicon-menu-down:before {\n  content: \"\\e259\";\n}\n.glyphicon-menu-up:before {\n  content: \"\\e260\";\n}\n* {\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n}\n*:before,\n*:after {\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n}\nhtml {\n  font-size: 10px;\n\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\nbody {\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-size: 14px;\n  line-height: 1.42857143;\n  color: #333;\n  background-color: #fff;\n}\ninput,\nbutton,\nselect,\ntextarea {\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n}\na {\n  color: #337ab7;\n  text-decoration: none;\n}\na:hover,\na:focus {\n  color: #23527c;\n  text-decoration: underline;\n}\na:focus {\n  outline: thin dotted;\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\nfigure {\n  margin: 0;\n}\nimg {\n  vertical-align: middle;\n}\n.img-responsive,\n.thumbnail > img,\n.thumbnail a > img,\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n  display: block;\n  max-width: 100%;\n  height: auto;\n}\n.img-rounded {\n  border-radius: 6px;\n}\n.img-thumbnail {\n  display: inline-block;\n  max-width: 100%;\n  height: auto;\n  padding: 4px;\n  line-height: 1.42857143;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-radius: 4px;\n  -webkit-transition: all .2s ease-in-out;\n       -o-transition: all .2s ease-in-out;\n          transition: all .2s ease-in-out;\n}\n.img-circle {\n  border-radius: 50%;\n}\nhr {\n  margin-top: 20px;\n  margin-bottom: 20px;\n  border: 0;\n  border-top: 1px solid #eee;\n}\n.sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  border: 0;\n}\n.sr-only-focusable:active,\n.sr-only-focusable:focus {\n  position: static;\n  width: auto;\n  height: auto;\n  margin: 0;\n  overflow: visible;\n  clip: auto;\n}\n[role=\"button\"] {\n  cursor: pointer;\n}\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n.h1,\n.h2,\n.h3,\n.h4,\n.h5,\n.h6 {\n  font-family: inherit;\n  font-weight: 500;\n  line-height: 1.1;\n  color: inherit;\n}\nh1 small,\nh2 small,\nh3 small,\nh4 small,\nh5 small,\nh6 small,\n.h1 small,\n.h2 small,\n.h3 small,\n.h4 small,\n.h5 small,\n.h6 small,\nh1 .small,\nh2 .small,\nh3 .small,\nh4 .small,\nh5 .small,\nh6 .small,\n.h1 .small,\n.h2 .small,\n.h3 .small,\n.h4 .small,\n.h5 .small,\n.h6 .small {\n  font-weight: normal;\n  line-height: 1;\n  color: #777;\n}\nh1,\n.h1,\nh2,\n.h2,\nh3,\n.h3 {\n  margin-top: 20px;\n  margin-bottom: 10px;\n}\nh1 small,\n.h1 small,\nh2 small,\n.h2 small,\nh3 small,\n.h3 small,\nh1 .small,\n.h1 .small,\nh2 .small,\n.h2 .small,\nh3 .small,\n.h3 .small {\n  font-size: 65%;\n}\nh4,\n.h4,\nh5,\n.h5,\nh6,\n.h6 {\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\nh4 small,\n.h4 small,\nh5 small,\n.h5 small,\nh6 small,\n.h6 small,\nh4 .small,\n.h4 .small,\nh5 .small,\n.h5 .small,\nh6 .small,\n.h6 .small {\n  font-size: 75%;\n}\nh1,\n.h1 {\n  font-size: 36px;\n}\nh2,\n.h2 {\n  font-size: 30px;\n}\nh3,\n.h3 {\n  font-size: 24px;\n}\nh4,\n.h4 {\n  font-size: 18px;\n}\nh5,\n.h5 {\n  font-size: 14px;\n}\nh6,\n.h6 {\n  font-size: 12px;\n}\np {\n  margin: 0 0 10px;\n}\n.lead {\n  margin-bottom: 20px;\n  font-size: 16px;\n  font-weight: 300;\n  line-height: 1.4;\n}\n@media (min-width: 768px) {\n  .lead {\n    font-size: 21px;\n  }\n}\nsmall,\n.small {\n  font-size: 85%;\n}\nmark,\n.mark {\n  padding: .2em;\n  background-color: #fcf8e3;\n}\n.text-left {\n  text-align: left;\n}\n.text-right {\n  text-align: right;\n}\n.text-center {\n  text-align: center;\n}\n.text-justify {\n  text-align: justify;\n}\n.text-nowrap {\n  white-space: nowrap;\n}\n.text-lowercase {\n  text-transform: lowercase;\n}\n.text-uppercase {\n  text-transform: uppercase;\n}\n.text-capitalize {\n  text-transform: capitalize;\n}\n.text-muted {\n  color: #777;\n}\n.text-primary {\n  color: #337ab7;\n}\na.text-primary:hover,\na.text-primary:focus {\n  color: #286090;\n}\n.text-success {\n  color: #3c763d;\n}\na.text-success:hover,\na.text-success:focus {\n  color: #2b542c;\n}\n.text-info {\n  color: #31708f;\n}\na.text-info:hover,\na.text-info:focus {\n  color: #245269;\n}\n.text-warning {\n  color: #8a6d3b;\n}\na.text-warning:hover,\na.text-warning:focus {\n  color: #66512c;\n}\n.text-danger {\n  color: #a94442;\n}\na.text-danger:hover,\na.text-danger:focus {\n  color: #843534;\n}\n.bg-primary {\n  color: #fff;\n  background-color: #337ab7;\n}\na.bg-primary:hover,\na.bg-primary:focus {\n  background-color: #286090;\n}\n.bg-success {\n  background-color: #dff0d8;\n}\na.bg-success:hover,\na.bg-success:focus {\n  background-color: #c1e2b3;\n}\n.bg-info {\n  background-color: #d9edf7;\n}\na.bg-info:hover,\na.bg-info:focus {\n  background-color: #afd9ee;\n}\n.bg-warning {\n  background-color: #fcf8e3;\n}\na.bg-warning:hover,\na.bg-warning:focus {\n  background-color: #f7ecb5;\n}\n.bg-danger {\n  background-color: #f2dede;\n}\na.bg-danger:hover,\na.bg-danger:focus {\n  background-color: #e4b9b9;\n}\n.page-header {\n  padding-bottom: 9px;\n  margin: 40px 0 20px;\n  border-bottom: 1px solid #eee;\n}\nul,\nol {\n  margin-top: 0;\n  margin-bottom: 10px;\n}\nul ul,\nol ul,\nul ol,\nol ol {\n  margin-bottom: 0;\n}\n.list-unstyled {\n  padding-left: 0;\n  list-style: none;\n}\n.list-inline {\n  padding-left: 0;\n  margin-left: -5px;\n  list-style: none;\n}\n.list-inline > li {\n  display: inline-block;\n  padding-right: 5px;\n  padding-left: 5px;\n}\ndl {\n  margin-top: 0;\n  margin-bottom: 20px;\n}\ndt,\ndd {\n  line-height: 1.42857143;\n}\ndt {\n  font-weight: bold;\n}\ndd {\n  margin-left: 0;\n}\n@media (min-width: 768px) {\n  .dl-horizontal dt {\n    float: left;\n    width: 160px;\n    overflow: hidden;\n    clear: left;\n    text-align: right;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n  }\n  .dl-horizontal dd {\n    margin-left: 180px;\n  }\n}\nabbr[title],\nabbr[data-original-title] {\n  cursor: help;\n  border-bottom: 1px dotted #777;\n}\n.initialism {\n  font-size: 90%;\n  text-transform: uppercase;\n}\nblockquote {\n  padding: 10px 20px;\n  margin: 0 0 20px;\n  font-size: 17.5px;\n  border-left: 5px solid #eee;\n}\nblockquote p:last-child,\nblockquote ul:last-child,\nblockquote ol:last-child {\n  margin-bottom: 0;\n}\nblockquote footer,\nblockquote small,\nblockquote .small {\n  display: block;\n  font-size: 80%;\n  line-height: 1.42857143;\n  color: #777;\n}\nblockquote footer:before,\nblockquote small:before,\nblockquote .small:before {\n  content: '\\2014 \\00A0';\n}\n.blockquote-reverse,\nblockquote.pull-right {\n  padding-right: 15px;\n  padding-left: 0;\n  text-align: right;\n  border-right: 5px solid #eee;\n  border-left: 0;\n}\n.blockquote-reverse footer:before,\nblockquote.pull-right footer:before,\n.blockquote-reverse small:before,\nblockquote.pull-right small:before,\n.blockquote-reverse .small:before,\nblockquote.pull-right .small:before {\n  content: '';\n}\n.blockquote-reverse footer:after,\nblockquote.pull-right footer:after,\n.blockquote-reverse small:after,\nblockquote.pull-right small:after,\n.blockquote-reverse .small:after,\nblockquote.pull-right .small:after {\n  content: '\\00A0 \\2014';\n}\naddress {\n  margin-bottom: 20px;\n  font-style: normal;\n  line-height: 1.42857143;\n}\ncode,\nkbd,\npre,\nsamp {\n  font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace;\n}\ncode {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: #c7254e;\n  background-color: #f9f2f4;\n  border-radius: 4px;\n}\nkbd {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: #fff;\n  background-color: #333;\n  border-radius: 3px;\n  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);\n          box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);\n}\nkbd kbd {\n  padding: 0;\n  font-size: 100%;\n  font-weight: bold;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\npre {\n  display: block;\n  padding: 9.5px;\n  margin: 0 0 10px;\n  font-size: 13px;\n  line-height: 1.42857143;\n  color: #333;\n  word-break: break-all;\n  word-wrap: break-word;\n  background-color: #f5f5f5;\n  border: 1px solid #ccc;\n  border-radius: 4px;\n}\npre code {\n  padding: 0;\n  font-size: inherit;\n  color: inherit;\n  white-space: pre-wrap;\n  background-color: transparent;\n  border-radius: 0;\n}\n.pre-scrollable {\n  max-height: 340px;\n  overflow-y: scroll;\n}\n.container {\n  padding-right: 15px;\n  padding-left: 15px;\n  margin-right: auto;\n  margin-left: auto;\n}\n@media (min-width: 768px) {\n  .container {\n    width: 750px;\n  }\n}\n@media (min-width: 992px) {\n  .container {\n    width: 970px;\n  }\n}\n@media (min-width: 1200px) {\n  .container {\n    width: 1170px;\n  }\n}\n.container-fluid {\n  padding-right: 15px;\n  padding-left: 15px;\n  margin-right: auto;\n  margin-left: auto;\n}\n.row {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {\n  position: relative;\n  min-height: 1px;\n  padding-right: 15px;\n  padding-left: 15px;\n}\n.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {\n  float: left;\n}\n.col-xs-12 {\n  width: 100%;\n}\n.col-xs-11 {\n  width: 91.66666667%;\n}\n.col-xs-10 {\n  width: 83.33333333%;\n}\n.col-xs-9 {\n  width: 75%;\n}\n.col-xs-8 {\n  width: 66.66666667%;\n}\n.col-xs-7 {\n  width: 58.33333333%;\n}\n.col-xs-6 {\n  width: 50%;\n}\n.col-xs-5 {\n  width: 41.66666667%;\n}\n.col-xs-4 {\n  width: 33.33333333%;\n}\n.col-xs-3 {\n  width: 25%;\n}\n.col-xs-2 {\n  width: 16.66666667%;\n}\n.col-xs-1 {\n  width: 8.33333333%;\n}\n.col-xs-pull-12 {\n  right: 100%;\n}\n.col-xs-pull-11 {\n  right: 91.66666667%;\n}\n.col-xs-pull-10 {\n  right: 83.33333333%;\n}\n.col-xs-pull-9 {\n  right: 75%;\n}\n.col-xs-pull-8 {\n  right: 66.66666667%;\n}\n.col-xs-pull-7 {\n  right: 58.33333333%;\n}\n.col-xs-pull-6 {\n  right: 50%;\n}\n.col-xs-pull-5 {\n  right: 41.66666667%;\n}\n.col-xs-pull-4 {\n  right: 33.33333333%;\n}\n.col-xs-pull-3 {\n  right: 25%;\n}\n.col-xs-pull-2 {\n  right: 16.66666667%;\n}\n.col-xs-pull-1 {\n  right: 8.33333333%;\n}\n.col-xs-pull-0 {\n  right: auto;\n}\n.col-xs-push-12 {\n  left: 100%;\n}\n.col-xs-push-11 {\n  left: 91.66666667%;\n}\n.col-xs-push-10 {\n  left: 83.33333333%;\n}\n.col-xs-push-9 {\n  left: 75%;\n}\n.col-xs-push-8 {\n  left: 66.66666667%;\n}\n.col-xs-push-7 {\n  left: 58.33333333%;\n}\n.col-xs-push-6 {\n  left: 50%;\n}\n.col-xs-push-5 {\n  left: 41.66666667%;\n}\n.col-xs-push-4 {\n  left: 33.33333333%;\n}\n.col-xs-push-3 {\n  left: 25%;\n}\n.col-xs-push-2 {\n  left: 16.66666667%;\n}\n.col-xs-push-1 {\n  left: 8.33333333%;\n}\n.col-xs-push-0 {\n  left: auto;\n}\n.col-xs-offset-12 {\n  margin-left: 100%;\n}\n.col-xs-offset-11 {\n  margin-left: 91.66666667%;\n}\n.col-xs-offset-10 {\n  margin-left: 83.33333333%;\n}\n.col-xs-offset-9 {\n  margin-left: 75%;\n}\n.col-xs-offset-8 {\n  margin-left: 66.66666667%;\n}\n.col-xs-offset-7 {\n  margin-left: 58.33333333%;\n}\n.col-xs-offset-6 {\n  margin-left: 50%;\n}\n.col-xs-offset-5 {\n  margin-left: 41.66666667%;\n}\n.col-xs-offset-4 {\n  margin-left: 33.33333333%;\n}\n.col-xs-offset-3 {\n  margin-left: 25%;\n}\n.col-xs-offset-2 {\n  margin-left: 16.66666667%;\n}\n.col-xs-offset-1 {\n  margin-left: 8.33333333%;\n}\n.col-xs-offset-0 {\n  margin-left: 0;\n}\n@media (min-width: 768px) {\n  .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {\n    float: left;\n  }\n  .col-sm-12 {\n    width: 100%;\n  }\n  .col-sm-11 {\n    width: 91.66666667%;\n  }\n  .col-sm-10 {\n    width: 83.33333333%;\n  }\n  .col-sm-9 {\n    width: 75%;\n  }\n  .col-sm-8 {\n    width: 66.66666667%;\n  }\n  .col-sm-7 {\n    width: 58.33333333%;\n  }\n  .col-sm-6 {\n    width: 50%;\n  }\n  .col-sm-5 {\n    width: 41.66666667%;\n  }\n  .col-sm-4 {\n    width: 33.33333333%;\n  }\n  .col-sm-3 {\n    width: 25%;\n  }\n  .col-sm-2 {\n    width: 16.66666667%;\n  }\n  .col-sm-1 {\n    width: 8.33333333%;\n  }\n  .col-sm-pull-12 {\n    right: 100%;\n  }\n  .col-sm-pull-11 {\n    right: 91.66666667%;\n  }\n  .col-sm-pull-10 {\n    right: 83.33333333%;\n  }\n  .col-sm-pull-9 {\n    right: 75%;\n  }\n  .col-sm-pull-8 {\n    right: 66.66666667%;\n  }\n  .col-sm-pull-7 {\n    right: 58.33333333%;\n  }\n  .col-sm-pull-6 {\n    right: 50%;\n  }\n  .col-sm-pull-5 {\n    right: 41.66666667%;\n  }\n  .col-sm-pull-4 {\n    right: 33.33333333%;\n  }\n  .col-sm-pull-3 {\n    right: 25%;\n  }\n  .col-sm-pull-2 {\n    right: 16.66666667%;\n  }\n  .col-sm-pull-1 {\n    right: 8.33333333%;\n  }\n  .col-sm-pull-0 {\n    right: auto;\n  }\n  .col-sm-push-12 {\n    left: 100%;\n  }\n  .col-sm-push-11 {\n    left: 91.66666667%;\n  }\n  .col-sm-push-10 {\n    left: 83.33333333%;\n  }\n  .col-sm-push-9 {\n    left: 75%;\n  }\n  .col-sm-push-8 {\n    left: 66.66666667%;\n  }\n  .col-sm-push-7 {\n    left: 58.33333333%;\n  }\n  .col-sm-push-6 {\n    left: 50%;\n  }\n  .col-sm-push-5 {\n    left: 41.66666667%;\n  }\n  .col-sm-push-4 {\n    left: 33.33333333%;\n  }\n  .col-sm-push-3 {\n    left: 25%;\n  }\n  .col-sm-push-2 {\n    left: 16.66666667%;\n  }\n  .col-sm-push-1 {\n    left: 8.33333333%;\n  }\n  .col-sm-push-0 {\n    left: auto;\n  }\n  .col-sm-offset-12 {\n    margin-left: 100%;\n  }\n  .col-sm-offset-11 {\n    margin-left: 91.66666667%;\n  }\n  .col-sm-offset-10 {\n    margin-left: 83.33333333%;\n  }\n  .col-sm-offset-9 {\n    margin-left: 75%;\n  }\n  .col-sm-offset-8 {\n    margin-left: 66.66666667%;\n  }\n  .col-sm-offset-7 {\n    margin-left: 58.33333333%;\n  }\n  .col-sm-offset-6 {\n    margin-left: 50%;\n  }\n  .col-sm-offset-5 {\n    margin-left: 41.66666667%;\n  }\n  .col-sm-offset-4 {\n    margin-left: 33.33333333%;\n  }\n  .col-sm-offset-3 {\n    margin-left: 25%;\n  }\n  .col-sm-offset-2 {\n    margin-left: 16.66666667%;\n  }\n  .col-sm-offset-1 {\n    margin-left: 8.33333333%;\n  }\n  .col-sm-offset-0 {\n    margin-left: 0;\n  }\n}\n@media (min-width: 992px) {\n  .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {\n    float: left;\n  }\n  .col-md-12 {\n    width: 100%;\n  }\n  .col-md-11 {\n    width: 91.66666667%;\n  }\n  .col-md-10 {\n    width: 83.33333333%;\n  }\n  .col-md-9 {\n    width: 75%;\n  }\n  .col-md-8 {\n    width: 66.66666667%;\n  }\n  .col-md-7 {\n    width: 58.33333333%;\n  }\n  .col-md-6 {\n    width: 50%;\n  }\n  .col-md-5 {\n    width: 41.66666667%;\n  }\n  .col-md-4 {\n    width: 33.33333333%;\n  }\n  .col-md-3 {\n    width: 25%;\n  }\n  .col-md-2 {\n    width: 16.66666667%;\n  }\n  .col-md-1 {\n    width: 8.33333333%;\n  }\n  .col-md-pull-12 {\n    right: 100%;\n  }\n  .col-md-pull-11 {\n    right: 91.66666667%;\n  }\n  .col-md-pull-10 {\n    right: 83.33333333%;\n  }\n  .col-md-pull-9 {\n    right: 75%;\n  }\n  .col-md-pull-8 {\n    right: 66.66666667%;\n  }\n  .col-md-pull-7 {\n    right: 58.33333333%;\n  }\n  .col-md-pull-6 {\n    right: 50%;\n  }\n  .col-md-pull-5 {\n    right: 41.66666667%;\n  }\n  .col-md-pull-4 {\n    right: 33.33333333%;\n  }\n  .col-md-pull-3 {\n    right: 25%;\n  }\n  .col-md-pull-2 {\n    right: 16.66666667%;\n  }\n  .col-md-pull-1 {\n    right: 8.33333333%;\n  }\n  .col-md-pull-0 {\n    right: auto;\n  }\n  .col-md-push-12 {\n    left: 100%;\n  }\n  .col-md-push-11 {\n    left: 91.66666667%;\n  }\n  .col-md-push-10 {\n    left: 83.33333333%;\n  }\n  .col-md-push-9 {\n    left: 75%;\n  }\n  .col-md-push-8 {\n    left: 66.66666667%;\n  }\n  .col-md-push-7 {\n    left: 58.33333333%;\n  }\n  .col-md-push-6 {\n    left: 50%;\n  }\n  .col-md-push-5 {\n    left: 41.66666667%;\n  }\n  .col-md-push-4 {\n    left: 33.33333333%;\n  }\n  .col-md-push-3 {\n    left: 25%;\n  }\n  .col-md-push-2 {\n    left: 16.66666667%;\n  }\n  .col-md-push-1 {\n    left: 8.33333333%;\n  }\n  .col-md-push-0 {\n    left: auto;\n  }\n  .col-md-offset-12 {\n    margin-left: 100%;\n  }\n  .col-md-offset-11 {\n    margin-left: 91.66666667%;\n  }\n  .col-md-offset-10 {\n    margin-left: 83.33333333%;\n  }\n  .col-md-offset-9 {\n    margin-left: 75%;\n  }\n  .col-md-offset-8 {\n    margin-left: 66.66666667%;\n  }\n  .col-md-offset-7 {\n    margin-left: 58.33333333%;\n  }\n  .col-md-offset-6 {\n    margin-left: 50%;\n  }\n  .col-md-offset-5 {\n    margin-left: 41.66666667%;\n  }\n  .col-md-offset-4 {\n    margin-left: 33.33333333%;\n  }\n  .col-md-offset-3 {\n    margin-left: 25%;\n  }\n  .col-md-offset-2 {\n    margin-left: 16.66666667%;\n  }\n  .col-md-offset-1 {\n    margin-left: 8.33333333%;\n  }\n  .col-md-offset-0 {\n    margin-left: 0;\n  }\n}\n@media (min-width: 1200px) {\n  .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {\n    float: left;\n  }\n  .col-lg-12 {\n    width: 100%;\n  }\n  .col-lg-11 {\n    width: 91.66666667%;\n  }\n  .col-lg-10 {\n    width: 83.33333333%;\n  }\n  .col-lg-9 {\n    width: 75%;\n  }\n  .col-lg-8 {\n    width: 66.66666667%;\n  }\n  .col-lg-7 {\n    width: 58.33333333%;\n  }\n  .col-lg-6 {\n    width: 50%;\n  }\n  .col-lg-5 {\n    width: 41.66666667%;\n  }\n  .col-lg-4 {\n    width: 33.33333333%;\n  }\n  .col-lg-3 {\n    width: 25%;\n  }\n  .col-lg-2 {\n    width: 16.66666667%;\n  }\n  .col-lg-1 {\n    width: 8.33333333%;\n  }\n  .col-lg-pull-12 {\n    right: 100%;\n  }\n  .col-lg-pull-11 {\n    right: 91.66666667%;\n  }\n  .col-lg-pull-10 {\n    right: 83.33333333%;\n  }\n  .col-lg-pull-9 {\n    right: 75%;\n  }\n  .col-lg-pull-8 {\n    right: 66.66666667%;\n  }\n  .col-lg-pull-7 {\n    right: 58.33333333%;\n  }\n  .col-lg-pull-6 {\n    right: 50%;\n  }\n  .col-lg-pull-5 {\n    right: 41.66666667%;\n  }\n  .col-lg-pull-4 {\n    right: 33.33333333%;\n  }\n  .col-lg-pull-3 {\n    right: 25%;\n  }\n  .col-lg-pull-2 {\n    right: 16.66666667%;\n  }\n  .col-lg-pull-1 {\n    right: 8.33333333%;\n  }\n  .col-lg-pull-0 {\n    right: auto;\n  }\n  .col-lg-push-12 {\n    left: 100%;\n  }\n  .col-lg-push-11 {\n    left: 91.66666667%;\n  }\n  .col-lg-push-10 {\n    left: 83.33333333%;\n  }\n  .col-lg-push-9 {\n    left: 75%;\n  }\n  .col-lg-push-8 {\n    left: 66.66666667%;\n  }\n  .col-lg-push-7 {\n    left: 58.33333333%;\n  }\n  .col-lg-push-6 {\n    left: 50%;\n  }\n  .col-lg-push-5 {\n    left: 41.66666667%;\n  }\n  .col-lg-push-4 {\n    left: 33.33333333%;\n  }\n  .col-lg-push-3 {\n    left: 25%;\n  }\n  .col-lg-push-2 {\n    left: 16.66666667%;\n  }\n  .col-lg-push-1 {\n    left: 8.33333333%;\n  }\n  .col-lg-push-0 {\n    left: auto;\n  }\n  .col-lg-offset-12 {\n    margin-left: 100%;\n  }\n  .col-lg-offset-11 {\n    margin-left: 91.66666667%;\n  }\n  .col-lg-offset-10 {\n    margin-left: 83.33333333%;\n  }\n  .col-lg-offset-9 {\n    margin-left: 75%;\n  }\n  .col-lg-offset-8 {\n    margin-left: 66.66666667%;\n  }\n  .col-lg-offset-7 {\n    margin-left: 58.33333333%;\n  }\n  .col-lg-offset-6 {\n    margin-left: 50%;\n  }\n  .col-lg-offset-5 {\n    margin-left: 41.66666667%;\n  }\n  .col-lg-offset-4 {\n    margin-left: 33.33333333%;\n  }\n  .col-lg-offset-3 {\n    margin-left: 25%;\n  }\n  .col-lg-offset-2 {\n    margin-left: 16.66666667%;\n  }\n  .col-lg-offset-1 {\n    margin-left: 8.33333333%;\n  }\n  .col-lg-offset-0 {\n    margin-left: 0;\n  }\n}\ntable {\n  background-color: transparent;\n}\ncaption {\n  padding-top: 8px;\n  padding-bottom: 8px;\n  color: #777;\n  text-align: left;\n}\nth {\n  text-align: left;\n}\n.table {\n  width: 100%;\n  max-width: 100%;\n  margin-bottom: 20px;\n}\n.table > thead > tr > th,\n.table > tbody > tr > th,\n.table > tfoot > tr > th,\n.table > thead > tr > td,\n.table > tbody > tr > td,\n.table > tfoot > tr > td {\n  padding: 8px;\n  line-height: 1.42857143;\n  vertical-align: top;\n  border-top: 1px solid #ddd;\n}\n.table > thead > tr > th {\n  vertical-align: bottom;\n  border-bottom: 2px solid #ddd;\n}\n.table > caption + thead > tr:first-child > th,\n.table > colgroup + thead > tr:first-child > th,\n.table > thead:first-child > tr:first-child > th,\n.table > caption + thead > tr:first-child > td,\n.table > colgroup + thead > tr:first-child > td,\n.table > thead:first-child > tr:first-child > td {\n  border-top: 0;\n}\n.table > tbody + tbody {\n  border-top: 2px solid #ddd;\n}\n.table .table {\n  background-color: #fff;\n}\n.table-condensed > thead > tr > th,\n.table-condensed > tbody > tr > th,\n.table-condensed > tfoot > tr > th,\n.table-condensed > thead > tr > td,\n.table-condensed > tbody > tr > td,\n.table-condensed > tfoot > tr > td {\n  padding: 5px;\n}\n.table-bordered {\n  border: 1px solid #ddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > tbody > tr > th,\n.table-bordered > tfoot > tr > th,\n.table-bordered > thead > tr > td,\n.table-bordered > tbody > tr > td,\n.table-bordered > tfoot > tr > td {\n  border: 1px solid #ddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > thead > tr > td {\n  border-bottom-width: 2px;\n}\n.table-striped > tbody > tr:nth-of-type(odd) {\n  background-color: #f9f9f9;\n}\n.table-hover > tbody > tr:hover {\n  background-color: #f5f5f5;\n}\ntable col[class*=\"col-\"] {\n  position: static;\n  display: table-column;\n  float: none;\n}\ntable td[class*=\"col-\"],\ntable th[class*=\"col-\"] {\n  position: static;\n  display: table-cell;\n  float: none;\n}\n.table > thead > tr > td.active,\n.table > tbody > tr > td.active,\n.table > tfoot > tr > td.active,\n.table > thead > tr > th.active,\n.table > tbody > tr > th.active,\n.table > tfoot > tr > th.active,\n.table > thead > tr.active > td,\n.table > tbody > tr.active > td,\n.table > tfoot > tr.active > td,\n.table > thead > tr.active > th,\n.table > tbody > tr.active > th,\n.table > tfoot > tr.active > th {\n  background-color: #f5f5f5;\n}\n.table-hover > tbody > tr > td.active:hover,\n.table-hover > tbody > tr > th.active:hover,\n.table-hover > tbody > tr.active:hover > td,\n.table-hover > tbody > tr:hover > .active,\n.table-hover > tbody > tr.active:hover > th {\n  background-color: #e8e8e8;\n}\n.table > thead > tr > td.success,\n.table > tbody > tr > td.success,\n.table > tfoot > tr > td.success,\n.table > thead > tr > th.success,\n.table > tbody > tr > th.success,\n.table > tfoot > tr > th.success,\n.table > thead > tr.success > td,\n.table > tbody > tr.success > td,\n.table > tfoot > tr.success > td,\n.table > thead > tr.success > th,\n.table > tbody > tr.success > th,\n.table > tfoot > tr.success > th {\n  background-color: #dff0d8;\n}\n.table-hover > tbody > tr > td.success:hover,\n.table-hover > tbody > tr > th.success:hover,\n.table-hover > tbody > tr.success:hover > td,\n.table-hover > tbody > tr:hover > .success,\n.table-hover > tbody > tr.success:hover > th {\n  background-color: #d0e9c6;\n}\n.table > thead > tr > td.info,\n.table > tbody > tr > td.info,\n.table > tfoot > tr > td.info,\n.table > thead > tr > th.info,\n.table > tbody > tr > th.info,\n.table > tfoot > tr > th.info,\n.table > thead > tr.info > td,\n.table > tbody > tr.info > td,\n.table > tfoot > tr.info > td,\n.table > thead > tr.info > th,\n.table > tbody > tr.info > th,\n.table > tfoot > tr.info > th {\n  background-color: #d9edf7;\n}\n.table-hover > tbody > tr > td.info:hover,\n.table-hover > tbody > tr > th.info:hover,\n.table-hover > tbody > tr.info:hover > td,\n.table-hover > tbody > tr:hover > .info,\n.table-hover > tbody > tr.info:hover > th {\n  background-color: #c4e3f3;\n}\n.table > thead > tr > td.warning,\n.table > tbody > tr > td.warning,\n.table > tfoot > tr > td.warning,\n.table > thead > tr > th.warning,\n.table > tbody > tr > th.warning,\n.table > tfoot > tr > th.warning,\n.table > thead > tr.warning > td,\n.table > tbody > tr.warning > td,\n.table > tfoot > tr.warning > td,\n.table > thead > tr.warning > th,\n.table > tbody > tr.warning > th,\n.table > tfoot > tr.warning > th {\n  background-color: #fcf8e3;\n}\n.table-hover > tbody > tr > td.warning:hover,\n.table-hover > tbody > tr > th.warning:hover,\n.table-hover > tbody > tr.warning:hover > td,\n.table-hover > tbody > tr:hover > .warning,\n.table-hover > tbody > tr.warning:hover > th {\n  background-color: #faf2cc;\n}\n.table > thead > tr > td.danger,\n.table > tbody > tr > td.danger,\n.table > tfoot > tr > td.danger,\n.table > thead > tr > th.danger,\n.table > tbody > tr > th.danger,\n.table > tfoot > tr > th.danger,\n.table > thead > tr.danger > td,\n.table > tbody > tr.danger > td,\n.table > tfoot > tr.danger > td,\n.table > thead > tr.danger > th,\n.table > tbody > tr.danger > th,\n.table > tfoot > tr.danger > th {\n  background-color: #f2dede;\n}\n.table-hover > tbody > tr > td.danger:hover,\n.table-hover > tbody > tr > th.danger:hover,\n.table-hover > tbody > tr.danger:hover > td,\n.table-hover > tbody > tr:hover > .danger,\n.table-hover > tbody > tr.danger:hover > th {\n  background-color: #ebcccc;\n}\n.table-responsive {\n  min-height: .01%;\n  overflow-x: auto;\n}\n@media screen and (max-width: 767px) {\n  .table-responsive {\n    width: 100%;\n    margin-bottom: 15px;\n    overflow-y: hidden;\n    -ms-overflow-style: -ms-autohiding-scrollbar;\n    border: 1px solid #ddd;\n  }\n  .table-responsive > .table {\n    margin-bottom: 0;\n  }\n  .table-responsive > .table > thead > tr > th,\n  .table-responsive > .table > tbody > tr > th,\n  .table-responsive > .table > tfoot > tr > th,\n  .table-responsive > .table > thead > tr > td,\n  .table-responsive > .table > tbody > tr > td,\n  .table-responsive > .table > tfoot > tr > td {\n    white-space: nowrap;\n  }\n  .table-responsive > .table-bordered {\n    border: 0;\n  }\n  .table-responsive > .table-bordered > thead > tr > th:first-child,\n  .table-responsive > .table-bordered > tbody > tr > th:first-child,\n  .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n  .table-responsive > .table-bordered > thead > tr > td:first-child,\n  .table-responsive > .table-bordered > tbody > tr > td:first-child,\n  .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n    border-left: 0;\n  }\n  .table-responsive > .table-bordered > thead > tr > th:last-child,\n  .table-responsive > .table-bordered > tbody > tr > th:last-child,\n  .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n  .table-responsive > .table-bordered > thead > tr > td:last-child,\n  .table-responsive > .table-bordered > tbody > tr > td:last-child,\n  .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n    border-right: 0;\n  }\n  .table-responsive > .table-bordered > tbody > tr:last-child > th,\n  .table-responsive > .table-bordered > tfoot > tr:last-child > th,\n  .table-responsive > .table-bordered > tbody > tr:last-child > td,\n  .table-responsive > .table-bordered > tfoot > tr:last-child > td {\n    border-bottom: 0;\n  }\n}\nfieldset {\n  min-width: 0;\n  padding: 0;\n  margin: 0;\n  border: 0;\n}\nlegend {\n  display: block;\n  width: 100%;\n  padding: 0;\n  margin-bottom: 20px;\n  font-size: 21px;\n  line-height: inherit;\n  color: #333;\n  border: 0;\n  border-bottom: 1px solid #e5e5e5;\n}\nlabel {\n  display: inline-block;\n  max-width: 100%;\n  margin-bottom: 5px;\n  font-weight: bold;\n}\ninput[type=\"search\"] {\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n}\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n  margin: 4px 0 0;\n  margin-top: 1px \\9;\n  line-height: normal;\n}\ninput[type=\"file\"] {\n  display: block;\n}\ninput[type=\"range\"] {\n  display: block;\n  width: 100%;\n}\nselect[multiple],\nselect[size] {\n  height: auto;\n}\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n  outline: thin dotted;\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\noutput {\n  display: block;\n  padding-top: 7px;\n  font-size: 14px;\n  line-height: 1.42857143;\n  color: #555;\n}\n.form-control {\n  display: block;\n  width: 100%;\n  height: 34px;\n  padding: 6px 12px;\n  font-size: 14px;\n  line-height: 1.42857143;\n  color: #555;\n  background-color: #fff;\n  background-image: none;\n  border: 1px solid #ccc;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n  -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;\n       -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n          transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n}\n.form-control:focus {\n  border-color: #66afe9;\n  outline: 0;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);\n          box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);\n}\n.form-control::-moz-placeholder {\n  color: #999;\n  opacity: 1;\n}\n.form-control:-ms-input-placeholder {\n  color: #999;\n}\n.form-control::-webkit-input-placeholder {\n  color: #999;\n}\n.form-control[disabled],\n.form-control[readonly],\nfieldset[disabled] .form-control {\n  background-color: #eee;\n  opacity: 1;\n}\n.form-control[disabled],\nfieldset[disabled] .form-control {\n  cursor: not-allowed;\n}\ntextarea.form-control {\n  height: auto;\n}\ninput[type=\"search\"] {\n  -webkit-appearance: none;\n}\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n  input[type=\"date\"].form-control,\n  input[type=\"time\"].form-control,\n  input[type=\"datetime-local\"].form-control,\n  input[type=\"month\"].form-control {\n    line-height: 34px;\n  }\n  input[type=\"date\"].input-sm,\n  input[type=\"time\"].input-sm,\n  input[type=\"datetime-local\"].input-sm,\n  input[type=\"month\"].input-sm,\n  .input-group-sm input[type=\"date\"],\n  .input-group-sm input[type=\"time\"],\n  .input-group-sm input[type=\"datetime-local\"],\n  .input-group-sm input[type=\"month\"] {\n    line-height: 30px;\n  }\n  input[type=\"date\"].input-lg,\n  input[type=\"time\"].input-lg,\n  input[type=\"datetime-local\"].input-lg,\n  input[type=\"month\"].input-lg,\n  .input-group-lg input[type=\"date\"],\n  .input-group-lg input[type=\"time\"],\n  .input-group-lg input[type=\"datetime-local\"],\n  .input-group-lg input[type=\"month\"] {\n    line-height: 46px;\n  }\n}\n.form-group {\n  margin-bottom: 15px;\n}\n.radio,\n.checkbox {\n  position: relative;\n  display: block;\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\n.radio label,\n.checkbox label {\n  min-height: 20px;\n  padding-left: 20px;\n  margin-bottom: 0;\n  font-weight: normal;\n  cursor: pointer;\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n  position: absolute;\n  margin-top: 4px \\9;\n  margin-left: -20px;\n}\n.radio + .radio,\n.checkbox + .checkbox {\n  margin-top: -5px;\n}\n.radio-inline,\n.checkbox-inline {\n  position: relative;\n  display: inline-block;\n  padding-left: 20px;\n  margin-bottom: 0;\n  font-weight: normal;\n  vertical-align: middle;\n  cursor: pointer;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n  margin-top: 0;\n  margin-left: 10px;\n}\ninput[type=\"radio\"][disabled],\ninput[type=\"checkbox\"][disabled],\ninput[type=\"radio\"].disabled,\ninput[type=\"checkbox\"].disabled,\nfieldset[disabled] input[type=\"radio\"],\nfieldset[disabled] input[type=\"checkbox\"] {\n  cursor: not-allowed;\n}\n.radio-inline.disabled,\n.checkbox-inline.disabled,\nfieldset[disabled] .radio-inline,\nfieldset[disabled] .checkbox-inline {\n  cursor: not-allowed;\n}\n.radio.disabled label,\n.checkbox.disabled label,\nfieldset[disabled] .radio label,\nfieldset[disabled] .checkbox label {\n  cursor: not-allowed;\n}\n.form-control-static {\n  min-height: 34px;\n  padding-top: 7px;\n  padding-bottom: 7px;\n  margin-bottom: 0;\n}\n.form-control-static.input-lg,\n.form-control-static.input-sm {\n  padding-right: 0;\n  padding-left: 0;\n}\n.input-sm {\n  height: 30px;\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\nselect.input-sm {\n  height: 30px;\n  line-height: 30px;\n}\ntextarea.input-sm,\nselect[multiple].input-sm {\n  height: auto;\n}\n.form-group-sm .form-control {\n  height: 30px;\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n.form-group-sm select.form-control {\n  height: 30px;\n  line-height: 30px;\n}\n.form-group-sm textarea.form-control,\n.form-group-sm select[multiple].form-control {\n  height: auto;\n}\n.form-group-sm .form-control-static {\n  height: 30px;\n  min-height: 32px;\n  padding: 6px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n}\n.input-lg {\n  height: 46px;\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n  border-radius: 6px;\n}\nselect.input-lg {\n  height: 46px;\n  line-height: 46px;\n}\ntextarea.input-lg,\nselect[multiple].input-lg {\n  height: auto;\n}\n.form-group-lg .form-control {\n  height: 46px;\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n  border-radius: 6px;\n}\n.form-group-lg select.form-control {\n  height: 46px;\n  line-height: 46px;\n}\n.form-group-lg textarea.form-control,\n.form-group-lg select[multiple].form-control {\n  height: auto;\n}\n.form-group-lg .form-control-static {\n  height: 46px;\n  min-height: 38px;\n  padding: 11px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n}\n.has-feedback {\n  position: relative;\n}\n.has-feedback .form-control {\n  padding-right: 42.5px;\n}\n.form-control-feedback {\n  position: absolute;\n  top: 0;\n  right: 0;\n  z-index: 2;\n  display: block;\n  width: 34px;\n  height: 34px;\n  line-height: 34px;\n  text-align: center;\n  pointer-events: none;\n}\n.input-lg + .form-control-feedback,\n.input-group-lg + .form-control-feedback,\n.form-group-lg .form-control + .form-control-feedback {\n  width: 46px;\n  height: 46px;\n  line-height: 46px;\n}\n.input-sm + .form-control-feedback,\n.input-group-sm + .form-control-feedback,\n.form-group-sm .form-control + .form-control-feedback {\n  width: 30px;\n  height: 30px;\n  line-height: 30px;\n}\n.has-success .help-block,\n.has-success .control-label,\n.has-success .radio,\n.has-success .checkbox,\n.has-success .radio-inline,\n.has-success .checkbox-inline,\n.has-success.radio label,\n.has-success.checkbox label,\n.has-success.radio-inline label,\n.has-success.checkbox-inline label {\n  color: #3c763d;\n}\n.has-success .form-control {\n  border-color: #3c763d;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n}\n.has-success .form-control:focus {\n  border-color: #2b542c;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;\n}\n.has-success .input-group-addon {\n  color: #3c763d;\n  background-color: #dff0d8;\n  border-color: #3c763d;\n}\n.has-success .form-control-feedback {\n  color: #3c763d;\n}\n.has-warning .help-block,\n.has-warning .control-label,\n.has-warning .radio,\n.has-warning .checkbox,\n.has-warning .radio-inline,\n.has-warning .checkbox-inline,\n.has-warning.radio label,\n.has-warning.checkbox label,\n.has-warning.radio-inline label,\n.has-warning.checkbox-inline label {\n  color: #8a6d3b;\n}\n.has-warning .form-control {\n  border-color: #8a6d3b;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n}\n.has-warning .form-control:focus {\n  border-color: #66512c;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;\n}\n.has-warning .input-group-addon {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n  border-color: #8a6d3b;\n}\n.has-warning .form-control-feedback {\n  color: #8a6d3b;\n}\n.has-error .help-block,\n.has-error .control-label,\n.has-error .radio,\n.has-error .checkbox,\n.has-error .radio-inline,\n.has-error .checkbox-inline,\n.has-error.radio label,\n.has-error.checkbox label,\n.has-error.radio-inline label,\n.has-error.checkbox-inline label {\n  color: #a94442;\n}\n.has-error .form-control {\n  border-color: #a94442;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n}\n.has-error .form-control:focus {\n  border-color: #843534;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;\n}\n.has-error .input-group-addon {\n  color: #a94442;\n  background-color: #f2dede;\n  border-color: #a94442;\n}\n.has-error .form-control-feedback {\n  color: #a94442;\n}\n.has-feedback label ~ .form-control-feedback {\n  top: 25px;\n}\n.has-feedback label.sr-only ~ .form-control-feedback {\n  top: 0;\n}\n.help-block {\n  display: block;\n  margin-top: 5px;\n  margin-bottom: 10px;\n  color: #737373;\n}\n@media (min-width: 768px) {\n  .form-inline .form-group {\n    display: inline-block;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .form-inline .form-control {\n    display: inline-block;\n    width: auto;\n    vertical-align: middle;\n  }\n  .form-inline .form-control-static {\n    display: inline-block;\n  }\n  .form-inline .input-group {\n    display: inline-table;\n    vertical-align: middle;\n  }\n  .form-inline .input-group .input-group-addon,\n  .form-inline .input-group .input-group-btn,\n  .form-inline .input-group .form-control {\n    width: auto;\n  }\n  .form-inline .input-group > .form-control {\n    width: 100%;\n  }\n  .form-inline .control-label {\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .form-inline .radio,\n  .form-inline .checkbox {\n    display: inline-block;\n    margin-top: 0;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .form-inline .radio label,\n  .form-inline .checkbox label {\n    padding-left: 0;\n  }\n  .form-inline .radio input[type=\"radio\"],\n  .form-inline .checkbox input[type=\"checkbox\"] {\n    position: relative;\n    margin-left: 0;\n  }\n  .form-inline .has-feedback .form-control-feedback {\n    top: 0;\n  }\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox,\n.form-horizontal .radio-inline,\n.form-horizontal .checkbox-inline {\n  padding-top: 7px;\n  margin-top: 0;\n  margin-bottom: 0;\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox {\n  min-height: 27px;\n}\n.form-horizontal .form-group {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n@media (min-width: 768px) {\n  .form-horizontal .control-label {\n    padding-top: 7px;\n    margin-bottom: 0;\n    text-align: right;\n  }\n}\n.form-horizontal .has-feedback .form-control-feedback {\n  right: 15px;\n}\n@media (min-width: 768px) {\n  .form-horizontal .form-group-lg .control-label {\n    padding-top: 14.333333px;\n    font-size: 18px;\n  }\n}\n@media (min-width: 768px) {\n  .form-horizontal .form-group-sm .control-label {\n    padding-top: 6px;\n    font-size: 12px;\n  }\n}\n.btn {\n  display: inline-block;\n  padding: 6px 12px;\n  margin-bottom: 0;\n  font-size: 14px;\n  font-weight: normal;\n  line-height: 1.42857143;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: middle;\n  -ms-touch-action: manipulation;\n      touch-action: manipulation;\n  cursor: pointer;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n      -ms-user-select: none;\n          user-select: none;\n  background-image: none;\n  border: 1px solid transparent;\n  border-radius: 4px;\n}\n.btn:focus,\n.btn:active:focus,\n.btn.active:focus,\n.btn.focus,\n.btn:active.focus,\n.btn.active.focus {\n  outline: thin dotted;\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\n.btn:hover,\n.btn:focus,\n.btn.focus {\n  color: #333;\n  text-decoration: none;\n}\n.btn:active,\n.btn.active {\n  background-image: none;\n  outline: 0;\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n          box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n}\n.btn.disabled,\n.btn[disabled],\nfieldset[disabled] .btn {\n  cursor: not-allowed;\n  filter: alpha(opacity=65);\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  opacity: .65;\n}\na.btn.disabled,\nfieldset[disabled] a.btn {\n  pointer-events: none;\n}\n.btn-default {\n  color: #333;\n  background-color: #fff;\n  border-color: #ccc;\n}\n.btn-default:focus,\n.btn-default.focus {\n  color: #333;\n  background-color: #e6e6e6;\n  border-color: #8c8c8c;\n}\n.btn-default:hover {\n  color: #333;\n  background-color: #e6e6e6;\n  border-color: #adadad;\n}\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n  color: #333;\n  background-color: #e6e6e6;\n  border-color: #adadad;\n}\n.btn-default:active:hover,\n.btn-default.active:hover,\n.open > .dropdown-toggle.btn-default:hover,\n.btn-default:active:focus,\n.btn-default.active:focus,\n.open > .dropdown-toggle.btn-default:focus,\n.btn-default:active.focus,\n.btn-default.active.focus,\n.open > .dropdown-toggle.btn-default.focus {\n  color: #333;\n  background-color: #d4d4d4;\n  border-color: #8c8c8c;\n}\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n  background-image: none;\n}\n.btn-default.disabled,\n.btn-default[disabled],\nfieldset[disabled] .btn-default,\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled.focus,\n.btn-default[disabled].focus,\nfieldset[disabled] .btn-default.focus,\n.btn-default.disabled:active,\n.btn-default[disabled]:active,\nfieldset[disabled] .btn-default:active,\n.btn-default.disabled.active,\n.btn-default[disabled].active,\nfieldset[disabled] .btn-default.active {\n  background-color: #fff;\n  border-color: #ccc;\n}\n.btn-default .badge {\n  color: #fff;\n  background-color: #333;\n}\n.btn-primary {\n  color: #fff;\n  background-color: #337ab7;\n  border-color: #2e6da4;\n}\n.btn-primary:focus,\n.btn-primary.focus {\n  color: #fff;\n  background-color: #286090;\n  border-color: #122b40;\n}\n.btn-primary:hover {\n  color: #fff;\n  background-color: #286090;\n  border-color: #204d74;\n}\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n  color: #fff;\n  background-color: #286090;\n  border-color: #204d74;\n}\n.btn-primary:active:hover,\n.btn-primary.active:hover,\n.open > .dropdown-toggle.btn-primary:hover,\n.btn-primary:active:focus,\n.btn-primary.active:focus,\n.open > .dropdown-toggle.btn-primary:focus,\n.btn-primary:active.focus,\n.btn-primary.active.focus,\n.open > .dropdown-toggle.btn-primary.focus {\n  color: #fff;\n  background-color: #204d74;\n  border-color: #122b40;\n}\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n  background-image: none;\n}\n.btn-primary.disabled,\n.btn-primary[disabled],\nfieldset[disabled] .btn-primary,\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled.focus,\n.btn-primary[disabled].focus,\nfieldset[disabled] .btn-primary.focus,\n.btn-primary.disabled:active,\n.btn-primary[disabled]:active,\nfieldset[disabled] .btn-primary:active,\n.btn-primary.disabled.active,\n.btn-primary[disabled].active,\nfieldset[disabled] .btn-primary.active {\n  background-color: #337ab7;\n  border-color: #2e6da4;\n}\n.btn-primary .badge {\n  color: #337ab7;\n  background-color: #fff;\n}\n.btn-success {\n  color: #fff;\n  background-color: #5cb85c;\n  border-color: #4cae4c;\n}\n.btn-success:focus,\n.btn-success.focus {\n  color: #fff;\n  background-color: #449d44;\n  border-color: #255625;\n}\n.btn-success:hover {\n  color: #fff;\n  background-color: #449d44;\n  border-color: #398439;\n}\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n  color: #fff;\n  background-color: #449d44;\n  border-color: #398439;\n}\n.btn-success:active:hover,\n.btn-success.active:hover,\n.open > .dropdown-toggle.btn-success:hover,\n.btn-success:active:focus,\n.btn-success.active:focus,\n.open > .dropdown-toggle.btn-success:focus,\n.btn-success:active.focus,\n.btn-success.active.focus,\n.open > .dropdown-toggle.btn-success.focus {\n  color: #fff;\n  background-color: #398439;\n  border-color: #255625;\n}\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n  background-image: none;\n}\n.btn-success.disabled,\n.btn-success[disabled],\nfieldset[disabled] .btn-success,\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled.focus,\n.btn-success[disabled].focus,\nfieldset[disabled] .btn-success.focus,\n.btn-success.disabled:active,\n.btn-success[disabled]:active,\nfieldset[disabled] .btn-success:active,\n.btn-success.disabled.active,\n.btn-success[disabled].active,\nfieldset[disabled] .btn-success.active {\n  background-color: #5cb85c;\n  border-color: #4cae4c;\n}\n.btn-success .badge {\n  color: #5cb85c;\n  background-color: #fff;\n}\n.btn-info {\n  color: #fff;\n  background-color: #5bc0de;\n  border-color: #46b8da;\n}\n.btn-info:focus,\n.btn-info.focus {\n  color: #fff;\n  background-color: #31b0d5;\n  border-color: #1b6d85;\n}\n.btn-info:hover {\n  color: #fff;\n  background-color: #31b0d5;\n  border-color: #269abc;\n}\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n  color: #fff;\n  background-color: #31b0d5;\n  border-color: #269abc;\n}\n.btn-info:active:hover,\n.btn-info.active:hover,\n.open > .dropdown-toggle.btn-info:hover,\n.btn-info:active:focus,\n.btn-info.active:focus,\n.open > .dropdown-toggle.btn-info:focus,\n.btn-info:active.focus,\n.btn-info.active.focus,\n.open > .dropdown-toggle.btn-info.focus {\n  color: #fff;\n  background-color: #269abc;\n  border-color: #1b6d85;\n}\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n  background-image: none;\n}\n.btn-info.disabled,\n.btn-info[disabled],\nfieldset[disabled] .btn-info,\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled.focus,\n.btn-info[disabled].focus,\nfieldset[disabled] .btn-info.focus,\n.btn-info.disabled:active,\n.btn-info[disabled]:active,\nfieldset[disabled] .btn-info:active,\n.btn-info.disabled.active,\n.btn-info[disabled].active,\nfieldset[disabled] .btn-info.active {\n  background-color: #5bc0de;\n  border-color: #46b8da;\n}\n.btn-info .badge {\n  color: #5bc0de;\n  background-color: #fff;\n}\n.btn-warning {\n  color: #fff;\n  background-color: #f0ad4e;\n  border-color: #eea236;\n}\n.btn-warning:focus,\n.btn-warning.focus {\n  color: #fff;\n  background-color: #ec971f;\n  border-color: #985f0d;\n}\n.btn-warning:hover {\n  color: #fff;\n  background-color: #ec971f;\n  border-color: #d58512;\n}\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n  color: #fff;\n  background-color: #ec971f;\n  border-color: #d58512;\n}\n.btn-warning:active:hover,\n.btn-warning.active:hover,\n.open > .dropdown-toggle.btn-warning:hover,\n.btn-warning:active:focus,\n.btn-warning.active:focus,\n.open > .dropdown-toggle.btn-warning:focus,\n.btn-warning:active.focus,\n.btn-warning.active.focus,\n.open > .dropdown-toggle.btn-warning.focus {\n  color: #fff;\n  background-color: #d58512;\n  border-color: #985f0d;\n}\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n  background-image: none;\n}\n.btn-warning.disabled,\n.btn-warning[disabled],\nfieldset[disabled] .btn-warning,\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled.focus,\n.btn-warning[disabled].focus,\nfieldset[disabled] .btn-warning.focus,\n.btn-warning.disabled:active,\n.btn-warning[disabled]:active,\nfieldset[disabled] .btn-warning:active,\n.btn-warning.disabled.active,\n.btn-warning[disabled].active,\nfieldset[disabled] .btn-warning.active {\n  background-color: #f0ad4e;\n  border-color: #eea236;\n}\n.btn-warning .badge {\n  color: #f0ad4e;\n  background-color: #fff;\n}\n.btn-danger {\n  color: #fff;\n  background-color: #d9534f;\n  border-color: #d43f3a;\n}\n.btn-danger:focus,\n.btn-danger.focus {\n  color: #fff;\n  background-color: #c9302c;\n  border-color: #761c19;\n}\n.btn-danger:hover {\n  color: #fff;\n  background-color: #c9302c;\n  border-color: #ac2925;\n}\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n  color: #fff;\n  background-color: #c9302c;\n  border-color: #ac2925;\n}\n.btn-danger:active:hover,\n.btn-danger.active:hover,\n.open > .dropdown-toggle.btn-danger:hover,\n.btn-danger:active:focus,\n.btn-danger.active:focus,\n.open > .dropdown-toggle.btn-danger:focus,\n.btn-danger:active.focus,\n.btn-danger.active.focus,\n.open > .dropdown-toggle.btn-danger.focus {\n  color: #fff;\n  background-color: #ac2925;\n  border-color: #761c19;\n}\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n  background-image: none;\n}\n.btn-danger.disabled,\n.btn-danger[disabled],\nfieldset[disabled] .btn-danger,\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled.focus,\n.btn-danger[disabled].focus,\nfieldset[disabled] .btn-danger.focus,\n.btn-danger.disabled:active,\n.btn-danger[disabled]:active,\nfieldset[disabled] .btn-danger:active,\n.btn-danger.disabled.active,\n.btn-danger[disabled].active,\nfieldset[disabled] .btn-danger.active {\n  background-color: #d9534f;\n  border-color: #d43f3a;\n}\n.btn-danger .badge {\n  color: #d9534f;\n  background-color: #fff;\n}\n.btn-link {\n  font-weight: normal;\n  color: #337ab7;\n  border-radius: 0;\n}\n.btn-link,\n.btn-link:active,\n.btn-link.active,\n.btn-link[disabled],\nfieldset[disabled] .btn-link {\n  background-color: transparent;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.btn-link,\n.btn-link:hover,\n.btn-link:focus,\n.btn-link:active {\n  border-color: transparent;\n}\n.btn-link:hover,\n.btn-link:focus {\n  color: #23527c;\n  text-decoration: underline;\n  background-color: transparent;\n}\n.btn-link[disabled]:hover,\nfieldset[disabled] .btn-link:hover,\n.btn-link[disabled]:focus,\nfieldset[disabled] .btn-link:focus {\n  color: #777;\n  text-decoration: none;\n}\n.btn-lg,\n.btn-group-lg > .btn {\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n  border-radius: 6px;\n}\n.btn-sm,\n.btn-group-sm > .btn {\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n.btn-xs,\n.btn-group-xs > .btn {\n  padding: 1px 5px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n.btn-block {\n  display: block;\n  width: 100%;\n}\n.btn-block + .btn-block {\n  margin-top: 5px;\n}\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n  width: 100%;\n}\n.fade {\n  opacity: 0;\n  -webkit-transition: opacity .15s linear;\n       -o-transition: opacity .15s linear;\n          transition: opacity .15s linear;\n}\n.fade.in {\n  opacity: 1;\n}\n.collapse {\n  display: none;\n}\n.collapse.in {\n  display: block;\n}\ntr.collapse.in {\n  display: table-row;\n}\ntbody.collapse.in {\n  display: table-row-group;\n}\n.collapsing {\n  position: relative;\n  height: 0;\n  overflow: hidden;\n  -webkit-transition-timing-function: ease;\n       -o-transition-timing-function: ease;\n          transition-timing-function: ease;\n  -webkit-transition-duration: .35s;\n       -o-transition-duration: .35s;\n          transition-duration: .35s;\n  -webkit-transition-property: height, visibility;\n       -o-transition-property: height, visibility;\n          transition-property: height, visibility;\n}\n.caret {\n  display: inline-block;\n  width: 0;\n  height: 0;\n  margin-left: 2px;\n  vertical-align: middle;\n  border-top: 4px dashed;\n  border-top: 4px solid \\9;\n  border-right: 4px solid transparent;\n  border-left: 4px solid transparent;\n}\n.dropup,\n.dropdown {\n  position: relative;\n}\n.dropdown-toggle:focus {\n  outline: 0;\n}\n.dropdown-menu {\n  position: absolute;\n  top: 100%;\n  left: 0;\n  z-index: 1000;\n  display: none;\n  float: left;\n  min-width: 160px;\n  padding: 5px 0;\n  margin: 2px 0 0;\n  font-size: 14px;\n  text-align: left;\n  list-style: none;\n  background-color: #fff;\n  -webkit-background-clip: padding-box;\n          background-clip: padding-box;\n  border: 1px solid #ccc;\n  border: 1px solid rgba(0, 0, 0, .15);\n  border-radius: 4px;\n  -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175);\n          box-shadow: 0 6px 12px rgba(0, 0, 0, .175);\n}\n.dropdown-menu.pull-right {\n  right: 0;\n  left: auto;\n}\n.dropdown-menu .divider {\n  height: 1px;\n  margin: 9px 0;\n  overflow: hidden;\n  background-color: #e5e5e5;\n}\n.dropdown-menu > li > a {\n  display: block;\n  padding: 3px 20px;\n  clear: both;\n  font-weight: normal;\n  line-height: 1.42857143;\n  color: #333;\n  white-space: nowrap;\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n  color: #262626;\n  text-decoration: none;\n  background-color: #f5f5f5;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n  color: #fff;\n  text-decoration: none;\n  background-color: #337ab7;\n  outline: 0;\n}\n.dropdown-menu > .disabled > a,\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n  color: #777;\n}\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n  text-decoration: none;\n  cursor: not-allowed;\n  background-color: transparent;\n  background-image: none;\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n}\n.open > .dropdown-menu {\n  display: block;\n}\n.open > a {\n  outline: 0;\n}\n.dropdown-menu-right {\n  right: 0;\n  left: auto;\n}\n.dropdown-menu-left {\n  right: auto;\n  left: 0;\n}\n.dropdown-header {\n  display: block;\n  padding: 3px 20px;\n  font-size: 12px;\n  line-height: 1.42857143;\n  color: #777;\n  white-space: nowrap;\n}\n.dropdown-backdrop {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 990;\n}\n.pull-right > .dropdown-menu {\n  right: 0;\n  left: auto;\n}\n.dropup .caret,\n.navbar-fixed-bottom .dropdown .caret {\n  content: \"\";\n  border-top: 0;\n  border-bottom: 4px dashed;\n  border-bottom: 4px solid \\9;\n}\n.dropup .dropdown-menu,\n.navbar-fixed-bottom .dropdown .dropdown-menu {\n  top: auto;\n  bottom: 100%;\n  margin-bottom: 2px;\n}\n@media (min-width: 768px) {\n  .navbar-right .dropdown-menu {\n    right: 0;\n    left: auto;\n  }\n  .navbar-right .dropdown-menu-left {\n    right: auto;\n    left: 0;\n  }\n}\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: inline-block;\n  vertical-align: middle;\n}\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n  position: relative;\n  float: left;\n}\n.btn-group > .btn:hover,\n.btn-group-vertical > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group-vertical > .btn:focus,\n.btn-group > .btn:active,\n.btn-group-vertical > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn.active {\n  z-index: 2;\n}\n.btn-group .btn + .btn,\n.btn-group .btn + .btn-group,\n.btn-group .btn-group + .btn,\n.btn-group .btn-group + .btn-group {\n  margin-left: -1px;\n}\n.btn-toolbar {\n  margin-left: -5px;\n}\n.btn-toolbar .btn,\n.btn-toolbar .btn-group,\n.btn-toolbar .input-group {\n  float: left;\n}\n.btn-toolbar > .btn,\n.btn-toolbar > .btn-group,\n.btn-toolbar > .input-group {\n  margin-left: 5px;\n}\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n  border-radius: 0;\n}\n.btn-group > .btn:first-child {\n  margin-left: 0;\n}\n.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group > .btn-group {\n  float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n  outline: 0;\n}\n.btn-group > .btn + .dropdown-toggle {\n  padding-right: 8px;\n  padding-left: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n  padding-right: 12px;\n  padding-left: 12px;\n}\n.btn-group.open .dropdown-toggle {\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n          box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n}\n.btn-group.open .dropdown-toggle.btn-link {\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.btn .caret {\n  margin-left: 0;\n}\n.btn-lg .caret {\n  border-width: 5px 5px 0;\n  border-bottom-width: 0;\n}\n.dropup .btn-lg .caret {\n  border-width: 0 5px 5px;\n}\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group,\n.btn-group-vertical > .btn-group > .btn {\n  display: block;\n  float: none;\n  width: 100%;\n  max-width: 100%;\n}\n.btn-group-vertical > .btn-group > .btn {\n  float: none;\n}\n.btn-group-vertical > .btn + .btn,\n.btn-group-vertical > .btn + .btn-group,\n.btn-group-vertical > .btn-group + .btn,\n.btn-group-vertical > .btn-group + .btn-group {\n  margin-top: -1px;\n  margin-left: 0;\n}\n.btn-group-vertical > .btn:not(:first-child):not(:last-child) {\n  border-radius: 0;\n}\n.btn-group-vertical > .btn:first-child:not(:last-child) {\n  border-top-right-radius: 4px;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn:last-child:not(:first-child) {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n  border-bottom-left-radius: 4px;\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.btn-group-justified {\n  display: table;\n  width: 100%;\n  table-layout: fixed;\n  border-collapse: separate;\n}\n.btn-group-justified > .btn,\n.btn-group-justified > .btn-group {\n  display: table-cell;\n  float: none;\n  width: 1%;\n}\n.btn-group-justified > .btn-group .btn {\n  width: 100%;\n}\n.btn-group-justified > .btn-group .dropdown-menu {\n  left: auto;\n}\n[data-toggle=\"buttons\"] > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn input[type=\"checkbox\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"checkbox\"] {\n  position: absolute;\n  clip: rect(0, 0, 0, 0);\n  pointer-events: none;\n}\n.input-group {\n  position: relative;\n  display: table;\n  border-collapse: separate;\n}\n.input-group[class*=\"col-\"] {\n  float: none;\n  padding-right: 0;\n  padding-left: 0;\n}\n.input-group .form-control {\n  position: relative;\n  z-index: 2;\n  float: left;\n  width: 100%;\n  margin-bottom: 0;\n}\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n  height: 46px;\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n  border-radius: 6px;\n}\nselect.input-group-lg > .form-control,\nselect.input-group-lg > .input-group-addon,\nselect.input-group-lg > .input-group-btn > .btn {\n  height: 46px;\n  line-height: 46px;\n}\ntextarea.input-group-lg > .form-control,\ntextarea.input-group-lg > .input-group-addon,\ntextarea.input-group-lg > .input-group-btn > .btn,\nselect[multiple].input-group-lg > .form-control,\nselect[multiple].input-group-lg > .input-group-addon,\nselect[multiple].input-group-lg > .input-group-btn > .btn {\n  height: auto;\n}\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n  height: 30px;\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\nselect.input-group-sm > .form-control,\nselect.input-group-sm > .input-group-addon,\nselect.input-group-sm > .input-group-btn > .btn {\n  height: 30px;\n  line-height: 30px;\n}\ntextarea.input-group-sm > .form-control,\ntextarea.input-group-sm > .input-group-addon,\ntextarea.input-group-sm > .input-group-btn > .btn,\nselect[multiple].input-group-sm > .form-control,\nselect[multiple].input-group-sm > .input-group-addon,\nselect[multiple].input-group-sm > .input-group-btn > .btn {\n  height: auto;\n}\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n  display: table-cell;\n}\n.input-group-addon:not(:first-child):not(:last-child),\n.input-group-btn:not(:first-child):not(:last-child),\n.input-group .form-control:not(:first-child):not(:last-child) {\n  border-radius: 0;\n}\n.input-group-addon,\n.input-group-btn {\n  width: 1%;\n  white-space: nowrap;\n  vertical-align: middle;\n}\n.input-group-addon {\n  padding: 6px 12px;\n  font-size: 14px;\n  font-weight: normal;\n  line-height: 1;\n  color: #555;\n  text-align: center;\n  background-color: #eee;\n  border: 1px solid #ccc;\n  border-radius: 4px;\n}\n.input-group-addon.input-sm {\n  padding: 5px 10px;\n  font-size: 12px;\n  border-radius: 3px;\n}\n.input-group-addon.input-lg {\n  padding: 10px 16px;\n  font-size: 18px;\n  border-radius: 6px;\n}\n.input-group-addon input[type=\"radio\"],\n.input-group-addon input[type=\"checkbox\"] {\n  margin-top: 0;\n}\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.input-group-addon:first-child {\n  border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.input-group-addon:last-child {\n  border-left: 0;\n}\n.input-group-btn {\n  position: relative;\n  font-size: 0;\n  white-space: nowrap;\n}\n.input-group-btn > .btn {\n  position: relative;\n}\n.input-group-btn > .btn + .btn {\n  margin-left: -1px;\n}\n.input-group-btn > .btn:hover,\n.input-group-btn > .btn:focus,\n.input-group-btn > .btn:active {\n  z-index: 2;\n}\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group {\n  margin-right: -1px;\n}\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group {\n  z-index: 2;\n  margin-left: -1px;\n}\n.nav {\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n.nav > li {\n  position: relative;\n  display: block;\n}\n.nav > li > a {\n  position: relative;\n  display: block;\n  padding: 10px 15px;\n}\n.nav > li > a:hover,\n.nav > li > a:focus {\n  text-decoration: none;\n  background-color: #eee;\n}\n.nav > li.disabled > a {\n  color: #777;\n}\n.nav > li.disabled > a:hover,\n.nav > li.disabled > a:focus {\n  color: #777;\n  text-decoration: none;\n  cursor: not-allowed;\n  background-color: transparent;\n}\n.nav .open > a,\n.nav .open > a:hover,\n.nav .open > a:focus {\n  background-color: #eee;\n  border-color: #337ab7;\n}\n.nav .nav-divider {\n  height: 1px;\n  margin: 9px 0;\n  overflow: hidden;\n  background-color: #e5e5e5;\n}\n.nav > li > a > img {\n  max-width: none;\n}\n.nav-tabs {\n  border-bottom: 1px solid #ddd;\n}\n.nav-tabs > li {\n  float: left;\n  margin-bottom: -1px;\n}\n.nav-tabs > li > a {\n  margin-right: 2px;\n  line-height: 1.42857143;\n  border: 1px solid transparent;\n  border-radius: 4px 4px 0 0;\n}\n.nav-tabs > li > a:hover {\n  border-color: #eee #eee #ddd;\n}\n.nav-tabs > li.active > a,\n.nav-tabs > li.active > a:hover,\n.nav-tabs > li.active > a:focus {\n  color: #555;\n  cursor: default;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-bottom-color: transparent;\n}\n.nav-tabs.nav-justified {\n  width: 100%;\n  border-bottom: 0;\n}\n.nav-tabs.nav-justified > li {\n  float: none;\n}\n.nav-tabs.nav-justified > li > a {\n  margin-bottom: 5px;\n  text-align: center;\n}\n.nav-tabs.nav-justified > .dropdown .dropdown-menu {\n  top: auto;\n  left: auto;\n}\n@media (min-width: 768px) {\n  .nav-tabs.nav-justified > li {\n    display: table-cell;\n    width: 1%;\n  }\n  .nav-tabs.nav-justified > li > a {\n    margin-bottom: 0;\n  }\n}\n.nav-tabs.nav-justified > li > a {\n  margin-right: 0;\n  border-radius: 4px;\n}\n.nav-tabs.nav-justified > .active > a,\n.nav-tabs.nav-justified > .active > a:hover,\n.nav-tabs.nav-justified > .active > a:focus {\n  border: 1px solid #ddd;\n}\n@media (min-width: 768px) {\n  .nav-tabs.nav-justified > li > a {\n    border-bottom: 1px solid #ddd;\n    border-radius: 4px 4px 0 0;\n  }\n  .nav-tabs.nav-justified > .active > a,\n  .nav-tabs.nav-justified > .active > a:hover,\n  .nav-tabs.nav-justified > .active > a:focus {\n    border-bottom-color: #fff;\n  }\n}\n.nav-pills > li {\n  float: left;\n}\n.nav-pills > li > a {\n  border-radius: 4px;\n}\n.nav-pills > li + li {\n  margin-left: 2px;\n}\n.nav-pills > li.active > a,\n.nav-pills > li.active > a:hover,\n.nav-pills > li.active > a:focus {\n  color: #fff;\n  background-color: #337ab7;\n}\n.nav-stacked > li {\n  float: none;\n}\n.nav-stacked > li + li {\n  margin-top: 2px;\n  margin-left: 0;\n}\n.nav-justified {\n  width: 100%;\n}\n.nav-justified > li {\n  float: none;\n}\n.nav-justified > li > a {\n  margin-bottom: 5px;\n  text-align: center;\n}\n.nav-justified > .dropdown .dropdown-menu {\n  top: auto;\n  left: auto;\n}\n@media (min-width: 768px) {\n  .nav-justified > li {\n    display: table-cell;\n    width: 1%;\n  }\n  .nav-justified > li > a {\n    margin-bottom: 0;\n  }\n}\n.nav-tabs-justified {\n  border-bottom: 0;\n}\n.nav-tabs-justified > li > a {\n  margin-right: 0;\n  border-radius: 4px;\n}\n.nav-tabs-justified > .active > a,\n.nav-tabs-justified > .active > a:hover,\n.nav-tabs-justified > .active > a:focus {\n  border: 1px solid #ddd;\n}\n@media (min-width: 768px) {\n  .nav-tabs-justified > li > a {\n    border-bottom: 1px solid #ddd;\n    border-radius: 4px 4px 0 0;\n  }\n  .nav-tabs-justified > .active > a,\n  .nav-tabs-justified > .active > a:hover,\n  .nav-tabs-justified > .active > a:focus {\n    border-bottom-color: #fff;\n  }\n}\n.tab-content > .tab-pane {\n  display: none;\n}\n.tab-content > .active {\n  display: block;\n}\n.nav-tabs .dropdown-menu {\n  margin-top: -1px;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.navbar {\n  position: relative;\n  min-height: 50px;\n  margin-bottom: 20px;\n  border: 1px solid transparent;\n}\n@media (min-width: 768px) {\n  .navbar {\n    border-radius: 4px;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-header {\n    float: left;\n  }\n}\n.navbar-collapse {\n  padding-right: 15px;\n  padding-left: 15px;\n  overflow-x: visible;\n  -webkit-overflow-scrolling: touch;\n  border-top: 1px solid transparent;\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);\n          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);\n}\n.navbar-collapse.in {\n  overflow-y: auto;\n}\n@media (min-width: 768px) {\n  .navbar-collapse {\n    width: auto;\n    border-top: 0;\n    -webkit-box-shadow: none;\n            box-shadow: none;\n  }\n  .navbar-collapse.collapse {\n    display: block !important;\n    height: auto !important;\n    padding-bottom: 0;\n    overflow: visible !important;\n  }\n  .navbar-collapse.in {\n    overflow-y: visible;\n  }\n  .navbar-fixed-top .navbar-collapse,\n  .navbar-static-top .navbar-collapse,\n  .navbar-fixed-bottom .navbar-collapse {\n    padding-right: 0;\n    padding-left: 0;\n  }\n}\n.navbar-fixed-top .navbar-collapse,\n.navbar-fixed-bottom .navbar-collapse {\n  max-height: 340px;\n}\n@media (max-device-width: 480px) and (orientation: landscape) {\n  .navbar-fixed-top .navbar-collapse,\n  .navbar-fixed-bottom .navbar-collapse {\n    max-height: 200px;\n  }\n}\n.container > .navbar-header,\n.container-fluid > .navbar-header,\n.container > .navbar-collapse,\n.container-fluid > .navbar-collapse {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n@media (min-width: 768px) {\n  .container > .navbar-header,\n  .container-fluid > .navbar-header,\n  .container > .navbar-collapse,\n  .container-fluid > .navbar-collapse {\n    margin-right: 0;\n    margin-left: 0;\n  }\n}\n.navbar-static-top {\n  z-index: 1000;\n  border-width: 0 0 1px;\n}\n@media (min-width: 768px) {\n  .navbar-static-top {\n    border-radius: 0;\n  }\n}\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  position: fixed;\n  right: 0;\n  left: 0;\n  z-index: 1030;\n}\n@media (min-width: 768px) {\n  .navbar-fixed-top,\n  .navbar-fixed-bottom {\n    border-radius: 0;\n  }\n}\n.navbar-fixed-top {\n  top: 0;\n  border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n  bottom: 0;\n  margin-bottom: 0;\n  border-width: 1px 0 0;\n}\n.navbar-brand {\n  float: left;\n  height: 50px;\n  padding: 15px 15px;\n  font-size: 18px;\n  line-height: 20px;\n}\n.navbar-brand:hover,\n.navbar-brand:focus {\n  text-decoration: none;\n}\n.navbar-brand > img {\n  display: block;\n}\n@media (min-width: 768px) {\n  .navbar > .container .navbar-brand,\n  .navbar > .container-fluid .navbar-brand {\n    margin-left: -15px;\n  }\n}\n.navbar-toggle {\n  position: relative;\n  float: right;\n  padding: 9px 10px;\n  margin-top: 8px;\n  margin-right: 15px;\n  margin-bottom: 8px;\n  background-color: transparent;\n  background-image: none;\n  border: 1px solid transparent;\n  border-radius: 4px;\n}\n.navbar-toggle:focus {\n  outline: 0;\n}\n.navbar-toggle .icon-bar {\n  display: block;\n  width: 22px;\n  height: 2px;\n  border-radius: 1px;\n}\n.navbar-toggle .icon-bar + .icon-bar {\n  margin-top: 4px;\n}\n@media (min-width: 768px) {\n  .navbar-toggle {\n    display: none;\n  }\n}\n.navbar-nav {\n  margin: 7.5px -15px;\n}\n.navbar-nav > li > a {\n  padding-top: 10px;\n  padding-bottom: 10px;\n  line-height: 20px;\n}\n@media (max-width: 767px) {\n  .navbar-nav .open .dropdown-menu {\n    position: static;\n    float: none;\n    width: auto;\n    margin-top: 0;\n    background-color: transparent;\n    border: 0;\n    -webkit-box-shadow: none;\n            box-shadow: none;\n  }\n  .navbar-nav .open .dropdown-menu > li > a,\n  .navbar-nav .open .dropdown-menu .dropdown-header {\n    padding: 5px 15px 5px 25px;\n  }\n  .navbar-nav .open .dropdown-menu > li > a {\n    line-height: 20px;\n  }\n  .navbar-nav .open .dropdown-menu > li > a:hover,\n  .navbar-nav .open .dropdown-menu > li > a:focus {\n    background-image: none;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-nav {\n    float: left;\n    margin: 0;\n  }\n  .navbar-nav > li {\n    float: left;\n  }\n  .navbar-nav > li > a {\n    padding-top: 15px;\n    padding-bottom: 15px;\n  }\n}\n.navbar-form {\n  padding: 10px 15px;\n  margin-top: 8px;\n  margin-right: -15px;\n  margin-bottom: 8px;\n  margin-left: -15px;\n  border-top: 1px solid transparent;\n  border-bottom: 1px solid transparent;\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);\n          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);\n}\n@media (min-width: 768px) {\n  .navbar-form .form-group {\n    display: inline-block;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .navbar-form .form-control {\n    display: inline-block;\n    width: auto;\n    vertical-align: middle;\n  }\n  .navbar-form .form-control-static {\n    display: inline-block;\n  }\n  .navbar-form .input-group {\n    display: inline-table;\n    vertical-align: middle;\n  }\n  .navbar-form .input-group .input-group-addon,\n  .navbar-form .input-group .input-group-btn,\n  .navbar-form .input-group .form-control {\n    width: auto;\n  }\n  .navbar-form .input-group > .form-control {\n    width: 100%;\n  }\n  .navbar-form .control-label {\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .navbar-form .radio,\n  .navbar-form .checkbox {\n    display: inline-block;\n    margin-top: 0;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .navbar-form .radio label,\n  .navbar-form .checkbox label {\n    padding-left: 0;\n  }\n  .navbar-form .radio input[type=\"radio\"],\n  .navbar-form .checkbox input[type=\"checkbox\"] {\n    position: relative;\n    margin-left: 0;\n  }\n  .navbar-form .has-feedback .form-control-feedback {\n    top: 0;\n  }\n}\n@media (max-width: 767px) {\n  .navbar-form .form-group {\n    margin-bottom: 5px;\n  }\n  .navbar-form .form-group:last-child {\n    margin-bottom: 0;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-form {\n    width: auto;\n    padding-top: 0;\n    padding-bottom: 0;\n    margin-right: 0;\n    margin-left: 0;\n    border: 0;\n    -webkit-box-shadow: none;\n            box-shadow: none;\n  }\n}\n.navbar-nav > li > .dropdown-menu {\n  margin-top: 0;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n  margin-bottom: 0;\n  border-top-left-radius: 4px;\n  border-top-right-radius: 4px;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.navbar-btn {\n  margin-top: 8px;\n  margin-bottom: 8px;\n}\n.navbar-btn.btn-sm {\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\n.navbar-btn.btn-xs {\n  margin-top: 14px;\n  margin-bottom: 14px;\n}\n.navbar-text {\n  margin-top: 15px;\n  margin-bottom: 15px;\n}\n@media (min-width: 768px) {\n  .navbar-text {\n    float: left;\n    margin-right: 15px;\n    margin-left: 15px;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-left {\n    float: left !important;\n  }\n  .navbar-right {\n    float: right !important;\n    margin-right: -15px;\n  }\n  .navbar-right ~ .navbar-right {\n    margin-right: 0;\n  }\n}\n.navbar-default {\n  background-color: #f8f8f8;\n  border-color: #e7e7e7;\n}\n.navbar-default .navbar-brand {\n  color: #777;\n}\n.navbar-default .navbar-brand:hover,\n.navbar-default .navbar-brand:focus {\n  color: #5e5e5e;\n  background-color: transparent;\n}\n.navbar-default .navbar-text {\n  color: #777;\n}\n.navbar-default .navbar-nav > li > a {\n  color: #777;\n}\n.navbar-default .navbar-nav > li > a:hover,\n.navbar-default .navbar-nav > li > a:focus {\n  color: #333;\n  background-color: transparent;\n}\n.navbar-default .navbar-nav > .active > a,\n.navbar-default .navbar-nav > .active > a:hover,\n.navbar-default .navbar-nav > .active > a:focus {\n  color: #555;\n  background-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .disabled > a,\n.navbar-default .navbar-nav > .disabled > a:hover,\n.navbar-default .navbar-nav > .disabled > a:focus {\n  color: #ccc;\n  background-color: transparent;\n}\n.navbar-default .navbar-toggle {\n  border-color: #ddd;\n}\n.navbar-default .navbar-toggle:hover,\n.navbar-default .navbar-toggle:focus {\n  background-color: #ddd;\n}\n.navbar-default .navbar-toggle .icon-bar {\n  background-color: #888;\n}\n.navbar-default .navbar-collapse,\n.navbar-default .navbar-form {\n  border-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .open > a:hover,\n.navbar-default .navbar-nav > .open > a:focus {\n  color: #555;\n  background-color: #e7e7e7;\n}\n@media (max-width: 767px) {\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a {\n    color: #777;\n  }\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {\n    color: #333;\n    background-color: transparent;\n  }\n  .navbar-default .navbar-nav .open .dropdown-menu > .active > a,\n  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,\n  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {\n    color: #555;\n    background-color: #e7e7e7;\n  }\n  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,\n  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n    color: #ccc;\n    background-color: transparent;\n  }\n}\n.navbar-default .navbar-link {\n  color: #777;\n}\n.navbar-default .navbar-link:hover {\n  color: #333;\n}\n.navbar-default .btn-link {\n  color: #777;\n}\n.navbar-default .btn-link:hover,\n.navbar-default .btn-link:focus {\n  color: #333;\n}\n.navbar-default .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-default .btn-link:hover,\n.navbar-default .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-default .btn-link:focus {\n  color: #ccc;\n}\n.navbar-inverse {\n  background-color: #222;\n  border-color: #080808;\n}\n.navbar-inverse .navbar-brand {\n  color: #9d9d9d;\n}\n.navbar-inverse .navbar-brand:hover,\n.navbar-inverse .navbar-brand:focus {\n  color: #fff;\n  background-color: transparent;\n}\n.navbar-inverse .navbar-text {\n  color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a {\n  color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a:hover,\n.navbar-inverse .navbar-nav > li > a:focus {\n  color: #fff;\n  background-color: transparent;\n}\n.navbar-inverse .navbar-nav > .active > a,\n.navbar-inverse .navbar-nav > .active > a:hover,\n.navbar-inverse .navbar-nav > .active > a:focus {\n  color: #fff;\n  background-color: #080808;\n}\n.navbar-inverse .navbar-nav > .disabled > a,\n.navbar-inverse .navbar-nav > .disabled > a:hover,\n.navbar-inverse .navbar-nav > .disabled > a:focus {\n  color: #444;\n  background-color: transparent;\n}\n.navbar-inverse .navbar-toggle {\n  border-color: #333;\n}\n.navbar-inverse .navbar-toggle:hover,\n.navbar-inverse .navbar-toggle:focus {\n  background-color: #333;\n}\n.navbar-inverse .navbar-toggle .icon-bar {\n  background-color: #fff;\n}\n.navbar-inverse .navbar-collapse,\n.navbar-inverse .navbar-form {\n  border-color: #101010;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .open > a:hover,\n.navbar-inverse .navbar-nav > .open > a:focus {\n  color: #fff;\n  background-color: #080808;\n}\n@media (max-width: 767px) {\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {\n    border-color: #080808;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu .divider {\n    background-color: #080808;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {\n    color: #9d9d9d;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {\n    color: #fff;\n    background-color: transparent;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {\n    color: #fff;\n    background-color: #080808;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n    color: #444;\n    background-color: transparent;\n  }\n}\n.navbar-inverse .navbar-link {\n  color: #9d9d9d;\n}\n.navbar-inverse .navbar-link:hover {\n  color: #fff;\n}\n.navbar-inverse .btn-link {\n  color: #9d9d9d;\n}\n.navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link:focus {\n  color: #fff;\n}\n.navbar-inverse .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-inverse .btn-link:focus {\n  color: #444;\n}\n.breadcrumb {\n  padding: 8px 15px;\n  margin-bottom: 20px;\n  list-style: none;\n  background-color: #f5f5f5;\n  border-radius: 4px;\n}\n.breadcrumb > li {\n  display: inline-block;\n}\n.breadcrumb > li + li:before {\n  padding: 0 5px;\n  color: #ccc;\n  content: \"/\\00a0\";\n}\n.breadcrumb > .active {\n  color: #777;\n}\n.pagination {\n  display: inline-block;\n  padding-left: 0;\n  margin: 20px 0;\n  border-radius: 4px;\n}\n.pagination > li {\n  display: inline;\n}\n.pagination > li > a,\n.pagination > li > span {\n  position: relative;\n  float: left;\n  padding: 6px 12px;\n  margin-left: -1px;\n  line-height: 1.42857143;\n  color: #337ab7;\n  text-decoration: none;\n  background-color: #fff;\n  border: 1px solid #ddd;\n}\n.pagination > li:first-child > a,\n.pagination > li:first-child > span {\n  margin-left: 0;\n  border-top-left-radius: 4px;\n  border-bottom-left-radius: 4px;\n}\n.pagination > li:last-child > a,\n.pagination > li:last-child > span {\n  border-top-right-radius: 4px;\n  border-bottom-right-radius: 4px;\n}\n.pagination > li > a:hover,\n.pagination > li > span:hover,\n.pagination > li > a:focus,\n.pagination > li > span:focus {\n  z-index: 3;\n  color: #23527c;\n  background-color: #eee;\n  border-color: #ddd;\n}\n.pagination > .active > a,\n.pagination > .active > span,\n.pagination > .active > a:hover,\n.pagination > .active > span:hover,\n.pagination > .active > a:focus,\n.pagination > .active > span:focus {\n  z-index: 2;\n  color: #fff;\n  cursor: default;\n  background-color: #337ab7;\n  border-color: #337ab7;\n}\n.pagination > .disabled > span,\n.pagination > .disabled > span:hover,\n.pagination > .disabled > span:focus,\n.pagination > .disabled > a,\n.pagination > .disabled > a:hover,\n.pagination > .disabled > a:focus {\n  color: #777;\n  cursor: not-allowed;\n  background-color: #fff;\n  border-color: #ddd;\n}\n.pagination-lg > li > a,\n.pagination-lg > li > span {\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n}\n.pagination-lg > li:first-child > a,\n.pagination-lg > li:first-child > span {\n  border-top-left-radius: 6px;\n  border-bottom-left-radius: 6px;\n}\n.pagination-lg > li:last-child > a,\n.pagination-lg > li:last-child > span {\n  border-top-right-radius: 6px;\n  border-bottom-right-radius: 6px;\n}\n.pagination-sm > li > a,\n.pagination-sm > li > span {\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n}\n.pagination-sm > li:first-child > a,\n.pagination-sm > li:first-child > span {\n  border-top-left-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.pagination-sm > li:last-child > a,\n.pagination-sm > li:last-child > span {\n  border-top-right-radius: 3px;\n  border-bottom-right-radius: 3px;\n}\n.pager {\n  padding-left: 0;\n  margin: 20px 0;\n  text-align: center;\n  list-style: none;\n}\n.pager li {\n  display: inline;\n}\n.pager li > a,\n.pager li > span {\n  display: inline-block;\n  padding: 5px 14px;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-radius: 15px;\n}\n.pager li > a:hover,\n.pager li > a:focus {\n  text-decoration: none;\n  background-color: #eee;\n}\n.pager .next > a,\n.pager .next > span {\n  float: right;\n}\n.pager .previous > a,\n.pager .previous > span {\n  float: left;\n}\n.pager .disabled > a,\n.pager .disabled > a:hover,\n.pager .disabled > a:focus,\n.pager .disabled > span {\n  color: #777;\n  cursor: not-allowed;\n  background-color: #fff;\n}\n.label {\n  display: inline;\n  padding: .2em .6em .3em;\n  font-size: 75%;\n  font-weight: bold;\n  line-height: 1;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: .25em;\n}\na.label:hover,\na.label:focus {\n  color: #fff;\n  text-decoration: none;\n  cursor: pointer;\n}\n.label:empty {\n  display: none;\n}\n.btn .label {\n  position: relative;\n  top: -1px;\n}\n.label-default {\n  background-color: #777;\n}\n.label-default[href]:hover,\n.label-default[href]:focus {\n  background-color: #5e5e5e;\n}\n.label-primary {\n  background-color: #337ab7;\n}\n.label-primary[href]:hover,\n.label-primary[href]:focus {\n  background-color: #286090;\n}\n.label-success {\n  background-color: #5cb85c;\n}\n.label-success[href]:hover,\n.label-success[href]:focus {\n  background-color: #449d44;\n}\n.label-info {\n  background-color: #5bc0de;\n}\n.label-info[href]:hover,\n.label-info[href]:focus {\n  background-color: #31b0d5;\n}\n.label-warning {\n  background-color: #f0ad4e;\n}\n.label-warning[href]:hover,\n.label-warning[href]:focus {\n  background-color: #ec971f;\n}\n.label-danger {\n  background-color: #d9534f;\n}\n.label-danger[href]:hover,\n.label-danger[href]:focus {\n  background-color: #c9302c;\n}\n.badge {\n  display: inline-block;\n  min-width: 10px;\n  padding: 3px 7px;\n  font-size: 12px;\n  font-weight: bold;\n  line-height: 1;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: middle;\n  background-color: #777;\n  border-radius: 10px;\n}\n.badge:empty {\n  display: none;\n}\n.btn .badge {\n  position: relative;\n  top: -1px;\n}\n.btn-xs .badge,\n.btn-group-xs > .btn .badge {\n  top: 0;\n  padding: 1px 5px;\n}\na.badge:hover,\na.badge:focus {\n  color: #fff;\n  text-decoration: none;\n  cursor: pointer;\n}\n.list-group-item.active > .badge,\n.nav-pills > .active > a > .badge {\n  color: #337ab7;\n  background-color: #fff;\n}\n.list-group-item > .badge {\n  float: right;\n}\n.list-group-item > .badge + .badge {\n  margin-right: 5px;\n}\n.nav-pills > li > a > .badge {\n  margin-left: 3px;\n}\n.jumbotron {\n  padding-top: 30px;\n  padding-bottom: 30px;\n  margin-bottom: 30px;\n  color: inherit;\n  background-color: #eee;\n}\n.jumbotron h1,\n.jumbotron .h1 {\n  color: inherit;\n}\n.jumbotron p {\n  margin-bottom: 15px;\n  font-size: 21px;\n  font-weight: 200;\n}\n.jumbotron > hr {\n  border-top-color: #d5d5d5;\n}\n.container .jumbotron,\n.container-fluid .jumbotron {\n  border-radius: 6px;\n}\n.jumbotron .container {\n  max-width: 100%;\n}\n@media screen and (min-width: 768px) {\n  .jumbotron {\n    padding-top: 48px;\n    padding-bottom: 48px;\n  }\n  .container .jumbotron,\n  .container-fluid .jumbotron {\n    padding-right: 60px;\n    padding-left: 60px;\n  }\n  .jumbotron h1,\n  .jumbotron .h1 {\n    font-size: 63px;\n  }\n}\n.thumbnail {\n  display: block;\n  padding: 4px;\n  margin-bottom: 20px;\n  line-height: 1.42857143;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-radius: 4px;\n  -webkit-transition: border .2s ease-in-out;\n       -o-transition: border .2s ease-in-out;\n          transition: border .2s ease-in-out;\n}\n.thumbnail > img,\n.thumbnail a > img {\n  margin-right: auto;\n  margin-left: auto;\n}\na.thumbnail:hover,\na.thumbnail:focus,\na.thumbnail.active {\n  border-color: #337ab7;\n}\n.thumbnail .caption {\n  padding: 9px;\n  color: #333;\n}\n.alert {\n  padding: 15px;\n  margin-bottom: 20px;\n  border: 1px solid transparent;\n  border-radius: 4px;\n}\n.alert h4 {\n  margin-top: 0;\n  color: inherit;\n}\n.alert .alert-link {\n  font-weight: bold;\n}\n.alert > p,\n.alert > ul {\n  margin-bottom: 0;\n}\n.alert > p + p {\n  margin-top: 5px;\n}\n.alert-dismissable,\n.alert-dismissible {\n  padding-right: 35px;\n}\n.alert-dismissable .close,\n.alert-dismissible .close {\n  position: relative;\n  top: -2px;\n  right: -21px;\n  color: inherit;\n}\n.alert-success {\n  color: #3c763d;\n  background-color: #dff0d8;\n  border-color: #d6e9c6;\n}\n.alert-success hr {\n  border-top-color: #c9e2b3;\n}\n.alert-success .alert-link {\n  color: #2b542c;\n}\n.alert-info {\n  color: #31708f;\n  background-color: #d9edf7;\n  border-color: #bce8f1;\n}\n.alert-info hr {\n  border-top-color: #a6e1ec;\n}\n.alert-info .alert-link {\n  color: #245269;\n}\n.alert-warning {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n  border-color: #faebcc;\n}\n.alert-warning hr {\n  border-top-color: #f7e1b5;\n}\n.alert-warning .alert-link {\n  color: #66512c;\n}\n.alert-danger {\n  color: #a94442;\n  background-color: #f2dede;\n  border-color: #ebccd1;\n}\n.alert-danger hr {\n  border-top-color: #e4b9c0;\n}\n.alert-danger .alert-link {\n  color: #843534;\n}\n@-webkit-keyframes progress-bar-stripes {\n  from {\n    background-position: 40px 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n@-o-keyframes progress-bar-stripes {\n  from {\n    background-position: 40px 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n@keyframes progress-bar-stripes {\n  from {\n    background-position: 40px 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n.progress {\n  height: 20px;\n  margin-bottom: 20px;\n  overflow: hidden;\n  background-color: #f5f5f5;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);\n          box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);\n}\n.progress-bar {\n  float: left;\n  width: 0;\n  height: 100%;\n  font-size: 12px;\n  line-height: 20px;\n  color: #fff;\n  text-align: center;\n  background-color: #337ab7;\n  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);\n          box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);\n  -webkit-transition: width .6s ease;\n       -o-transition: width .6s ease;\n          transition: width .6s ease;\n}\n.progress-striped .progress-bar,\n.progress-bar-striped {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  -webkit-background-size: 40px 40px;\n          background-size: 40px 40px;\n}\n.progress.active .progress-bar,\n.progress-bar.active {\n  -webkit-animation: progress-bar-stripes 2s linear infinite;\n       -o-animation: progress-bar-stripes 2s linear infinite;\n          animation: progress-bar-stripes 2s linear infinite;\n}\n.progress-bar-success {\n  background-color: #5cb85c;\n}\n.progress-striped .progress-bar-success {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.progress-bar-info {\n  background-color: #5bc0de;\n}\n.progress-striped .progress-bar-info {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.progress-bar-warning {\n  background-color: #f0ad4e;\n}\n.progress-striped .progress-bar-warning {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.progress-bar-danger {\n  background-color: #d9534f;\n}\n.progress-striped .progress-bar-danger {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.media {\n  margin-top: 15px;\n}\n.media:first-child {\n  margin-top: 0;\n}\n.media,\n.media-body {\n  overflow: hidden;\n  zoom: 1;\n}\n.media-body {\n  width: 10000px;\n}\n.media-object {\n  display: block;\n}\n.media-object.img-thumbnail {\n  max-width: none;\n}\n.media-right,\n.media > .pull-right {\n  padding-left: 10px;\n}\n.media-left,\n.media > .pull-left {\n  padding-right: 10px;\n}\n.media-left,\n.media-right,\n.media-body {\n  display: table-cell;\n  vertical-align: top;\n}\n.media-middle {\n  vertical-align: middle;\n}\n.media-bottom {\n  vertical-align: bottom;\n}\n.media-heading {\n  margin-top: 0;\n  margin-bottom: 5px;\n}\n.media-list {\n  padding-left: 0;\n  list-style: none;\n}\n.list-group {\n  padding-left: 0;\n  margin-bottom: 20px;\n}\n.list-group-item {\n  position: relative;\n  display: block;\n  padding: 10px 15px;\n  margin-bottom: -1px;\n  background-color: #fff;\n  border: 1px solid #ddd;\n}\n.list-group-item:first-child {\n  border-top-left-radius: 4px;\n  border-top-right-radius: 4px;\n}\n.list-group-item:last-child {\n  margin-bottom: 0;\n  border-bottom-right-radius: 4px;\n  border-bottom-left-radius: 4px;\n}\na.list-group-item,\nbutton.list-group-item {\n  color: #555;\n}\na.list-group-item .list-group-item-heading,\nbutton.list-group-item .list-group-item-heading {\n  color: #333;\n}\na.list-group-item:hover,\nbutton.list-group-item:hover,\na.list-group-item:focus,\nbutton.list-group-item:focus {\n  color: #555;\n  text-decoration: none;\n  background-color: #f5f5f5;\n}\nbutton.list-group-item {\n  width: 100%;\n  text-align: left;\n}\n.list-group-item.disabled,\n.list-group-item.disabled:hover,\n.list-group-item.disabled:focus {\n  color: #777;\n  cursor: not-allowed;\n  background-color: #eee;\n}\n.list-group-item.disabled .list-group-item-heading,\n.list-group-item.disabled:hover .list-group-item-heading,\n.list-group-item.disabled:focus .list-group-item-heading {\n  color: inherit;\n}\n.list-group-item.disabled .list-group-item-text,\n.list-group-item.disabled:hover .list-group-item-text,\n.list-group-item.disabled:focus .list-group-item-text {\n  color: #777;\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n  z-index: 2;\n  color: #fff;\n  background-color: #337ab7;\n  border-color: #337ab7;\n}\n.list-group-item.active .list-group-item-heading,\n.list-group-item.active:hover .list-group-item-heading,\n.list-group-item.active:focus .list-group-item-heading,\n.list-group-item.active .list-group-item-heading > small,\n.list-group-item.active:hover .list-group-item-heading > small,\n.list-group-item.active:focus .list-group-item-heading > small,\n.list-group-item.active .list-group-item-heading > .small,\n.list-group-item.active:hover .list-group-item-heading > .small,\n.list-group-item.active:focus .list-group-item-heading > .small {\n  color: inherit;\n}\n.list-group-item.active .list-group-item-text,\n.list-group-item.active:hover .list-group-item-text,\n.list-group-item.active:focus .list-group-item-text {\n  color: #c7ddef;\n}\n.list-group-item-success {\n  color: #3c763d;\n  background-color: #dff0d8;\n}\na.list-group-item-success,\nbutton.list-group-item-success {\n  color: #3c763d;\n}\na.list-group-item-success .list-group-item-heading,\nbutton.list-group-item-success .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-success:hover,\nbutton.list-group-item-success:hover,\na.list-group-item-success:focus,\nbutton.list-group-item-success:focus {\n  color: #3c763d;\n  background-color: #d0e9c6;\n}\na.list-group-item-success.active,\nbutton.list-group-item-success.active,\na.list-group-item-success.active:hover,\nbutton.list-group-item-success.active:hover,\na.list-group-item-success.active:focus,\nbutton.list-group-item-success.active:focus {\n  color: #fff;\n  background-color: #3c763d;\n  border-color: #3c763d;\n}\n.list-group-item-info {\n  color: #31708f;\n  background-color: #d9edf7;\n}\na.list-group-item-info,\nbutton.list-group-item-info {\n  color: #31708f;\n}\na.list-group-item-info .list-group-item-heading,\nbutton.list-group-item-info .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-info:hover,\nbutton.list-group-item-info:hover,\na.list-group-item-info:focus,\nbutton.list-group-item-info:focus {\n  color: #31708f;\n  background-color: #c4e3f3;\n}\na.list-group-item-info.active,\nbutton.list-group-item-info.active,\na.list-group-item-info.active:hover,\nbutton.list-group-item-info.active:hover,\na.list-group-item-info.active:focus,\nbutton.list-group-item-info.active:focus {\n  color: #fff;\n  background-color: #31708f;\n  border-color: #31708f;\n}\n.list-group-item-warning {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n}\na.list-group-item-warning,\nbutton.list-group-item-warning {\n  color: #8a6d3b;\n}\na.list-group-item-warning .list-group-item-heading,\nbutton.list-group-item-warning .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-warning:hover,\nbutton.list-group-item-warning:hover,\na.list-group-item-warning:focus,\nbutton.list-group-item-warning:focus {\n  color: #8a6d3b;\n  background-color: #faf2cc;\n}\na.list-group-item-warning.active,\nbutton.list-group-item-warning.active,\na.list-group-item-warning.active:hover,\nbutton.list-group-item-warning.active:hover,\na.list-group-item-warning.active:focus,\nbutton.list-group-item-warning.active:focus {\n  color: #fff;\n  background-color: #8a6d3b;\n  border-color: #8a6d3b;\n}\n.list-group-item-danger {\n  color: #a94442;\n  background-color: #f2dede;\n}\na.list-group-item-danger,\nbutton.list-group-item-danger {\n  color: #a94442;\n}\na.list-group-item-danger .list-group-item-heading,\nbutton.list-group-item-danger .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-danger:hover,\nbutton.list-group-item-danger:hover,\na.list-group-item-danger:focus,\nbutton.list-group-item-danger:focus {\n  color: #a94442;\n  background-color: #ebcccc;\n}\na.list-group-item-danger.active,\nbutton.list-group-item-danger.active,\na.list-group-item-danger.active:hover,\nbutton.list-group-item-danger.active:hover,\na.list-group-item-danger.active:focus,\nbutton.list-group-item-danger.active:focus {\n  color: #fff;\n  background-color: #a94442;\n  border-color: #a94442;\n}\n.list-group-item-heading {\n  margin-top: 0;\n  margin-bottom: 5px;\n}\n.list-group-item-text {\n  margin-bottom: 0;\n  line-height: 1.3;\n}\n.panel {\n  margin-bottom: 20px;\n  background-color: #fff;\n  border: 1px solid transparent;\n  border-radius: 4px;\n  -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05);\n          box-shadow: 0 1px 1px rgba(0, 0, 0, .05);\n}\n.panel-body {\n  padding: 15px;\n}\n.panel-heading {\n  padding: 10px 15px;\n  border-bottom: 1px solid transparent;\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel-heading > .dropdown .dropdown-toggle {\n  color: inherit;\n}\n.panel-title {\n  margin-top: 0;\n  margin-bottom: 0;\n  font-size: 16px;\n  color: inherit;\n}\n.panel-title > a,\n.panel-title > small,\n.panel-title > .small,\n.panel-title > small > a,\n.panel-title > .small > a {\n  color: inherit;\n}\n.panel-footer {\n  padding: 10px 15px;\n  background-color: #f5f5f5;\n  border-top: 1px solid #ddd;\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel > .list-group,\n.panel > .panel-collapse > .list-group {\n  margin-bottom: 0;\n}\n.panel > .list-group .list-group-item,\n.panel > .panel-collapse > .list-group .list-group-item {\n  border-width: 1px 0;\n  border-radius: 0;\n}\n.panel > .list-group:first-child .list-group-item:first-child,\n.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {\n  border-top: 0;\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel > .list-group:last-child .list-group-item:last-child,\n.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {\n  border-bottom: 0;\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.panel-heading + .list-group .list-group-item:first-child {\n  border-top-width: 0;\n}\n.list-group + .panel-footer {\n  border-top-width: 0;\n}\n.panel > .table,\n.panel > .table-responsive > .table,\n.panel > .panel-collapse > .table {\n  margin-bottom: 0;\n}\n.panel > .table caption,\n.panel > .table-responsive > .table caption,\n.panel > .panel-collapse > .table caption {\n  padding-right: 15px;\n  padding-left: 15px;\n}\n.panel > .table:first-child,\n.panel > .table-responsive:first-child > .table:first-child {\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {\n  border-top-left-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {\n  border-top-right-radius: 3px;\n}\n.panel > .table:last-child,\n.panel > .table-responsive:last-child > .table:last-child {\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {\n  border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {\n  border-bottom-right-radius: 3px;\n}\n.panel > .panel-body + .table,\n.panel > .panel-body + .table-responsive,\n.panel > .table + .panel-body,\n.panel > .table-responsive + .panel-body {\n  border-top: 1px solid #ddd;\n}\n.panel > .table > tbody:first-child > tr:first-child th,\n.panel > .table > tbody:first-child > tr:first-child td {\n  border-top: 0;\n}\n.panel > .table-bordered,\n.panel > .table-responsive > .table-bordered {\n  border: 0;\n}\n.panel > .table-bordered > thead > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,\n.panel > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-bordered > thead > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,\n.panel > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-bordered > tfoot > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n  border-left: 0;\n}\n.panel > .table-bordered > thead > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,\n.panel > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-bordered > thead > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,\n.panel > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-bordered > tfoot > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n  border-right: 0;\n}\n.panel > .table-bordered > thead > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,\n.panel > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-bordered > thead > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,\n.panel > .table-bordered > tbody > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {\n  border-bottom: 0;\n}\n.panel > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-bordered > tfoot > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {\n  border-bottom: 0;\n}\n.panel > .table-responsive {\n  margin-bottom: 0;\n  border: 0;\n}\n.panel-group {\n  margin-bottom: 20px;\n}\n.panel-group .panel {\n  margin-bottom: 0;\n  border-radius: 4px;\n}\n.panel-group .panel + .panel {\n  margin-top: 5px;\n}\n.panel-group .panel-heading {\n  border-bottom: 0;\n}\n.panel-group .panel-heading + .panel-collapse > .panel-body,\n.panel-group .panel-heading + .panel-collapse > .list-group {\n  border-top: 1px solid #ddd;\n}\n.panel-group .panel-footer {\n  border-top: 0;\n}\n.panel-group .panel-footer + .panel-collapse .panel-body {\n  border-bottom: 1px solid #ddd;\n}\n.panel-default {\n  border-color: #ddd;\n}\n.panel-default > .panel-heading {\n  color: #333;\n  background-color: #f5f5f5;\n  border-color: #ddd;\n}\n.panel-default > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #ddd;\n}\n.panel-default > .panel-heading .badge {\n  color: #f5f5f5;\n  background-color: #333;\n}\n.panel-default > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #ddd;\n}\n.panel-primary {\n  border-color: #337ab7;\n}\n.panel-primary > .panel-heading {\n  color: #fff;\n  background-color: #337ab7;\n  border-color: #337ab7;\n}\n.panel-primary > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #337ab7;\n}\n.panel-primary > .panel-heading .badge {\n  color: #337ab7;\n  background-color: #fff;\n}\n.panel-primary > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #337ab7;\n}\n.panel-success {\n  border-color: #d6e9c6;\n}\n.panel-success > .panel-heading {\n  color: #3c763d;\n  background-color: #dff0d8;\n  border-color: #d6e9c6;\n}\n.panel-success > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #d6e9c6;\n}\n.panel-success > .panel-heading .badge {\n  color: #dff0d8;\n  background-color: #3c763d;\n}\n.panel-success > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #d6e9c6;\n}\n.panel-info {\n  border-color: #bce8f1;\n}\n.panel-info > .panel-heading {\n  color: #31708f;\n  background-color: #d9edf7;\n  border-color: #bce8f1;\n}\n.panel-info > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #bce8f1;\n}\n.panel-info > .panel-heading .badge {\n  color: #d9edf7;\n  background-color: #31708f;\n}\n.panel-info > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #bce8f1;\n}\n.panel-warning {\n  border-color: #faebcc;\n}\n.panel-warning > .panel-heading {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n  border-color: #faebcc;\n}\n.panel-warning > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #faebcc;\n}\n.panel-warning > .panel-heading .badge {\n  color: #fcf8e3;\n  background-color: #8a6d3b;\n}\n.panel-warning > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #faebcc;\n}\n.panel-danger {\n  border-color: #ebccd1;\n}\n.panel-danger > .panel-heading {\n  color: #a94442;\n  background-color: #f2dede;\n  border-color: #ebccd1;\n}\n.panel-danger > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #ebccd1;\n}\n.panel-danger > .panel-heading .badge {\n  color: #f2dede;\n  background-color: #a94442;\n}\n.panel-danger > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #ebccd1;\n}\n.embed-responsive {\n  position: relative;\n  display: block;\n  height: 0;\n  padding: 0;\n  overflow: hidden;\n}\n.embed-responsive .embed-responsive-item,\n.embed-responsive iframe,\n.embed-responsive embed,\n.embed-responsive object,\n.embed-responsive video {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  border: 0;\n}\n.embed-responsive-16by9 {\n  padding-bottom: 56.25%;\n}\n.embed-responsive-4by3 {\n  padding-bottom: 75%;\n}\n.well {\n  min-height: 20px;\n  padding: 19px;\n  margin-bottom: 20px;\n  background-color: #f5f5f5;\n  border: 1px solid #e3e3e3;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);\n}\n.well blockquote {\n  border-color: #ddd;\n  border-color: rgba(0, 0, 0, .15);\n}\n.well-lg {\n  padding: 24px;\n  border-radius: 6px;\n}\n.well-sm {\n  padding: 9px;\n  border-radius: 3px;\n}\n.close {\n  float: right;\n  font-size: 21px;\n  font-weight: bold;\n  line-height: 1;\n  color: #000;\n  text-shadow: 0 1px 0 #fff;\n  filter: alpha(opacity=20);\n  opacity: .2;\n}\n.close:hover,\n.close:focus {\n  color: #000;\n  text-decoration: none;\n  cursor: pointer;\n  filter: alpha(opacity=50);\n  opacity: .5;\n}\nbutton.close {\n  -webkit-appearance: none;\n  padding: 0;\n  cursor: pointer;\n  background: transparent;\n  border: 0;\n}\n.modal-open {\n  overflow: hidden;\n}\n.modal {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1050;\n  display: none;\n  overflow: hidden;\n  -webkit-overflow-scrolling: touch;\n  outline: 0;\n}\n.modal.fade .modal-dialog {\n  -webkit-transition: -webkit-transform .3s ease-out;\n       -o-transition:      -o-transform .3s ease-out;\n          transition:         transform .3s ease-out;\n  -webkit-transform: translate(0, -25%);\n      -ms-transform: translate(0, -25%);\n       -o-transform: translate(0, -25%);\n          transform: translate(0, -25%);\n}\n.modal.in .modal-dialog {\n  -webkit-transform: translate(0, 0);\n      -ms-transform: translate(0, 0);\n       -o-transform: translate(0, 0);\n          transform: translate(0, 0);\n}\n.modal-open .modal {\n  overflow-x: hidden;\n  overflow-y: auto;\n}\n.modal-dialog {\n  position: relative;\n  width: auto;\n  margin: 10px;\n}\n.modal-content {\n  position: relative;\n  background-color: #fff;\n  -webkit-background-clip: padding-box;\n          background-clip: padding-box;\n  border: 1px solid #999;\n  border: 1px solid rgba(0, 0, 0, .2);\n  border-radius: 6px;\n  outline: 0;\n  -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5);\n          box-shadow: 0 3px 9px rgba(0, 0, 0, .5);\n}\n.modal-backdrop {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1040;\n  background-color: #000;\n}\n.modal-backdrop.fade {\n  filter: alpha(opacity=0);\n  opacity: 0;\n}\n.modal-backdrop.in {\n  filter: alpha(opacity=50);\n  opacity: .5;\n}\n.modal-header {\n  min-height: 16.42857143px;\n  padding: 15px;\n  border-bottom: 1px solid #e5e5e5;\n}\n.modal-header .close {\n  margin-top: -2px;\n}\n.modal-title {\n  margin: 0;\n  line-height: 1.42857143;\n}\n.modal-body {\n  position: relative;\n  padding: 15px;\n}\n.modal-footer {\n  padding: 15px;\n  text-align: right;\n  border-top: 1px solid #e5e5e5;\n}\n.modal-footer .btn + .btn {\n  margin-bottom: 0;\n  margin-left: 5px;\n}\n.modal-footer .btn-group .btn + .btn {\n  margin-left: -1px;\n}\n.modal-footer .btn-block + .btn-block {\n  margin-left: 0;\n}\n.modal-scrollbar-measure {\n  position: absolute;\n  top: -9999px;\n  width: 50px;\n  height: 50px;\n  overflow: scroll;\n}\n@media (min-width: 768px) {\n  .modal-dialog {\n    width: 600px;\n    margin: 30px auto;\n  }\n  .modal-content {\n    -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5);\n            box-shadow: 0 5px 15px rgba(0, 0, 0, .5);\n  }\n  .modal-sm {\n    width: 300px;\n  }\n}\n@media (min-width: 992px) {\n  .modal-lg {\n    width: 900px;\n  }\n}\n.tooltip {\n  position: absolute;\n  z-index: 1070;\n  display: block;\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-size: 12px;\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1.42857143;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  word-spacing: normal;\n  word-wrap: normal;\n  white-space: normal;\n  filter: alpha(opacity=0);\n  opacity: 0;\n\n  line-break: auto;\n}\n.tooltip.in {\n  filter: alpha(opacity=90);\n  opacity: .9;\n}\n.tooltip.top {\n  padding: 5px 0;\n  margin-top: -3px;\n}\n.tooltip.right {\n  padding: 0 5px;\n  margin-left: 3px;\n}\n.tooltip.bottom {\n  padding: 5px 0;\n  margin-top: 3px;\n}\n.tooltip.left {\n  padding: 0 5px;\n  margin-left: -3px;\n}\n.tooltip-inner {\n  max-width: 200px;\n  padding: 3px 8px;\n  color: #fff;\n  text-align: center;\n  background-color: #000;\n  border-radius: 4px;\n}\n.tooltip-arrow {\n  position: absolute;\n  width: 0;\n  height: 0;\n  border-color: transparent;\n  border-style: solid;\n}\n.tooltip.top .tooltip-arrow {\n  bottom: 0;\n  left: 50%;\n  margin-left: -5px;\n  border-width: 5px 5px 0;\n  border-top-color: #000;\n}\n.tooltip.top-left .tooltip-arrow {\n  right: 5px;\n  bottom: 0;\n  margin-bottom: -5px;\n  border-width: 5px 5px 0;\n  border-top-color: #000;\n}\n.tooltip.top-right .tooltip-arrow {\n  bottom: 0;\n  left: 5px;\n  margin-bottom: -5px;\n  border-width: 5px 5px 0;\n  border-top-color: #000;\n}\n.tooltip.right .tooltip-arrow {\n  top: 50%;\n  left: 0;\n  margin-top: -5px;\n  border-width: 5px 5px 5px 0;\n  border-right-color: #000;\n}\n.tooltip.left .tooltip-arrow {\n  top: 50%;\n  right: 0;\n  margin-top: -5px;\n  border-width: 5px 0 5px 5px;\n  border-left-color: #000;\n}\n.tooltip.bottom .tooltip-arrow {\n  top: 0;\n  left: 50%;\n  margin-left: -5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000;\n}\n.tooltip.bottom-left .tooltip-arrow {\n  top: 0;\n  right: 5px;\n  margin-top: -5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000;\n}\n.tooltip.bottom-right .tooltip-arrow {\n  top: 0;\n  left: 5px;\n  margin-top: -5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000;\n}\n.popover {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: 1060;\n  display: none;\n  max-width: 276px;\n  padding: 1px;\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-size: 14px;\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1.42857143;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  word-spacing: normal;\n  word-wrap: normal;\n  white-space: normal;\n  background-color: #fff;\n  -webkit-background-clip: padding-box;\n          background-clip: padding-box;\n  border: 1px solid #ccc;\n  border: 1px solid rgba(0, 0, 0, .2);\n  border-radius: 6px;\n  -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .2);\n          box-shadow: 0 5px 10px rgba(0, 0, 0, .2);\n\n  line-break: auto;\n}\n.popover.top {\n  margin-top: -10px;\n}\n.popover.right {\n  margin-left: 10px;\n}\n.popover.bottom {\n  margin-top: 10px;\n}\n.popover.left {\n  margin-left: -10px;\n}\n.popover-title {\n  padding: 8px 14px;\n  margin: 0;\n  font-size: 14px;\n  background-color: #f7f7f7;\n  border-bottom: 1px solid #ebebeb;\n  border-radius: 5px 5px 0 0;\n}\n.popover-content {\n  padding: 9px 14px;\n}\n.popover > .arrow,\n.popover > .arrow:after {\n  position: absolute;\n  display: block;\n  width: 0;\n  height: 0;\n  border-color: transparent;\n  border-style: solid;\n}\n.popover > .arrow {\n  border-width: 11px;\n}\n.popover > .arrow:after {\n  content: \"\";\n  border-width: 10px;\n}\n.popover.top > .arrow {\n  bottom: -11px;\n  left: 50%;\n  margin-left: -11px;\n  border-top-color: #999;\n  border-top-color: rgba(0, 0, 0, .25);\n  border-bottom-width: 0;\n}\n.popover.top > .arrow:after {\n  bottom: 1px;\n  margin-left: -10px;\n  content: \" \";\n  border-top-color: #fff;\n  border-bottom-width: 0;\n}\n.popover.right > .arrow {\n  top: 50%;\n  left: -11px;\n  margin-top: -11px;\n  border-right-color: #999;\n  border-right-color: rgba(0, 0, 0, .25);\n  border-left-width: 0;\n}\n.popover.right > .arrow:after {\n  bottom: -10px;\n  left: 1px;\n  content: \" \";\n  border-right-color: #fff;\n  border-left-width: 0;\n}\n.popover.bottom > .arrow {\n  top: -11px;\n  left: 50%;\n  margin-left: -11px;\n  border-top-width: 0;\n  border-bottom-color: #999;\n  border-bottom-color: rgba(0, 0, 0, .25);\n}\n.popover.bottom > .arrow:after {\n  top: 1px;\n  margin-left: -10px;\n  content: \" \";\n  border-top-width: 0;\n  border-bottom-color: #fff;\n}\n.popover.left > .arrow {\n  top: 50%;\n  right: -11px;\n  margin-top: -11px;\n  border-right-width: 0;\n  border-left-color: #999;\n  border-left-color: rgba(0, 0, 0, .25);\n}\n.popover.left > .arrow:after {\n  right: 1px;\n  bottom: -10px;\n  content: \" \";\n  border-right-width: 0;\n  border-left-color: #fff;\n}\n.carousel {\n  position: relative;\n}\n.carousel-inner {\n  position: relative;\n  width: 100%;\n  overflow: hidden;\n}\n.carousel-inner > .item {\n  position: relative;\n  display: none;\n  -webkit-transition: .6s ease-in-out left;\n       -o-transition: .6s ease-in-out left;\n          transition: .6s ease-in-out left;\n}\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n  line-height: 1;\n}\n@media all and (transform-3d), (-webkit-transform-3d) {\n  .carousel-inner > .item {\n    -webkit-transition: -webkit-transform .6s ease-in-out;\n         -o-transition:      -o-transform .6s ease-in-out;\n            transition:         transform .6s ease-in-out;\n\n    -webkit-backface-visibility: hidden;\n            backface-visibility: hidden;\n    -webkit-perspective: 1000px;\n            perspective: 1000px;\n  }\n  .carousel-inner > .item.next,\n  .carousel-inner > .item.active.right {\n    left: 0;\n    -webkit-transform: translate3d(100%, 0, 0);\n            transform: translate3d(100%, 0, 0);\n  }\n  .carousel-inner > .item.prev,\n  .carousel-inner > .item.active.left {\n    left: 0;\n    -webkit-transform: translate3d(-100%, 0, 0);\n            transform: translate3d(-100%, 0, 0);\n  }\n  .carousel-inner > .item.next.left,\n  .carousel-inner > .item.prev.right,\n  .carousel-inner > .item.active {\n    left: 0;\n    -webkit-transform: translate3d(0, 0, 0);\n            transform: translate3d(0, 0, 0);\n  }\n}\n.carousel-inner > .active,\n.carousel-inner > .next,\n.carousel-inner > .prev {\n  display: block;\n}\n.carousel-inner > .active {\n  left: 0;\n}\n.carousel-inner > .next,\n.carousel-inner > .prev {\n  position: absolute;\n  top: 0;\n  width: 100%;\n}\n.carousel-inner > .next {\n  left: 100%;\n}\n.carousel-inner > .prev {\n  left: -100%;\n}\n.carousel-inner > .next.left,\n.carousel-inner > .prev.right {\n  left: 0;\n}\n.carousel-inner > .active.left {\n  left: -100%;\n}\n.carousel-inner > .active.right {\n  left: 100%;\n}\n.carousel-control {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  width: 15%;\n  font-size: 20px;\n  color: #fff;\n  text-align: center;\n  text-shadow: 0 1px 2px rgba(0, 0, 0, .6);\n  filter: alpha(opacity=50);\n  opacity: .5;\n}\n.carousel-control.left {\n  background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);\n  background-image:      -o-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);\n  background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .5)), to(rgba(0, 0, 0, .0001)));\n  background-image:         linear-gradient(to right, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);\n  background-repeat: repeat-x;\n}\n.carousel-control.right {\n  right: 0;\n  left: auto;\n  background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);\n  background-image:      -o-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);\n  background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .0001)), to(rgba(0, 0, 0, .5)));\n  background-image:         linear-gradient(to right, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);\n  background-repeat: repeat-x;\n}\n.carousel-control:hover,\n.carousel-control:focus {\n  color: #fff;\n  text-decoration: none;\n  filter: alpha(opacity=90);\n  outline: 0;\n  opacity: .9;\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-left,\n.carousel-control .glyphicon-chevron-right {\n  position: absolute;\n  top: 50%;\n  z-index: 5;\n  display: inline-block;\n  margin-top: -10px;\n}\n.carousel-control .icon-prev,\n.carousel-control .glyphicon-chevron-left {\n  left: 50%;\n  margin-left: -10px;\n}\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-right {\n  right: 50%;\n  margin-right: -10px;\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next {\n  width: 20px;\n  height: 20px;\n  font-family: serif;\n  line-height: 1;\n}\n.carousel-control .icon-prev:before {\n  content: '\\2039';\n}\n.carousel-control .icon-next:before {\n  content: '\\203a';\n}\n.carousel-indicators {\n  position: absolute;\n  bottom: 10px;\n  left: 50%;\n  z-index: 15;\n  width: 60%;\n  padding-left: 0;\n  margin-left: -30%;\n  text-align: center;\n  list-style: none;\n}\n.carousel-indicators li {\n  display: inline-block;\n  width: 10px;\n  height: 10px;\n  margin: 1px;\n  text-indent: -999px;\n  cursor: pointer;\n  background-color: #000 \\9;\n  background-color: rgba(0, 0, 0, 0);\n  border: 1px solid #fff;\n  border-radius: 10px;\n}\n.carousel-indicators .active {\n  width: 12px;\n  height: 12px;\n  margin: 0;\n  background-color: #fff;\n}\n.carousel-caption {\n  position: absolute;\n  right: 15%;\n  bottom: 20px;\n  left: 15%;\n  z-index: 10;\n  padding-top: 20px;\n  padding-bottom: 20px;\n  color: #fff;\n  text-align: center;\n  text-shadow: 0 1px 2px rgba(0, 0, 0, .6);\n}\n.carousel-caption .btn {\n  text-shadow: none;\n}\n@media screen and (min-width: 768px) {\n  .carousel-control .glyphicon-chevron-left,\n  .carousel-control .glyphicon-chevron-right,\n  .carousel-control .icon-prev,\n  .carousel-control .icon-next {\n    width: 30px;\n    height: 30px;\n    margin-top: -15px;\n    font-size: 30px;\n  }\n  .carousel-control .glyphicon-chevron-left,\n  .carousel-control .icon-prev {\n    margin-left: -15px;\n  }\n  .carousel-control .glyphicon-chevron-right,\n  .carousel-control .icon-next {\n    margin-right: -15px;\n  }\n  .carousel-caption {\n    right: 20%;\n    left: 20%;\n    padding-bottom: 30px;\n  }\n  .carousel-indicators {\n    bottom: 20px;\n  }\n}\n.clearfix:before,\n.clearfix:after,\n.dl-horizontal dd:before,\n.dl-horizontal dd:after,\n.container:before,\n.container:after,\n.container-fluid:before,\n.container-fluid:after,\n.row:before,\n.row:after,\n.form-horizontal .form-group:before,\n.form-horizontal .form-group:after,\n.btn-toolbar:before,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:before,\n.btn-group-vertical > .btn-group:after,\n.nav:before,\n.nav:after,\n.navbar:before,\n.navbar:after,\n.navbar-header:before,\n.navbar-header:after,\n.navbar-collapse:before,\n.navbar-collapse:after,\n.pager:before,\n.pager:after,\n.panel-body:before,\n.panel-body:after,\n.modal-footer:before,\n.modal-footer:after {\n  display: table;\n  content: \" \";\n}\n.clearfix:after,\n.dl-horizontal dd:after,\n.container:after,\n.container-fluid:after,\n.row:after,\n.form-horizontal .form-group:after,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:after,\n.nav:after,\n.navbar:after,\n.navbar-header:after,\n.navbar-collapse:after,\n.pager:after,\n.panel-body:after,\n.modal-footer:after {\n  clear: both;\n}\n.center-block {\n  display: block;\n  margin-right: auto;\n  margin-left: auto;\n}\n.pull-right {\n  float: right !important;\n}\n.pull-left {\n  float: left !important;\n}\n.hide {\n  display: none !important;\n}\n.show {\n  display: block !important;\n}\n.invisible {\n  visibility: hidden;\n}\n.text-hide {\n  font: 0/0 a;\n  color: transparent;\n  text-shadow: none;\n  background-color: transparent;\n  border: 0;\n}\n.hidden {\n  display: none !important;\n}\n.affix {\n  position: fixed;\n}\n@-ms-viewport {\n  width: device-width;\n}\n.visible-xs,\n.visible-sm,\n.visible-md,\n.visible-lg {\n  display: none !important;\n}\n.visible-xs-block,\n.visible-xs-inline,\n.visible-xs-inline-block,\n.visible-sm-block,\n.visible-sm-inline,\n.visible-sm-inline-block,\n.visible-md-block,\n.visible-md-inline,\n.visible-md-inline-block,\n.visible-lg-block,\n.visible-lg-inline,\n.visible-lg-inline-block {\n  display: none !important;\n}\n@media (max-width: 767px) {\n  .visible-xs {\n    display: block !important;\n  }\n  table.visible-xs {\n    display: table !important;\n  }\n  tr.visible-xs {\n    display: table-row !important;\n  }\n  th.visible-xs,\n  td.visible-xs {\n    display: table-cell !important;\n  }\n}\n@media (max-width: 767px) {\n  .visible-xs-block {\n    display: block !important;\n  }\n}\n@media (max-width: 767px) {\n  .visible-xs-inline {\n    display: inline !important;\n  }\n}\n@media (max-width: 767px) {\n  .visible-xs-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm {\n    display: block !important;\n  }\n  table.visible-sm {\n    display: table !important;\n  }\n  tr.visible-sm {\n    display: table-row !important;\n  }\n  th.visible-sm,\n  td.visible-sm {\n    display: table-cell !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm-block {\n    display: block !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm-inline {\n    display: inline !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md {\n    display: block !important;\n  }\n  table.visible-md {\n    display: table !important;\n  }\n  tr.visible-md {\n    display: table-row !important;\n  }\n  th.visible-md,\n  td.visible-md {\n    display: table-cell !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md-block {\n    display: block !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md-inline {\n    display: inline !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg {\n    display: block !important;\n  }\n  table.visible-lg {\n    display: table !important;\n  }\n  tr.visible-lg {\n    display: table-row !important;\n  }\n  th.visible-lg,\n  td.visible-lg {\n    display: table-cell !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg-block {\n    display: block !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg-inline {\n    display: inline !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (max-width: 767px) {\n  .hidden-xs {\n    display: none !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .hidden-sm {\n    display: none !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .hidden-md {\n    display: none !important;\n  }\n}\n@media (min-width: 1200px) {\n  .hidden-lg {\n    display: none !important;\n  }\n}\n.visible-print {\n  display: none !important;\n}\n@media print {\n  .visible-print {\n    display: block !important;\n  }\n  table.visible-print {\n    display: table !important;\n  }\n  tr.visible-print {\n    display: table-row !important;\n  }\n  th.visible-print,\n  td.visible-print {\n    display: table-cell !important;\n  }\n}\n.visible-print-block {\n  display: none !important;\n}\n@media print {\n  .visible-print-block {\n    display: block !important;\n  }\n}\n.visible-print-inline {\n  display: none !important;\n}\n@media print {\n  .visible-print-inline {\n    display: inline !important;\n  }\n}\n.visible-print-inline-block {\n  display: none !important;\n}\n@media print {\n  .visible-print-inline-block {\n    display: inline-block !important;\n  }\n}\n@media print {\n  .hidden-print {\n    display: none !important;\n  }\n}\n/*# sourceMappingURL=bootstrap.css.map */\n"
  },
  {
    "path": "automatic/static/css/bootstrapValidator.css",
    "content": "/**\n * BootstrapValidator (http://bootstrapvalidator.com)\n * The best jQuery plugin to validate form fields. Designed to use with Bootstrap 3\n *\n * @author      http://twitter.com/nghuuphuoc\n * @copyright   (c) 2013 - 2014 Nguyen Huu Phuoc\n * @license     MIT\n */\n\n.bv-form .help-block {\n    margin-bottom: 0;\n}\n.bv-form .tooltip-inner {\n    text-align: left;\n}\n.nav-tabs li.bv-tab-success > a {\n    color: #3c763d;\n}\n.nav-tabs li.bv-tab-error > a {\n    color: #a94442;\n}\n"
  },
  {
    "path": "automatic/static/css/font-awesome/css/font-awesome-ie7.css",
    "content": "/*!\n *  Font Awesome 3.2.1\n *  the iconic font designed for Bootstrap\n *  ------------------------------------------------------------------------------\n *  The full suite of pictographic icons, examples, and documentation can be\n *  found at http://fontawesome.io.  Stay up to date on Twitter at\n *  http://twitter.com/fontawesome.\n *\n *  License\n *  ------------------------------------------------------------------------------\n *  - The Font Awesome font is licensed under SIL OFL 1.1 -\n *    http://scripts.sil.org/OFL\n *  - Font Awesome CSS, LESS, and SASS files are licensed under MIT License -\n *    http://opensource.org/licenses/mit-license.html\n *  - Font Awesome documentation licensed under CC BY 3.0 -\n *    http://creativecommons.org/licenses/by/3.0/\n *  - Attribution is no longer required in Font Awesome 3.0, but much appreciated:\n *    \"Font Awesome by Dave Gandy - http://fontawesome.io\"\n *\n *  Author - Dave Gandy\n *  ------------------------------------------------------------------------------\n *  Email: dave@fontawesome.io\n *  Twitter: http://twitter.com/byscuits\n *  Work: Lead Product Designer @ Kyruus - http://kyruus.com\n */\n.icon-large {\n  font-size: 1.3333333333333333em;\n  margin-top: -4px;\n  padding-top: 3px;\n  margin-bottom: -4px;\n  padding-bottom: 3px;\n  vertical-align: middle;\n}\n.nav [class^=\"icon-\"],\n.nav [class*=\" icon-\"] {\n  vertical-align: inherit;\n  margin-top: -4px;\n  padding-top: 3px;\n  margin-bottom: -4px;\n  padding-bottom: 3px;\n}\n.nav [class^=\"icon-\"].icon-large,\n.nav [class*=\" icon-\"].icon-large {\n  vertical-align: -25%;\n}\n.nav-pills [class^=\"icon-\"].icon-large,\n.nav-tabs [class^=\"icon-\"].icon-large,\n.nav-pills [class*=\" icon-\"].icon-large,\n.nav-tabs [class*=\" icon-\"].icon-large {\n  line-height: .75em;\n  margin-top: -7px;\n  padding-top: 5px;\n  margin-bottom: -5px;\n  padding-bottom: 4px;\n}\n.btn [class^=\"icon-\"].pull-left,\n.btn [class*=\" icon-\"].pull-left,\n.btn [class^=\"icon-\"].pull-right,\n.btn [class*=\" icon-\"].pull-right {\n  vertical-align: inherit;\n}\n.btn [class^=\"icon-\"].icon-large,\n.btn [class*=\" icon-\"].icon-large {\n  margin-top: -0.5em;\n}\na [class^=\"icon-\"],\na [class*=\" icon-\"] {\n  cursor: pointer;\n}\n.icon-glass {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf000;');\n}\n.icon-music {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf001;');\n}\n.icon-search {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf002;');\n}\n.icon-envelope-alt {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf003;');\n}\n.icon-heart {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf004;');\n}\n.icon-star {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf005;');\n}\n.icon-star-empty {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf006;');\n}\n.icon-user {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf007;');\n}\n.icon-film {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf008;');\n}\n.icon-th-large {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf009;');\n}\n.icon-th {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf00a;');\n}\n.icon-th-list {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf00b;');\n}\n.icon-ok {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf00c;');\n}\n.icon-remove {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf00d;');\n}\n.icon-zoom-in {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf00e;');\n}\n.icon-zoom-out {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf010;');\n}\n.icon-off {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf011;');\n}\n.icon-power-off {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf011;');\n}\n.icon-signal {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf012;');\n}\n.icon-cog {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf013;');\n}\n.icon-gear {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf013;');\n}\n.icon-trash {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf014;');\n}\n.icon-home {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf015;');\n}\n.icon-file-alt {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf016;');\n}\n.icon-time {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf017;');\n}\n.icon-road {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf018;');\n}\n.icon-download-alt {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf019;');\n}\n.icon-download {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf01a;');\n}\n.icon-upload {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf01b;');\n}\n.icon-inbox {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf01c;');\n}\n.icon-play-circle {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf01d;');\n}\n.icon-repeat {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf01e;');\n}\n.icon-rotate-right {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf01e;');\n}\n.icon-refresh {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf021;');\n}\n.icon-list-alt {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf022;');\n}\n.icon-lock {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf023;');\n}\n.icon-flag {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf024;');\n}\n.icon-headphones {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf025;');\n}\n.icon-volume-off {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf026;');\n}\n.icon-volume-down {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf027;');\n}\n.icon-volume-up {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf028;');\n}\n.icon-qrcode {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf029;');\n}\n.icon-barcode {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf02a;');\n}\n.icon-tag {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf02b;');\n}\n.icon-tags {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf02c;');\n}\n.icon-book {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf02d;');\n}\n.icon-bookmark {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf02e;');\n}\n.icon-print {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf02f;');\n}\n.icon-camera {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf030;');\n}\n.icon-font {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf031;');\n}\n.icon-bold {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf032;');\n}\n.icon-italic {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf033;');\n}\n.icon-text-height {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf034;');\n}\n.icon-text-width {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf035;');\n}\n.icon-align-left {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf036;');\n}\n.icon-align-center {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf037;');\n}\n.icon-align-right {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf038;');\n}\n.icon-align-justify {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf039;');\n}\n.icon-list {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf03a;');\n}\n.icon-indent-left {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf03b;');\n}\n.icon-indent-right {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf03c;');\n}\n.icon-facetime-video {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf03d;');\n}\n.icon-picture {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf03e;');\n}\n.icon-pencil {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf040;');\n}\n.icon-map-marker {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf041;');\n}\n.icon-adjust {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf042;');\n}\n.icon-tint {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf043;');\n}\n.icon-edit {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf044;');\n}\n.icon-share {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf045;');\n}\n.icon-check {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf046;');\n}\n.icon-move {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf047;');\n}\n.icon-step-backward {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf048;');\n}\n.icon-fast-backward {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf049;');\n}\n.icon-backward {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf04a;');\n}\n.icon-play {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf04b;');\n}\n.icon-pause {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf04c;');\n}\n.icon-stop {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf04d;');\n}\n.icon-forward {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf04e;');\n}\n.icon-fast-forward {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf050;');\n}\n.icon-step-forward {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf051;');\n}\n.icon-eject {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf052;');\n}\n.icon-chevron-left {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf053;');\n}\n.icon-chevron-right {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf054;');\n}\n.icon-plus-sign {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf055;');\n}\n.icon-minus-sign {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf056;');\n}\n.icon-remove-sign {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf057;');\n}\n.icon-ok-sign {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf058;');\n}\n.icon-question-sign {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf059;');\n}\n.icon-info-sign {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf05a;');\n}\n.icon-screenshot {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf05b;');\n}\n.icon-remove-circle {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf05c;');\n}\n.icon-ok-circle {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf05d;');\n}\n.icon-ban-circle {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf05e;');\n}\n.icon-arrow-left {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf060;');\n}\n.icon-arrow-right {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf061;');\n}\n.icon-arrow-up {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf062;');\n}\n.icon-arrow-down {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf063;');\n}\n.icon-share-alt {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf064;');\n}\n.icon-mail-forward {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf064;');\n}\n.icon-resize-full {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf065;');\n}\n.icon-resize-small {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf066;');\n}\n.icon-plus {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf067;');\n}\n.icon-minus {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf068;');\n}\n.icon-asterisk {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf069;');\n}\n.icon-exclamation-sign {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf06a;');\n}\n.icon-gift {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf06b;');\n}\n.icon-leaf {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf06c;');\n}\n.icon-fire {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf06d;');\n}\n.icon-eye-open {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf06e;');\n}\n.icon-eye-close {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf070;');\n}\n.icon-warning-sign {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf071;');\n}\n.icon-plane {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf072;');\n}\n.icon-calendar {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf073;');\n}\n.icon-random {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf074;');\n}\n.icon-comment {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf075;');\n}\n.icon-magnet {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf076;');\n}\n.icon-chevron-up {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf077;');\n}\n.icon-chevron-down {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf078;');\n}\n.icon-retweet {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf079;');\n}\n.icon-shopping-cart {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf07a;');\n}\n.icon-folder-close {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf07b;');\n}\n.icon-folder-open {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf07c;');\n}\n.icon-resize-vertical {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf07d;');\n}\n.icon-resize-horizontal {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf07e;');\n}\n.icon-bar-chart {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf080;');\n}\n.icon-twitter-sign {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf081;');\n}\n.icon-facebook-sign {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf082;');\n}\n.icon-camera-retro {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf083;');\n}\n.icon-key {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf084;');\n}\n.icon-cogs {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf085;');\n}\n.icon-gears {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf085;');\n}\n.icon-comments {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf086;');\n}\n.icon-thumbs-up-alt {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf087;');\n}\n.icon-thumbs-down-alt {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf088;');\n}\n.icon-star-half {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf089;');\n}\n.icon-heart-empty {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf08a;');\n}\n.icon-signout {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf08b;');\n}\n.icon-linkedin-sign {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf08c;');\n}\n.icon-pushpin {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf08d;');\n}\n.icon-external-link {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf08e;');\n}\n.icon-signin {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf090;');\n}\n.icon-trophy {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf091;');\n}\n.icon-github-sign {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf092;');\n}\n.icon-upload-alt {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf093;');\n}\n.icon-lemon {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf094;');\n}\n.icon-phone {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf095;');\n}\n.icon-check-empty {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf096;');\n}\n.icon-unchecked {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf096;');\n}\n.icon-bookmark-empty {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf097;');\n}\n.icon-phone-sign {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf098;');\n}\n.icon-twitter {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf099;');\n}\n.icon-facebook {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf09a;');\n}\n.icon-github {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf09b;');\n}\n.icon-unlock {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf09c;');\n}\n.icon-credit-card {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf09d;');\n}\n.icon-rss {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf09e;');\n}\n.icon-hdd {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0a0;');\n}\n.icon-bullhorn {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0a1;');\n}\n.icon-bell {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0a2;');\n}\n.icon-certificate {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0a3;');\n}\n.icon-hand-right {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0a4;');\n}\n.icon-hand-left {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0a5;');\n}\n.icon-hand-up {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0a6;');\n}\n.icon-hand-down {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0a7;');\n}\n.icon-circle-arrow-left {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0a8;');\n}\n.icon-circle-arrow-right {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0a9;');\n}\n.icon-circle-arrow-up {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0aa;');\n}\n.icon-circle-arrow-down {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0ab;');\n}\n.icon-globe {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0ac;');\n}\n.icon-wrench {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0ad;');\n}\n.icon-tasks {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0ae;');\n}\n.icon-filter {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0b0;');\n}\n.icon-briefcase {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0b1;');\n}\n.icon-fullscreen {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0b2;');\n}\n.icon-group {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0c0;');\n}\n.icon-link {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0c1;');\n}\n.icon-cloud {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0c2;');\n}\n.icon-beaker {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0c3;');\n}\n.icon-cut {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0c4;');\n}\n.icon-copy {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0c5;');\n}\n.icon-paper-clip {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0c6;');\n}\n.icon-paperclip {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0c6;');\n}\n.icon-save {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0c7;');\n}\n.icon-sign-blank {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0c8;');\n}\n.icon-reorder {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0c9;');\n}\n.icon-list-ul {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0ca;');\n}\n.icon-list-ol {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0cb;');\n}\n.icon-strikethrough {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0cc;');\n}\n.icon-underline {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0cd;');\n}\n.icon-table {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0ce;');\n}\n.icon-magic {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0d0;');\n}\n.icon-truck {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0d1;');\n}\n.icon-pinterest {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0d2;');\n}\n.icon-pinterest-sign {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0d3;');\n}\n.icon-google-plus-sign {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0d4;');\n}\n.icon-google-plus {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0d5;');\n}\n.icon-money {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0d6;');\n}\n.icon-caret-down {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0d7;');\n}\n.icon-caret-up {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0d8;');\n}\n.icon-caret-left {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0d9;');\n}\n.icon-caret-right {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0da;');\n}\n.icon-columns {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0db;');\n}\n.icon-sort {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0dc;');\n}\n.icon-sort-down {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0dd;');\n}\n.icon-sort-up {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0de;');\n}\n.icon-envelope {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0e0;');\n}\n.icon-linkedin {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0e1;');\n}\n.icon-undo {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0e2;');\n}\n.icon-rotate-left {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0e2;');\n}\n.icon-legal {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0e3;');\n}\n.icon-dashboard {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0e4;');\n}\n.icon-comment-alt {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0e5;');\n}\n.icon-comments-alt {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0e6;');\n}\n.icon-bolt {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0e7;');\n}\n.icon-sitemap {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0e8;');\n}\n.icon-umbrella {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0e9;');\n}\n.icon-paste {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0ea;');\n}\n.icon-lightbulb {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0eb;');\n}\n.icon-exchange {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0ec;');\n}\n.icon-cloud-download {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0ed;');\n}\n.icon-cloud-upload {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0ee;');\n}\n.icon-user-md {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0f0;');\n}\n.icon-stethoscope {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0f1;');\n}\n.icon-suitcase {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0f2;');\n}\n.icon-bell-alt {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0f3;');\n}\n.icon-coffee {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0f4;');\n}\n.icon-food {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0f5;');\n}\n.icon-file-text-alt {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0f6;');\n}\n.icon-building {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0f7;');\n}\n.icon-hospital {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0f8;');\n}\n.icon-ambulance {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0f9;');\n}\n.icon-medkit {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0fa;');\n}\n.icon-fighter-jet {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0fb;');\n}\n.icon-beer {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0fc;');\n}\n.icon-h-sign {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0fd;');\n}\n.icon-plus-sign-alt {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0fe;');\n}\n.icon-double-angle-left {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf100;');\n}\n.icon-double-angle-right {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf101;');\n}\n.icon-double-angle-up {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf102;');\n}\n.icon-double-angle-down {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf103;');\n}\n.icon-angle-left {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf104;');\n}\n.icon-angle-right {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf105;');\n}\n.icon-angle-up {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf106;');\n}\n.icon-angle-down {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf107;');\n}\n.icon-desktop {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf108;');\n}\n.icon-laptop {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf109;');\n}\n.icon-tablet {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf10a;');\n}\n.icon-mobile-phone {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf10b;');\n}\n.icon-circle-blank {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf10c;');\n}\n.icon-quote-left {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf10d;');\n}\n.icon-quote-right {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf10e;');\n}\n.icon-spinner {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf110;');\n}\n.icon-circle {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf111;');\n}\n.icon-reply {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf112;');\n}\n.icon-mail-reply {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf112;');\n}\n.icon-github-alt {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf113;');\n}\n.icon-folder-close-alt {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf114;');\n}\n.icon-folder-open-alt {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf115;');\n}\n.icon-expand-alt {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf116;');\n}\n.icon-collapse-alt {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf117;');\n}\n.icon-smile {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf118;');\n}\n.icon-frown {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf119;');\n}\n.icon-meh {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf11a;');\n}\n.icon-gamepad {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf11b;');\n}\n.icon-keyboard {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf11c;');\n}\n.icon-flag-alt {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf11d;');\n}\n.icon-flag-checkered {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf11e;');\n}\n.icon-terminal {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf120;');\n}\n.icon-code {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf121;');\n}\n.icon-reply-all {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf122;');\n}\n.icon-mail-reply-all {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf122;');\n}\n.icon-star-half-empty {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf123;');\n}\n.icon-star-half-full {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf123;');\n}\n.icon-location-arrow {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf124;');\n}\n.icon-crop {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf125;');\n}\n.icon-code-fork {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf126;');\n}\n.icon-unlink {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf127;');\n}\n.icon-question {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf128;');\n}\n.icon-info {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf129;');\n}\n.icon-exclamation {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf12a;');\n}\n.icon-superscript {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf12b;');\n}\n.icon-subscript {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf12c;');\n}\n.icon-eraser {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf12d;');\n}\n.icon-puzzle-piece {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf12e;');\n}\n.icon-microphone {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf130;');\n}\n.icon-microphone-off {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf131;');\n}\n.icon-shield {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf132;');\n}\n.icon-calendar-empty {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf133;');\n}\n.icon-fire-extinguisher {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf134;');\n}\n.icon-rocket {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf135;');\n}\n.icon-maxcdn {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf136;');\n}\n.icon-chevron-sign-left {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf137;');\n}\n.icon-chevron-sign-right {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf138;');\n}\n.icon-chevron-sign-up {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf139;');\n}\n.icon-chevron-sign-down {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf13a;');\n}\n.icon-html5 {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf13b;');\n}\n.icon-css3 {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf13c;');\n}\n.icon-anchor {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf13d;');\n}\n.icon-unlock-alt {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf13e;');\n}\n.icon-bullseye {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf140;');\n}\n.icon-ellipsis-horizontal {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf141;');\n}\n.icon-ellipsis-vertical {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf142;');\n}\n.icon-rss-sign {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf143;');\n}\n.icon-play-sign {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf144;');\n}\n.icon-ticket {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf145;');\n}\n.icon-minus-sign-alt {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf146;');\n}\n.icon-check-minus {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf147;');\n}\n.icon-level-up {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf148;');\n}\n.icon-level-down {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf149;');\n}\n.icon-check-sign {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf14a;');\n}\n.icon-edit-sign {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf14b;');\n}\n.icon-external-link-sign {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf14c;');\n}\n.icon-share-sign {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf14d;');\n}\n.icon-compass {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf14e;');\n}\n.icon-collapse {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf150;');\n}\n.icon-collapse-top {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf151;');\n}\n.icon-expand {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf152;');\n}\n.icon-eur {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf153;');\n}\n.icon-euro {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf153;');\n}\n.icon-gbp {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf154;');\n}\n.icon-usd {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf155;');\n}\n.icon-dollar {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf155;');\n}\n.icon-inr {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf156;');\n}\n.icon-rupee {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf156;');\n}\n.icon-jpy {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf157;');\n}\n.icon-yen {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf157;');\n}\n.icon-cny {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf158;');\n}\n.icon-renminbi {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf158;');\n}\n.icon-krw {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf159;');\n}\n.icon-won {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf159;');\n}\n.icon-btc {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf15a;');\n}\n.icon-bitcoin {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf15a;');\n}\n.icon-file {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf15b;');\n}\n.icon-file-text {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf15c;');\n}\n.icon-sort-by-alphabet {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf15d;');\n}\n.icon-sort-by-alphabet-alt {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf15e;');\n}\n.icon-sort-by-attributes {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf160;');\n}\n.icon-sort-by-attributes-alt {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf161;');\n}\n.icon-sort-by-order {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf162;');\n}\n.icon-sort-by-order-alt {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf163;');\n}\n.icon-thumbs-up {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf164;');\n}\n.icon-thumbs-down {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf165;');\n}\n.icon-youtube-sign {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf166;');\n}\n.icon-youtube {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf167;');\n}\n.icon-xing {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf168;');\n}\n.icon-xing-sign {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf169;');\n}\n.icon-youtube-play {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf16a;');\n}\n.icon-dropbox {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf16b;');\n}\n.icon-stackexchange {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf16c;');\n}\n.icon-instagram {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf16d;');\n}\n.icon-flickr {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf16e;');\n}\n.icon-adn {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf170;');\n}\n.icon-bitbucket {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf171;');\n}\n.icon-bitbucket-sign {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf172;');\n}\n.icon-tumblr {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf173;');\n}\n.icon-tumblr-sign {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf174;');\n}\n.icon-long-arrow-down {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf175;');\n}\n.icon-long-arrow-up {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf176;');\n}\n.icon-long-arrow-left {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf177;');\n}\n.icon-long-arrow-right {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf178;');\n}\n.icon-apple {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf179;');\n}\n.icon-windows {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf17a;');\n}\n.icon-android {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf17b;');\n}\n.icon-linux {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf17c;');\n}\n.icon-dribbble {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf17d;');\n}\n.icon-skype {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf17e;');\n}\n.icon-foursquare {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf180;');\n}\n.icon-trello {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf181;');\n}\n.icon-female {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf182;');\n}\n.icon-male {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf183;');\n}\n.icon-gittip {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf184;');\n}\n.icon-sun {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf185;');\n}\n.icon-moon {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf186;');\n}\n.icon-archive {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf187;');\n}\n.icon-bug {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf188;');\n}\n.icon-vk {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf189;');\n}\n.icon-weibo {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf18a;');\n}\n.icon-renren {\n  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf18b;');\n}\n"
  },
  {
    "path": "automatic/static/css/font-awesome/css/font-awesome.css",
    "content": "/*!\n *  Font Awesome 3.2.1\n *  the iconic font designed for Bootstrap\n *  ------------------------------------------------------------------------------\n *  The full suite of pictographic icons, examples, and documentation can be\n *  found at http://fontawesome.io.  Stay up to date on Twitter at\n *  http://twitter.com/fontawesome.\n *\n *  License\n *  ------------------------------------------------------------------------------\n *  - The Font Awesome font is licensed under SIL OFL 1.1 -\n *    http://scripts.sil.org/OFL\n *  - Font Awesome CSS, LESS, and SASS files are licensed under MIT License -\n *    http://opensource.org/licenses/mit-license.html\n *  - Font Awesome documentation licensed under CC BY 3.0 -\n *    http://creativecommons.org/licenses/by/3.0/\n *  - Attribution is no longer required in Font Awesome 3.0, but much appreciated:\n *    \"Font Awesome by Dave Gandy - http://fontawesome.io\"\n *\n *  Author - Dave Gandy\n *  ------------------------------------------------------------------------------\n *  Email: dave@fontawesome.io\n *  Twitter: http://twitter.com/byscuits\n *  Work: Lead Product Designer @ Kyruus - http://kyruus.com\n */\n/* FONT PATH\n * -------------------------- */\n@font-face {\n  font-family: 'FontAwesome';\n  src: url('../font/fontawesome-webfont.eot?v=3.2.1');\n  src: url('../font/fontawesome-webfont.eot?#iefix&v=3.2.1') format('embedded-opentype'), url('../font/fontawesome-webfont.woff?v=3.2.1') format('woff'), url('../font/fontawesome-webfont.ttf?v=3.2.1') format('truetype'), url('../font/fontawesome-webfont.svg#fontawesomeregular?v=3.2.1') format('svg');\n  font-weight: normal;\n  font-style: normal;\n}\n/* FONT AWESOME CORE\n * -------------------------- */\n[class^=\"icon-\"],\n[class*=\" icon-\"] {\n  font-family: FontAwesome;\n  font-weight: normal;\n  font-style: normal;\n  text-decoration: inherit;\n  -webkit-font-smoothing: antialiased;\n  *margin-right: .3em;\n}\n[class^=\"icon-\"]:before,\n[class*=\" icon-\"]:before {\n  text-decoration: inherit;\n  display: inline-block;\n  speak: none;\n}\n/* makes the font 33% larger relative to the icon container */\n.icon-large:before {\n  vertical-align: -10%;\n  font-size: 1.3333333333333333em;\n}\n/* makes sure icons active on rollover in links */\na [class^=\"icon-\"],\na [class*=\" icon-\"] {\n  display: inline;\n}\n/* increased font size for icon-large */\n[class^=\"icon-\"].icon-fixed-width,\n[class*=\" icon-\"].icon-fixed-width {\n  display: inline-block;\n  width: 1.1428571428571428em;\n  text-align: right;\n  padding-right: 0.2857142857142857em;\n}\n[class^=\"icon-\"].icon-fixed-width.icon-large,\n[class*=\" icon-\"].icon-fixed-width.icon-large {\n  width: 1.4285714285714286em;\n}\n.icons-ul {\n  margin-left: 2.142857142857143em;\n  list-style-type: none;\n}\n.icons-ul > li {\n  position: relative;\n}\n.icons-ul .icon-li {\n  position: absolute;\n  left: -2.142857142857143em;\n  width: 2.142857142857143em;\n  text-align: center;\n  line-height: inherit;\n}\n[class^=\"icon-\"].hide,\n[class*=\" icon-\"].hide {\n  display: none;\n}\n.icon-muted {\n  color: #eeeeee;\n}\n.icon-light {\n  color: #ffffff;\n}\n.icon-dark {\n  color: #333333;\n}\n.icon-border {\n  border: solid 1px #eeeeee;\n  padding: .2em .25em .15em;\n  -webkit-border-radius: 3px;\n  -moz-border-radius: 3px;\n  border-radius: 3px;\n}\n.icon-2x {\n  font-size: 2em;\n}\n.icon-2x.icon-border {\n  border-width: 2px;\n  -webkit-border-radius: 4px;\n  -moz-border-radius: 4px;\n  border-radius: 4px;\n}\n.icon-3x {\n  font-size: 3em;\n}\n.icon-3x.icon-border {\n  border-width: 3px;\n  -webkit-border-radius: 5px;\n  -moz-border-radius: 5px;\n  border-radius: 5px;\n}\n.icon-4x {\n  font-size: 4em;\n}\n.icon-4x.icon-border {\n  border-width: 4px;\n  -webkit-border-radius: 6px;\n  -moz-border-radius: 6px;\n  border-radius: 6px;\n}\n.icon-5x {\n  font-size: 5em;\n}\n.icon-5x.icon-border {\n  border-width: 5px;\n  -webkit-border-radius: 7px;\n  -moz-border-radius: 7px;\n  border-radius: 7px;\n}\n.pull-right {\n  float: right;\n}\n.pull-left {\n  float: left;\n}\n[class^=\"icon-\"].pull-left,\n[class*=\" icon-\"].pull-left {\n  margin-right: .3em;\n}\n[class^=\"icon-\"].pull-right,\n[class*=\" icon-\"].pull-right {\n  margin-left: .3em;\n}\n/* BOOTSTRAP SPECIFIC CLASSES\n * -------------------------- */\n/* Bootstrap 2.0 sprites.less reset */\n[class^=\"icon-\"],\n[class*=\" icon-\"] {\n  display: inline;\n  width: auto;\n  height: auto;\n  line-height: normal;\n  vertical-align: baseline;\n  background-image: none;\n  background-position: 0% 0%;\n  background-repeat: repeat;\n  margin-top: 0;\n}\n/* more sprites.less reset */\n.icon-white,\n.nav-pills > .active > a > [class^=\"icon-\"],\n.nav-pills > .active > a > [class*=\" icon-\"],\n.nav-list > .active > a > [class^=\"icon-\"],\n.nav-list > .active > a > [class*=\" icon-\"],\n.navbar-inverse .nav > .active > a > [class^=\"icon-\"],\n.navbar-inverse .nav > .active > a > [class*=\" icon-\"],\n.dropdown-menu > li > a:hover > [class^=\"icon-\"],\n.dropdown-menu > li > a:hover > [class*=\" icon-\"],\n.dropdown-menu > .active > a > [class^=\"icon-\"],\n.dropdown-menu > .active > a > [class*=\" icon-\"],\n.dropdown-submenu:hover > a > [class^=\"icon-\"],\n.dropdown-submenu:hover > a > [class*=\" icon-\"] {\n  background-image: none;\n}\n/* keeps Bootstrap styles with and without icons the same */\n.btn [class^=\"icon-\"].icon-large,\n.nav [class^=\"icon-\"].icon-large,\n.btn [class*=\" icon-\"].icon-large,\n.nav [class*=\" icon-\"].icon-large {\n  line-height: .9em;\n}\n.btn [class^=\"icon-\"].icon-spin,\n.nav [class^=\"icon-\"].icon-spin,\n.btn [class*=\" icon-\"].icon-spin,\n.nav [class*=\" icon-\"].icon-spin {\n  display: inline-block;\n}\n.nav-tabs [class^=\"icon-\"],\n.nav-pills [class^=\"icon-\"],\n.nav-tabs [class*=\" icon-\"],\n.nav-pills [class*=\" icon-\"],\n.nav-tabs [class^=\"icon-\"].icon-large,\n.nav-pills [class^=\"icon-\"].icon-large,\n.nav-tabs [class*=\" icon-\"].icon-large,\n.nav-pills [class*=\" icon-\"].icon-large {\n  line-height: .9em;\n}\n.btn [class^=\"icon-\"].pull-left.icon-2x,\n.btn [class*=\" icon-\"].pull-left.icon-2x,\n.btn [class^=\"icon-\"].pull-right.icon-2x,\n.btn [class*=\" icon-\"].pull-right.icon-2x {\n  margin-top: .18em;\n}\n.btn [class^=\"icon-\"].icon-spin.icon-large,\n.btn [class*=\" icon-\"].icon-spin.icon-large {\n  line-height: .8em;\n}\n.btn.btn-small [class^=\"icon-\"].pull-left.icon-2x,\n.btn.btn-small [class*=\" icon-\"].pull-left.icon-2x,\n.btn.btn-small [class^=\"icon-\"].pull-right.icon-2x,\n.btn.btn-small [class*=\" icon-\"].pull-right.icon-2x {\n  margin-top: .25em;\n}\n.btn.btn-large [class^=\"icon-\"],\n.btn.btn-large [class*=\" icon-\"] {\n  margin-top: 0;\n}\n.btn.btn-large [class^=\"icon-\"].pull-left.icon-2x,\n.btn.btn-large [class*=\" icon-\"].pull-left.icon-2x,\n.btn.btn-large [class^=\"icon-\"].pull-right.icon-2x,\n.btn.btn-large [class*=\" icon-\"].pull-right.icon-2x {\n  margin-top: .05em;\n}\n.btn.btn-large [class^=\"icon-\"].pull-left.icon-2x,\n.btn.btn-large [class*=\" icon-\"].pull-left.icon-2x {\n  margin-right: .2em;\n}\n.btn.btn-large [class^=\"icon-\"].pull-right.icon-2x,\n.btn.btn-large [class*=\" icon-\"].pull-right.icon-2x {\n  margin-left: .2em;\n}\n/* Fixes alignment in nav lists */\n.nav-list [class^=\"icon-\"],\n.nav-list [class*=\" icon-\"] {\n  line-height: inherit;\n}\n/* EXTRAS\n * -------------------------- */\n/* Stacked and layered icon */\n.icon-stack {\n  position: relative;\n  display: inline-block;\n  width: 2em;\n  height: 2em;\n  line-height: 2em;\n  vertical-align: -35%;\n}\n.icon-stack [class^=\"icon-\"],\n.icon-stack [class*=\" icon-\"] {\n  display: block;\n  text-align: center;\n  position: absolute;\n  width: 100%;\n  height: 100%;\n  font-size: 1em;\n  line-height: inherit;\n  *line-height: 2em;\n}\n.icon-stack .icon-stack-base {\n  font-size: 2em;\n  *line-height: 1em;\n}\n/* Animated rotating icon */\n.icon-spin {\n  display: inline-block;\n  -moz-animation: spin 2s infinite linear;\n  -o-animation: spin 2s infinite linear;\n  -webkit-animation: spin 2s infinite linear;\n  animation: spin 2s infinite linear;\n}\n/* Prevent stack and spinners from being taken inline when inside a link */\na .icon-stack,\na .icon-spin {\n  display: inline-block;\n  text-decoration: none;\n}\n@-moz-keyframes spin {\n  0% {\n    -moz-transform: rotate(0deg);\n  }\n  100% {\n    -moz-transform: rotate(359deg);\n  }\n}\n@-webkit-keyframes spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n  }\n  100% {\n    -webkit-transform: rotate(359deg);\n  }\n}\n@-o-keyframes spin {\n  0% {\n    -o-transform: rotate(0deg);\n  }\n  100% {\n    -o-transform: rotate(359deg);\n  }\n}\n@-ms-keyframes spin {\n  0% {\n    -ms-transform: rotate(0deg);\n  }\n  100% {\n    -ms-transform: rotate(359deg);\n  }\n}\n@keyframes spin {\n  0% {\n    transform: rotate(0deg);\n  }\n  100% {\n    transform: rotate(359deg);\n  }\n}\n/* Icon rotations and mirroring */\n.icon-rotate-90:before {\n  -webkit-transform: rotate(90deg);\n  -moz-transform: rotate(90deg);\n  -ms-transform: rotate(90deg);\n  -o-transform: rotate(90deg);\n  transform: rotate(90deg);\n  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1);\n}\n.icon-rotate-180:before {\n  -webkit-transform: rotate(180deg);\n  -moz-transform: rotate(180deg);\n  -ms-transform: rotate(180deg);\n  -o-transform: rotate(180deg);\n  transform: rotate(180deg);\n  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2);\n}\n.icon-rotate-270:before {\n  -webkit-transform: rotate(270deg);\n  -moz-transform: rotate(270deg);\n  -ms-transform: rotate(270deg);\n  -o-transform: rotate(270deg);\n  transform: rotate(270deg);\n  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);\n}\n.icon-flip-horizontal:before {\n  -webkit-transform: scale(-1, 1);\n  -moz-transform: scale(-1, 1);\n  -ms-transform: scale(-1, 1);\n  -o-transform: scale(-1, 1);\n  transform: scale(-1, 1);\n}\n.icon-flip-vertical:before {\n  -webkit-transform: scale(1, -1);\n  -moz-transform: scale(1, -1);\n  -ms-transform: scale(1, -1);\n  -o-transform: scale(1, -1);\n  transform: scale(1, -1);\n}\n/* ensure rotation occurs inside anchor tags */\na .icon-rotate-90:before,\na .icon-rotate-180:before,\na .icon-rotate-270:before,\na .icon-flip-horizontal:before,\na .icon-flip-vertical:before {\n  display: inline-block;\n}\n/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen\n   readers do not read off random characters that represent icons */\n.icon-glass:before {\n  content: \"\\f000\";\n}\n.icon-music:before {\n  content: \"\\f001\";\n}\n.icon-search:before {\n  content: \"\\f002\";\n}\n.icon-envelope-alt:before {\n  content: \"\\f003\";\n}\n.icon-heart:before {\n  content: \"\\f004\";\n}\n.icon-star:before {\n  content: \"\\f005\";\n}\n.icon-star-empty:before {\n  content: \"\\f006\";\n}\n.icon-user:before {\n  content: \"\\f007\";\n}\n.icon-film:before {\n  content: \"\\f008\";\n}\n.icon-th-large:before {\n  content: \"\\f009\";\n}\n.icon-th:before {\n  content: \"\\f00a\";\n}\n.icon-th-list:before {\n  content: \"\\f00b\";\n}\n.icon-ok:before {\n  content: \"\\f00c\";\n}\n.icon-remove:before {\n  content: \"\\f00d\";\n}\n.icon-zoom-in:before {\n  content: \"\\f00e\";\n}\n.icon-zoom-out:before {\n  content: \"\\f010\";\n}\n.icon-power-off:before,\n.icon-off:before {\n  content: \"\\f011\";\n}\n.icon-signal:before {\n  content: \"\\f012\";\n}\n.icon-gear:before,\n.icon-cog:before {\n  content: \"\\f013\";\n}\n.icon-trash:before {\n  content: \"\\f014\";\n}\n.icon-home:before {\n  content: \"\\f015\";\n}\n.icon-file-alt:before {\n  content: \"\\f016\";\n}\n.icon-time:before {\n  content: \"\\f017\";\n}\n.icon-road:before {\n  content: \"\\f018\";\n}\n.icon-download-alt:before {\n  content: \"\\f019\";\n}\n.icon-download:before {\n  content: \"\\f01a\";\n}\n.icon-upload:before {\n  content: \"\\f01b\";\n}\n.icon-inbox:before {\n  content: \"\\f01c\";\n}\n.icon-play-circle:before {\n  content: \"\\f01d\";\n}\n.icon-rotate-right:before,\n.icon-repeat:before {\n  content: \"\\f01e\";\n}\n.icon-refresh:before {\n  content: \"\\f021\";\n}\n.icon-list-alt:before {\n  content: \"\\f022\";\n}\n.icon-lock:before {\n  content: \"\\f023\";\n}\n.icon-flag:before {\n  content: \"\\f024\";\n}\n.icon-headphones:before {\n  content: \"\\f025\";\n}\n.icon-volume-off:before {\n  content: \"\\f026\";\n}\n.icon-volume-down:before {\n  content: \"\\f027\";\n}\n.icon-volume-up:before {\n  content: \"\\f028\";\n}\n.icon-qrcode:before {\n  content: \"\\f029\";\n}\n.icon-barcode:before {\n  content: \"\\f02a\";\n}\n.icon-tag:before {\n  content: \"\\f02b\";\n}\n.icon-tags:before {\n  content: \"\\f02c\";\n}\n.icon-book:before {\n  content: \"\\f02d\";\n}\n.icon-bookmark:before {\n  content: \"\\f02e\";\n}\n.icon-print:before {\n  content: \"\\f02f\";\n}\n.icon-camera:before {\n  content: \"\\f030\";\n}\n.icon-font:before {\n  content: \"\\f031\";\n}\n.icon-bold:before {\n  content: \"\\f032\";\n}\n.icon-italic:before {\n  content: \"\\f033\";\n}\n.icon-text-height:before {\n  content: \"\\f034\";\n}\n.icon-text-width:before {\n  content: \"\\f035\";\n}\n.icon-align-left:before {\n  content: \"\\f036\";\n}\n.icon-align-center:before {\n  content: \"\\f037\";\n}\n.icon-align-right:before {\n  content: \"\\f038\";\n}\n.icon-align-justify:before {\n  content: \"\\f039\";\n}\n.icon-list:before {\n  content: \"\\f03a\";\n}\n.icon-indent-left:before {\n  content: \"\\f03b\";\n}\n.icon-indent-right:before {\n  content: \"\\f03c\";\n}\n.icon-facetime-video:before {\n  content: \"\\f03d\";\n}\n.icon-picture:before {\n  content: \"\\f03e\";\n}\n.icon-pencil:before {\n  content: \"\\f040\";\n}\n.icon-map-marker:before {\n  content: \"\\f041\";\n}\n.icon-adjust:before {\n  content: \"\\f042\";\n}\n.icon-tint:before {\n  content: \"\\f043\";\n}\n.icon-edit:before {\n  content: \"\\f044\";\n}\n.icon-share:before {\n  content: \"\\f045\";\n}\n.icon-check:before {\n  content: \"\\f046\";\n}\n.icon-move:before {\n  content: \"\\f047\";\n}\n.icon-step-backward:before {\n  content: \"\\f048\";\n}\n.icon-fast-backward:before {\n  content: \"\\f049\";\n}\n.icon-backward:before {\n  content: \"\\f04a\";\n}\n.icon-play:before {\n  content: \"\\f04b\";\n}\n.icon-pause:before {\n  content: \"\\f04c\";\n}\n.icon-stop:before {\n  content: \"\\f04d\";\n}\n.icon-forward:before {\n  content: \"\\f04e\";\n}\n.icon-fast-forward:before {\n  content: \"\\f050\";\n}\n.icon-step-forward:before {\n  content: \"\\f051\";\n}\n.icon-eject:before {\n  content: \"\\f052\";\n}\n.icon-chevron-left:before {\n  content: \"\\f053\";\n}\n.icon-chevron-right:before {\n  content: \"\\f054\";\n}\n.icon-plus-sign:before {\n  content: \"\\f055\";\n}\n.icon-minus-sign:before {\n  content: \"\\f056\";\n}\n.icon-remove-sign:before {\n  content: \"\\f057\";\n}\n.icon-ok-sign:before {\n  content: \"\\f058\";\n}\n.icon-question-sign:before {\n  content: \"\\f059\";\n}\n.icon-info-sign:before {\n  content: \"\\f05a\";\n}\n.icon-screenshot:before {\n  content: \"\\f05b\";\n}\n.icon-remove-circle:before {\n  content: \"\\f05c\";\n}\n.icon-ok-circle:before {\n  content: \"\\f05d\";\n}\n.icon-ban-circle:before {\n  content: \"\\f05e\";\n}\n.icon-arrow-left:before {\n  content: \"\\f060\";\n}\n.icon-arrow-right:before {\n  content: \"\\f061\";\n}\n.icon-arrow-up:before {\n  content: \"\\f062\";\n}\n.icon-arrow-down:before {\n  content: \"\\f063\";\n}\n.icon-mail-forward:before,\n.icon-share-alt:before {\n  content: \"\\f064\";\n}\n.icon-resize-full:before {\n  content: \"\\f065\";\n}\n.icon-resize-small:before {\n  content: \"\\f066\";\n}\n.icon-plus:before {\n  content: \"\\f067\";\n}\n.icon-minus:before {\n  content: \"\\f068\";\n}\n.icon-asterisk:before {\n  content: \"\\f069\";\n}\n.icon-exclamation-sign:before {\n  content: \"\\f06a\";\n}\n.icon-gift:before {\n  content: \"\\f06b\";\n}\n.icon-leaf:before {\n  content: \"\\f06c\";\n}\n.icon-fire:before {\n  content: \"\\f06d\";\n}\n.icon-eye-open:before {\n  content: \"\\f06e\";\n}\n.icon-eye-close:before {\n  content: \"\\f070\";\n}\n.icon-warning-sign:before {\n  content: \"\\f071\";\n}\n.icon-plane:before {\n  content: \"\\f072\";\n}\n.icon-calendar:before {\n  content: \"\\f073\";\n}\n.icon-random:before {\n  content: \"\\f074\";\n}\n.icon-comment:before {\n  content: \"\\f075\";\n}\n.icon-magnet:before {\n  content: \"\\f076\";\n}\n.icon-chevron-up:before {\n  content: \"\\f077\";\n}\n.icon-chevron-down:before {\n  content: \"\\f078\";\n}\n.icon-retweet:before {\n  content: \"\\f079\";\n}\n.icon-shopping-cart:before {\n  content: \"\\f07a\";\n}\n.icon-folder-close:before {\n  content: \"\\f07b\";\n}\n.icon-folder-open:before {\n  content: \"\\f07c\";\n}\n.icon-resize-vertical:before {\n  content: \"\\f07d\";\n}\n.icon-resize-horizontal:before {\n  content: \"\\f07e\";\n}\n.icon-bar-chart:before {\n  content: \"\\f080\";\n}\n.icon-twitter-sign:before {\n  content: \"\\f081\";\n}\n.icon-facebook-sign:before {\n  content: \"\\f082\";\n}\n.icon-camera-retro:before {\n  content: \"\\f083\";\n}\n.icon-key:before {\n  content: \"\\f084\";\n}\n.icon-gears:before,\n.icon-cogs:before {\n  content: \"\\f085\";\n}\n.icon-comments:before {\n  content: \"\\f086\";\n}\n.icon-thumbs-up-alt:before {\n  content: \"\\f087\";\n}\n.icon-thumbs-down-alt:before {\n  content: \"\\f088\";\n}\n.icon-star-half:before {\n  content: \"\\f089\";\n}\n.icon-heart-empty:before {\n  content: \"\\f08a\";\n}\n.icon-signout:before {\n  content: \"\\f08b\";\n}\n.icon-linkedin-sign:before {\n  content: \"\\f08c\";\n}\n.icon-pushpin:before {\n  content: \"\\f08d\";\n}\n.icon-external-link:before {\n  content: \"\\f08e\";\n}\n.icon-signin:before {\n  content: \"\\f090\";\n}\n.icon-trophy:before {\n  content: \"\\f091\";\n}\n.icon-github-sign:before {\n  content: \"\\f092\";\n}\n.icon-upload-alt:before {\n  content: \"\\f093\";\n}\n.icon-lemon:before {\n  content: \"\\f094\";\n}\n.icon-phone:before {\n  content: \"\\f095\";\n}\n.icon-unchecked:before,\n.icon-check-empty:before {\n  content: \"\\f096\";\n}\n.icon-bookmark-empty:before {\n  content: \"\\f097\";\n}\n.icon-phone-sign:before {\n  content: \"\\f098\";\n}\n.icon-twitter:before {\n  content: \"\\f099\";\n}\n.icon-facebook:before {\n  content: \"\\f09a\";\n}\n.icon-github:before {\n  content: \"\\f09b\";\n}\n.icon-unlock:before {\n  content: \"\\f09c\";\n}\n.icon-credit-card:before {\n  content: \"\\f09d\";\n}\n.icon-rss:before {\n  content: \"\\f09e\";\n}\n.icon-hdd:before {\n  content: \"\\f0a0\";\n}\n.icon-bullhorn:before {\n  content: \"\\f0a1\";\n}\n.icon-bell:before {\n  content: \"\\f0a2\";\n}\n.icon-certificate:before {\n  content: \"\\f0a3\";\n}\n.icon-hand-right:before {\n  content: \"\\f0a4\";\n}\n.icon-hand-left:before {\n  content: \"\\f0a5\";\n}\n.icon-hand-up:before {\n  content: \"\\f0a6\";\n}\n.icon-hand-down:before {\n  content: \"\\f0a7\";\n}\n.icon-circle-arrow-left:before {\n  content: \"\\f0a8\";\n}\n.icon-circle-arrow-right:before {\n  content: \"\\f0a9\";\n}\n.icon-circle-arrow-up:before {\n  content: \"\\f0aa\";\n}\n.icon-circle-arrow-down:before {\n  content: \"\\f0ab\";\n}\n.icon-globe:before {\n  content: \"\\f0ac\";\n}\n.icon-wrench:before {\n  content: \"\\f0ad\";\n}\n.icon-tasks:before {\n  content: \"\\f0ae\";\n}\n.icon-filter:before {\n  content: \"\\f0b0\";\n}\n.icon-briefcase:before {\n  content: \"\\f0b1\";\n}\n.icon-fullscreen:before {\n  content: \"\\f0b2\";\n}\n.icon-group:before {\n  content: \"\\f0c0\";\n}\n.icon-link:before {\n  content: \"\\f0c1\";\n}\n.icon-cloud:before {\n  content: \"\\f0c2\";\n}\n.icon-beaker:before {\n  content: \"\\f0c3\";\n}\n.icon-cut:before {\n  content: \"\\f0c4\";\n}\n.icon-copy:before {\n  content: \"\\f0c5\";\n}\n.icon-paperclip:before,\n.icon-paper-clip:before {\n  content: \"\\f0c6\";\n}\n.icon-save:before {\n  content: \"\\f0c7\";\n}\n.icon-sign-blank:before {\n  content: \"\\f0c8\";\n}\n.icon-reorder:before {\n  content: \"\\f0c9\";\n}\n.icon-list-ul:before {\n  content: \"\\f0ca\";\n}\n.icon-list-ol:before {\n  content: \"\\f0cb\";\n}\n.icon-strikethrough:before {\n  content: \"\\f0cc\";\n}\n.icon-underline:before {\n  content: \"\\f0cd\";\n}\n.icon-table:before {\n  content: \"\\f0ce\";\n}\n.icon-magic:before {\n  content: \"\\f0d0\";\n}\n.icon-truck:before {\n  content: \"\\f0d1\";\n}\n.icon-pinterest:before {\n  content: \"\\f0d2\";\n}\n.icon-pinterest-sign:before {\n  content: \"\\f0d3\";\n}\n.icon-google-plus-sign:before {\n  content: \"\\f0d4\";\n}\n.icon-google-plus:before {\n  content: \"\\f0d5\";\n}\n.icon-money:before {\n  content: \"\\f0d6\";\n}\n.icon-caret-down:before {\n  content: \"\\f0d7\";\n}\n.icon-caret-up:before {\n  content: \"\\f0d8\";\n}\n.icon-caret-left:before {\n  content: \"\\f0d9\";\n}\n.icon-caret-right:before {\n  content: \"\\f0da\";\n}\n.icon-columns:before {\n  content: \"\\f0db\";\n}\n.icon-sort:before {\n  content: \"\\f0dc\";\n}\n.icon-sort-down:before {\n  content: \"\\f0dd\";\n}\n.icon-sort-up:before {\n  content: \"\\f0de\";\n}\n.icon-envelope:before {\n  content: \"\\f0e0\";\n}\n.icon-linkedin:before {\n  content: \"\\f0e1\";\n}\n.icon-rotate-left:before,\n.icon-undo:before {\n  content: \"\\f0e2\";\n}\n.icon-legal:before {\n  content: \"\\f0e3\";\n}\n.icon-dashboard:before {\n  content: \"\\f0e4\";\n}\n.icon-comment-alt:before {\n  content: \"\\f0e5\";\n}\n.icon-comments-alt:before {\n  content: \"\\f0e6\";\n}\n.icon-bolt:before {\n  content: \"\\f0e7\";\n}\n.icon-sitemap:before {\n  content: \"\\f0e8\";\n}\n.icon-umbrella:before {\n  content: \"\\f0e9\";\n}\n.icon-paste:before {\n  content: \"\\f0ea\";\n}\n.icon-lightbulb:before {\n  content: \"\\f0eb\";\n}\n.icon-exchange:before {\n  content: \"\\f0ec\";\n}\n.icon-cloud-download:before {\n  content: \"\\f0ed\";\n}\n.icon-cloud-upload:before {\n  content: \"\\f0ee\";\n}\n.icon-user-md:before {\n  content: \"\\f0f0\";\n}\n.icon-stethoscope:before {\n  content: \"\\f0f1\";\n}\n.icon-suitcase:before {\n  content: \"\\f0f2\";\n}\n.icon-bell-alt:before {\n  content: \"\\f0f3\";\n}\n.icon-coffee:before {\n  content: \"\\f0f4\";\n}\n.icon-food:before {\n  content: \"\\f0f5\";\n}\n.icon-file-text-alt:before {\n  content: \"\\f0f6\";\n}\n.icon-building:before {\n  content: \"\\f0f7\";\n}\n.icon-hospital:before {\n  content: \"\\f0f8\";\n}\n.icon-ambulance:before {\n  content: \"\\f0f9\";\n}\n.icon-medkit:before {\n  content: \"\\f0fa\";\n}\n.icon-fighter-jet:before {\n  content: \"\\f0fb\";\n}\n.icon-beer:before {\n  content: \"\\f0fc\";\n}\n.icon-h-sign:before {\n  content: \"\\f0fd\";\n}\n.icon-plus-sign-alt:before {\n  content: \"\\f0fe\";\n}\n.icon-double-angle-left:before {\n  content: \"\\f100\";\n}\n.icon-double-angle-right:before {\n  content: \"\\f101\";\n}\n.icon-double-angle-up:before {\n  content: \"\\f102\";\n}\n.icon-double-angle-down:before {\n  content: \"\\f103\";\n}\n.icon-angle-left:before {\n  content: \"\\f104\";\n}\n.icon-angle-right:before {\n  content: \"\\f105\";\n}\n.icon-angle-up:before {\n  content: \"\\f106\";\n}\n.icon-angle-down:before {\n  content: \"\\f107\";\n}\n.icon-desktop:before {\n  content: \"\\f108\";\n}\n.icon-laptop:before {\n  content: \"\\f109\";\n}\n.icon-tablet:before {\n  content: \"\\f10a\";\n}\n.icon-mobile-phone:before {\n  content: \"\\f10b\";\n}\n.icon-circle-blank:before {\n  content: \"\\f10c\";\n}\n.icon-quote-left:before {\n  content: \"\\f10d\";\n}\n.icon-quote-right:before {\n  content: \"\\f10e\";\n}\n.icon-spinner:before {\n  content: \"\\f110\";\n}\n.icon-circle:before {\n  content: \"\\f111\";\n}\n.icon-mail-reply:before,\n.icon-reply:before {\n  content: \"\\f112\";\n}\n.icon-github-alt:before {\n  content: \"\\f113\";\n}\n.icon-folder-close-alt:before {\n  content: \"\\f114\";\n}\n.icon-folder-open-alt:before {\n  content: \"\\f115\";\n}\n.icon-expand-alt:before {\n  content: \"\\f116\";\n}\n.icon-collapse-alt:before {\n  content: \"\\f117\";\n}\n.icon-smile:before {\n  content: \"\\f118\";\n}\n.icon-frown:before {\n  content: \"\\f119\";\n}\n.icon-meh:before {\n  content: \"\\f11a\";\n}\n.icon-gamepad:before {\n  content: \"\\f11b\";\n}\n.icon-keyboard:before {\n  content: \"\\f11c\";\n}\n.icon-flag-alt:before {\n  content: \"\\f11d\";\n}\n.icon-flag-checkered:before {\n  content: \"\\f11e\";\n}\n.icon-terminal:before {\n  content: \"\\f120\";\n}\n.icon-code:before {\n  content: \"\\f121\";\n}\n.icon-reply-all:before {\n  content: \"\\f122\";\n}\n.icon-mail-reply-all:before {\n  content: \"\\f122\";\n}\n.icon-star-half-full:before,\n.icon-star-half-empty:before {\n  content: \"\\f123\";\n}\n.icon-location-arrow:before {\n  content: \"\\f124\";\n}\n.icon-crop:before {\n  content: \"\\f125\";\n}\n.icon-code-fork:before {\n  content: \"\\f126\";\n}\n.icon-unlink:before {\n  content: \"\\f127\";\n}\n.icon-question:before {\n  content: \"\\f128\";\n}\n.icon-info:before {\n  content: \"\\f129\";\n}\n.icon-exclamation:before {\n  content: \"\\f12a\";\n}\n.icon-superscript:before {\n  content: \"\\f12b\";\n}\n.icon-subscript:before {\n  content: \"\\f12c\";\n}\n.icon-eraser:before {\n  content: \"\\f12d\";\n}\n.icon-puzzle-piece:before {\n  content: \"\\f12e\";\n}\n.icon-microphone:before {\n  content: \"\\f130\";\n}\n.icon-microphone-off:before {\n  content: \"\\f131\";\n}\n.icon-shield:before {\n  content: \"\\f132\";\n}\n.icon-calendar-empty:before {\n  content: \"\\f133\";\n}\n.icon-fire-extinguisher:before {\n  content: \"\\f134\";\n}\n.icon-rocket:before {\n  content: \"\\f135\";\n}\n.icon-maxcdn:before {\n  content: \"\\f136\";\n}\n.icon-chevron-sign-left:before {\n  content: \"\\f137\";\n}\n.icon-chevron-sign-right:before {\n  content: \"\\f138\";\n}\n.icon-chevron-sign-up:before {\n  content: \"\\f139\";\n}\n.icon-chevron-sign-down:before {\n  content: \"\\f13a\";\n}\n.icon-html5:before {\n  content: \"\\f13b\";\n}\n.icon-css3:before {\n  content: \"\\f13c\";\n}\n.icon-anchor:before {\n  content: \"\\f13d\";\n}\n.icon-unlock-alt:before {\n  content: \"\\f13e\";\n}\n.icon-bullseye:before {\n  content: \"\\f140\";\n}\n.icon-ellipsis-horizontal:before {\n  content: \"\\f141\";\n}\n.icon-ellipsis-vertical:before {\n  content: \"\\f142\";\n}\n.icon-rss-sign:before {\n  content: \"\\f143\";\n}\n.icon-play-sign:before {\n  content: \"\\f144\";\n}\n.icon-ticket:before {\n  content: \"\\f145\";\n}\n.icon-minus-sign-alt:before {\n  content: \"\\f146\";\n}\n.icon-check-minus:before {\n  content: \"\\f147\";\n}\n.icon-level-up:before {\n  content: \"\\f148\";\n}\n.icon-level-down:before {\n  content: \"\\f149\";\n}\n.icon-check-sign:before {\n  content: \"\\f14a\";\n}\n.icon-edit-sign:before {\n  content: \"\\f14b\";\n}\n.icon-external-link-sign:before {\n  content: \"\\f14c\";\n}\n.icon-share-sign:before {\n  content: \"\\f14d\";\n}\n.icon-compass:before {\n  content: \"\\f14e\";\n}\n.icon-collapse:before {\n  content: \"\\f150\";\n}\n.icon-collapse-top:before {\n  content: \"\\f151\";\n}\n.icon-expand:before {\n  content: \"\\f152\";\n}\n.icon-euro:before,\n.icon-eur:before {\n  content: \"\\f153\";\n}\n.icon-gbp:before {\n  content: \"\\f154\";\n}\n.icon-dollar:before,\n.icon-usd:before {\n  content: \"\\f155\";\n}\n.icon-rupee:before,\n.icon-inr:before {\n  content: \"\\f156\";\n}\n.icon-yen:before,\n.icon-jpy:before {\n  content: \"\\f157\";\n}\n.icon-renminbi:before,\n.icon-cny:before {\n  content: \"\\f158\";\n}\n.icon-won:before,\n.icon-krw:before {\n  content: \"\\f159\";\n}\n.icon-bitcoin:before,\n.icon-btc:before {\n  content: \"\\f15a\";\n}\n.icon-file:before {\n  content: \"\\f15b\";\n}\n.icon-file-text:before {\n  content: \"\\f15c\";\n}\n.icon-sort-by-alphabet:before {\n  content: \"\\f15d\";\n}\n.icon-sort-by-alphabet-alt:before {\n  content: \"\\f15e\";\n}\n.icon-sort-by-attributes:before {\n  content: \"\\f160\";\n}\n.icon-sort-by-attributes-alt:before {\n  content: \"\\f161\";\n}\n.icon-sort-by-order:before {\n  content: \"\\f162\";\n}\n.icon-sort-by-order-alt:before {\n  content: \"\\f163\";\n}\n.icon-thumbs-up:before {\n  content: \"\\f164\";\n}\n.icon-thumbs-down:before {\n  content: \"\\f165\";\n}\n.icon-youtube-sign:before {\n  content: \"\\f166\";\n}\n.icon-youtube:before {\n  content: \"\\f167\";\n}\n.icon-xing:before {\n  content: \"\\f168\";\n}\n.icon-xing-sign:before {\n  content: \"\\f169\";\n}\n.icon-youtube-play:before {\n  content: \"\\f16a\";\n}\n.icon-dropbox:before {\n  content: \"\\f16b\";\n}\n.icon-stackexchange:before {\n  content: \"\\f16c\";\n}\n.icon-instagram:before {\n  content: \"\\f16d\";\n}\n.icon-flickr:before {\n  content: \"\\f16e\";\n}\n.icon-adn:before {\n  content: \"\\f170\";\n}\n.icon-bitbucket:before {\n  content: \"\\f171\";\n}\n.icon-bitbucket-sign:before {\n  content: \"\\f172\";\n}\n.icon-tumblr:before {\n  content: \"\\f173\";\n}\n.icon-tumblr-sign:before {\n  content: \"\\f174\";\n}\n.icon-long-arrow-down:before {\n  content: \"\\f175\";\n}\n.icon-long-arrow-up:before {\n  content: \"\\f176\";\n}\n.icon-long-arrow-left:before {\n  content: \"\\f177\";\n}\n.icon-long-arrow-right:before {\n  content: \"\\f178\";\n}\n.icon-apple:before {\n  content: \"\\f179\";\n}\n.icon-windows:before {\n  content: \"\\f17a\";\n}\n.icon-android:before {\n  content: \"\\f17b\";\n}\n.icon-linux:before {\n  content: \"\\f17c\";\n}\n.icon-dribbble:before {\n  content: \"\\f17d\";\n}\n.icon-skype:before {\n  content: \"\\f17e\";\n}\n.icon-foursquare:before {\n  content: \"\\f180\";\n}\n.icon-trello:before {\n  content: \"\\f181\";\n}\n.icon-female:before {\n  content: \"\\f182\";\n}\n.icon-male:before {\n  content: \"\\f183\";\n}\n.icon-gittip:before {\n  content: \"\\f184\";\n}\n.icon-sun:before {\n  content: \"\\f185\";\n}\n.icon-moon:before {\n  content: \"\\f186\";\n}\n.icon-archive:before {\n  content: \"\\f187\";\n}\n.icon-bug:before {\n  content: \"\\f188\";\n}\n.icon-vk:before {\n  content: \"\\f189\";\n}\n.icon-weibo:before {\n  content: \"\\f18a\";\n}\n.icon-renren:before {\n  content: \"\\f18b\";\n}\n"
  },
  {
    "path": "automatic/static/css/font-awesome/less/animated.less",
    "content": "// Animated Icons\n// --------------------------\n\n.@{fa-css-prefix}-spin {\n  -webkit-animation: fa-spin 2s infinite linear;\n          animation: fa-spin 2s infinite linear;\n}\n\n.@{fa-css-prefix}-pulse {\n  -webkit-animation: fa-spin 1s infinite steps(8);\n          animation: fa-spin 1s infinite steps(8);\n}\n\n@-webkit-keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg);\n  }\n  100% {\n    -webkit-transform: rotate(359deg);\n            transform: rotate(359deg);\n  }\n}\n\n@keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg);\n  }\n  100% {\n    -webkit-transform: rotate(359deg);\n            transform: rotate(359deg);\n  }\n}\n"
  },
  {
    "path": "automatic/static/css/font-awesome/less/bootstrap.less",
    "content": "/* BOOTSTRAP SPECIFIC CLASSES\n * -------------------------- */\n\n/* Bootstrap 2.0 sprites.less reset */\n[class^=\"icon-\"],\n[class*=\" icon-\"] {\n  display: inline;\n  width: auto;\n  height: auto;\n  line-height: normal;\n  vertical-align: baseline;\n  background-image: none;\n  background-position: 0% 0%;\n  background-repeat: repeat;\n  margin-top: 0;\n}\n\n/* more sprites.less reset */\n.icon-white,\n.nav-pills > .active > a > [class^=\"icon-\"],\n.nav-pills > .active > a > [class*=\" icon-\"],\n.nav-list > .active > a > [class^=\"icon-\"],\n.nav-list > .active > a > [class*=\" icon-\"],\n.navbar-inverse .nav > .active > a > [class^=\"icon-\"],\n.navbar-inverse .nav > .active > a > [class*=\" icon-\"],\n.dropdown-menu > li > a:hover > [class^=\"icon-\"],\n.dropdown-menu > li > a:hover > [class*=\" icon-\"],\n.dropdown-menu > .active > a > [class^=\"icon-\"],\n.dropdown-menu > .active > a > [class*=\" icon-\"],\n.dropdown-submenu:hover > a > [class^=\"icon-\"],\n.dropdown-submenu:hover > a > [class*=\" icon-\"] {\n  background-image: none;\n}\n\n\n/* keeps Bootstrap styles with and without icons the same */\n.btn, .nav {\n  [class^=\"icon-\"],\n  [class*=\" icon-\"] {\n//    display: inline;\n    &.icon-large { line-height: .9em; }\n    &.icon-spin { display: inline-block; }\n  }\n}\n.nav-tabs, .nav-pills {\n  [class^=\"icon-\"],\n  [class*=\" icon-\"] {\n    &, &.icon-large { line-height: .9em; }\n  }\n}\n.btn {\n  [class^=\"icon-\"],\n  [class*=\" icon-\"] {\n    &.pull-left, &.pull-right {\n      &.icon-2x { margin-top: .18em; }\n    }\n    &.icon-spin.icon-large { line-height: .8em; }\n  }\n}\n.btn.btn-small {\n  [class^=\"icon-\"],\n  [class*=\" icon-\"] {\n    &.pull-left, &.pull-right {\n      &.icon-2x { margin-top: .25em; }\n    }\n  }\n}\n.btn.btn-large {\n  [class^=\"icon-\"],\n  [class*=\" icon-\"] {\n    margin-top: 0; // overrides bootstrap default\n    &.pull-left, &.pull-right {\n      &.icon-2x { margin-top: .05em; }\n    }\n    &.pull-left.icon-2x { margin-right: .2em; }\n    &.pull-right.icon-2x { margin-left: .2em; }\n  }\n}\n\n/* Fixes alignment in nav lists */\n.nav-list [class^=\"icon-\"],\n.nav-list [class*=\" icon-\"] {\n  line-height: inherit;\n}\n"
  },
  {
    "path": "automatic/static/css/font-awesome/less/bordered-pulled.less",
    "content": "// Bordered & Pulled\n// -------------------------\n\n.@{fa-css-prefix}-border {\n  padding: .2em .25em .15em;\n  border: solid .08em @fa-border-color;\n  border-radius: .1em;\n}\n\n.pull-right { float: right; }\n.pull-left { float: left; }\n\n.@{fa-css-prefix} {\n  &.pull-left { margin-right: .3em; }\n  &.pull-right { margin-left: .3em; }\n}\n"
  },
  {
    "path": "automatic/static/css/font-awesome/less/core.less",
    "content": "/* FONT AWESOME CORE\n * -------------------------- */\n\n[class^=\"icon-\"],\n[class*=\" icon-\"] {\n  .icon-FontAwesome();\n}\n\n[class^=\"icon-\"]:before,\n[class*=\" icon-\"]:before {\n  text-decoration: inherit;\n  display: inline-block;\n  speak: none;\n}\n\n/* makes the font 33% larger relative to the icon container */\n.icon-large:before {\n  vertical-align: -10%;\n  font-size: 4/3em;\n}\n\n/* makes sure icons active on rollover in links */\na {\n  [class^=\"icon-\"],\n  [class*=\" icon-\"] {\n    display: inline;\n  }\n}\n\n/* increased font size for icon-large */\n[class^=\"icon-\"],\n[class*=\" icon-\"] {\n  &.icon-fixed-width {\n    display: inline-block;\n    width: 16/14em;\n    text-align: right;\n    padding-right: 4/14em;\n    &.icon-large {\n      width: 20/14em;\n    }\n  }\n}\n\n.icons-ul {\n  margin-left: @icons-li-width;\n  list-style-type: none;\n\n  > li { position: relative; }\n\n  .icon-li {\n    position: absolute;\n    left: -@icons-li-width;\n    width: @icons-li-width;\n    text-align: center;\n    line-height: inherit;\n  }\n}\n\n// allows usage of the hide class directly on font awesome icons\n[class^=\"icon-\"],\n[class*=\" icon-\"] {\n  &.hide {\n    display: none;\n  }\n}\n\n.icon-muted { color: @iconMuted; }\n.icon-light { color: @iconLight; }\n.icon-dark { color: @iconDark; }\n\n// Icon Borders\n// -------------------------\n\n.icon-border {\n  border: solid 1px @borderColor;\n  padding: .2em .25em .15em;\n  .border-radius(3px);\n}\n\n// Icon Sizes\n// -------------------------\n\n.icon-2x {\n  font-size: 2em;\n  &.icon-border {\n    border-width: 2px;\n    .border-radius(4px);\n  }\n}\n.icon-3x {\n  font-size: 3em;\n  &.icon-border {\n    border-width: 3px;\n    .border-radius(5px);\n  }\n}\n.icon-4x {\n  font-size: 4em;\n  &.icon-border {\n    border-width: 4px;\n    .border-radius(6px);\n  }\n}\n\n.icon-5x {\n  font-size: 5em;\n  &.icon-border {\n    border-width: 5px;\n    .border-radius(7px);\n  }\n}\n\n\n// Floats & Margins\n// -------------------------\n\n// Quick floats\n.pull-right { float: right; }\n.pull-left { float: left; }\n\n[class^=\"icon-\"],\n[class*=\" icon-\"] {\n  &.pull-left {\n    margin-right: .3em;\n  }\n  &.pull-right {\n    margin-left: .3em;\n  }\n}\n"
  },
  {
    "path": "automatic/static/css/font-awesome/less/extras.less",
    "content": "/* EXTRAS\n * -------------------------- */\n\n/* Stacked and layered icon */\n.icon-stack();\n\n/* Animated rotating icon */\n.icon-spin {\n  display: inline-block;\n  -moz-animation: spin 2s infinite linear;\n  -o-animation: spin 2s infinite linear;\n  -webkit-animation: spin 2s infinite linear;\n  animation: spin 2s infinite linear;\n}\n\n/* Prevent stack and spinners from being taken inline when inside a link */\na .icon-stack,\na .icon-spin {\n  display: inline-block;\n  text-decoration: none;\n}\n\n@-moz-keyframes spin {\n  0% { -moz-transform: rotate(0deg); }\n  100% { -moz-transform: rotate(359deg); }\n}\n@-webkit-keyframes spin {\n  0% { -webkit-transform: rotate(0deg); }\n  100% { -webkit-transform: rotate(359deg); }\n}\n@-o-keyframes spin {\n  0% { -o-transform: rotate(0deg); }\n  100% { -o-transform: rotate(359deg); }\n}\n@-ms-keyframes spin {\n  0% { -ms-transform: rotate(0deg); }\n  100% { -ms-transform: rotate(359deg); }\n}\n@keyframes spin {\n  0% { transform: rotate(0deg); }\n  100% { transform: rotate(359deg); }\n}\n\n/* Icon rotations and mirroring */\n.icon-rotate-90:before {\n  -webkit-transform: rotate(90deg);\n  -moz-transform: rotate(90deg);\n  -ms-transform: rotate(90deg);\n  -o-transform: rotate(90deg);\n  transform: rotate(90deg);\n  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1);\n}\n\n.icon-rotate-180:before {\n  -webkit-transform: rotate(180deg);\n  -moz-transform: rotate(180deg);\n  -ms-transform: rotate(180deg);\n  -o-transform: rotate(180deg);\n  transform: rotate(180deg);\n  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2);\n}\n\n.icon-rotate-270:before {\n  -webkit-transform: rotate(270deg);\n  -moz-transform: rotate(270deg);\n  -ms-transform: rotate(270deg);\n  -o-transform: rotate(270deg);\n  transform: rotate(270deg);\n  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);\n}\n\n.icon-flip-horizontal:before {\n  -webkit-transform: scale(-1, 1);\n  -moz-transform: scale(-1, 1);\n  -ms-transform: scale(-1, 1);\n  -o-transform: scale(-1, 1);\n  transform: scale(-1, 1);\n}\n\n.icon-flip-vertical:before {\n  -webkit-transform: scale(1, -1);\n  -moz-transform: scale(1, -1);\n  -ms-transform: scale(1, -1);\n  -o-transform: scale(1, -1);\n  transform: scale(1, -1);\n}\n\n/* ensure rotation occurs inside anchor tags */\na {\n  .icon-rotate-90, .icon-rotate-180, .icon-rotate-270, .icon-flip-horizontal, .icon-flip-vertical {\n    &:before { display: inline-block; }\n  }\n}\n"
  },
  {
    "path": "automatic/static/css/font-awesome/less/fixed-width.less",
    "content": "// Fixed Width Icons\n// -------------------------\n.@{fa-css-prefix}-fw {\n  width: (18em / 14);\n  text-align: center;\n}\n"
  },
  {
    "path": "automatic/static/css/font-awesome/less/font-awesome-ie7.less",
    "content": "/*!\n *  Font Awesome 3.2.1\n *  the iconic font designed for Bootstrap\n *  ------------------------------------------------------------------------------\n *  The full suite of pictographic icons, examples, and documentation can be\n *  found at http://fontawesome.io.  Stay up to date on Twitter at\n *  http://twitter.com/fontawesome.\n *\n *  License\n *  ------------------------------------------------------------------------------\n *  - The Font Awesome font is licensed under SIL OFL 1.1 -\n *    http://scripts.sil.org/OFL\n *  - Font Awesome CSS, LESS, and SASS files are licensed under MIT License -\n *    http://opensource.org/licenses/mit-license.html\n *  - Font Awesome documentation licensed under CC BY 3.0 -\n *    http://creativecommons.org/licenses/by/3.0/\n *  - Attribution is no longer required in Font Awesome 3.0, but much appreciated:\n *    \"Font Awesome by Dave Gandy - http://fontawesome.io\"\n *\n *  Author - Dave Gandy\n *  ------------------------------------------------------------------------------\n *  Email: dave@fontawesome.io\n *  Twitter: http://twitter.com/byscuits\n *  Work: Lead Product Designer @ Kyruus - http://kyruus.com\n */\n\n.icon-large {\n  font-size: 4/3em;\n  margin-top: -4px;\n  padding-top: 3px;\n  margin-bottom: -4px;\n  padding-bottom: 3px;\n  vertical-align: middle;\n}\n\n.nav {\n  [class^=\"icon-\"],\n  [class*=\" icon-\"] {\n    vertical-align: inherit;\n    margin-top: -4px;\n    padding-top: 3px;\n    margin-bottom: -4px;\n    padding-bottom: 3px;\n    &.icon-large {\n      vertical-align: -25%;\n    }\n  }\n}\n\n.nav-pills, .nav-tabs {\n  [class^=\"icon-\"],\n  [class*=\" icon-\"] {\n    &.icon-large {\n      line-height: .75em;\n      margin-top: -7px;\n      padding-top: 5px;\n      margin-bottom: -5px;\n      padding-bottom: 4px;\n    }\n  }\n}\n\n.btn {\n  [class^=\"icon-\"],\n  [class*=\" icon-\"] {\n    &.pull-left, &.pull-right { vertical-align: inherit; }\n    &.icon-large {\n      margin-top: -.5em;\n    }\n  }\n}\n\na [class^=\"icon-\"],\na [class*=\" icon-\"] {\n  cursor: pointer;\n}\n\n.ie7icon(@inner) { *zoom: ~\"expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '@{inner}')\"; }\n\n\n.icon-glass {\n  .ie7icon('&#xf000;');\n}\n\n\n.icon-music {\n  .ie7icon('&#xf001;');\n}\n\n\n.icon-search {\n  .ie7icon('&#xf002;');\n}\n\n\n.icon-envelope-alt {\n  .ie7icon('&#xf003;');\n}\n\n\n.icon-heart {\n  .ie7icon('&#xf004;');\n}\n\n\n.icon-star {\n  .ie7icon('&#xf005;');\n}\n\n\n.icon-star-empty {\n  .ie7icon('&#xf006;');\n}\n\n\n.icon-user {\n  .ie7icon('&#xf007;');\n}\n\n\n.icon-film {\n  .ie7icon('&#xf008;');\n}\n\n\n.icon-th-large {\n  .ie7icon('&#xf009;');\n}\n\n\n.icon-th {\n  .ie7icon('&#xf00a;');\n}\n\n\n.icon-th-list {\n  .ie7icon('&#xf00b;');\n}\n\n\n.icon-ok {\n  .ie7icon('&#xf00c;');\n}\n\n\n.icon-remove {\n  .ie7icon('&#xf00d;');\n}\n\n\n.icon-zoom-in {\n  .ie7icon('&#xf00e;');\n}\n\n\n.icon-zoom-out {\n  .ie7icon('&#xf010;');\n}\n\n\n.icon-off {\n  .ie7icon('&#xf011;');\n}\n\n.icon-power-off {\n  .ie7icon('&#xf011;');\n}\n\n\n.icon-signal {\n  .ie7icon('&#xf012;');\n}\n\n\n.icon-cog {\n  .ie7icon('&#xf013;');\n}\n\n.icon-gear {\n  .ie7icon('&#xf013;');\n}\n\n\n.icon-trash {\n  .ie7icon('&#xf014;');\n}\n\n\n.icon-home {\n  .ie7icon('&#xf015;');\n}\n\n\n.icon-file-alt {\n  .ie7icon('&#xf016;');\n}\n\n\n.icon-time {\n  .ie7icon('&#xf017;');\n}\n\n\n.icon-road {\n  .ie7icon('&#xf018;');\n}\n\n\n.icon-download-alt {\n  .ie7icon('&#xf019;');\n}\n\n\n.icon-download {\n  .ie7icon('&#xf01a;');\n}\n\n\n.icon-upload {\n  .ie7icon('&#xf01b;');\n}\n\n\n.icon-inbox {\n  .ie7icon('&#xf01c;');\n}\n\n\n.icon-play-circle {\n  .ie7icon('&#xf01d;');\n}\n\n\n.icon-repeat {\n  .ie7icon('&#xf01e;');\n}\n\n.icon-rotate-right {\n  .ie7icon('&#xf01e;');\n}\n\n\n.icon-refresh {\n  .ie7icon('&#xf021;');\n}\n\n\n.icon-list-alt {\n  .ie7icon('&#xf022;');\n}\n\n\n.icon-lock {\n  .ie7icon('&#xf023;');\n}\n\n\n.icon-flag {\n  .ie7icon('&#xf024;');\n}\n\n\n.icon-headphones {\n  .ie7icon('&#xf025;');\n}\n\n\n.icon-volume-off {\n  .ie7icon('&#xf026;');\n}\n\n\n.icon-volume-down {\n  .ie7icon('&#xf027;');\n}\n\n\n.icon-volume-up {\n  .ie7icon('&#xf028;');\n}\n\n\n.icon-qrcode {\n  .ie7icon('&#xf029;');\n}\n\n\n.icon-barcode {\n  .ie7icon('&#xf02a;');\n}\n\n\n.icon-tag {\n  .ie7icon('&#xf02b;');\n}\n\n\n.icon-tags {\n  .ie7icon('&#xf02c;');\n}\n\n\n.icon-book {\n  .ie7icon('&#xf02d;');\n}\n\n\n.icon-bookmark {\n  .ie7icon('&#xf02e;');\n}\n\n\n.icon-print {\n  .ie7icon('&#xf02f;');\n}\n\n\n.icon-camera {\n  .ie7icon('&#xf030;');\n}\n\n\n.icon-font {\n  .ie7icon('&#xf031;');\n}\n\n\n.icon-bold {\n  .ie7icon('&#xf032;');\n}\n\n\n.icon-italic {\n  .ie7icon('&#xf033;');\n}\n\n\n.icon-text-height {\n  .ie7icon('&#xf034;');\n}\n\n\n.icon-text-width {\n  .ie7icon('&#xf035;');\n}\n\n\n.icon-align-left {\n  .ie7icon('&#xf036;');\n}\n\n\n.icon-align-center {\n  .ie7icon('&#xf037;');\n}\n\n\n.icon-align-right {\n  .ie7icon('&#xf038;');\n}\n\n\n.icon-align-justify {\n  .ie7icon('&#xf039;');\n}\n\n\n.icon-list {\n  .ie7icon('&#xf03a;');\n}\n\n\n.icon-indent-left {\n  .ie7icon('&#xf03b;');\n}\n\n\n.icon-indent-right {\n  .ie7icon('&#xf03c;');\n}\n\n\n.icon-facetime-video {\n  .ie7icon('&#xf03d;');\n}\n\n\n.icon-picture {\n  .ie7icon('&#xf03e;');\n}\n\n\n.icon-pencil {\n  .ie7icon('&#xf040;');\n}\n\n\n.icon-map-marker {\n  .ie7icon('&#xf041;');\n}\n\n\n.icon-adjust {\n  .ie7icon('&#xf042;');\n}\n\n\n.icon-tint {\n  .ie7icon('&#xf043;');\n}\n\n\n.icon-edit {\n  .ie7icon('&#xf044;');\n}\n\n\n.icon-share {\n  .ie7icon('&#xf045;');\n}\n\n\n.icon-check {\n  .ie7icon('&#xf046;');\n}\n\n\n.icon-move {\n  .ie7icon('&#xf047;');\n}\n\n\n.icon-step-backward {\n  .ie7icon('&#xf048;');\n}\n\n\n.icon-fast-backward {\n  .ie7icon('&#xf049;');\n}\n\n\n.icon-backward {\n  .ie7icon('&#xf04a;');\n}\n\n\n.icon-play {\n  .ie7icon('&#xf04b;');\n}\n\n\n.icon-pause {\n  .ie7icon('&#xf04c;');\n}\n\n\n.icon-stop {\n  .ie7icon('&#xf04d;');\n}\n\n\n.icon-forward {\n  .ie7icon('&#xf04e;');\n}\n\n\n.icon-fast-forward {\n  .ie7icon('&#xf050;');\n}\n\n\n.icon-step-forward {\n  .ie7icon('&#xf051;');\n}\n\n\n.icon-eject {\n  .ie7icon('&#xf052;');\n}\n\n\n.icon-chevron-left {\n  .ie7icon('&#xf053;');\n}\n\n\n.icon-chevron-right {\n  .ie7icon('&#xf054;');\n}\n\n\n.icon-plus-sign {\n  .ie7icon('&#xf055;');\n}\n\n\n.icon-minus-sign {\n  .ie7icon('&#xf056;');\n}\n\n\n.icon-remove-sign {\n  .ie7icon('&#xf057;');\n}\n\n\n.icon-ok-sign {\n  .ie7icon('&#xf058;');\n}\n\n\n.icon-question-sign {\n  .ie7icon('&#xf059;');\n}\n\n\n.icon-info-sign {\n  .ie7icon('&#xf05a;');\n}\n\n\n.icon-screenshot {\n  .ie7icon('&#xf05b;');\n}\n\n\n.icon-remove-circle {\n  .ie7icon('&#xf05c;');\n}\n\n\n.icon-ok-circle {\n  .ie7icon('&#xf05d;');\n}\n\n\n.icon-ban-circle {\n  .ie7icon('&#xf05e;');\n}\n\n\n.icon-arrow-left {\n  .ie7icon('&#xf060;');\n}\n\n\n.icon-arrow-right {\n  .ie7icon('&#xf061;');\n}\n\n\n.icon-arrow-up {\n  .ie7icon('&#xf062;');\n}\n\n\n.icon-arrow-down {\n  .ie7icon('&#xf063;');\n}\n\n\n.icon-share-alt {\n  .ie7icon('&#xf064;');\n}\n\n.icon-mail-forward {\n  .ie7icon('&#xf064;');\n}\n\n\n.icon-resize-full {\n  .ie7icon('&#xf065;');\n}\n\n\n.icon-resize-small {\n  .ie7icon('&#xf066;');\n}\n\n\n.icon-plus {\n  .ie7icon('&#xf067;');\n}\n\n\n.icon-minus {\n  .ie7icon('&#xf068;');\n}\n\n\n.icon-asterisk {\n  .ie7icon('&#xf069;');\n}\n\n\n.icon-exclamation-sign {\n  .ie7icon('&#xf06a;');\n}\n\n\n.icon-gift {\n  .ie7icon('&#xf06b;');\n}\n\n\n.icon-leaf {\n  .ie7icon('&#xf06c;');\n}\n\n\n.icon-fire {\n  .ie7icon('&#xf06d;');\n}\n\n\n.icon-eye-open {\n  .ie7icon('&#xf06e;');\n}\n\n\n.icon-eye-close {\n  .ie7icon('&#xf070;');\n}\n\n\n.icon-warning-sign {\n  .ie7icon('&#xf071;');\n}\n\n\n.icon-plane {\n  .ie7icon('&#xf072;');\n}\n\n\n.icon-calendar {\n  .ie7icon('&#xf073;');\n}\n\n\n.icon-random {\n  .ie7icon('&#xf074;');\n}\n\n\n.icon-comment {\n  .ie7icon('&#xf075;');\n}\n\n\n.icon-magnet {\n  .ie7icon('&#xf076;');\n}\n\n\n.icon-chevron-up {\n  .ie7icon('&#xf077;');\n}\n\n\n.icon-chevron-down {\n  .ie7icon('&#xf078;');\n}\n\n\n.icon-retweet {\n  .ie7icon('&#xf079;');\n}\n\n\n.icon-shopping-cart {\n  .ie7icon('&#xf07a;');\n}\n\n\n.icon-folder-close {\n  .ie7icon('&#xf07b;');\n}\n\n\n.icon-folder-open {\n  .ie7icon('&#xf07c;');\n}\n\n\n.icon-resize-vertical {\n  .ie7icon('&#xf07d;');\n}\n\n\n.icon-resize-horizontal {\n  .ie7icon('&#xf07e;');\n}\n\n\n.icon-bar-chart {\n  .ie7icon('&#xf080;');\n}\n\n\n.icon-twitter-sign {\n  .ie7icon('&#xf081;');\n}\n\n\n.icon-facebook-sign {\n  .ie7icon('&#xf082;');\n}\n\n\n.icon-camera-retro {\n  .ie7icon('&#xf083;');\n}\n\n\n.icon-key {\n  .ie7icon('&#xf084;');\n}\n\n\n.icon-cogs {\n  .ie7icon('&#xf085;');\n}\n\n.icon-gears {\n  .ie7icon('&#xf085;');\n}\n\n\n.icon-comments {\n  .ie7icon('&#xf086;');\n}\n\n\n.icon-thumbs-up-alt {\n  .ie7icon('&#xf087;');\n}\n\n\n.icon-thumbs-down-alt {\n  .ie7icon('&#xf088;');\n}\n\n\n.icon-star-half {\n  .ie7icon('&#xf089;');\n}\n\n\n.icon-heart-empty {\n  .ie7icon('&#xf08a;');\n}\n\n\n.icon-signout {\n  .ie7icon('&#xf08b;');\n}\n\n\n.icon-linkedin-sign {\n  .ie7icon('&#xf08c;');\n}\n\n\n.icon-pushpin {\n  .ie7icon('&#xf08d;');\n}\n\n\n.icon-external-link {\n  .ie7icon('&#xf08e;');\n}\n\n\n.icon-signin {\n  .ie7icon('&#xf090;');\n}\n\n\n.icon-trophy {\n  .ie7icon('&#xf091;');\n}\n\n\n.icon-github-sign {\n  .ie7icon('&#xf092;');\n}\n\n\n.icon-upload-alt {\n  .ie7icon('&#xf093;');\n}\n\n\n.icon-lemon {\n  .ie7icon('&#xf094;');\n}\n\n\n.icon-phone {\n  .ie7icon('&#xf095;');\n}\n\n\n.icon-check-empty {\n  .ie7icon('&#xf096;');\n}\n\n.icon-unchecked {\n  .ie7icon('&#xf096;');\n}\n\n\n.icon-bookmark-empty {\n  .ie7icon('&#xf097;');\n}\n\n\n.icon-phone-sign {\n  .ie7icon('&#xf098;');\n}\n\n\n.icon-twitter {\n  .ie7icon('&#xf099;');\n}\n\n\n.icon-facebook {\n  .ie7icon('&#xf09a;');\n}\n\n\n.icon-github {\n  .ie7icon('&#xf09b;');\n}\n\n\n.icon-unlock {\n  .ie7icon('&#xf09c;');\n}\n\n\n.icon-credit-card {\n  .ie7icon('&#xf09d;');\n}\n\n\n.icon-rss {\n  .ie7icon('&#xf09e;');\n}\n\n\n.icon-hdd {\n  .ie7icon('&#xf0a0;');\n}\n\n\n.icon-bullhorn {\n  .ie7icon('&#xf0a1;');\n}\n\n\n.icon-bell {\n  .ie7icon('&#xf0a2;');\n}\n\n\n.icon-certificate {\n  .ie7icon('&#xf0a3;');\n}\n\n\n.icon-hand-right {\n  .ie7icon('&#xf0a4;');\n}\n\n\n.icon-hand-left {\n  .ie7icon('&#xf0a5;');\n}\n\n\n.icon-hand-up {\n  .ie7icon('&#xf0a6;');\n}\n\n\n.icon-hand-down {\n  .ie7icon('&#xf0a7;');\n}\n\n\n.icon-circle-arrow-left {\n  .ie7icon('&#xf0a8;');\n}\n\n\n.icon-circle-arrow-right {\n  .ie7icon('&#xf0a9;');\n}\n\n\n.icon-circle-arrow-up {\n  .ie7icon('&#xf0aa;');\n}\n\n\n.icon-circle-arrow-down {\n  .ie7icon('&#xf0ab;');\n}\n\n\n.icon-globe {\n  .ie7icon('&#xf0ac;');\n}\n\n\n.icon-wrench {\n  .ie7icon('&#xf0ad;');\n}\n\n\n.icon-tasks {\n  .ie7icon('&#xf0ae;');\n}\n\n\n.icon-filter {\n  .ie7icon('&#xf0b0;');\n}\n\n\n.icon-briefcase {\n  .ie7icon('&#xf0b1;');\n}\n\n\n.icon-fullscreen {\n  .ie7icon('&#xf0b2;');\n}\n\n\n.icon-group {\n  .ie7icon('&#xf0c0;');\n}\n\n\n.icon-link {\n  .ie7icon('&#xf0c1;');\n}\n\n\n.icon-cloud {\n  .ie7icon('&#xf0c2;');\n}\n\n\n.icon-beaker {\n  .ie7icon('&#xf0c3;');\n}\n\n\n.icon-cut {\n  .ie7icon('&#xf0c4;');\n}\n\n\n.icon-copy {\n  .ie7icon('&#xf0c5;');\n}\n\n\n.icon-paper-clip {\n  .ie7icon('&#xf0c6;');\n}\n\n.icon-paperclip {\n  .ie7icon('&#xf0c6;');\n}\n\n\n.icon-save {\n  .ie7icon('&#xf0c7;');\n}\n\n\n.icon-sign-blank {\n  .ie7icon('&#xf0c8;');\n}\n\n\n.icon-reorder {\n  .ie7icon('&#xf0c9;');\n}\n\n\n.icon-list-ul {\n  .ie7icon('&#xf0ca;');\n}\n\n\n.icon-list-ol {\n  .ie7icon('&#xf0cb;');\n}\n\n\n.icon-strikethrough {\n  .ie7icon('&#xf0cc;');\n}\n\n\n.icon-underline {\n  .ie7icon('&#xf0cd;');\n}\n\n\n.icon-table {\n  .ie7icon('&#xf0ce;');\n}\n\n\n.icon-magic {\n  .ie7icon('&#xf0d0;');\n}\n\n\n.icon-truck {\n  .ie7icon('&#xf0d1;');\n}\n\n\n.icon-pinterest {\n  .ie7icon('&#xf0d2;');\n}\n\n\n.icon-pinterest-sign {\n  .ie7icon('&#xf0d3;');\n}\n\n\n.icon-google-plus-sign {\n  .ie7icon('&#xf0d4;');\n}\n\n\n.icon-google-plus {\n  .ie7icon('&#xf0d5;');\n}\n\n\n.icon-money {\n  .ie7icon('&#xf0d6;');\n}\n\n\n.icon-caret-down {\n  .ie7icon('&#xf0d7;');\n}\n\n\n.icon-caret-up {\n  .ie7icon('&#xf0d8;');\n}\n\n\n.icon-caret-left {\n  .ie7icon('&#xf0d9;');\n}\n\n\n.icon-caret-right {\n  .ie7icon('&#xf0da;');\n}\n\n\n.icon-columns {\n  .ie7icon('&#xf0db;');\n}\n\n\n.icon-sort {\n  .ie7icon('&#xf0dc;');\n}\n\n\n.icon-sort-down {\n  .ie7icon('&#xf0dd;');\n}\n\n\n.icon-sort-up {\n  .ie7icon('&#xf0de;');\n}\n\n\n.icon-envelope {\n  .ie7icon('&#xf0e0;');\n}\n\n\n.icon-linkedin {\n  .ie7icon('&#xf0e1;');\n}\n\n\n.icon-undo {\n  .ie7icon('&#xf0e2;');\n}\n\n.icon-rotate-left {\n  .ie7icon('&#xf0e2;');\n}\n\n\n.icon-legal {\n  .ie7icon('&#xf0e3;');\n}\n\n\n.icon-dashboard {\n  .ie7icon('&#xf0e4;');\n}\n\n\n.icon-comment-alt {\n  .ie7icon('&#xf0e5;');\n}\n\n\n.icon-comments-alt {\n  .ie7icon('&#xf0e6;');\n}\n\n\n.icon-bolt {\n  .ie7icon('&#xf0e7;');\n}\n\n\n.icon-sitemap {\n  .ie7icon('&#xf0e8;');\n}\n\n\n.icon-umbrella {\n  .ie7icon('&#xf0e9;');\n}\n\n\n.icon-paste {\n  .ie7icon('&#xf0ea;');\n}\n\n\n.icon-lightbulb {\n  .ie7icon('&#xf0eb;');\n}\n\n\n.icon-exchange {\n  .ie7icon('&#xf0ec;');\n}\n\n\n.icon-cloud-download {\n  .ie7icon('&#xf0ed;');\n}\n\n\n.icon-cloud-upload {\n  .ie7icon('&#xf0ee;');\n}\n\n\n.icon-user-md {\n  .ie7icon('&#xf0f0;');\n}\n\n\n.icon-stethoscope {\n  .ie7icon('&#xf0f1;');\n}\n\n\n.icon-suitcase {\n  .ie7icon('&#xf0f2;');\n}\n\n\n.icon-bell-alt {\n  .ie7icon('&#xf0f3;');\n}\n\n\n.icon-coffee {\n  .ie7icon('&#xf0f4;');\n}\n\n\n.icon-food {\n  .ie7icon('&#xf0f5;');\n}\n\n\n.icon-file-text-alt {\n  .ie7icon('&#xf0f6;');\n}\n\n\n.icon-building {\n  .ie7icon('&#xf0f7;');\n}\n\n\n.icon-hospital {\n  .ie7icon('&#xf0f8;');\n}\n\n\n.icon-ambulance {\n  .ie7icon('&#xf0f9;');\n}\n\n\n.icon-medkit {\n  .ie7icon('&#xf0fa;');\n}\n\n\n.icon-fighter-jet {\n  .ie7icon('&#xf0fb;');\n}\n\n\n.icon-beer {\n  .ie7icon('&#xf0fc;');\n}\n\n\n.icon-h-sign {\n  .ie7icon('&#xf0fd;');\n}\n\n\n.icon-plus-sign-alt {\n  .ie7icon('&#xf0fe;');\n}\n\n\n.icon-double-angle-left {\n  .ie7icon('&#xf100;');\n}\n\n\n.icon-double-angle-right {\n  .ie7icon('&#xf101;');\n}\n\n\n.icon-double-angle-up {\n  .ie7icon('&#xf102;');\n}\n\n\n.icon-double-angle-down {\n  .ie7icon('&#xf103;');\n}\n\n\n.icon-angle-left {\n  .ie7icon('&#xf104;');\n}\n\n\n.icon-angle-right {\n  .ie7icon('&#xf105;');\n}\n\n\n.icon-angle-up {\n  .ie7icon('&#xf106;');\n}\n\n\n.icon-angle-down {\n  .ie7icon('&#xf107;');\n}\n\n\n.icon-desktop {\n  .ie7icon('&#xf108;');\n}\n\n\n.icon-laptop {\n  .ie7icon('&#xf109;');\n}\n\n\n.icon-tablet {\n  .ie7icon('&#xf10a;');\n}\n\n\n.icon-mobile-phone {\n  .ie7icon('&#xf10b;');\n}\n\n\n.icon-circle-blank {\n  .ie7icon('&#xf10c;');\n}\n\n\n.icon-quote-left {\n  .ie7icon('&#xf10d;');\n}\n\n\n.icon-quote-right {\n  .ie7icon('&#xf10e;');\n}\n\n\n.icon-spinner {\n  .ie7icon('&#xf110;');\n}\n\n\n.icon-circle {\n  .ie7icon('&#xf111;');\n}\n\n\n.icon-reply {\n  .ie7icon('&#xf112;');\n}\n\n.icon-mail-reply {\n  .ie7icon('&#xf112;');\n}\n\n\n.icon-github-alt {\n  .ie7icon('&#xf113;');\n}\n\n\n.icon-folder-close-alt {\n  .ie7icon('&#xf114;');\n}\n\n\n.icon-folder-open-alt {\n  .ie7icon('&#xf115;');\n}\n\n\n.icon-expand-alt {\n  .ie7icon('&#xf116;');\n}\n\n\n.icon-collapse-alt {\n  .ie7icon('&#xf117;');\n}\n\n\n.icon-smile {\n  .ie7icon('&#xf118;');\n}\n\n\n.icon-frown {\n  .ie7icon('&#xf119;');\n}\n\n\n.icon-meh {\n  .ie7icon('&#xf11a;');\n}\n\n\n.icon-gamepad {\n  .ie7icon('&#xf11b;');\n}\n\n\n.icon-keyboard {\n  .ie7icon('&#xf11c;');\n}\n\n\n.icon-flag-alt {\n  .ie7icon('&#xf11d;');\n}\n\n\n.icon-flag-checkered {\n  .ie7icon('&#xf11e;');\n}\n\n\n.icon-terminal {\n  .ie7icon('&#xf120;');\n}\n\n\n.icon-code {\n  .ie7icon('&#xf121;');\n}\n\n\n.icon-reply-all {\n  .ie7icon('&#xf122;');\n}\n\n\n.icon-mail-reply-all {\n  .ie7icon('&#xf122;');\n}\n\n\n.icon-star-half-empty {\n  .ie7icon('&#xf123;');\n}\n\n.icon-star-half-full {\n  .ie7icon('&#xf123;');\n}\n\n\n.icon-location-arrow {\n  .ie7icon('&#xf124;');\n}\n\n\n.icon-crop {\n  .ie7icon('&#xf125;');\n}\n\n\n.icon-code-fork {\n  .ie7icon('&#xf126;');\n}\n\n\n.icon-unlink {\n  .ie7icon('&#xf127;');\n}\n\n\n.icon-question {\n  .ie7icon('&#xf128;');\n}\n\n\n.icon-info {\n  .ie7icon('&#xf129;');\n}\n\n\n.icon-exclamation {\n  .ie7icon('&#xf12a;');\n}\n\n\n.icon-superscript {\n  .ie7icon('&#xf12b;');\n}\n\n\n.icon-subscript {\n  .ie7icon('&#xf12c;');\n}\n\n\n.icon-eraser {\n  .ie7icon('&#xf12d;');\n}\n\n\n.icon-puzzle-piece {\n  .ie7icon('&#xf12e;');\n}\n\n\n.icon-microphone {\n  .ie7icon('&#xf130;');\n}\n\n\n.icon-microphone-off {\n  .ie7icon('&#xf131;');\n}\n\n\n.icon-shield {\n  .ie7icon('&#xf132;');\n}\n\n\n.icon-calendar-empty {\n  .ie7icon('&#xf133;');\n}\n\n\n.icon-fire-extinguisher {\n  .ie7icon('&#xf134;');\n}\n\n\n.icon-rocket {\n  .ie7icon('&#xf135;');\n}\n\n\n.icon-maxcdn {\n  .ie7icon('&#xf136;');\n}\n\n\n.icon-chevron-sign-left {\n  .ie7icon('&#xf137;');\n}\n\n\n.icon-chevron-sign-right {\n  .ie7icon('&#xf138;');\n}\n\n\n.icon-chevron-sign-up {\n  .ie7icon('&#xf139;');\n}\n\n\n.icon-chevron-sign-down {\n  .ie7icon('&#xf13a;');\n}\n\n\n.icon-html5 {\n  .ie7icon('&#xf13b;');\n}\n\n\n.icon-css3 {\n  .ie7icon('&#xf13c;');\n}\n\n\n.icon-anchor {\n  .ie7icon('&#xf13d;');\n}\n\n\n.icon-unlock-alt {\n  .ie7icon('&#xf13e;');\n}\n\n\n.icon-bullseye {\n  .ie7icon('&#xf140;');\n}\n\n\n.icon-ellipsis-horizontal {\n  .ie7icon('&#xf141;');\n}\n\n\n.icon-ellipsis-vertical {\n  .ie7icon('&#xf142;');\n}\n\n\n.icon-rss-sign {\n  .ie7icon('&#xf143;');\n}\n\n\n.icon-play-sign {\n  .ie7icon('&#xf144;');\n}\n\n\n.icon-ticket {\n  .ie7icon('&#xf145;');\n}\n\n\n.icon-minus-sign-alt {\n  .ie7icon('&#xf146;');\n}\n\n\n.icon-check-minus {\n  .ie7icon('&#xf147;');\n}\n\n\n.icon-level-up {\n  .ie7icon('&#xf148;');\n}\n\n\n.icon-level-down {\n  .ie7icon('&#xf149;');\n}\n\n\n.icon-check-sign {\n  .ie7icon('&#xf14a;');\n}\n\n\n.icon-edit-sign {\n  .ie7icon('&#xf14b;');\n}\n\n\n.icon-external-link-sign {\n  .ie7icon('&#xf14c;');\n}\n\n\n.icon-share-sign {\n  .ie7icon('&#xf14d;');\n}\n\n\n.icon-compass {\n  .ie7icon('&#xf14e;');\n}\n\n\n.icon-collapse {\n  .ie7icon('&#xf150;');\n}\n\n\n.icon-collapse-top {\n  .ie7icon('&#xf151;');\n}\n\n\n.icon-expand {\n  .ie7icon('&#xf152;');\n}\n\n\n.icon-eur {\n  .ie7icon('&#xf153;');\n}\n\n.icon-euro {\n  .ie7icon('&#xf153;');\n}\n\n\n.icon-gbp {\n  .ie7icon('&#xf154;');\n}\n\n\n.icon-usd {\n  .ie7icon('&#xf155;');\n}\n\n.icon-dollar {\n  .ie7icon('&#xf155;');\n}\n\n\n.icon-inr {\n  .ie7icon('&#xf156;');\n}\n\n.icon-rupee {\n  .ie7icon('&#xf156;');\n}\n\n\n.icon-jpy {\n  .ie7icon('&#xf157;');\n}\n\n.icon-yen {\n  .ie7icon('&#xf157;');\n}\n\n\n.icon-cny {\n  .ie7icon('&#xf158;');\n}\n\n.icon-renminbi {\n  .ie7icon('&#xf158;');\n}\n\n\n.icon-krw {\n  .ie7icon('&#xf159;');\n}\n\n.icon-won {\n  .ie7icon('&#xf159;');\n}\n\n\n.icon-btc {\n  .ie7icon('&#xf15a;');\n}\n\n.icon-bitcoin {\n  .ie7icon('&#xf15a;');\n}\n\n\n.icon-file {\n  .ie7icon('&#xf15b;');\n}\n\n\n.icon-file-text {\n  .ie7icon('&#xf15c;');\n}\n\n\n.icon-sort-by-alphabet {\n  .ie7icon('&#xf15d;');\n}\n\n\n.icon-sort-by-alphabet-alt {\n  .ie7icon('&#xf15e;');\n}\n\n\n.icon-sort-by-attributes {\n  .ie7icon('&#xf160;');\n}\n\n\n.icon-sort-by-attributes-alt {\n  .ie7icon('&#xf161;');\n}\n\n\n.icon-sort-by-order {\n  .ie7icon('&#xf162;');\n}\n\n\n.icon-sort-by-order-alt {\n  .ie7icon('&#xf163;');\n}\n\n\n.icon-thumbs-up {\n  .ie7icon('&#xf164;');\n}\n\n\n.icon-thumbs-down {\n  .ie7icon('&#xf165;');\n}\n\n\n.icon-youtube-sign {\n  .ie7icon('&#xf166;');\n}\n\n\n.icon-youtube {\n  .ie7icon('&#xf167;');\n}\n\n\n.icon-xing {\n  .ie7icon('&#xf168;');\n}\n\n\n.icon-xing-sign {\n  .ie7icon('&#xf169;');\n}\n\n\n.icon-youtube-play {\n  .ie7icon('&#xf16a;');\n}\n\n\n.icon-dropbox {\n  .ie7icon('&#xf16b;');\n}\n\n\n.icon-stackexchange {\n  .ie7icon('&#xf16c;');\n}\n\n\n.icon-instagram {\n  .ie7icon('&#xf16d;');\n}\n\n\n.icon-flickr {\n  .ie7icon('&#xf16e;');\n}\n\n\n.icon-adn {\n  .ie7icon('&#xf170;');\n}\n\n\n.icon-bitbucket {\n  .ie7icon('&#xf171;');\n}\n\n\n.icon-bitbucket-sign {\n  .ie7icon('&#xf172;');\n}\n\n\n.icon-tumblr {\n  .ie7icon('&#xf173;');\n}\n\n\n.icon-tumblr-sign {\n  .ie7icon('&#xf174;');\n}\n\n\n.icon-long-arrow-down {\n  .ie7icon('&#xf175;');\n}\n\n\n.icon-long-arrow-up {\n  .ie7icon('&#xf176;');\n}\n\n\n.icon-long-arrow-left {\n  .ie7icon('&#xf177;');\n}\n\n\n.icon-long-arrow-right {\n  .ie7icon('&#xf178;');\n}\n\n\n.icon-apple {\n  .ie7icon('&#xf179;');\n}\n\n\n.icon-windows {\n  .ie7icon('&#xf17a;');\n}\n\n\n.icon-android {\n  .ie7icon('&#xf17b;');\n}\n\n\n.icon-linux {\n  .ie7icon('&#xf17c;');\n}\n\n\n.icon-dribbble {\n  .ie7icon('&#xf17d;');\n}\n\n\n.icon-skype {\n  .ie7icon('&#xf17e;');\n}\n\n\n.icon-foursquare {\n  .ie7icon('&#xf180;');\n}\n\n\n.icon-trello {\n  .ie7icon('&#xf181;');\n}\n\n\n.icon-female {\n  .ie7icon('&#xf182;');\n}\n\n\n.icon-male {\n  .ie7icon('&#xf183;');\n}\n\n\n.icon-gittip {\n  .ie7icon('&#xf184;');\n}\n\n\n.icon-sun {\n  .ie7icon('&#xf185;');\n}\n\n\n.icon-moon {\n  .ie7icon('&#xf186;');\n}\n\n\n.icon-archive {\n  .ie7icon('&#xf187;');\n}\n\n\n.icon-bug {\n  .ie7icon('&#xf188;');\n}\n\n\n.icon-vk {\n  .ie7icon('&#xf189;');\n}\n\n\n.icon-weibo {\n  .ie7icon('&#xf18a;');\n}\n\n\n.icon-renren {\n  .ie7icon('&#xf18b;');\n}\n\n\n"
  },
  {
    "path": "automatic/static/css/font-awesome/less/font-awesome.less",
    "content": "/*!\n *  Font Awesome 3.2.1\n *  the iconic font designed for Bootstrap\n *  ------------------------------------------------------------------------------\n *  The full suite of pictographic icons, examples, and documentation can be\n *  found at http://fontawesome.io.  Stay up to date on Twitter at\n *  http://twitter.com/fontawesome.\n *\n *  License\n *  ------------------------------------------------------------------------------\n *  - The Font Awesome font is licensed under SIL OFL 1.1 -\n *    http://scripts.sil.org/OFL\n *  - Font Awesome CSS, LESS, and SASS files are licensed under MIT License -\n *    http://opensource.org/licenses/mit-license.html\n *  - Font Awesome documentation licensed under CC BY 3.0 -\n *    http://creativecommons.org/licenses/by/3.0/\n *  - Attribution is no longer required in Font Awesome 3.0, but much appreciated:\n *    \"Font Awesome by Dave Gandy - http://fontawesome.io\"\n *\n *  Author - Dave Gandy\n *  ------------------------------------------------------------------------------\n *  Email: dave@fontawesome.io\n *  Twitter: http://twitter.com/byscuits\n *  Work: Lead Product Designer @ Kyruus - http://kyruus.com\n */\n\n@import \"variables.less\";\n@import \"mixins.less\";\n@import \"path.less\";\n@import \"core.less\";\n@import \"bootstrap.less\";\n@import \"extras.less\";\n@import \"icons.less\";\n"
  },
  {
    "path": "automatic/static/css/font-awesome/less/icons.less",
    "content": "/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen\n   readers do not read off random characters that represent icons */\n\n.icon-glass:before { content: @glass; }\n.icon-music:before { content: @music; }\n.icon-search:before { content: @search; }\n.icon-envelope-alt:before { content: @envelope-alt; }\n.icon-heart:before { content: @heart; }\n.icon-star:before { content: @star; }\n.icon-star-empty:before { content: @star-empty; }\n.icon-user:before { content: @user; }\n.icon-film:before { content: @film; }\n.icon-th-large:before { content: @th-large; }\n.icon-th:before { content: @th; }\n.icon-th-list:before { content: @th-list; }\n.icon-ok:before { content: @ok; }\n.icon-remove:before { content: @remove; }\n.icon-zoom-in:before { content: @zoom-in; }\n.icon-zoom-out:before { content: @zoom-out; }\n.icon-power-off:before,\n.icon-off:before { content: @off; }\n.icon-signal:before { content: @signal; }\n.icon-gear:before,\n.icon-cog:before { content: @cog; }\n.icon-trash:before { content: @trash; }\n.icon-home:before { content: @home; }\n.icon-file-alt:before { content: @file-alt; }\n.icon-time:before { content: @time; }\n.icon-road:before { content: @road; }\n.icon-download-alt:before { content: @download-alt; }\n.icon-download:before { content: @download; }\n.icon-upload:before { content: @upload; }\n.icon-inbox:before { content: @inbox; }\n.icon-play-circle:before { content: @play-circle; }\n.icon-rotate-right:before,\n.icon-repeat:before { content: @repeat; }\n.icon-refresh:before { content: @refresh; }\n.icon-list-alt:before { content: @list-alt; }\n.icon-lock:before { content: @lock; }\n.icon-flag:before { content: @flag; }\n.icon-headphones:before { content: @headphones; }\n.icon-volume-off:before { content: @volume-off; }\n.icon-volume-down:before { content: @volume-down; }\n.icon-volume-up:before { content: @volume-up; }\n.icon-qrcode:before { content: @qrcode; }\n.icon-barcode:before { content: @barcode; }\n.icon-tag:before { content: @tag; }\n.icon-tags:before { content: @tags; }\n.icon-book:before { content: @book; }\n.icon-bookmark:before { content: @bookmark; }\n.icon-print:before { content: @print; }\n.icon-camera:before { content: @camera; }\n.icon-font:before { content: @font; }\n.icon-bold:before { content: @bold; }\n.icon-italic:before { content: @italic; }\n.icon-text-height:before { content: @text-height; }\n.icon-text-width:before { content: @text-width; }\n.icon-align-left:before { content: @align-left; }\n.icon-align-center:before { content: @align-center; }\n.icon-align-right:before { content: @align-right; }\n.icon-align-justify:before { content: @align-justify; }\n.icon-list:before { content: @list; }\n.icon-indent-left:before { content: @indent-left; }\n.icon-indent-right:before { content: @indent-right; }\n.icon-facetime-video:before { content: @facetime-video; }\n.icon-picture:before { content: @picture; }\n.icon-pencil:before { content: @pencil; }\n.icon-map-marker:before { content: @map-marker; }\n.icon-adjust:before { content: @adjust; }\n.icon-tint:before { content: @tint; }\n.icon-edit:before { content: @edit; }\n.icon-share:before { content: @share; }\n.icon-check:before { content: @check; }\n.icon-move:before { content: @move; }\n.icon-step-backward:before { content: @step-backward; }\n.icon-fast-backward:before { content: @fast-backward; }\n.icon-backward:before { content: @backward; }\n.icon-play:before { content: @play; }\n.icon-pause:before { content: @pause; }\n.icon-stop:before { content: @stop; }\n.icon-forward:before { content: @forward; }\n.icon-fast-forward:before { content: @fast-forward; }\n.icon-step-forward:before { content: @step-forward; }\n.icon-eject:before { content: @eject; }\n.icon-chevron-left:before { content: @chevron-left; }\n.icon-chevron-right:before { content: @chevron-right; }\n.icon-plus-sign:before { content: @plus-sign; }\n.icon-minus-sign:before { content: @minus-sign; }\n.icon-remove-sign:before { content: @remove-sign; }\n.icon-ok-sign:before { content: @ok-sign; }\n.icon-question-sign:before { content: @question-sign; }\n.icon-info-sign:before { content: @info-sign; }\n.icon-screenshot:before { content: @screenshot; }\n.icon-remove-circle:before { content: @remove-circle; }\n.icon-ok-circle:before { content: @ok-circle; }\n.icon-ban-circle:before { content: @ban-circle; }\n.icon-arrow-left:before { content: @arrow-left; }\n.icon-arrow-right:before { content: @arrow-right; }\n.icon-arrow-up:before { content: @arrow-up; }\n.icon-arrow-down:before { content: @arrow-down; }\n.icon-mail-forward:before,\n.icon-share-alt:before { content: @share-alt; }\n.icon-resize-full:before { content: @resize-full; }\n.icon-resize-small:before { content: @resize-small; }\n.icon-plus:before { content: @plus; }\n.icon-minus:before { content: @minus; }\n.icon-asterisk:before { content: @asterisk; }\n.icon-exclamation-sign:before { content: @exclamation-sign; }\n.icon-gift:before { content: @gift; }\n.icon-leaf:before { content: @leaf; }\n.icon-fire:before { content: @fire; }\n.icon-eye-open:before { content: @eye-open; }\n.icon-eye-close:before { content: @eye-close; }\n.icon-warning-sign:before { content: @warning-sign; }\n.icon-plane:before { content: @plane; }\n.icon-calendar:before { content: @calendar; }\n.icon-random:before { content: @random; }\n.icon-comment:before { content: @comment; }\n.icon-magnet:before { content: @magnet; }\n.icon-chevron-up:before { content: @chevron-up; }\n.icon-chevron-down:before { content: @chevron-down; }\n.icon-retweet:before { content: @retweet; }\n.icon-shopping-cart:before { content: @shopping-cart; }\n.icon-folder-close:before { content: @folder-close; }\n.icon-folder-open:before { content: @folder-open; }\n.icon-resize-vertical:before { content: @resize-vertical; }\n.icon-resize-horizontal:before { content: @resize-horizontal; }\n.icon-bar-chart:before { content: @bar-chart; }\n.icon-twitter-sign:before { content: @twitter-sign; }\n.icon-facebook-sign:before { content: @facebook-sign; }\n.icon-camera-retro:before { content: @camera-retro; }\n.icon-key:before { content: @key; }\n.icon-gears:before,\n.icon-cogs:before { content: @cogs; }\n.icon-comments:before { content: @comments; }\n.icon-thumbs-up-alt:before { content: @thumbs-up-alt; }\n.icon-thumbs-down-alt:before { content: @thumbs-down-alt; }\n.icon-star-half:before { content: @star-half; }\n.icon-heart-empty:before { content: @heart-empty; }\n.icon-signout:before { content: @signout; }\n.icon-linkedin-sign:before { content: @linkedin-sign; }\n.icon-pushpin:before { content: @pushpin; }\n.icon-external-link:before { content: @external-link; }\n.icon-signin:before { content: @signin; }\n.icon-trophy:before { content: @trophy; }\n.icon-github-sign:before { content: @github-sign; }\n.icon-upload-alt:before { content: @upload-alt; }\n.icon-lemon:before { content: @lemon; }\n.icon-phone:before { content: @phone; }\n.icon-unchecked:before,\n.icon-check-empty:before { content: @check-empty; }\n.icon-bookmark-empty:before { content: @bookmark-empty; }\n.icon-phone-sign:before { content: @phone-sign; }\n.icon-twitter:before { content: @twitter; }\n.icon-facebook:before { content: @facebook; }\n.icon-github:before { content: @github; }\n.icon-unlock:before { content: @unlock; }\n.icon-credit-card:before { content: @credit-card; }\n.icon-rss:before { content: @rss; }\n.icon-hdd:before { content: @hdd; }\n.icon-bullhorn:before { content: @bullhorn; }\n.icon-bell:before { content: @bell; }\n.icon-certificate:before { content: @certificate; }\n.icon-hand-right:before { content: @hand-right; }\n.icon-hand-left:before { content: @hand-left; }\n.icon-hand-up:before { content: @hand-up; }\n.icon-hand-down:before { content: @hand-down; }\n.icon-circle-arrow-left:before { content: @circle-arrow-left; }\n.icon-circle-arrow-right:before { content: @circle-arrow-right; }\n.icon-circle-arrow-up:before { content: @circle-arrow-up; }\n.icon-circle-arrow-down:before { content: @circle-arrow-down; }\n.icon-globe:before { content: @globe; }\n.icon-wrench:before { content: @wrench; }\n.icon-tasks:before { content: @tasks; }\n.icon-filter:before { content: @filter; }\n.icon-briefcase:before { content: @briefcase; }\n.icon-fullscreen:before { content: @fullscreen; }\n.icon-group:before { content: @group; }\n.icon-link:before { content: @link; }\n.icon-cloud:before { content: @cloud; }\n.icon-beaker:before { content: @beaker; }\n.icon-cut:before { content: @cut; }\n.icon-copy:before { content: @copy; }\n.icon-paperclip:before,\n.icon-paper-clip:before { content: @paper-clip; }\n.icon-save:before { content: @save; }\n.icon-sign-blank:before { content: @sign-blank; }\n.icon-reorder:before { content: @reorder; }\n.icon-list-ul:before { content: @list-ul; }\n.icon-list-ol:before { content: @list-ol; }\n.icon-strikethrough:before { content: @strikethrough; }\n.icon-underline:before { content: @underline; }\n.icon-table:before { content: @table; }\n.icon-magic:before { content: @magic; }\n.icon-truck:before { content: @truck; }\n.icon-pinterest:before { content: @pinterest; }\n.icon-pinterest-sign:before { content: @pinterest-sign; }\n.icon-google-plus-sign:before { content: @google-plus-sign; }\n.icon-google-plus:before { content: @google-plus; }\n.icon-money:before { content: @money; }\n.icon-caret-down:before { content: @caret-down; }\n.icon-caret-up:before { content: @caret-up; }\n.icon-caret-left:before { content: @caret-left; }\n.icon-caret-right:before { content: @caret-right; }\n.icon-columns:before { content: @columns; }\n.icon-sort:before { content: @sort; }\n.icon-sort-down:before { content: @sort-down; }\n.icon-sort-up:before { content: @sort-up; }\n.icon-envelope:before { content: @envelope; }\n.icon-linkedin:before { content: @linkedin; }\n.icon-rotate-left:before,\n.icon-undo:before { content: @undo; }\n.icon-legal:before { content: @legal; }\n.icon-dashboard:before { content: @dashboard; }\n.icon-comment-alt:before { content: @comment-alt; }\n.icon-comments-alt:before { content: @comments-alt; }\n.icon-bolt:before { content: @bolt; }\n.icon-sitemap:before { content: @sitemap; }\n.icon-umbrella:before { content: @umbrella; }\n.icon-paste:before { content: @paste; }\n.icon-lightbulb:before { content: @lightbulb; }\n.icon-exchange:before { content: @exchange; }\n.icon-cloud-download:before { content: @cloud-download; }\n.icon-cloud-upload:before { content: @cloud-upload; }\n.icon-user-md:before { content: @user-md; }\n.icon-stethoscope:before { content: @stethoscope; }\n.icon-suitcase:before { content: @suitcase; }\n.icon-bell-alt:before { content: @bell-alt; }\n.icon-coffee:before { content: @coffee; }\n.icon-food:before { content: @food; }\n.icon-file-text-alt:before { content: @file-text-alt; }\n.icon-building:before { content: @building; }\n.icon-hospital:before { content: @hospital; }\n.icon-ambulance:before { content: @ambulance; }\n.icon-medkit:before { content: @medkit; }\n.icon-fighter-jet:before { content: @fighter-jet; }\n.icon-beer:before { content: @beer; }\n.icon-h-sign:before { content: @h-sign; }\n.icon-plus-sign-alt:before { content: @plus-sign-alt; }\n.icon-double-angle-left:before { content: @double-angle-left; }\n.icon-double-angle-right:before { content: @double-angle-right; }\n.icon-double-angle-up:before { content: @double-angle-up; }\n.icon-double-angle-down:before { content: @double-angle-down; }\n.icon-angle-left:before { content: @angle-left; }\n.icon-angle-right:before { content: @angle-right; }\n.icon-angle-up:before { content: @angle-up; }\n.icon-angle-down:before { content: @angle-down; }\n.icon-desktop:before { content: @desktop; }\n.icon-laptop:before { content: @laptop; }\n.icon-tablet:before { content: @tablet; }\n.icon-mobile-phone:before { content: @mobile-phone; }\n.icon-circle-blank:before { content: @circle-blank; }\n.icon-quote-left:before { content: @quote-left; }\n.icon-quote-right:before { content: @quote-right; }\n.icon-spinner:before { content: @spinner; }\n.icon-circle:before { content: @circle; }\n.icon-mail-reply:before,\n.icon-reply:before { content: @reply; }\n.icon-github-alt:before { content: @github-alt; }\n.icon-folder-close-alt:before { content: @folder-close-alt; }\n.icon-folder-open-alt:before { content: @folder-open-alt; }\n.icon-expand-alt:before { content: @expand-alt; }\n.icon-collapse-alt:before { content: @collapse-alt; }\n.icon-smile:before { content: @smile; }\n.icon-frown:before { content: @frown; }\n.icon-meh:before { content: @meh; }\n.icon-gamepad:before { content: @gamepad; }\n.icon-keyboard:before { content: @keyboard; }\n.icon-flag-alt:before { content: @flag-alt; }\n.icon-flag-checkered:before { content: @flag-checkered; }\n.icon-terminal:before { content: @terminal; }\n.icon-code:before { content: @code; }\n.icon-reply-all:before { content: @reply-all; }\n.icon-mail-reply-all:before { content: @mail-reply-all; }\n.icon-star-half-full:before,\n.icon-star-half-empty:before { content: @star-half-empty; }\n.icon-location-arrow:before { content: @location-arrow; }\n.icon-crop:before { content: @crop; }\n.icon-code-fork:before { content: @code-fork; }\n.icon-unlink:before { content: @unlink; }\n.icon-question:before { content: @question; }\n.icon-info:before { content: @info; }\n.icon-exclamation:before { content: @exclamation; }\n.icon-superscript:before { content: @superscript; }\n.icon-subscript:before { content: @subscript; }\n.icon-eraser:before { content: @eraser; }\n.icon-puzzle-piece:before { content: @puzzle-piece; }\n.icon-microphone:before { content: @microphone; }\n.icon-microphone-off:before { content: @microphone-off; }\n.icon-shield:before { content: @shield; }\n.icon-calendar-empty:before { content: @calendar-empty; }\n.icon-fire-extinguisher:before { content: @fire-extinguisher; }\n.icon-rocket:before { content: @rocket; }\n.icon-maxcdn:before { content: @maxcdn; }\n.icon-chevron-sign-left:before { content: @chevron-sign-left; }\n.icon-chevron-sign-right:before { content: @chevron-sign-right; }\n.icon-chevron-sign-up:before { content: @chevron-sign-up; }\n.icon-chevron-sign-down:before { content: @chevron-sign-down; }\n.icon-html5:before { content: @html5; }\n.icon-css3:before { content: @css3; }\n.icon-anchor:before { content: @anchor; }\n.icon-unlock-alt:before { content: @unlock-alt; }\n.icon-bullseye:before { content: @bullseye; }\n.icon-ellipsis-horizontal:before { content: @ellipsis-horizontal; }\n.icon-ellipsis-vertical:before { content: @ellipsis-vertical; }\n.icon-rss-sign:before { content: @rss-sign; }\n.icon-play-sign:before { content: @play-sign; }\n.icon-ticket:before { content: @ticket; }\n.icon-minus-sign-alt:before { content: @minus-sign-alt; }\n.icon-check-minus:before { content: @check-minus; }\n.icon-level-up:before { content: @level-up; }\n.icon-level-down:before { content: @level-down; }\n.icon-check-sign:before { content: @check-sign; }\n.icon-edit-sign:before { content: @edit-sign; }\n.icon-external-link-sign:before { content: @external-link-sign; }\n.icon-share-sign:before { content: @share-sign; }\n.icon-compass:before { content: @compass; }\n.icon-collapse:before { content: @collapse; }\n.icon-collapse-top:before { content: @collapse-top; }\n.icon-expand:before { content: @expand; }\n.icon-euro:before,\n.icon-eur:before { content: @eur; }\n.icon-gbp:before { content: @gbp; }\n.icon-dollar:before,\n.icon-usd:before { content: @usd; }\n.icon-rupee:before,\n.icon-inr:before { content: @inr; }\n.icon-yen:before,\n.icon-jpy:before { content: @jpy; }\n.icon-renminbi:before,\n.icon-cny:before { content: @cny; }\n.icon-won:before,\n.icon-krw:before { content: @krw; }\n.icon-bitcoin:before,\n.icon-btc:before { content: @btc; }\n.icon-file:before { content: @file; }\n.icon-file-text:before { content: @file-text; }\n.icon-sort-by-alphabet:before { content: @sort-by-alphabet; }\n.icon-sort-by-alphabet-alt:before { content: @sort-by-alphabet-alt; }\n.icon-sort-by-attributes:before { content: @sort-by-attributes; }\n.icon-sort-by-attributes-alt:before { content: @sort-by-attributes-alt; }\n.icon-sort-by-order:before { content: @sort-by-order; }\n.icon-sort-by-order-alt:before { content: @sort-by-order-alt; }\n.icon-thumbs-up:before { content: @thumbs-up; }\n.icon-thumbs-down:before { content: @thumbs-down; }\n.icon-youtube-sign:before { content: @youtube-sign; }\n.icon-youtube:before { content: @youtube; }\n.icon-xing:before { content: @xing; }\n.icon-xing-sign:before { content: @xing-sign; }\n.icon-youtube-play:before { content: @youtube-play; }\n.icon-dropbox:before { content: @dropbox; }\n.icon-stackexchange:before { content: @stackexchange; }\n.icon-instagram:before { content: @instagram; }\n.icon-flickr:before { content: @flickr; }\n.icon-adn:before { content: @adn; }\n.icon-bitbucket:before { content: @bitbucket; }\n.icon-bitbucket-sign:before { content: @bitbucket-sign; }\n.icon-tumblr:before { content: @tumblr; }\n.icon-tumblr-sign:before { content: @tumblr-sign; }\n.icon-long-arrow-down:before { content: @long-arrow-down; }\n.icon-long-arrow-up:before { content: @long-arrow-up; }\n.icon-long-arrow-left:before { content: @long-arrow-left; }\n.icon-long-arrow-right:before { content: @long-arrow-right; }\n.icon-apple:before { content: @apple; }\n.icon-windows:before { content: @windows; }\n.icon-android:before { content: @android; }\n.icon-linux:before { content: @linux; }\n.icon-dribbble:before { content: @dribbble; }\n.icon-skype:before { content: @skype; }\n.icon-foursquare:before { content: @foursquare; }\n.icon-trello:before { content: @trello; }\n.icon-female:before { content: @female; }\n.icon-male:before { content: @male; }\n.icon-gittip:before { content: @gittip; }\n.icon-sun:before { content: @sun; }\n.icon-moon:before { content: @moon; }\n.icon-archive:before { content: @archive; }\n.icon-bug:before { content: @bug; }\n.icon-vk:before { content: @vk; }\n.icon-weibo:before { content: @weibo; }\n.icon-renren:before { content: @renren; }\n"
  },
  {
    "path": "automatic/static/css/font-awesome/less/larger.less",
    "content": "// Icon Sizes\n// -------------------------\n\n/* makes the font 33% larger relative to the icon container */\n.@{fa-css-prefix}-lg {\n  font-size: (4em / 3);\n  line-height: (3em / 4);\n  vertical-align: -15%;\n}\n.@{fa-css-prefix}-2x { font-size: 2em; }\n.@{fa-css-prefix}-3x { font-size: 3em; }\n.@{fa-css-prefix}-4x { font-size: 4em; }\n.@{fa-css-prefix}-5x { font-size: 5em; }\n"
  },
  {
    "path": "automatic/static/css/font-awesome/less/list.less",
    "content": "// List Icons\n// -------------------------\n\n.@{fa-css-prefix}-ul {\n  padding-left: 0;\n  margin-left: @fa-li-width;\n  list-style-type: none;\n  > li { position: relative; }\n}\n.@{fa-css-prefix}-li {\n  position: absolute;\n  left: -@fa-li-width;\n  width: @fa-li-width;\n  top: (2em / 14);\n  text-align: center;\n  &.@{fa-css-prefix}-lg {\n    left: (-@fa-li-width + (4em / 14));\n  }\n}\n"
  },
  {
    "path": "automatic/static/css/font-awesome/less/mixins.less",
    "content": "// Mixins\n// --------------------------\n\n.icon(@icon) {\n  .icon-FontAwesome();\n  content: @icon;\n}\n\n.icon-FontAwesome() {\n  font-family: FontAwesome;\n  font-weight: normal;\n  font-style: normal;\n  text-decoration: inherit;\n  -webkit-font-smoothing: antialiased;\n  *margin-right: .3em; // fixes ie7 issues\n}\n\n.border-radius(@radius) {\n  -webkit-border-radius: @radius;\n  -moz-border-radius: @radius;\n  border-radius: @radius;\n}\n\n.icon-stack(@width: 2em, @height: 2em, @top-font-size: 1em, @base-font-size: 2em) {\n  .icon-stack {\n    position: relative;\n    display: inline-block;\n    width: @width;\n    height: @height;\n    line-height: @width;\n    vertical-align: -35%;\n    [class^=\"icon-\"],\n    [class*=\" icon-\"] {\n      display: block;\n      text-align: center;\n      position: absolute;\n      width: 100%;\n      height: 100%;\n      font-size: @top-font-size;\n      line-height: inherit;\n      *line-height: @height;\n    }\n    .icon-stack-base {\n      font-size: @base-font-size;\n      *line-height: @height / @base-font-size;\n    }\n  }\n}\n"
  },
  {
    "path": "automatic/static/css/font-awesome/less/path.less",
    "content": "/* FONT PATH\n * -------------------------- */\n\n@font-face {\n  font-family: 'FontAwesome';\n  src: url('@{FontAwesomePath}/fontawesome-webfont.eot?v=@{FontAwesomeVersion}');\n  src: url('@{FontAwesomePath}/fontawesome-webfont.eot?#iefix&v=@{FontAwesomeVersion}') format('embedded-opentype'),\n    url('@{FontAwesomePath}/fontawesome-webfont.woff?v=@{FontAwesomeVersion}') format('woff'),\n    url('@{FontAwesomePath}/fontawesome-webfont.ttf?v=@{FontAwesomeVersion}') format('truetype'),\n    url('@{FontAwesomePath}/fontawesome-webfont.svg#fontawesomeregular?v=@{FontAwesomeVersion}') format('svg');\n//  src: url('@{FontAwesomePath}/FontAwesome.otf') format('opentype'); // used when developing fonts\n  font-weight: normal;\n  font-style: normal;\n}\n"
  },
  {
    "path": "automatic/static/css/font-awesome/less/rotated-flipped.less",
    "content": "// Rotated & Flipped Icons\n// -------------------------\n\n.@{fa-css-prefix}-rotate-90  { .fa-icon-rotate(90deg, 1);  }\n.@{fa-css-prefix}-rotate-180 { .fa-icon-rotate(180deg, 2); }\n.@{fa-css-prefix}-rotate-270 { .fa-icon-rotate(270deg, 3); }\n\n.@{fa-css-prefix}-flip-horizontal { .fa-icon-flip(-1, 1, 0); }\n.@{fa-css-prefix}-flip-vertical   { .fa-icon-flip(1, -1, 2); }\n\n// Hook for IE8-9\n// -------------------------\n\n:root .@{fa-css-prefix}-rotate-90,\n:root .@{fa-css-prefix}-rotate-180,\n:root .@{fa-css-prefix}-rotate-270,\n:root .@{fa-css-prefix}-flip-horizontal,\n:root .@{fa-css-prefix}-flip-vertical {\n  filter: none;\n}\n"
  },
  {
    "path": "automatic/static/css/font-awesome/less/stacked.less",
    "content": "// Stacked Icons\n// -------------------------\n\n.@{fa-css-prefix}-stack {\n  position: relative;\n  display: inline-block;\n  width: 2em;\n  height: 2em;\n  line-height: 2em;\n  vertical-align: middle;\n}\n.@{fa-css-prefix}-stack-1x, .@{fa-css-prefix}-stack-2x {\n  position: absolute;\n  left: 0;\n  width: 100%;\n  text-align: center;\n}\n.@{fa-css-prefix}-stack-1x { line-height: inherit; }\n.@{fa-css-prefix}-stack-2x { font-size: 2em; }\n.@{fa-css-prefix}-inverse { color: @fa-inverse; }\n"
  },
  {
    "path": "automatic/static/css/font-awesome/less/variables.less",
    "content": "// Variables\n// --------------------------\n\n@FontAwesomePath:    \"../font\";\n//@FontAwesomePath:    \"//netdna.bootstrapcdn.com/font-awesome/3.2.1/font\"; // for referencing Bootstrap CDN font files directly\n@FontAwesomeVersion: \"3.2.1\";\n@borderColor:        #eee;\n@iconMuted:          #eee;\n@iconLight:          #fff;\n@iconDark:           #333;\n@icons-li-width:     30/14em;\n\n\n  @glass: \"\\f000\";\n\n  @music: \"\\f001\";\n\n  @search: \"\\f002\";\n\n  @envelope-alt: \"\\f003\";\n\n  @heart: \"\\f004\";\n\n  @star: \"\\f005\";\n\n  @star-empty: \"\\f006\";\n\n  @user: \"\\f007\";\n\n  @film: \"\\f008\";\n\n  @th-large: \"\\f009\";\n\n  @th: \"\\f00a\";\n\n  @th-list: \"\\f00b\";\n\n  @ok: \"\\f00c\";\n\n  @remove: \"\\f00d\";\n\n  @zoom-in: \"\\f00e\";\n\n  @zoom-out: \"\\f010\";\n\n  @off: \"\\f011\";\n\n  @signal: \"\\f012\";\n\n  @cog: \"\\f013\";\n\n  @trash: \"\\f014\";\n\n  @home: \"\\f015\";\n\n  @file-alt: \"\\f016\";\n\n  @time: \"\\f017\";\n\n  @road: \"\\f018\";\n\n  @download-alt: \"\\f019\";\n\n  @download: \"\\f01a\";\n\n  @upload: \"\\f01b\";\n\n  @inbox: \"\\f01c\";\n\n  @play-circle: \"\\f01d\";\n\n  @repeat: \"\\f01e\";\n\n  @refresh: \"\\f021\";\n\n  @list-alt: \"\\f022\";\n\n  @lock: \"\\f023\";\n\n  @flag: \"\\f024\";\n\n  @headphones: \"\\f025\";\n\n  @volume-off: \"\\f026\";\n\n  @volume-down: \"\\f027\";\n\n  @volume-up: \"\\f028\";\n\n  @qrcode: \"\\f029\";\n\n  @barcode: \"\\f02a\";\n\n  @tag: \"\\f02b\";\n\n  @tags: \"\\f02c\";\n\n  @book: \"\\f02d\";\n\n  @bookmark: \"\\f02e\";\n\n  @print: \"\\f02f\";\n\n  @camera: \"\\f030\";\n\n  @font: \"\\f031\";\n\n  @bold: \"\\f032\";\n\n  @italic: \"\\f033\";\n\n  @text-height: \"\\f034\";\n\n  @text-width: \"\\f035\";\n\n  @align-left: \"\\f036\";\n\n  @align-center: \"\\f037\";\n\n  @align-right: \"\\f038\";\n\n  @align-justify: \"\\f039\";\n\n  @list: \"\\f03a\";\n\n  @indent-left: \"\\f03b\";\n\n  @indent-right: \"\\f03c\";\n\n  @facetime-video: \"\\f03d\";\n\n  @picture: \"\\f03e\";\n\n  @pencil: \"\\f040\";\n\n  @map-marker: \"\\f041\";\n\n  @adjust: \"\\f042\";\n\n  @tint: \"\\f043\";\n\n  @edit: \"\\f044\";\n\n  @share: \"\\f045\";\n\n  @check: \"\\f046\";\n\n  @move: \"\\f047\";\n\n  @step-backward: \"\\f048\";\n\n  @fast-backward: \"\\f049\";\n\n  @backward: \"\\f04a\";\n\n  @play: \"\\f04b\";\n\n  @pause: \"\\f04c\";\n\n  @stop: \"\\f04d\";\n\n  @forward: \"\\f04e\";\n\n  @fast-forward: \"\\f050\";\n\n  @step-forward: \"\\f051\";\n\n  @eject: \"\\f052\";\n\n  @chevron-left: \"\\f053\";\n\n  @chevron-right: \"\\f054\";\n\n  @plus-sign: \"\\f055\";\n\n  @minus-sign: \"\\f056\";\n\n  @remove-sign: \"\\f057\";\n\n  @ok-sign: \"\\f058\";\n\n  @question-sign: \"\\f059\";\n\n  @info-sign: \"\\f05a\";\n\n  @screenshot: \"\\f05b\";\n\n  @remove-circle: \"\\f05c\";\n\n  @ok-circle: \"\\f05d\";\n\n  @ban-circle: \"\\f05e\";\n\n  @arrow-left: \"\\f060\";\n\n  @arrow-right: \"\\f061\";\n\n  @arrow-up: \"\\f062\";\n\n  @arrow-down: \"\\f063\";\n\n  @share-alt: \"\\f064\";\n\n  @resize-full: \"\\f065\";\n\n  @resize-small: \"\\f066\";\n\n  @plus: \"\\f067\";\n\n  @minus: \"\\f068\";\n\n  @asterisk: \"\\f069\";\n\n  @exclamation-sign: \"\\f06a\";\n\n  @gift: \"\\f06b\";\n\n  @leaf: \"\\f06c\";\n\n  @fire: \"\\f06d\";\n\n  @eye-open: \"\\f06e\";\n\n  @eye-close: \"\\f070\";\n\n  @warning-sign: \"\\f071\";\n\n  @plane: \"\\f072\";\n\n  @calendar: \"\\f073\";\n\n  @random: \"\\f074\";\n\n  @comment: \"\\f075\";\n\n  @magnet: \"\\f076\";\n\n  @chevron-up: \"\\f077\";\n\n  @chevron-down: \"\\f078\";\n\n  @retweet: \"\\f079\";\n\n  @shopping-cart: \"\\f07a\";\n\n  @folder-close: \"\\f07b\";\n\n  @folder-open: \"\\f07c\";\n\n  @resize-vertical: \"\\f07d\";\n\n  @resize-horizontal: \"\\f07e\";\n\n  @bar-chart: \"\\f080\";\n\n  @twitter-sign: \"\\f081\";\n\n  @facebook-sign: \"\\f082\";\n\n  @camera-retro: \"\\f083\";\n\n  @key: \"\\f084\";\n\n  @cogs: \"\\f085\";\n\n  @comments: \"\\f086\";\n\n  @thumbs-up-alt: \"\\f087\";\n\n  @thumbs-down-alt: \"\\f088\";\n\n  @star-half: \"\\f089\";\n\n  @heart-empty: \"\\f08a\";\n\n  @signout: \"\\f08b\";\n\n  @linkedin-sign: \"\\f08c\";\n\n  @pushpin: \"\\f08d\";\n\n  @external-link: \"\\f08e\";\n\n  @signin: \"\\f090\";\n\n  @trophy: \"\\f091\";\n\n  @github-sign: \"\\f092\";\n\n  @upload-alt: \"\\f093\";\n\n  @lemon: \"\\f094\";\n\n  @phone: \"\\f095\";\n\n  @check-empty: \"\\f096\";\n\n  @bookmark-empty: \"\\f097\";\n\n  @phone-sign: \"\\f098\";\n\n  @twitter: \"\\f099\";\n\n  @facebook: \"\\f09a\";\n\n  @github: \"\\f09b\";\n\n  @unlock: \"\\f09c\";\n\n  @credit-card: \"\\f09d\";\n\n  @rss: \"\\f09e\";\n\n  @hdd: \"\\f0a0\";\n\n  @bullhorn: \"\\f0a1\";\n\n  @bell: \"\\f0a2\";\n\n  @certificate: \"\\f0a3\";\n\n  @hand-right: \"\\f0a4\";\n\n  @hand-left: \"\\f0a5\";\n\n  @hand-up: \"\\f0a6\";\n\n  @hand-down: \"\\f0a7\";\n\n  @circle-arrow-left: \"\\f0a8\";\n\n  @circle-arrow-right: \"\\f0a9\";\n\n  @circle-arrow-up: \"\\f0aa\";\n\n  @circle-arrow-down: \"\\f0ab\";\n\n  @globe: \"\\f0ac\";\n\n  @wrench: \"\\f0ad\";\n\n  @tasks: \"\\f0ae\";\n\n  @filter: \"\\f0b0\";\n\n  @briefcase: \"\\f0b1\";\n\n  @fullscreen: \"\\f0b2\";\n\n  @group: \"\\f0c0\";\n\n  @link: \"\\f0c1\";\n\n  @cloud: \"\\f0c2\";\n\n  @beaker: \"\\f0c3\";\n\n  @cut: \"\\f0c4\";\n\n  @copy: \"\\f0c5\";\n\n  @paper-clip: \"\\f0c6\";\n\n  @save: \"\\f0c7\";\n\n  @sign-blank: \"\\f0c8\";\n\n  @reorder: \"\\f0c9\";\n\n  @list-ul: \"\\f0ca\";\n\n  @list-ol: \"\\f0cb\";\n\n  @strikethrough: \"\\f0cc\";\n\n  @underline: \"\\f0cd\";\n\n  @table: \"\\f0ce\";\n\n  @magic: \"\\f0d0\";\n\n  @truck: \"\\f0d1\";\n\n  @pinterest: \"\\f0d2\";\n\n  @pinterest-sign: \"\\f0d3\";\n\n  @google-plus-sign: \"\\f0d4\";\n\n  @google-plus: \"\\f0d5\";\n\n  @money: \"\\f0d6\";\n\n  @caret-down: \"\\f0d7\";\n\n  @caret-up: \"\\f0d8\";\n\n  @caret-left: \"\\f0d9\";\n\n  @caret-right: \"\\f0da\";\n\n  @columns: \"\\f0db\";\n\n  @sort: \"\\f0dc\";\n\n  @sort-down: \"\\f0dd\";\n\n  @sort-up: \"\\f0de\";\n\n  @envelope: \"\\f0e0\";\n\n  @linkedin: \"\\f0e1\";\n\n  @undo: \"\\f0e2\";\n\n  @legal: \"\\f0e3\";\n\n  @dashboard: \"\\f0e4\";\n\n  @comment-alt: \"\\f0e5\";\n\n  @comments-alt: \"\\f0e6\";\n\n  @bolt: \"\\f0e7\";\n\n  @sitemap: \"\\f0e8\";\n\n  @umbrella: \"\\f0e9\";\n\n  @paste: \"\\f0ea\";\n\n  @lightbulb: \"\\f0eb\";\n\n  @exchange: \"\\f0ec\";\n\n  @cloud-download: \"\\f0ed\";\n\n  @cloud-upload: \"\\f0ee\";\n\n  @user-md: \"\\f0f0\";\n\n  @stethoscope: \"\\f0f1\";\n\n  @suitcase: \"\\f0f2\";\n\n  @bell-alt: \"\\f0f3\";\n\n  @coffee: \"\\f0f4\";\n\n  @food: \"\\f0f5\";\n\n  @file-text-alt: \"\\f0f6\";\n\n  @building: \"\\f0f7\";\n\n  @hospital: \"\\f0f8\";\n\n  @ambulance: \"\\f0f9\";\n\n  @medkit: \"\\f0fa\";\n\n  @fighter-jet: \"\\f0fb\";\n\n  @beer: \"\\f0fc\";\n\n  @h-sign: \"\\f0fd\";\n\n  @plus-sign-alt: \"\\f0fe\";\n\n  @double-angle-left: \"\\f100\";\n\n  @double-angle-right: \"\\f101\";\n\n  @double-angle-up: \"\\f102\";\n\n  @double-angle-down: \"\\f103\";\n\n  @angle-left: \"\\f104\";\n\n  @angle-right: \"\\f105\";\n\n  @angle-up: \"\\f106\";\n\n  @angle-down: \"\\f107\";\n\n  @desktop: \"\\f108\";\n\n  @laptop: \"\\f109\";\n\n  @tablet: \"\\f10a\";\n\n  @mobile-phone: \"\\f10b\";\n\n  @circle-blank: \"\\f10c\";\n\n  @quote-left: \"\\f10d\";\n\n  @quote-right: \"\\f10e\";\n\n  @spinner: \"\\f110\";\n\n  @circle: \"\\f111\";\n\n  @reply: \"\\f112\";\n\n  @github-alt: \"\\f113\";\n\n  @folder-close-alt: \"\\f114\";\n\n  @folder-open-alt: \"\\f115\";\n\n  @expand-alt: \"\\f116\";\n\n  @collapse-alt: \"\\f117\";\n\n  @smile: \"\\f118\";\n\n  @frown: \"\\f119\";\n\n  @meh: \"\\f11a\";\n\n  @gamepad: \"\\f11b\";\n\n  @keyboard: \"\\f11c\";\n\n  @flag-alt: \"\\f11d\";\n\n  @flag-checkered: \"\\f11e\";\n\n  @terminal: \"\\f120\";\n\n  @code: \"\\f121\";\n\n  @reply-all: \"\\f122\";\n\n  @mail-reply-all: \"\\f122\";\n\n  @star-half-empty: \"\\f123\";\n\n  @location-arrow: \"\\f124\";\n\n  @crop: \"\\f125\";\n\n  @code-fork: \"\\f126\";\n\n  @unlink: \"\\f127\";\n\n  @question: \"\\f128\";\n\n  @info: \"\\f129\";\n\n  @exclamation: \"\\f12a\";\n\n  @superscript: \"\\f12b\";\n\n  @subscript: \"\\f12c\";\n\n  @eraser: \"\\f12d\";\n\n  @puzzle-piece: \"\\f12e\";\n\n  @microphone: \"\\f130\";\n\n  @microphone-off: \"\\f131\";\n\n  @shield: \"\\f132\";\n\n  @calendar-empty: \"\\f133\";\n\n  @fire-extinguisher: \"\\f134\";\n\n  @rocket: \"\\f135\";\n\n  @maxcdn: \"\\f136\";\n\n  @chevron-sign-left: \"\\f137\";\n\n  @chevron-sign-right: \"\\f138\";\n\n  @chevron-sign-up: \"\\f139\";\n\n  @chevron-sign-down: \"\\f13a\";\n\n  @html5: \"\\f13b\";\n\n  @css3: \"\\f13c\";\n\n  @anchor: \"\\f13d\";\n\n  @unlock-alt: \"\\f13e\";\n\n  @bullseye: \"\\f140\";\n\n  @ellipsis-horizontal: \"\\f141\";\n\n  @ellipsis-vertical: \"\\f142\";\n\n  @rss-sign: \"\\f143\";\n\n  @play-sign: \"\\f144\";\n\n  @ticket: \"\\f145\";\n\n  @minus-sign-alt: \"\\f146\";\n\n  @check-minus: \"\\f147\";\n\n  @level-up: \"\\f148\";\n\n  @level-down: \"\\f149\";\n\n  @check-sign: \"\\f14a\";\n\n  @edit-sign: \"\\f14b\";\n\n  @external-link-sign: \"\\f14c\";\n\n  @share-sign: \"\\f14d\";\n\n  @compass: \"\\f14e\";\n\n  @collapse: \"\\f150\";\n\n  @collapse-top: \"\\f151\";\n\n  @expand: \"\\f152\";\n\n  @eur: \"\\f153\";\n\n  @gbp: \"\\f154\";\n\n  @usd: \"\\f155\";\n\n  @inr: \"\\f156\";\n\n  @jpy: \"\\f157\";\n\n  @cny: \"\\f158\";\n\n  @krw: \"\\f159\";\n\n  @btc: \"\\f15a\";\n\n  @file: \"\\f15b\";\n\n  @file-text: \"\\f15c\";\n\n  @sort-by-alphabet: \"\\f15d\";\n\n  @sort-by-alphabet-alt: \"\\f15e\";\n\n  @sort-by-attributes: \"\\f160\";\n\n  @sort-by-attributes-alt: \"\\f161\";\n\n  @sort-by-order: \"\\f162\";\n\n  @sort-by-order-alt: \"\\f163\";\n\n  @thumbs-up: \"\\f164\";\n\n  @thumbs-down: \"\\f165\";\n\n  @youtube-sign: \"\\f166\";\n\n  @youtube: \"\\f167\";\n\n  @xing: \"\\f168\";\n\n  @xing-sign: \"\\f169\";\n\n  @youtube-play: \"\\f16a\";\n\n  @dropbox: \"\\f16b\";\n\n  @stackexchange: \"\\f16c\";\n\n  @instagram: \"\\f16d\";\n\n  @flickr: \"\\f16e\";\n\n  @adn: \"\\f170\";\n\n  @bitbucket: \"\\f171\";\n\n  @bitbucket-sign: \"\\f172\";\n\n  @tumblr: \"\\f173\";\n\n  @tumblr-sign: \"\\f174\";\n\n  @long-arrow-down: \"\\f175\";\n\n  @long-arrow-up: \"\\f176\";\n\n  @long-arrow-left: \"\\f177\";\n\n  @long-arrow-right: \"\\f178\";\n\n  @apple: \"\\f179\";\n\n  @windows: \"\\f17a\";\n\n  @android: \"\\f17b\";\n\n  @linux: \"\\f17c\";\n\n  @dribbble: \"\\f17d\";\n\n  @skype: \"\\f17e\";\n\n  @foursquare: \"\\f180\";\n\n  @trello: \"\\f181\";\n\n  @female: \"\\f182\";\n\n  @male: \"\\f183\";\n\n  @gittip: \"\\f184\";\n\n  @sun: \"\\f185\";\n\n  @moon: \"\\f186\";\n\n  @archive: \"\\f187\";\n\n  @bug: \"\\f188\";\n\n  @vk: \"\\f189\";\n\n  @weibo: \"\\f18a\";\n\n  @renren: \"\\f18b\";\n\n"
  },
  {
    "path": "automatic/static/css/font-awesome/scss/_animated.scss",
    "content": "// Spinning Icons\n// --------------------------\n\n.#{$fa-css-prefix}-spin {\n  -webkit-animation: fa-spin 2s infinite linear;\n          animation: fa-spin 2s infinite linear;\n}\n\n.#{$fa-css-prefix}-pulse {\n  -webkit-animation: fa-spin 1s infinite steps(8);\n          animation: fa-spin 1s infinite steps(8);\n}\n\n@-webkit-keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg);\n  }\n  100% {\n    -webkit-transform: rotate(359deg);\n            transform: rotate(359deg);\n  }\n}\n\n@keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg);\n  }\n  100% {\n    -webkit-transform: rotate(359deg);\n            transform: rotate(359deg);\n  }\n}\n"
  },
  {
    "path": "automatic/static/css/font-awesome/scss/_bootstrap.scss",
    "content": "/* BOOTSTRAP SPECIFIC CLASSES\n * -------------------------- */\n\n/* Bootstrap 2.0 sprites.less reset */\n[class^=\"icon-\"],\n[class*=\" icon-\"] {\n  display: inline;\n  width: auto;\n  height: auto;\n  line-height: normal;\n  vertical-align: baseline;\n  background-image: none;\n  background-position: 0% 0%;\n  background-repeat: repeat;\n  margin-top: 0;\n}\n\n/* more sprites.less reset */\n.icon-white,\n.nav-pills > .active > a > [class^=\"icon-\"],\n.nav-pills > .active > a > [class*=\" icon-\"],\n.nav-list > .active > a > [class^=\"icon-\"],\n.nav-list > .active > a > [class*=\" icon-\"],\n.navbar-inverse .nav > .active > a > [class^=\"icon-\"],\n.navbar-inverse .nav > .active > a > [class*=\" icon-\"],\n.dropdown-menu > li > a:hover > [class^=\"icon-\"],\n.dropdown-menu > li > a:hover > [class*=\" icon-\"],\n.dropdown-menu > .active > a > [class^=\"icon-\"],\n.dropdown-menu > .active > a > [class*=\" icon-\"],\n.dropdown-submenu:hover > a > [class^=\"icon-\"],\n.dropdown-submenu:hover > a > [class*=\" icon-\"] {\n  background-image: none;\n}\n\n\n/* keeps Bootstrap styles with and without icons the same */\n.btn, .nav {\n  [class^=\"icon-\"],\n  [class*=\" icon-\"] {\n    //    display: inline;\n    &.icon-large { line-height: .9em; }\n    &.icon-spin { display: inline-block; }\n  }\n}\n.nav-tabs, .nav-pills {\n  [class^=\"icon-\"],\n  [class*=\" icon-\"] {\n    &, &.icon-large { line-height: .9em; }\n  }\n}\n.btn {\n  [class^=\"icon-\"],\n  [class*=\" icon-\"] {\n    &.pull-left, &.pull-right {\n      &.icon-2x { margin-top: .18em; }\n    }\n    &.icon-spin.icon-large { line-height: .8em; }\n  }\n}\n.btn.btn-small {\n  [class^=\"icon-\"],\n  [class*=\" icon-\"] {\n    &.pull-left, &.pull-right {\n      &.icon-2x { margin-top: .25em; }\n    }\n  }\n}\n.btn.btn-large {\n  [class^=\"icon-\"],\n  [class*=\" icon-\"] {\n    margin-top: 0; // overrides bootstrap default\n    &.pull-left, &.pull-right {\n      &.icon-2x { margin-top: .05em; }\n    }\n    &.pull-left.icon-2x { margin-right: .2em; }\n    &.pull-right.icon-2x { margin-left: .2em; }\n  }\n}\n\n/* Fixes alignment in nav lists */\n.nav-list [class^=\"icon-\"],\n.nav-list [class*=\" icon-\"] {\n  line-height: inherit;\n}\n"
  },
  {
    "path": "automatic/static/css/font-awesome/scss/_bordered-pulled.scss",
    "content": "// Bordered & Pulled\n// -------------------------\n\n.#{$fa-css-prefix}-border {\n  padding: .2em .25em .15em;\n  border: solid .08em $fa-border-color;\n  border-radius: .1em;\n}\n\n.pull-right { float: right; }\n.pull-left { float: left; }\n\n.#{$fa-css-prefix} {\n  &.pull-left { margin-right: .3em; }\n  &.pull-right { margin-left: .3em; }\n}\n"
  },
  {
    "path": "automatic/static/css/font-awesome/scss/_core.scss",
    "content": "/* FONT AWESOME CORE\n * -------------------------- */\n\n[class^=\"icon-\"],\n[class*=\" icon-\"] {\n  @include icon-FontAwesome();\n}\n\n[class^=\"icon-\"]:before,\n[class*=\" icon-\"]:before {\n  text-decoration: inherit;\n  display: inline-block;\n  speak: none;\n}\n\n/* makes the font 33% larger relative to the icon container */\n.icon-large:before {\n  vertical-align: -10%;\n  font-size: (4em/3);\n}\n\n/* makes sure icons active on rollover in links */\na {\n  [class^=\"icon-\"],\n  [class*=\" icon-\"] {\n    display: inline;\n  }\n}\n\n/* increased font size for icon-large */\n[class^=\"icon-\"],\n[class*=\" icon-\"] {\n  &.icon-fixed-width {\n    display: inline-block;\n    width: (16em/14);\n    text-align: right;\n    padding-right: (4em/14);\n    &.icon-large {\n      width: (20em/14);\n    }\n  }\n}\n\n.icons-ul {\n  margin-left: $icons-li-width;\n  list-style-type: none;\n\n  > li { position: relative; }\n\n  .icon-li {\n    position: absolute;\n    left: -$icons-li-width;\n    width: $icons-li-width;\n    text-align: center;\n    line-height: inherit;\n  }\n}\n\n// allows usage of the hide class directly on font awesome icons\n[class^=\"icon-\"],\n[class*=\" icon-\"] {\n  &.hide {\n    display: none;\n  }\n}\n\n.icon-muted { color: $iconMuted; }\n.icon-light { color: $iconLight; }\n.icon-dark { color: $iconDark; }\n\n// Icon Borders\n// -------------------------\n\n.icon-border {\n  border: solid 1px $borderColor;\n  padding: .2em .25em .15em;\n  @include border-radius(3px);\n}\n\n// Icon Sizes\n// -------------------------\n\n.icon-2x {\n  font-size: 2em;\n  &.icon-border {\n    border-width: 2px;\n    @include border-radius(4px);\n  }\n}\n.icon-3x {\n  font-size: 3em;\n  &.icon-border {\n    border-width: 3px;\n    @include border-radius(5px);\n  }\n}\n.icon-4x {\n  font-size: 4em;\n  &.icon-border {\n    border-width: 4px;\n    @include border-radius(6px);\n  }\n}\n\n.icon-5x {\n  font-size: 5em;\n  &.icon-border {\n    border-width: 5px;\n    @include border-radius(7px);\n  }\n}\n\n\n// Floats & Margins\n// -------------------------\n\n// Quick floats\n.pull-right { float: right; }\n.pull-left { float: left; }\n\n[class^=\"icon-\"],\n[class*=\" icon-\"] {\n  &.pull-left {\n    margin-right: .3em;\n  }\n  &.pull-right {\n    margin-left: .3em;\n  }\n}\n"
  },
  {
    "path": "automatic/static/css/font-awesome/scss/_extras.scss",
    "content": "/* EXTRAS\n * -------------------------- */\n\n/* Stacked and layered icon */\n@include icon-stack();\n\n/* Animated rotating icon */\n.icon-spin {\n  display: inline-block;\n  -moz-animation: spin 2s infinite linear;\n  -o-animation: spin 2s infinite linear;\n  -webkit-animation: spin 2s infinite linear;\n  animation: spin 2s infinite linear;\n}\n\n/* Prevent stack and spinners from being taken inline when inside a link */\na .icon-stack,\na .icon-spin {\n  display: inline-block;\n  text-decoration: none;\n}\n\n@-moz-keyframes spin {\n  0% { -moz-transform: rotate(0deg); }\n  100% { -moz-transform: rotate(359deg); }\n}\n@-webkit-keyframes spin {\n  0% { -webkit-transform: rotate(0deg); }\n  100% { -webkit-transform: rotate(359deg); }\n}\n@-o-keyframes spin {\n  0% { -o-transform: rotate(0deg); }\n  100% { -o-transform: rotate(359deg); }\n}\n@-ms-keyframes spin {\n  0% { -ms-transform: rotate(0deg); }\n  100% { -ms-transform: rotate(359deg); }\n}\n@keyframes spin {\n  0% { transform: rotate(0deg); }\n  100% { transform: rotate(359deg); }\n}\n\n/* Icon rotations and mirroring */\n.icon-rotate-90:before {\n  -webkit-transform: rotate(90deg);\n  -moz-transform: rotate(90deg);\n  -ms-transform: rotate(90deg);\n  -o-transform: rotate(90deg);\n  transform: rotate(90deg);\n  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1);\n}\n\n.icon-rotate-180:before {\n  -webkit-transform: rotate(180deg);\n  -moz-transform: rotate(180deg);\n  -ms-transform: rotate(180deg);\n  -o-transform: rotate(180deg);\n  transform: rotate(180deg);\n  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2);\n}\n\n.icon-rotate-270:before {\n  -webkit-transform: rotate(270deg);\n  -moz-transform: rotate(270deg);\n  -ms-transform: rotate(270deg);\n  -o-transform: rotate(270deg);\n  transform: rotate(270deg);\n  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);\n}\n\n.icon-flip-horizontal:before {\n  -webkit-transform: scale(-1, 1);\n  -moz-transform: scale(-1, 1);\n  -ms-transform: scale(-1, 1);\n  -o-transform: scale(-1, 1);\n  transform: scale(-1, 1);\n}\n\n.icon-flip-vertical:before {\n  -webkit-transform: scale(1, -1);\n  -moz-transform: scale(1, -1);\n  -ms-transform: scale(1, -1);\n  -o-transform: scale(1, -1);\n  transform: scale(1, -1);\n}\n\n/* ensure rotation occurs inside anchor tags */\na {\n  .icon-rotate-90, .icon-rotate-180, .icon-rotate-270, .icon-flip-horizontal, .icon-flip-vertical {\n    &:before { display: inline-block; }\n  }\n}\n"
  },
  {
    "path": "automatic/static/css/font-awesome/scss/_fixed-width.scss",
    "content": "// Fixed Width Icons\n// -------------------------\n.#{$fa-css-prefix}-fw {\n  width: (18em / 14);\n  text-align: center;\n}\n"
  },
  {
    "path": "automatic/static/css/font-awesome/scss/_icons.scss",
    "content": "/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen\n * readers do not read off random characters that represent icons */\n\n.icon-glass:before { content: $glass; }\n.icon-music:before { content: $music; }\n.icon-search:before { content: $search; }\n.icon-envelope-alt:before { content: $envelope-alt; }\n.icon-heart:before { content: $heart; }\n.icon-star:before { content: $star; }\n.icon-star-empty:before { content: $star-empty; }\n.icon-user:before { content: $user; }\n.icon-film:before { content: $film; }\n.icon-th-large:before { content: $th-large; }\n.icon-th:before { content: $th; }\n.icon-th-list:before { content: $th-list; }\n.icon-ok:before { content: $ok; }\n.icon-remove:before { content: $remove; }\n.icon-zoom-in:before { content: $zoom-in; }\n.icon-zoom-out:before { content: $zoom-out; }\n.icon-power-off:before,\n.icon-off:before { content: $off; }\n.icon-signal:before { content: $signal; }\n.icon-gear:before,\n.icon-cog:before { content: $cog; }\n.icon-trash:before { content: $trash; }\n.icon-home:before { content: $home; }\n.icon-file-alt:before { content: $file-alt; }\n.icon-time:before { content: $time; }\n.icon-road:before { content: $road; }\n.icon-download-alt:before { content: $download-alt; }\n.icon-download:before { content: $download; }\n.icon-upload:before { content: $upload; }\n.icon-inbox:before { content: $inbox; }\n.icon-play-circle:before { content: $play-circle; }\n.icon-rotate-right:before,\n.icon-repeat:before { content: $repeat; }\n.icon-refresh:before { content: $refresh; }\n.icon-list-alt:before { content: $list-alt; }\n.icon-lock:before { content: $lock; }\n.icon-flag:before { content: $flag; }\n.icon-headphones:before { content: $headphones; }\n.icon-volume-off:before { content: $volume-off; }\n.icon-volume-down:before { content: $volume-down; }\n.icon-volume-up:before { content: $volume-up; }\n.icon-qrcode:before { content: $qrcode; }\n.icon-barcode:before { content: $barcode; }\n.icon-tag:before { content: $tag; }\n.icon-tags:before { content: $tags; }\n.icon-book:before { content: $book; }\n.icon-bookmark:before { content: $bookmark; }\n.icon-print:before { content: $print; }\n.icon-camera:before { content: $camera; }\n.icon-font:before { content: $font; }\n.icon-bold:before { content: $bold; }\n.icon-italic:before { content: $italic; }\n.icon-text-height:before { content: $text-height; }\n.icon-text-width:before { content: $text-width; }\n.icon-align-left:before { content: $align-left; }\n.icon-align-center:before { content: $align-center; }\n.icon-align-right:before { content: $align-right; }\n.icon-align-justify:before { content: $align-justify; }\n.icon-list:before { content: $list; }\n.icon-indent-left:before { content: $indent-left; }\n.icon-indent-right:before { content: $indent-right; }\n.icon-facetime-video:before { content: $facetime-video; }\n.icon-picture:before { content: $picture; }\n.icon-pencil:before { content: $pencil; }\n.icon-map-marker:before { content: $map-marker; }\n.icon-adjust:before { content: $adjust; }\n.icon-tint:before { content: $tint; }\n.icon-edit:before { content: $edit; }\n.icon-share:before { content: $share; }\n.icon-check:before { content: $check; }\n.icon-move:before { content: $move; }\n.icon-step-backward:before { content: $step-backward; }\n.icon-fast-backward:before { content: $fast-backward; }\n.icon-backward:before { content: $backward; }\n.icon-play:before { content: $play; }\n.icon-pause:before { content: $pause; }\n.icon-stop:before { content: $stop; }\n.icon-forward:before { content: $forward; }\n.icon-fast-forward:before { content: $fast-forward; }\n.icon-step-forward:before { content: $step-forward; }\n.icon-eject:before { content: $eject; }\n.icon-chevron-left:before { content: $chevron-left; }\n.icon-chevron-right:before { content: $chevron-right; }\n.icon-plus-sign:before { content: $plus-sign; }\n.icon-minus-sign:before { content: $minus-sign; }\n.icon-remove-sign:before { content: $remove-sign; }\n.icon-ok-sign:before { content: $ok-sign; }\n.icon-question-sign:before { content: $question-sign; }\n.icon-info-sign:before { content: $info-sign; }\n.icon-screenshot:before { content: $screenshot; }\n.icon-remove-circle:before { content: $remove-circle; }\n.icon-ok-circle:before { content: $ok-circle; }\n.icon-ban-circle:before { content: $ban-circle; }\n.icon-arrow-left:before { content: $arrow-left; }\n.icon-arrow-right:before { content: $arrow-right; }\n.icon-arrow-up:before { content: $arrow-up; }\n.icon-arrow-down:before { content: $arrow-down; }\n.icon-mail-forward:before,\n.icon-share-alt:before { content: $share-alt; }\n.icon-resize-full:before { content: $resize-full; }\n.icon-resize-small:before { content: $resize-small; }\n.icon-plus:before { content: $plus; }\n.icon-minus:before { content: $minus; }\n.icon-asterisk:before { content: $asterisk; }\n.icon-exclamation-sign:before { content: $exclamation-sign; }\n.icon-gift:before { content: $gift; }\n.icon-leaf:before { content: $leaf; }\n.icon-fire:before { content: $fire; }\n.icon-eye-open:before { content: $eye-open; }\n.icon-eye-close:before { content: $eye-close; }\n.icon-warning-sign:before { content: $warning-sign; }\n.icon-plane:before { content: $plane; }\n.icon-calendar:before { content: $calendar; }\n.icon-random:before { content: $random; }\n.icon-comment:before { content: $comment; }\n.icon-magnet:before { content: $magnet; }\n.icon-chevron-up:before { content: $chevron-up; }\n.icon-chevron-down:before { content: $chevron-down; }\n.icon-retweet:before { content: $retweet; }\n.icon-shopping-cart:before { content: $shopping-cart; }\n.icon-folder-close:before { content: $folder-close; }\n.icon-folder-open:before { content: $folder-open; }\n.icon-resize-vertical:before { content: $resize-vertical; }\n.icon-resize-horizontal:before { content: $resize-horizontal; }\n.icon-bar-chart:before { content: $bar-chart; }\n.icon-twitter-sign:before { content: $twitter-sign; }\n.icon-facebook-sign:before { content: $facebook-sign; }\n.icon-camera-retro:before { content: $camera-retro; }\n.icon-key:before { content: $key; }\n.icon-gears:before,\n.icon-cogs:before { content: $cogs; }\n.icon-comments:before { content: $comments; }\n.icon-thumbs-up-alt:before { content: $thumbs-up-alt; }\n.icon-thumbs-down-alt:before { content: $thumbs-down-alt; }\n.icon-star-half:before { content: $star-half; }\n.icon-heart-empty:before { content: $heart-empty; }\n.icon-signout:before { content: $signout; }\n.icon-linkedin-sign:before { content: $linkedin-sign; }\n.icon-pushpin:before { content: $pushpin; }\n.icon-external-link:before { content: $external-link; }\n.icon-signin:before { content: $signin; }\n.icon-trophy:before { content: $trophy; }\n.icon-github-sign:before { content: $github-sign; }\n.icon-upload-alt:before { content: $upload-alt; }\n.icon-lemon:before { content: $lemon; }\n.icon-phone:before { content: $phone; }\n.icon-unchecked:before,\n.icon-check-empty:before { content: $check-empty; }\n.icon-bookmark-empty:before { content: $bookmark-empty; }\n.icon-phone-sign:before { content: $phone-sign; }\n.icon-twitter:before { content: $twitter; }\n.icon-facebook:before { content: $facebook; }\n.icon-github:before { content: $github; }\n.icon-unlock:before { content: $unlock; }\n.icon-credit-card:before { content: $credit-card; }\n.icon-rss:before { content: $rss; }\n.icon-hdd:before { content: $hdd; }\n.icon-bullhorn:before { content: $bullhorn; }\n.icon-bell:before { content: $bell; }\n.icon-certificate:before { content: $certificate; }\n.icon-hand-right:before { content: $hand-right; }\n.icon-hand-left:before { content: $hand-left; }\n.icon-hand-up:before { content: $hand-up; }\n.icon-hand-down:before { content: $hand-down; }\n.icon-circle-arrow-left:before { content: $circle-arrow-left; }\n.icon-circle-arrow-right:before { content: $circle-arrow-right; }\n.icon-circle-arrow-up:before { content: $circle-arrow-up; }\n.icon-circle-arrow-down:before { content: $circle-arrow-down; }\n.icon-globe:before { content: $globe; }\n.icon-wrench:before { content: $wrench; }\n.icon-tasks:before { content: $tasks; }\n.icon-filter:before { content: $filter; }\n.icon-briefcase:before { content: $briefcase; }\n.icon-fullscreen:before { content: $fullscreen; }\n.icon-group:before { content: $group; }\n.icon-link:before { content: $link; }\n.icon-cloud:before { content: $cloud; }\n.icon-beaker:before { content: $beaker; }\n.icon-cut:before { content: $cut; }\n.icon-copy:before { content: $copy; }\n.icon-paperclip:before,\n.icon-paper-clip:before { content: $paper-clip; }\n.icon-save:before { content: $save; }\n.icon-sign-blank:before { content: $sign-blank; }\n.icon-reorder:before { content: $reorder; }\n.icon-list-ul:before { content: $list-ul; }\n.icon-list-ol:before { content: $list-ol; }\n.icon-strikethrough:before { content: $strikethrough; }\n.icon-underline:before { content: $underline; }\n.icon-table:before { content: $table; }\n.icon-magic:before { content: $magic; }\n.icon-truck:before { content: $truck; }\n.icon-pinterest:before { content: $pinterest; }\n.icon-pinterest-sign:before { content: $pinterest-sign; }\n.icon-google-plus-sign:before { content: $google-plus-sign; }\n.icon-google-plus:before { content: $google-plus; }\n.icon-money:before { content: $money; }\n.icon-caret-down:before { content: $caret-down; }\n.icon-caret-up:before { content: $caret-up; }\n.icon-caret-left:before { content: $caret-left; }\n.icon-caret-right:before { content: $caret-right; }\n.icon-columns:before { content: $columns; }\n.icon-sort:before { content: $sort; }\n.icon-sort-down:before { content: $sort-down; }\n.icon-sort-up:before { content: $sort-up; }\n.icon-envelope:before { content: $envelope; }\n.icon-linkedin:before { content: $linkedin; }\n.icon-rotate-left:before,\n.icon-undo:before { content: $undo; }\n.icon-legal:before { content: $legal; }\n.icon-dashboard:before { content: $dashboard; }\n.icon-comment-alt:before { content: $comment-alt; }\n.icon-comments-alt:before { content: $comments-alt; }\n.icon-bolt:before { content: $bolt; }\n.icon-sitemap:before { content: $sitemap; }\n.icon-umbrella:before { content: $umbrella; }\n.icon-paste:before { content: $paste; }\n.icon-lightbulb:before { content: $lightbulb; }\n.icon-exchange:before { content: $exchange; }\n.icon-cloud-download:before { content: $cloud-download; }\n.icon-cloud-upload:before { content: $cloud-upload; }\n.icon-user-md:before { content: $user-md; }\n.icon-stethoscope:before { content: $stethoscope; }\n.icon-suitcase:before { content: $suitcase; }\n.icon-bell-alt:before { content: $bell-alt; }\n.icon-coffee:before { content: $coffee; }\n.icon-food:before { content: $food; }\n.icon-file-text-alt:before { content: $file-text-alt; }\n.icon-building:before { content: $building; }\n.icon-hospital:before { content: $hospital; }\n.icon-ambulance:before { content: $ambulance; }\n.icon-medkit:before { content: $medkit; }\n.icon-fighter-jet:before { content: $fighter-jet; }\n.icon-beer:before { content: $beer; }\n.icon-h-sign:before { content: $h-sign; }\n.icon-plus-sign-alt:before { content: $plus-sign-alt; }\n.icon-double-angle-left:before { content: $double-angle-left; }\n.icon-double-angle-right:before { content: $double-angle-right; }\n.icon-double-angle-up:before { content: $double-angle-up; }\n.icon-double-angle-down:before { content: $double-angle-down; }\n.icon-angle-left:before { content: $angle-left; }\n.icon-angle-right:before { content: $angle-right; }\n.icon-angle-up:before { content: $angle-up; }\n.icon-angle-down:before { content: $angle-down; }\n.icon-desktop:before { content: $desktop; }\n.icon-laptop:before { content: $laptop; }\n.icon-tablet:before { content: $tablet; }\n.icon-mobile-phone:before { content: $mobile-phone; }\n.icon-circle-blank:before { content: $circle-blank; }\n.icon-quote-left:before { content: $quote-left; }\n.icon-quote-right:before { content: $quote-right; }\n.icon-spinner:before { content: $spinner; }\n.icon-circle:before { content: $circle; }\n.icon-mail-reply:before,\n.icon-reply:before { content: $reply; }\n.icon-github-alt:before { content: $github-alt; }\n.icon-folder-close-alt:before { content: $folder-close-alt; }\n.icon-folder-open-alt:before { content: $folder-open-alt; }\n.icon-expand-alt:before { content: $expand-alt; }\n.icon-collapse-alt:before { content: $collapse-alt; }\n.icon-smile:before { content: $smile; }\n.icon-frown:before { content: $frown; }\n.icon-meh:before { content: $meh; }\n.icon-gamepad:before { content: $gamepad; }\n.icon-keyboard:before { content: $keyboard; }\n.icon-flag-alt:before { content: $flag-alt; }\n.icon-flag-checkered:before { content: $flag-checkered; }\n.icon-terminal:before { content: $terminal; }\n.icon-code:before { content: $code; }\n.icon-reply-all:before { content: $reply-all; }\n.icon-mail-reply-all:before { content: $mail-reply-all; }\n.icon-star-half-full:before,\n.icon-star-half-empty:before { content: $star-half-empty; }\n.icon-location-arrow:before { content: $location-arrow; }\n.icon-crop:before { content: $crop; }\n.icon-code-fork:before { content: $code-fork; }\n.icon-unlink:before { content: $unlink; }\n.icon-question:before { content: $question; }\n.icon-info:before { content: $info; }\n.icon-exclamation:before { content: $exclamation; }\n.icon-superscript:before { content: $superscript; }\n.icon-subscript:before { content: $subscript; }\n.icon-eraser:before { content: $eraser; }\n.icon-puzzle-piece:before { content: $puzzle-piece; }\n.icon-microphone:before { content: $microphone; }\n.icon-microphone-off:before { content: $microphone-off; }\n.icon-shield:before { content: $shield; }\n.icon-calendar-empty:before { content: $calendar-empty; }\n.icon-fire-extinguisher:before { content: $fire-extinguisher; }\n.icon-rocket:before { content: $rocket; }\n.icon-maxcdn:before { content: $maxcdn; }\n.icon-chevron-sign-left:before { content: $chevron-sign-left; }\n.icon-chevron-sign-right:before { content: $chevron-sign-right; }\n.icon-chevron-sign-up:before { content: $chevron-sign-up; }\n.icon-chevron-sign-down:before { content: $chevron-sign-down; }\n.icon-html5:before { content: $html5; }\n.icon-css3:before { content: $css3; }\n.icon-anchor:before { content: $anchor; }\n.icon-unlock-alt:before { content: $unlock-alt; }\n.icon-bullseye:before { content: $bullseye; }\n.icon-ellipsis-horizontal:before { content: $ellipsis-horizontal; }\n.icon-ellipsis-vertical:before { content: $ellipsis-vertical; }\n.icon-rss-sign:before { content: $rss-sign; }\n.icon-play-sign:before { content: $play-sign; }\n.icon-ticket:before { content: $ticket; }\n.icon-minus-sign-alt:before { content: $minus-sign-alt; }\n.icon-check-minus:before { content: $check-minus; }\n.icon-level-up:before { content: $level-up; }\n.icon-level-down:before { content: $level-down; }\n.icon-check-sign:before { content: $check-sign; }\n.icon-edit-sign:before { content: $edit-sign; }\n.icon-external-link-sign:before { content: $external-link-sign; }\n.icon-share-sign:before { content: $share-sign; }\n.icon-compass:before { content: $compass; }\n.icon-collapse:before { content: $collapse; }\n.icon-collapse-top:before { content: $collapse-top; }\n.icon-expand:before { content: $expand; }\n.icon-euro:before,\n.icon-eur:before { content: $eur; }\n.icon-gbp:before { content: $gbp; }\n.icon-dollar:before,\n.icon-usd:before { content: $usd; }\n.icon-rupee:before,\n.icon-inr:before { content: $inr; }\n.icon-yen:before,\n.icon-jpy:before { content: $jpy; }\n.icon-renminbi:before,\n.icon-cny:before { content: $cny; }\n.icon-won:before,\n.icon-krw:before { content: $krw; }\n.icon-bitcoin:before,\n.icon-btc:before { content: $btc; }\n.icon-file:before { content: $file; }\n.icon-file-text:before { content: $file-text; }\n.icon-sort-by-alphabet:before { content: $sort-by-alphabet; }\n.icon-sort-by-alphabet-alt:before { content: $sort-by-alphabet-alt; }\n.icon-sort-by-attributes:before { content: $sort-by-attributes; }\n.icon-sort-by-attributes-alt:before { content: $sort-by-attributes-alt; }\n.icon-sort-by-order:before { content: $sort-by-order; }\n.icon-sort-by-order-alt:before { content: $sort-by-order-alt; }\n.icon-thumbs-up:before { content: $thumbs-up; }\n.icon-thumbs-down:before { content: $thumbs-down; }\n.icon-youtube-sign:before { content: $youtube-sign; }\n.icon-youtube:before { content: $youtube; }\n.icon-xing:before { content: $xing; }\n.icon-xing-sign:before { content: $xing-sign; }\n.icon-youtube-play:before { content: $youtube-play; }\n.icon-dropbox:before { content: $dropbox; }\n.icon-stackexchange:before { content: $stackexchange; }\n.icon-instagram:before { content: $instagram; }\n.icon-flickr:before { content: $flickr; }\n.icon-adn:before { content: $adn; }\n.icon-bitbucket:before { content: $bitbucket; }\n.icon-bitbucket-sign:before { content: $bitbucket-sign; }\n.icon-tumblr:before { content: $tumblr; }\n.icon-tumblr-sign:before { content: $tumblr-sign; }\n.icon-long-arrow-down:before { content: $long-arrow-down; }\n.icon-long-arrow-up:before { content: $long-arrow-up; }\n.icon-long-arrow-left:before { content: $long-arrow-left; }\n.icon-long-arrow-right:before { content: $long-arrow-right; }\n.icon-apple:before { content: $apple; }\n.icon-windows:before { content: $windows; }\n.icon-android:before { content: $android; }\n.icon-linux:before { content: $linux; }\n.icon-dribbble:before { content: $dribbble; }\n.icon-skype:before { content: $skype; }\n.icon-foursquare:before { content: $foursquare; }\n.icon-trello:before { content: $trello; }\n.icon-female:before { content: $female; }\n.icon-male:before { content: $male; }\n.icon-gittip:before { content: $gittip; }\n.icon-sun:before { content: $sun; }\n.icon-moon:before { content: $moon; }\n.icon-archive:before { content: $archive; }\n.icon-bug:before { content: $bug; }\n.icon-vk:before { content: $vk; }\n.icon-weibo:before { content: $weibo; }\n.icon-renren:before { content: $renren; }\n"
  },
  {
    "path": "automatic/static/css/font-awesome/scss/_larger.scss",
    "content": "// Icon Sizes\n// -------------------------\n\n/* makes the font 33% larger relative to the icon container */\n.#{$fa-css-prefix}-lg {\n  font-size: (4em / 3);\n  line-height: (3em / 4);\n  vertical-align: -15%;\n}\n.#{$fa-css-prefix}-2x { font-size: 2em; }\n.#{$fa-css-prefix}-3x { font-size: 3em; }\n.#{$fa-css-prefix}-4x { font-size: 4em; }\n.#{$fa-css-prefix}-5x { font-size: 5em; }\n"
  },
  {
    "path": "automatic/static/css/font-awesome/scss/_list.scss",
    "content": "// List Icons\n// -------------------------\n\n.#{$fa-css-prefix}-ul {\n  padding-left: 0;\n  margin-left: $fa-li-width;\n  list-style-type: none;\n  > li { position: relative; }\n}\n.#{$fa-css-prefix}-li {\n  position: absolute;\n  left: -$fa-li-width;\n  width: $fa-li-width;\n  top: (2em / 14);\n  text-align: center;\n  &.#{$fa-css-prefix}-lg {\n    left: -$fa-li-width + (4em / 14);\n  }\n}\n"
  },
  {
    "path": "automatic/static/css/font-awesome/scss/_mixins.scss",
    "content": "// Mixins\n// --------------------------\n\n@mixin icon($icon) {\n  @include icon-FontAwesome();\n  content: $icon;\n}\n\n@mixin icon-FontAwesome() {\n  font-family: FontAwesome;\n  font-weight: normal;\n  font-style: normal;\n  text-decoration: inherit;\n  -webkit-font-smoothing: antialiased;\n  *margin-right: .3em; // fixes ie7 issues\n}\n\n@mixin border-radius($radius) {\n  -webkit-border-radius: $radius;\n  -moz-border-radius: $radius;\n  border-radius: $radius;\n}\n\n@mixin icon-stack($width: 2em, $height: 2em, $top-font-size: 1em, $base-font-size: 2em) {\n  .icon-stack {\n    position: relative;\n    display: inline-block;\n    width: $width;\n    height: $height;\n    line-height: $width;\n    vertical-align: -35%;\n    [class^=\"icon-\"],\n    [class*=\" icon-\"] {\n      display: block;\n      text-align: center;\n      position: absolute;\n      width: 100%;\n      height: 100%;\n      font-size: $top-font-size;\n      line-height: inherit;\n      *line-height: $height;\n    }\n    .icon-stack-base {\n      font-size: $base-font-size;\n      *line-height: #{$height / $base-font-size}em;\n    }\n  }\n}\n"
  },
  {
    "path": "automatic/static/css/font-awesome/scss/_path.scss",
    "content": "/* FONT PATH\n * -------------------------- */\n\n@font-face {\n  font-family: 'FontAwesome';\n  src: url('#{$FontAwesomePath}/fontawesome-webfont.eot?v=#{$FontAwesomeVersion}');\n  src: url('#{$FontAwesomePath}/fontawesome-webfont.eot?#iefix&v=#{$FontAwesomeVersion}') format('embedded-opentype'),\n    url('#{$FontAwesomePath}/fontawesome-webfont.woff?v=#{$FontAwesomeVersion}') format('woff'),\n    url('#{$FontAwesomePath}/fontawesome-webfont.ttf?v=#{$FontAwesomeVersion}') format('truetype'),\n    url('#{$FontAwesomePath}/fontawesome-webfont.svg#fontawesomeregular?v=#{$FontAwesomeVersion}') format('svg');\n//  src: url('#{$FontAwesomePath}/FontAwesome.otf') format('opentype'); // used when developing fonts\n  font-weight: normal;\n  font-style: normal;\n}\n"
  },
  {
    "path": "automatic/static/css/font-awesome/scss/_rotated-flipped.scss",
    "content": "// Rotated & Flipped Icons\n// -------------------------\n\n.#{$fa-css-prefix}-rotate-90  { @include fa-icon-rotate(90deg, 1);  }\n.#{$fa-css-prefix}-rotate-180 { @include fa-icon-rotate(180deg, 2); }\n.#{$fa-css-prefix}-rotate-270 { @include fa-icon-rotate(270deg, 3); }\n\n.#{$fa-css-prefix}-flip-horizontal { @include fa-icon-flip(-1, 1, 0); }\n.#{$fa-css-prefix}-flip-vertical   { @include fa-icon-flip(1, -1, 2); }\n\n// Hook for IE8-9\n// -------------------------\n\n:root .#{$fa-css-prefix}-rotate-90,\n:root .#{$fa-css-prefix}-rotate-180,\n:root .#{$fa-css-prefix}-rotate-270,\n:root .#{$fa-css-prefix}-flip-horizontal,\n:root .#{$fa-css-prefix}-flip-vertical {\n  filter: none;\n}\n"
  },
  {
    "path": "automatic/static/css/font-awesome/scss/_stacked.scss",
    "content": "// Stacked Icons\n// -------------------------\n\n.#{$fa-css-prefix}-stack {\n  position: relative;\n  display: inline-block;\n  width: 2em;\n  height: 2em;\n  line-height: 2em;\n  vertical-align: middle;\n}\n.#{$fa-css-prefix}-stack-1x, .#{$fa-css-prefix}-stack-2x {\n  position: absolute;\n  left: 0;\n  width: 100%;\n  text-align: center;\n}\n.#{$fa-css-prefix}-stack-1x { line-height: inherit; }\n.#{$fa-css-prefix}-stack-2x { font-size: 2em; }\n.#{$fa-css-prefix}-inverse { color: $fa-inverse; }\n"
  },
  {
    "path": "automatic/static/css/font-awesome/scss/_variables.scss",
    "content": "// Variables\n// --------------------------\n\n$FontAwesomePath: \"../font\" !default;\n$FontAwesomeVersion: \"3.2.1\" !default;\n$borderColor: #eeeeee !default;\n$iconMuted: #eeeeee !default;\n$iconLight: white !default;\n$iconDark: #333333 !default;\n$icons-li-width: (30em/14);\n\n\n$glass: \"\\f000\";\n\n$music: \"\\f001\";\n\n$search: \"\\f002\";\n\n$envelope-alt: \"\\f003\";\n\n$heart: \"\\f004\";\n\n$star: \"\\f005\";\n\n$star-empty: \"\\f006\";\n\n$user: \"\\f007\";\n\n$film: \"\\f008\";\n\n$th-large: \"\\f009\";\n\n$th: \"\\f00a\";\n\n$th-list: \"\\f00b\";\n\n$ok: \"\\f00c\";\n\n$remove: \"\\f00d\";\n\n$zoom-in: \"\\f00e\";\n\n$zoom-out: \"\\f010\";\n\n$off: \"\\f011\";\n\n$signal: \"\\f012\";\n\n$cog: \"\\f013\";\n\n$trash: \"\\f014\";\n\n$home: \"\\f015\";\n\n$file-alt: \"\\f016\";\n\n$time: \"\\f017\";\n\n$road: \"\\f018\";\n\n$download-alt: \"\\f019\";\n\n$download: \"\\f01a\";\n\n$upload: \"\\f01b\";\n\n$inbox: \"\\f01c\";\n\n$play-circle: \"\\f01d\";\n\n$repeat: \"\\f01e\";\n\n$refresh: \"\\f021\";\n\n$list-alt: \"\\f022\";\n\n$lock: \"\\f023\";\n\n$flag: \"\\f024\";\n\n$headphones: \"\\f025\";\n\n$volume-off: \"\\f026\";\n\n$volume-down: \"\\f027\";\n\n$volume-up: \"\\f028\";\n\n$qrcode: \"\\f029\";\n\n$barcode: \"\\f02a\";\n\n$tag: \"\\f02b\";\n\n$tags: \"\\f02c\";\n\n$book: \"\\f02d\";\n\n$bookmark: \"\\f02e\";\n\n$print: \"\\f02f\";\n\n$camera: \"\\f030\";\n\n$font: \"\\f031\";\n\n$bold: \"\\f032\";\n\n$italic: \"\\f033\";\n\n$text-height: \"\\f034\";\n\n$text-width: \"\\f035\";\n\n$align-left: \"\\f036\";\n\n$align-center: \"\\f037\";\n\n$align-right: \"\\f038\";\n\n$align-justify: \"\\f039\";\n\n$list: \"\\f03a\";\n\n$indent-left: \"\\f03b\";\n\n$indent-right: \"\\f03c\";\n\n$facetime-video: \"\\f03d\";\n\n$picture: \"\\f03e\";\n\n$pencil: \"\\f040\";\n\n$map-marker: \"\\f041\";\n\n$adjust: \"\\f042\";\n\n$tint: \"\\f043\";\n\n$edit: \"\\f044\";\n\n$share: \"\\f045\";\n\n$check: \"\\f046\";\n\n$move: \"\\f047\";\n\n$step-backward: \"\\f048\";\n\n$fast-backward: \"\\f049\";\n\n$backward: \"\\f04a\";\n\n$play: \"\\f04b\";\n\n$pause: \"\\f04c\";\n\n$stop: \"\\f04d\";\n\n$forward: \"\\f04e\";\n\n$fast-forward: \"\\f050\";\n\n$step-forward: \"\\f051\";\n\n$eject: \"\\f052\";\n\n$chevron-left: \"\\f053\";\n\n$chevron-right: \"\\f054\";\n\n$plus-sign: \"\\f055\";\n\n$minus-sign: \"\\f056\";\n\n$remove-sign: \"\\f057\";\n\n$ok-sign: \"\\f058\";\n\n$question-sign: \"\\f059\";\n\n$info-sign: \"\\f05a\";\n\n$screenshot: \"\\f05b\";\n\n$remove-circle: \"\\f05c\";\n\n$ok-circle: \"\\f05d\";\n\n$ban-circle: \"\\f05e\";\n\n$arrow-left: \"\\f060\";\n\n$arrow-right: \"\\f061\";\n\n$arrow-up: \"\\f062\";\n\n$arrow-down: \"\\f063\";\n\n$share-alt: \"\\f064\";\n\n$resize-full: \"\\f065\";\n\n$resize-small: \"\\f066\";\n\n$plus: \"\\f067\";\n\n$minus: \"\\f068\";\n\n$asterisk: \"\\f069\";\n\n$exclamation-sign: \"\\f06a\";\n\n$gift: \"\\f06b\";\n\n$leaf: \"\\f06c\";\n\n$fire: \"\\f06d\";\n\n$eye-open: \"\\f06e\";\n\n$eye-close: \"\\f070\";\n\n$warning-sign: \"\\f071\";\n\n$plane: \"\\f072\";\n\n$calendar: \"\\f073\";\n\n$random: \"\\f074\";\n\n$comment: \"\\f075\";\n\n$magnet: \"\\f076\";\n\n$chevron-up: \"\\f077\";\n\n$chevron-down: \"\\f078\";\n\n$retweet: \"\\f079\";\n\n$shopping-cart: \"\\f07a\";\n\n$folder-close: \"\\f07b\";\n\n$folder-open: \"\\f07c\";\n\n$resize-vertical: \"\\f07d\";\n\n$resize-horizontal: \"\\f07e\";\n\n$bar-chart: \"\\f080\";\n\n$twitter-sign: \"\\f081\";\n\n$facebook-sign: \"\\f082\";\n\n$camera-retro: \"\\f083\";\n\n$key: \"\\f084\";\n\n$cogs: \"\\f085\";\n\n$comments: \"\\f086\";\n\n$thumbs-up-alt: \"\\f087\";\n\n$thumbs-down-alt: \"\\f088\";\n\n$star-half: \"\\f089\";\n\n$heart-empty: \"\\f08a\";\n\n$signout: \"\\f08b\";\n\n$linkedin-sign: \"\\f08c\";\n\n$pushpin: \"\\f08d\";\n\n$external-link: \"\\f08e\";\n\n$signin: \"\\f090\";\n\n$trophy: \"\\f091\";\n\n$github-sign: \"\\f092\";\n\n$upload-alt: \"\\f093\";\n\n$lemon: \"\\f094\";\n\n$phone: \"\\f095\";\n\n$check-empty: \"\\f096\";\n\n$bookmark-empty: \"\\f097\";\n\n$phone-sign: \"\\f098\";\n\n$twitter: \"\\f099\";\n\n$facebook: \"\\f09a\";\n\n$github: \"\\f09b\";\n\n$unlock: \"\\f09c\";\n\n$credit-card: \"\\f09d\";\n\n$rss: \"\\f09e\";\n\n$hdd: \"\\f0a0\";\n\n$bullhorn: \"\\f0a1\";\n\n$bell: \"\\f0a2\";\n\n$certificate: \"\\f0a3\";\n\n$hand-right: \"\\f0a4\";\n\n$hand-left: \"\\f0a5\";\n\n$hand-up: \"\\f0a6\";\n\n$hand-down: \"\\f0a7\";\n\n$circle-arrow-left: \"\\f0a8\";\n\n$circle-arrow-right: \"\\f0a9\";\n\n$circle-arrow-up: \"\\f0aa\";\n\n$circle-arrow-down: \"\\f0ab\";\n\n$globe: \"\\f0ac\";\n\n$wrench: \"\\f0ad\";\n\n$tasks: \"\\f0ae\";\n\n$filter: \"\\f0b0\";\n\n$briefcase: \"\\f0b1\";\n\n$fullscreen: \"\\f0b2\";\n\n$group: \"\\f0c0\";\n\n$link: \"\\f0c1\";\n\n$cloud: \"\\f0c2\";\n\n$beaker: \"\\f0c3\";\n\n$cut: \"\\f0c4\";\n\n$copy: \"\\f0c5\";\n\n$paper-clip: \"\\f0c6\";\n\n$save: \"\\f0c7\";\n\n$sign-blank: \"\\f0c8\";\n\n$reorder: \"\\f0c9\";\n\n$list-ul: \"\\f0ca\";\n\n$list-ol: \"\\f0cb\";\n\n$strikethrough: \"\\f0cc\";\n\n$underline: \"\\f0cd\";\n\n$table: \"\\f0ce\";\n\n$magic: \"\\f0d0\";\n\n$truck: \"\\f0d1\";\n\n$pinterest: \"\\f0d2\";\n\n$pinterest-sign: \"\\f0d3\";\n\n$google-plus-sign: \"\\f0d4\";\n\n$google-plus: \"\\f0d5\";\n\n$money: \"\\f0d6\";\n\n$caret-down: \"\\f0d7\";\n\n$caret-up: \"\\f0d8\";\n\n$caret-left: \"\\f0d9\";\n\n$caret-right: \"\\f0da\";\n\n$columns: \"\\f0db\";\n\n$sort: \"\\f0dc\";\n\n$sort-down: \"\\f0dd\";\n\n$sort-up: \"\\f0de\";\n\n$envelope: \"\\f0e0\";\n\n$linkedin: \"\\f0e1\";\n\n$undo: \"\\f0e2\";\n\n$legal: \"\\f0e3\";\n\n$dashboard: \"\\f0e4\";\n\n$comment-alt: \"\\f0e5\";\n\n$comments-alt: \"\\f0e6\";\n\n$bolt: \"\\f0e7\";\n\n$sitemap: \"\\f0e8\";\n\n$umbrella: \"\\f0e9\";\n\n$paste: \"\\f0ea\";\n\n$lightbulb: \"\\f0eb\";\n\n$exchange: \"\\f0ec\";\n\n$cloud-download: \"\\f0ed\";\n\n$cloud-upload: \"\\f0ee\";\n\n$user-md: \"\\f0f0\";\n\n$stethoscope: \"\\f0f1\";\n\n$suitcase: \"\\f0f2\";\n\n$bell-alt: \"\\f0f3\";\n\n$coffee: \"\\f0f4\";\n\n$food: \"\\f0f5\";\n\n$file-text-alt: \"\\f0f6\";\n\n$building: \"\\f0f7\";\n\n$hospital: \"\\f0f8\";\n\n$ambulance: \"\\f0f9\";\n\n$medkit: \"\\f0fa\";\n\n$fighter-jet: \"\\f0fb\";\n\n$beer: \"\\f0fc\";\n\n$h-sign: \"\\f0fd\";\n\n$plus-sign-alt: \"\\f0fe\";\n\n$double-angle-left: \"\\f100\";\n\n$double-angle-right: \"\\f101\";\n\n$double-angle-up: \"\\f102\";\n\n$double-angle-down: \"\\f103\";\n\n$angle-left: \"\\f104\";\n\n$angle-right: \"\\f105\";\n\n$angle-up: \"\\f106\";\n\n$angle-down: \"\\f107\";\n\n$desktop: \"\\f108\";\n\n$laptop: \"\\f109\";\n\n$tablet: \"\\f10a\";\n\n$mobile-phone: \"\\f10b\";\n\n$circle-blank: \"\\f10c\";\n\n$quote-left: \"\\f10d\";\n\n$quote-right: \"\\f10e\";\n\n$spinner: \"\\f110\";\n\n$circle: \"\\f111\";\n\n$reply: \"\\f112\";\n\n$github-alt: \"\\f113\";\n\n$folder-close-alt: \"\\f114\";\n\n$folder-open-alt: \"\\f115\";\n\n$expand-alt: \"\\f116\";\n\n$collapse-alt: \"\\f117\";\n\n$smile: \"\\f118\";\n\n$frown: \"\\f119\";\n\n$meh: \"\\f11a\";\n\n$gamepad: \"\\f11b\";\n\n$keyboard: \"\\f11c\";\n\n$flag-alt: \"\\f11d\";\n\n$flag-checkered: \"\\f11e\";\n\n$terminal: \"\\f120\";\n\n$code: \"\\f121\";\n\n$reply-all: \"\\f122\";\n\n$mail-reply-all: \"\\f122\";\n\n$star-half-empty: \"\\f123\";\n\n$location-arrow: \"\\f124\";\n\n$crop: \"\\f125\";\n\n$code-fork: \"\\f126\";\n\n$unlink: \"\\f127\";\n\n$question: \"\\f128\";\n\n$info: \"\\f129\";\n\n$exclamation: \"\\f12a\";\n\n$superscript: \"\\f12b\";\n\n$subscript: \"\\f12c\";\n\n$eraser: \"\\f12d\";\n\n$puzzle-piece: \"\\f12e\";\n\n$microphone: \"\\f130\";\n\n$microphone-off: \"\\f131\";\n\n$shield: \"\\f132\";\n\n$calendar-empty: \"\\f133\";\n\n$fire-extinguisher: \"\\f134\";\n\n$rocket: \"\\f135\";\n\n$maxcdn: \"\\f136\";\n\n$chevron-sign-left: \"\\f137\";\n\n$chevron-sign-right: \"\\f138\";\n\n$chevron-sign-up: \"\\f139\";\n\n$chevron-sign-down: \"\\f13a\";\n\n$html5: \"\\f13b\";\n\n$css3: \"\\f13c\";\n\n$anchor: \"\\f13d\";\n\n$unlock-alt: \"\\f13e\";\n\n$bullseye: \"\\f140\";\n\n$ellipsis-horizontal: \"\\f141\";\n\n$ellipsis-vertical: \"\\f142\";\n\n$rss-sign: \"\\f143\";\n\n$play-sign: \"\\f144\";\n\n$ticket: \"\\f145\";\n\n$minus-sign-alt: \"\\f146\";\n\n$check-minus: \"\\f147\";\n\n$level-up: \"\\f148\";\n\n$level-down: \"\\f149\";\n\n$check-sign: \"\\f14a\";\n\n$edit-sign: \"\\f14b\";\n\n$external-link-sign: \"\\f14c\";\n\n$share-sign: \"\\f14d\";\n\n$compass: \"\\f14e\";\n\n$collapse: \"\\f150\";\n\n$collapse-top: \"\\f151\";\n\n$expand: \"\\f152\";\n\n$eur: \"\\f153\";\n\n$gbp: \"\\f154\";\n\n$usd: \"\\f155\";\n\n$inr: \"\\f156\";\n\n$jpy: \"\\f157\";\n\n$cny: \"\\f158\";\n\n$krw: \"\\f159\";\n\n$btc: \"\\f15a\";\n\n$file: \"\\f15b\";\n\n$file-text: \"\\f15c\";\n\n$sort-by-alphabet: \"\\f15d\";\n\n$sort-by-alphabet-alt: \"\\f15e\";\n\n$sort-by-attributes: \"\\f160\";\n\n$sort-by-attributes-alt: \"\\f161\";\n\n$sort-by-order: \"\\f162\";\n\n$sort-by-order-alt: \"\\f163\";\n\n$thumbs-up: \"\\f164\";\n\n$thumbs-down: \"\\f165\";\n\n$youtube-sign: \"\\f166\";\n\n$youtube: \"\\f167\";\n\n$xing: \"\\f168\";\n\n$xing-sign: \"\\f169\";\n\n$youtube-play: \"\\f16a\";\n\n$dropbox: \"\\f16b\";\n\n$stackexchange: \"\\f16c\";\n\n$instagram: \"\\f16d\";\n\n$flickr: \"\\f16e\";\n\n$adn: \"\\f170\";\n\n$bitbucket: \"\\f171\";\n\n$bitbucket-sign: \"\\f172\";\n\n$tumblr: \"\\f173\";\n\n$tumblr-sign: \"\\f174\";\n\n$long-arrow-down: \"\\f175\";\n\n$long-arrow-up: \"\\f176\";\n\n$long-arrow-left: \"\\f177\";\n\n$long-arrow-right: \"\\f178\";\n\n$apple: \"\\f179\";\n\n$windows: \"\\f17a\";\n\n$android: \"\\f17b\";\n\n$linux: \"\\f17c\";\n\n$dribbble: \"\\f17d\";\n\n$skype: \"\\f17e\";\n\n$foursquare: \"\\f180\";\n\n$trello: \"\\f181\";\n\n$female: \"\\f182\";\n\n$male: \"\\f183\";\n\n$gittip: \"\\f184\";\n\n$sun: \"\\f185\";\n\n$moon: \"\\f186\";\n\n$archive: \"\\f187\";\n\n$bug: \"\\f188\";\n\n$vk: \"\\f189\";\n\n$weibo: \"\\f18a\";\n\n$renren: \"\\f18b\";\n\n"
  },
  {
    "path": "automatic/static/css/font-awesome/scss/font-awesome-ie7.scss",
    "content": "/*!\n *  Font Awesome 3.2.1\n *  the iconic font designed for Bootstrap\n *  ------------------------------------------------------------------------------\n *  The full suite of pictographic icons, examples, and documentation can be\n *  found at http://fontawesome.io.  Stay up to date on Twitter at\n *  http://twitter.com/fontawesome.\n *\n *  License\n *  ------------------------------------------------------------------------------\n *  - The Font Awesome font is licensed under SIL OFL 1.1 -\n *    http://scripts.sil.org/OFL\n *  - Font Awesome CSS, LESS, and SASS files are licensed under MIT License -\n *    http://opensource.org/licenses/mit-license.html\n *  - Font Awesome documentation licensed under CC BY 3.0 -\n *    http://creativecommons.org/licenses/by/3.0/\n *  - Attribution is no longer required in Font Awesome 3.0, but much appreciated:\n *    \"Font Awesome by Dave Gandy - http://fontawesome.io\"\n *\n *  Author - Dave Gandy\n *  ------------------------------------------------------------------------------\n *  Email: dave@fontawesome.io\n *  Twitter: http://twitter.com/byscuits\n *  Work: Lead Product Designer @ Kyruus - http://kyruus.com\n */\n\n.icon-large {\n  font-size: (4em/3);\n  margin-top: -4px;\n  padding-top: 3px;\n  margin-bottom: -4px;\n  padding-bottom: 3px;\n  vertical-align: middle;\n}\n\n.nav {\n  [class^=\"icon-\"],\n  [class*=\" icon-\"] {\n    vertical-align: inherit;\n    margin-top: -4px;\n    padding-top: 3px;\n    margin-bottom: -4px;\n    padding-bottom: 3px;\n    &.icon-large {\n      vertical-align: -25%;\n    }\n  }\n}\n\n.nav-pills, .nav-tabs {\n  [class^=\"icon-\"],\n  [class*=\" icon-\"] {\n    &.icon-large {\n      line-height: .75em;\n      margin-top: -7px;\n      padding-top: 5px;\n      margin-bottom: -5px;\n      padding-bottom: 4px;\n    }\n  }\n}\n\n.btn {\n  [class^=\"icon-\"],\n  [class*=\" icon-\"] {\n    &.pull-left, &.pull-right { vertical-align: inherit; }\n    &.icon-large {\n      margin-top: -.5em;\n    }\n  }\n}\n\na [class^=\"icon-\"],\na [class*=\" icon-\"] {\n  cursor: pointer;\n}\n\n@mixin ie7icon($inner) { *zoom: expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = '#{$inner}'); }\n\n\n.icon-glass {\n  @include ie7icon('&#xf000;');\n}\n\n\n.icon-music {\n  @include ie7icon('&#xf001;');\n}\n\n\n.icon-search {\n  @include ie7icon('&#xf002;');\n}\n\n\n.icon-envelope-alt {\n  @include ie7icon('&#xf003;');\n}\n\n\n.icon-heart {\n  @include ie7icon('&#xf004;');\n}\n\n\n.icon-star {\n  @include ie7icon('&#xf005;');\n}\n\n\n.icon-star-empty {\n  @include ie7icon('&#xf006;');\n}\n\n\n.icon-user {\n  @include ie7icon('&#xf007;');\n}\n\n\n.icon-film {\n  @include ie7icon('&#xf008;');\n}\n\n\n.icon-th-large {\n  @include ie7icon('&#xf009;');\n}\n\n\n.icon-th {\n  @include ie7icon('&#xf00a;');\n}\n\n\n.icon-th-list {\n  @include ie7icon('&#xf00b;');\n}\n\n\n.icon-ok {\n  @include ie7icon('&#xf00c;');\n}\n\n\n.icon-remove {\n  @include ie7icon('&#xf00d;');\n}\n\n\n.icon-zoom-in {\n  @include ie7icon('&#xf00e;');\n}\n\n\n.icon-zoom-out {\n  @include ie7icon('&#xf010;');\n}\n\n\n.icon-off {\n  @include ie7icon('&#xf011;');\n}\n\n.icon-power-off {\n  @include ie7icon('&#xf011;');\n}\n\n\n.icon-signal {\n  @include ie7icon('&#xf012;');\n}\n\n\n.icon-cog {\n  @include ie7icon('&#xf013;');\n}\n\n.icon-gear {\n  @include ie7icon('&#xf013;');\n}\n\n\n.icon-trash {\n  @include ie7icon('&#xf014;');\n}\n\n\n.icon-home {\n  @include ie7icon('&#xf015;');\n}\n\n\n.icon-file-alt {\n  @include ie7icon('&#xf016;');\n}\n\n\n.icon-time {\n  @include ie7icon('&#xf017;');\n}\n\n\n.icon-road {\n  @include ie7icon('&#xf018;');\n}\n\n\n.icon-download-alt {\n  @include ie7icon('&#xf019;');\n}\n\n\n.icon-download {\n  @include ie7icon('&#xf01a;');\n}\n\n\n.icon-upload {\n  @include ie7icon('&#xf01b;');\n}\n\n\n.icon-inbox {\n  @include ie7icon('&#xf01c;');\n}\n\n\n.icon-play-circle {\n  @include ie7icon('&#xf01d;');\n}\n\n\n.icon-repeat {\n  @include ie7icon('&#xf01e;');\n}\n\n.icon-rotate-right {\n  @include ie7icon('&#xf01e;');\n}\n\n\n.icon-refresh {\n  @include ie7icon('&#xf021;');\n}\n\n\n.icon-list-alt {\n  @include ie7icon('&#xf022;');\n}\n\n\n.icon-lock {\n  @include ie7icon('&#xf023;');\n}\n\n\n.icon-flag {\n  @include ie7icon('&#xf024;');\n}\n\n\n.icon-headphones {\n  @include ie7icon('&#xf025;');\n}\n\n\n.icon-volume-off {\n  @include ie7icon('&#xf026;');\n}\n\n\n.icon-volume-down {\n  @include ie7icon('&#xf027;');\n}\n\n\n.icon-volume-up {\n  @include ie7icon('&#xf028;');\n}\n\n\n.icon-qrcode {\n  @include ie7icon('&#xf029;');\n}\n\n\n.icon-barcode {\n  @include ie7icon('&#xf02a;');\n}\n\n\n.icon-tag {\n  @include ie7icon('&#xf02b;');\n}\n\n\n.icon-tags {\n  @include ie7icon('&#xf02c;');\n}\n\n\n.icon-book {\n  @include ie7icon('&#xf02d;');\n}\n\n\n.icon-bookmark {\n  @include ie7icon('&#xf02e;');\n}\n\n\n.icon-print {\n  @include ie7icon('&#xf02f;');\n}\n\n\n.icon-camera {\n  @include ie7icon('&#xf030;');\n}\n\n\n.icon-font {\n  @include ie7icon('&#xf031;');\n}\n\n\n.icon-bold {\n  @include ie7icon('&#xf032;');\n}\n\n\n.icon-italic {\n  @include ie7icon('&#xf033;');\n}\n\n\n.icon-text-height {\n  @include ie7icon('&#xf034;');\n}\n\n\n.icon-text-width {\n  @include ie7icon('&#xf035;');\n}\n\n\n.icon-align-left {\n  @include ie7icon('&#xf036;');\n}\n\n\n.icon-align-center {\n  @include ie7icon('&#xf037;');\n}\n\n\n.icon-align-right {\n  @include ie7icon('&#xf038;');\n}\n\n\n.icon-align-justify {\n  @include ie7icon('&#xf039;');\n}\n\n\n.icon-list {\n  @include ie7icon('&#xf03a;');\n}\n\n\n.icon-indent-left {\n  @include ie7icon('&#xf03b;');\n}\n\n\n.icon-indent-right {\n  @include ie7icon('&#xf03c;');\n}\n\n\n.icon-facetime-video {\n  @include ie7icon('&#xf03d;');\n}\n\n\n.icon-picture {\n  @include ie7icon('&#xf03e;');\n}\n\n\n.icon-pencil {\n  @include ie7icon('&#xf040;');\n}\n\n\n.icon-map-marker {\n  @include ie7icon('&#xf041;');\n}\n\n\n.icon-adjust {\n  @include ie7icon('&#xf042;');\n}\n\n\n.icon-tint {\n  @include ie7icon('&#xf043;');\n}\n\n\n.icon-edit {\n  @include ie7icon('&#xf044;');\n}\n\n\n.icon-share {\n  @include ie7icon('&#xf045;');\n}\n\n\n.icon-check {\n  @include ie7icon('&#xf046;');\n}\n\n\n.icon-move {\n  @include ie7icon('&#xf047;');\n}\n\n\n.icon-step-backward {\n  @include ie7icon('&#xf048;');\n}\n\n\n.icon-fast-backward {\n  @include ie7icon('&#xf049;');\n}\n\n\n.icon-backward {\n  @include ie7icon('&#xf04a;');\n}\n\n\n.icon-play {\n  @include ie7icon('&#xf04b;');\n}\n\n\n.icon-pause {\n  @include ie7icon('&#xf04c;');\n}\n\n\n.icon-stop {\n  @include ie7icon('&#xf04d;');\n}\n\n\n.icon-forward {\n  @include ie7icon('&#xf04e;');\n}\n\n\n.icon-fast-forward {\n  @include ie7icon('&#xf050;');\n}\n\n\n.icon-step-forward {\n  @include ie7icon('&#xf051;');\n}\n\n\n.icon-eject {\n  @include ie7icon('&#xf052;');\n}\n\n\n.icon-chevron-left {\n  @include ie7icon('&#xf053;');\n}\n\n\n.icon-chevron-right {\n  @include ie7icon('&#xf054;');\n}\n\n\n.icon-plus-sign {\n  @include ie7icon('&#xf055;');\n}\n\n\n.icon-minus-sign {\n  @include ie7icon('&#xf056;');\n}\n\n\n.icon-remove-sign {\n  @include ie7icon('&#xf057;');\n}\n\n\n.icon-ok-sign {\n  @include ie7icon('&#xf058;');\n}\n\n\n.icon-question-sign {\n  @include ie7icon('&#xf059;');\n}\n\n\n.icon-info-sign {\n  @include ie7icon('&#xf05a;');\n}\n\n\n.icon-screenshot {\n  @include ie7icon('&#xf05b;');\n}\n\n\n.icon-remove-circle {\n  @include ie7icon('&#xf05c;');\n}\n\n\n.icon-ok-circle {\n  @include ie7icon('&#xf05d;');\n}\n\n\n.icon-ban-circle {\n  @include ie7icon('&#xf05e;');\n}\n\n\n.icon-arrow-left {\n  @include ie7icon('&#xf060;');\n}\n\n\n.icon-arrow-right {\n  @include ie7icon('&#xf061;');\n}\n\n\n.icon-arrow-up {\n  @include ie7icon('&#xf062;');\n}\n\n\n.icon-arrow-down {\n  @include ie7icon('&#xf063;');\n}\n\n\n.icon-share-alt {\n  @include ie7icon('&#xf064;');\n}\n\n.icon-mail-forward {\n  @include ie7icon('&#xf064;');\n}\n\n\n.icon-resize-full {\n  @include ie7icon('&#xf065;');\n}\n\n\n.icon-resize-small {\n  @include ie7icon('&#xf066;');\n}\n\n\n.icon-plus {\n  @include ie7icon('&#xf067;');\n}\n\n\n.icon-minus {\n  @include ie7icon('&#xf068;');\n}\n\n\n.icon-asterisk {\n  @include ie7icon('&#xf069;');\n}\n\n\n.icon-exclamation-sign {\n  @include ie7icon('&#xf06a;');\n}\n\n\n.icon-gift {\n  @include ie7icon('&#xf06b;');\n}\n\n\n.icon-leaf {\n  @include ie7icon('&#xf06c;');\n}\n\n\n.icon-fire {\n  @include ie7icon('&#xf06d;');\n}\n\n\n.icon-eye-open {\n  @include ie7icon('&#xf06e;');\n}\n\n\n.icon-eye-close {\n  @include ie7icon('&#xf070;');\n}\n\n\n.icon-warning-sign {\n  @include ie7icon('&#xf071;');\n}\n\n\n.icon-plane {\n  @include ie7icon('&#xf072;');\n}\n\n\n.icon-calendar {\n  @include ie7icon('&#xf073;');\n}\n\n\n.icon-random {\n  @include ie7icon('&#xf074;');\n}\n\n\n.icon-comment {\n  @include ie7icon('&#xf075;');\n}\n\n\n.icon-magnet {\n  @include ie7icon('&#xf076;');\n}\n\n\n.icon-chevron-up {\n  @include ie7icon('&#xf077;');\n}\n\n\n.icon-chevron-down {\n  @include ie7icon('&#xf078;');\n}\n\n\n.icon-retweet {\n  @include ie7icon('&#xf079;');\n}\n\n\n.icon-shopping-cart {\n  @include ie7icon('&#xf07a;');\n}\n\n\n.icon-folder-close {\n  @include ie7icon('&#xf07b;');\n}\n\n\n.icon-folder-open {\n  @include ie7icon('&#xf07c;');\n}\n\n\n.icon-resize-vertical {\n  @include ie7icon('&#xf07d;');\n}\n\n\n.icon-resize-horizontal {\n  @include ie7icon('&#xf07e;');\n}\n\n\n.icon-bar-chart {\n  @include ie7icon('&#xf080;');\n}\n\n\n.icon-twitter-sign {\n  @include ie7icon('&#xf081;');\n}\n\n\n.icon-facebook-sign {\n  @include ie7icon('&#xf082;');\n}\n\n\n.icon-camera-retro {\n  @include ie7icon('&#xf083;');\n}\n\n\n.icon-key {\n  @include ie7icon('&#xf084;');\n}\n\n\n.icon-cogs {\n  @include ie7icon('&#xf085;');\n}\n\n.icon-gears {\n  @include ie7icon('&#xf085;');\n}\n\n\n.icon-comments {\n  @include ie7icon('&#xf086;');\n}\n\n\n.icon-thumbs-up-alt {\n  @include ie7icon('&#xf087;');\n}\n\n\n.icon-thumbs-down-alt {\n  @include ie7icon('&#xf088;');\n}\n\n\n.icon-star-half {\n  @include ie7icon('&#xf089;');\n}\n\n\n.icon-heart-empty {\n  @include ie7icon('&#xf08a;');\n}\n\n\n.icon-signout {\n  @include ie7icon('&#xf08b;');\n}\n\n\n.icon-linkedin-sign {\n  @include ie7icon('&#xf08c;');\n}\n\n\n.icon-pushpin {\n  @include ie7icon('&#xf08d;');\n}\n\n\n.icon-external-link {\n  @include ie7icon('&#xf08e;');\n}\n\n\n.icon-signin {\n  @include ie7icon('&#xf090;');\n}\n\n\n.icon-trophy {\n  @include ie7icon('&#xf091;');\n}\n\n\n.icon-github-sign {\n  @include ie7icon('&#xf092;');\n}\n\n\n.icon-upload-alt {\n  @include ie7icon('&#xf093;');\n}\n\n\n.icon-lemon {\n  @include ie7icon('&#xf094;');\n}\n\n\n.icon-phone {\n  @include ie7icon('&#xf095;');\n}\n\n\n.icon-check-empty {\n  @include ie7icon('&#xf096;');\n}\n\n.icon-unchecked {\n  @include ie7icon('&#xf096;');\n}\n\n\n.icon-bookmark-empty {\n  @include ie7icon('&#xf097;');\n}\n\n\n.icon-phone-sign {\n  @include ie7icon('&#xf098;');\n}\n\n\n.icon-twitter {\n  @include ie7icon('&#xf099;');\n}\n\n\n.icon-facebook {\n  @include ie7icon('&#xf09a;');\n}\n\n\n.icon-github {\n  @include ie7icon('&#xf09b;');\n}\n\n\n.icon-unlock {\n  @include ie7icon('&#xf09c;');\n}\n\n\n.icon-credit-card {\n  @include ie7icon('&#xf09d;');\n}\n\n\n.icon-rss {\n  @include ie7icon('&#xf09e;');\n}\n\n\n.icon-hdd {\n  @include ie7icon('&#xf0a0;');\n}\n\n\n.icon-bullhorn {\n  @include ie7icon('&#xf0a1;');\n}\n\n\n.icon-bell {\n  @include ie7icon('&#xf0a2;');\n}\n\n\n.icon-certificate {\n  @include ie7icon('&#xf0a3;');\n}\n\n\n.icon-hand-right {\n  @include ie7icon('&#xf0a4;');\n}\n\n\n.icon-hand-left {\n  @include ie7icon('&#xf0a5;');\n}\n\n\n.icon-hand-up {\n  @include ie7icon('&#xf0a6;');\n}\n\n\n.icon-hand-down {\n  @include ie7icon('&#xf0a7;');\n}\n\n\n.icon-circle-arrow-left {\n  @include ie7icon('&#xf0a8;');\n}\n\n\n.icon-circle-arrow-right {\n  @include ie7icon('&#xf0a9;');\n}\n\n\n.icon-circle-arrow-up {\n  @include ie7icon('&#xf0aa;');\n}\n\n\n.icon-circle-arrow-down {\n  @include ie7icon('&#xf0ab;');\n}\n\n\n.icon-globe {\n  @include ie7icon('&#xf0ac;');\n}\n\n\n.icon-wrench {\n  @include ie7icon('&#xf0ad;');\n}\n\n\n.icon-tasks {\n  @include ie7icon('&#xf0ae;');\n}\n\n\n.icon-filter {\n  @include ie7icon('&#xf0b0;');\n}\n\n\n.icon-briefcase {\n  @include ie7icon('&#xf0b1;');\n}\n\n\n.icon-fullscreen {\n  @include ie7icon('&#xf0b2;');\n}\n\n\n.icon-group {\n  @include ie7icon('&#xf0c0;');\n}\n\n\n.icon-link {\n  @include ie7icon('&#xf0c1;');\n}\n\n\n.icon-cloud {\n  @include ie7icon('&#xf0c2;');\n}\n\n\n.icon-beaker {\n  @include ie7icon('&#xf0c3;');\n}\n\n\n.icon-cut {\n  @include ie7icon('&#xf0c4;');\n}\n\n\n.icon-copy {\n  @include ie7icon('&#xf0c5;');\n}\n\n\n.icon-paper-clip {\n  @include ie7icon('&#xf0c6;');\n}\n\n.icon-paperclip {\n  @include ie7icon('&#xf0c6;');\n}\n\n\n.icon-save {\n  @include ie7icon('&#xf0c7;');\n}\n\n\n.icon-sign-blank {\n  @include ie7icon('&#xf0c8;');\n}\n\n\n.icon-reorder {\n  @include ie7icon('&#xf0c9;');\n}\n\n\n.icon-list-ul {\n  @include ie7icon('&#xf0ca;');\n}\n\n\n.icon-list-ol {\n  @include ie7icon('&#xf0cb;');\n}\n\n\n.icon-strikethrough {\n  @include ie7icon('&#xf0cc;');\n}\n\n\n.icon-underline {\n  @include ie7icon('&#xf0cd;');\n}\n\n\n.icon-table {\n  @include ie7icon('&#xf0ce;');\n}\n\n\n.icon-magic {\n  @include ie7icon('&#xf0d0;');\n}\n\n\n.icon-truck {\n  @include ie7icon('&#xf0d1;');\n}\n\n\n.icon-pinterest {\n  @include ie7icon('&#xf0d2;');\n}\n\n\n.icon-pinterest-sign {\n  @include ie7icon('&#xf0d3;');\n}\n\n\n.icon-google-plus-sign {\n  @include ie7icon('&#xf0d4;');\n}\n\n\n.icon-google-plus {\n  @include ie7icon('&#xf0d5;');\n}\n\n\n.icon-money {\n  @include ie7icon('&#xf0d6;');\n}\n\n\n.icon-caret-down {\n  @include ie7icon('&#xf0d7;');\n}\n\n\n.icon-caret-up {\n  @include ie7icon('&#xf0d8;');\n}\n\n\n.icon-caret-left {\n  @include ie7icon('&#xf0d9;');\n}\n\n\n.icon-caret-right {\n  @include ie7icon('&#xf0da;');\n}\n\n\n.icon-columns {\n  @include ie7icon('&#xf0db;');\n}\n\n\n.icon-sort {\n  @include ie7icon('&#xf0dc;');\n}\n\n\n.icon-sort-down {\n  @include ie7icon('&#xf0dd;');\n}\n\n\n.icon-sort-up {\n  @include ie7icon('&#xf0de;');\n}\n\n\n.icon-envelope {\n  @include ie7icon('&#xf0e0;');\n}\n\n\n.icon-linkedin {\n  @include ie7icon('&#xf0e1;');\n}\n\n\n.icon-undo {\n  @include ie7icon('&#xf0e2;');\n}\n\n.icon-rotate-left {\n  @include ie7icon('&#xf0e2;');\n}\n\n\n.icon-legal {\n  @include ie7icon('&#xf0e3;');\n}\n\n\n.icon-dashboard {\n  @include ie7icon('&#xf0e4;');\n}\n\n\n.icon-comment-alt {\n  @include ie7icon('&#xf0e5;');\n}\n\n\n.icon-comments-alt {\n  @include ie7icon('&#xf0e6;');\n}\n\n\n.icon-bolt {\n  @include ie7icon('&#xf0e7;');\n}\n\n\n.icon-sitemap {\n  @include ie7icon('&#xf0e8;');\n}\n\n\n.icon-umbrella {\n  @include ie7icon('&#xf0e9;');\n}\n\n\n.icon-paste {\n  @include ie7icon('&#xf0ea;');\n}\n\n\n.icon-lightbulb {\n  @include ie7icon('&#xf0eb;');\n}\n\n\n.icon-exchange {\n  @include ie7icon('&#xf0ec;');\n}\n\n\n.icon-cloud-download {\n  @include ie7icon('&#xf0ed;');\n}\n\n\n.icon-cloud-upload {\n  @include ie7icon('&#xf0ee;');\n}\n\n\n.icon-user-md {\n  @include ie7icon('&#xf0f0;');\n}\n\n\n.icon-stethoscope {\n  @include ie7icon('&#xf0f1;');\n}\n\n\n.icon-suitcase {\n  @include ie7icon('&#xf0f2;');\n}\n\n\n.icon-bell-alt {\n  @include ie7icon('&#xf0f3;');\n}\n\n\n.icon-coffee {\n  @include ie7icon('&#xf0f4;');\n}\n\n\n.icon-food {\n  @include ie7icon('&#xf0f5;');\n}\n\n\n.icon-file-text-alt {\n  @include ie7icon('&#xf0f6;');\n}\n\n\n.icon-building {\n  @include ie7icon('&#xf0f7;');\n}\n\n\n.icon-hospital {\n  @include ie7icon('&#xf0f8;');\n}\n\n\n.icon-ambulance {\n  @include ie7icon('&#xf0f9;');\n}\n\n\n.icon-medkit {\n  @include ie7icon('&#xf0fa;');\n}\n\n\n.icon-fighter-jet {\n  @include ie7icon('&#xf0fb;');\n}\n\n\n.icon-beer {\n  @include ie7icon('&#xf0fc;');\n}\n\n\n.icon-h-sign {\n  @include ie7icon('&#xf0fd;');\n}\n\n\n.icon-plus-sign-alt {\n  @include ie7icon('&#xf0fe;');\n}\n\n\n.icon-double-angle-left {\n  @include ie7icon('&#xf100;');\n}\n\n\n.icon-double-angle-right {\n  @include ie7icon('&#xf101;');\n}\n\n\n.icon-double-angle-up {\n  @include ie7icon('&#xf102;');\n}\n\n\n.icon-double-angle-down {\n  @include ie7icon('&#xf103;');\n}\n\n\n.icon-angle-left {\n  @include ie7icon('&#xf104;');\n}\n\n\n.icon-angle-right {\n  @include ie7icon('&#xf105;');\n}\n\n\n.icon-angle-up {\n  @include ie7icon('&#xf106;');\n}\n\n\n.icon-angle-down {\n  @include ie7icon('&#xf107;');\n}\n\n\n.icon-desktop {\n  @include ie7icon('&#xf108;');\n}\n\n\n.icon-laptop {\n  @include ie7icon('&#xf109;');\n}\n\n\n.icon-tablet {\n  @include ie7icon('&#xf10a;');\n}\n\n\n.icon-mobile-phone {\n  @include ie7icon('&#xf10b;');\n}\n\n\n.icon-circle-blank {\n  @include ie7icon('&#xf10c;');\n}\n\n\n.icon-quote-left {\n  @include ie7icon('&#xf10d;');\n}\n\n\n.icon-quote-right {\n  @include ie7icon('&#xf10e;');\n}\n\n\n.icon-spinner {\n  @include ie7icon('&#xf110;');\n}\n\n\n.icon-circle {\n  @include ie7icon('&#xf111;');\n}\n\n\n.icon-reply {\n  @include ie7icon('&#xf112;');\n}\n\n.icon-mail-reply {\n  @include ie7icon('&#xf112;');\n}\n\n\n.icon-github-alt {\n  @include ie7icon('&#xf113;');\n}\n\n\n.icon-folder-close-alt {\n  @include ie7icon('&#xf114;');\n}\n\n\n.icon-folder-open-alt {\n  @include ie7icon('&#xf115;');\n}\n\n\n.icon-expand-alt {\n  @include ie7icon('&#xf116;');\n}\n\n\n.icon-collapse-alt {\n  @include ie7icon('&#xf117;');\n}\n\n\n.icon-smile {\n  @include ie7icon('&#xf118;');\n}\n\n\n.icon-frown {\n  @include ie7icon('&#xf119;');\n}\n\n\n.icon-meh {\n  @include ie7icon('&#xf11a;');\n}\n\n\n.icon-gamepad {\n  @include ie7icon('&#xf11b;');\n}\n\n\n.icon-keyboard {\n  @include ie7icon('&#xf11c;');\n}\n\n\n.icon-flag-alt {\n  @include ie7icon('&#xf11d;');\n}\n\n\n.icon-flag-checkered {\n  @include ie7icon('&#xf11e;');\n}\n\n\n.icon-terminal {\n  @include ie7icon('&#xf120;');\n}\n\n\n.icon-code {\n  @include ie7icon('&#xf121;');\n}\n\n\n.icon-reply-all {\n  @include ie7icon('&#xf122;');\n}\n\n\n.icon-mail-reply-all {\n  @include ie7icon('&#xf122;');\n}\n\n\n.icon-star-half-empty {\n  @include ie7icon('&#xf123;');\n}\n\n.icon-star-half-full {\n  @include ie7icon('&#xf123;');\n}\n\n\n.icon-location-arrow {\n  @include ie7icon('&#xf124;');\n}\n\n\n.icon-crop {\n  @include ie7icon('&#xf125;');\n}\n\n\n.icon-code-fork {\n  @include ie7icon('&#xf126;');\n}\n\n\n.icon-unlink {\n  @include ie7icon('&#xf127;');\n}\n\n\n.icon-question {\n  @include ie7icon('&#xf128;');\n}\n\n\n.icon-info {\n  @include ie7icon('&#xf129;');\n}\n\n\n.icon-exclamation {\n  @include ie7icon('&#xf12a;');\n}\n\n\n.icon-superscript {\n  @include ie7icon('&#xf12b;');\n}\n\n\n.icon-subscript {\n  @include ie7icon('&#xf12c;');\n}\n\n\n.icon-eraser {\n  @include ie7icon('&#xf12d;');\n}\n\n\n.icon-puzzle-piece {\n  @include ie7icon('&#xf12e;');\n}\n\n\n.icon-microphone {\n  @include ie7icon('&#xf130;');\n}\n\n\n.icon-microphone-off {\n  @include ie7icon('&#xf131;');\n}\n\n\n.icon-shield {\n  @include ie7icon('&#xf132;');\n}\n\n\n.icon-calendar-empty {\n  @include ie7icon('&#xf133;');\n}\n\n\n.icon-fire-extinguisher {\n  @include ie7icon('&#xf134;');\n}\n\n\n.icon-rocket {\n  @include ie7icon('&#xf135;');\n}\n\n\n.icon-maxcdn {\n  @include ie7icon('&#xf136;');\n}\n\n\n.icon-chevron-sign-left {\n  @include ie7icon('&#xf137;');\n}\n\n\n.icon-chevron-sign-right {\n  @include ie7icon('&#xf138;');\n}\n\n\n.icon-chevron-sign-up {\n  @include ie7icon('&#xf139;');\n}\n\n\n.icon-chevron-sign-down {\n  @include ie7icon('&#xf13a;');\n}\n\n\n.icon-html5 {\n  @include ie7icon('&#xf13b;');\n}\n\n\n.icon-css3 {\n  @include ie7icon('&#xf13c;');\n}\n\n\n.icon-anchor {\n  @include ie7icon('&#xf13d;');\n}\n\n\n.icon-unlock-alt {\n  @include ie7icon('&#xf13e;');\n}\n\n\n.icon-bullseye {\n  @include ie7icon('&#xf140;');\n}\n\n\n.icon-ellipsis-horizontal {\n  @include ie7icon('&#xf141;');\n}\n\n\n.icon-ellipsis-vertical {\n  @include ie7icon('&#xf142;');\n}\n\n\n.icon-rss-sign {\n  @include ie7icon('&#xf143;');\n}\n\n\n.icon-play-sign {\n  @include ie7icon('&#xf144;');\n}\n\n\n.icon-ticket {\n  @include ie7icon('&#xf145;');\n}\n\n\n.icon-minus-sign-alt {\n  @include ie7icon('&#xf146;');\n}\n\n\n.icon-check-minus {\n  @include ie7icon('&#xf147;');\n}\n\n\n.icon-level-up {\n  @include ie7icon('&#xf148;');\n}\n\n\n.icon-level-down {\n  @include ie7icon('&#xf149;');\n}\n\n\n.icon-check-sign {\n  @include ie7icon('&#xf14a;');\n}\n\n\n.icon-edit-sign {\n  @include ie7icon('&#xf14b;');\n}\n\n\n.icon-external-link-sign {\n  @include ie7icon('&#xf14c;');\n}\n\n\n.icon-share-sign {\n  @include ie7icon('&#xf14d;');\n}\n\n\n.icon-compass {\n  @include ie7icon('&#xf14e;');\n}\n\n\n.icon-collapse {\n  @include ie7icon('&#xf150;');\n}\n\n\n.icon-collapse-top {\n  @include ie7icon('&#xf151;');\n}\n\n\n.icon-expand {\n  @include ie7icon('&#xf152;');\n}\n\n\n.icon-eur {\n  @include ie7icon('&#xf153;');\n}\n\n.icon-euro {\n  @include ie7icon('&#xf153;');\n}\n\n\n.icon-gbp {\n  @include ie7icon('&#xf154;');\n}\n\n\n.icon-usd {\n  @include ie7icon('&#xf155;');\n}\n\n.icon-dollar {\n  @include ie7icon('&#xf155;');\n}\n\n\n.icon-inr {\n  @include ie7icon('&#xf156;');\n}\n\n.icon-rupee {\n  @include ie7icon('&#xf156;');\n}\n\n\n.icon-jpy {\n  @include ie7icon('&#xf157;');\n}\n\n.icon-yen {\n  @include ie7icon('&#xf157;');\n}\n\n\n.icon-cny {\n  @include ie7icon('&#xf158;');\n}\n\n.icon-renminbi {\n  @include ie7icon('&#xf158;');\n}\n\n\n.icon-krw {\n  @include ie7icon('&#xf159;');\n}\n\n.icon-won {\n  @include ie7icon('&#xf159;');\n}\n\n\n.icon-btc {\n  @include ie7icon('&#xf15a;');\n}\n\n.icon-bitcoin {\n  @include ie7icon('&#xf15a;');\n}\n\n\n.icon-file {\n  @include ie7icon('&#xf15b;');\n}\n\n\n.icon-file-text {\n  @include ie7icon('&#xf15c;');\n}\n\n\n.icon-sort-by-alphabet {\n  @include ie7icon('&#xf15d;');\n}\n\n\n.icon-sort-by-alphabet-alt {\n  @include ie7icon('&#xf15e;');\n}\n\n\n.icon-sort-by-attributes {\n  @include ie7icon('&#xf160;');\n}\n\n\n.icon-sort-by-attributes-alt {\n  @include ie7icon('&#xf161;');\n}\n\n\n.icon-sort-by-order {\n  @include ie7icon('&#xf162;');\n}\n\n\n.icon-sort-by-order-alt {\n  @include ie7icon('&#xf163;');\n}\n\n\n.icon-thumbs-up {\n  @include ie7icon('&#xf164;');\n}\n\n\n.icon-thumbs-down {\n  @include ie7icon('&#xf165;');\n}\n\n\n.icon-youtube-sign {\n  @include ie7icon('&#xf166;');\n}\n\n\n.icon-youtube {\n  @include ie7icon('&#xf167;');\n}\n\n\n.icon-xing {\n  @include ie7icon('&#xf168;');\n}\n\n\n.icon-xing-sign {\n  @include ie7icon('&#xf169;');\n}\n\n\n.icon-youtube-play {\n  @include ie7icon('&#xf16a;');\n}\n\n\n.icon-dropbox {\n  @include ie7icon('&#xf16b;');\n}\n\n\n.icon-stackexchange {\n  @include ie7icon('&#xf16c;');\n}\n\n\n.icon-instagram {\n  @include ie7icon('&#xf16d;');\n}\n\n\n.icon-flickr {\n  @include ie7icon('&#xf16e;');\n}\n\n\n.icon-adn {\n  @include ie7icon('&#xf170;');\n}\n\n\n.icon-bitbucket {\n  @include ie7icon('&#xf171;');\n}\n\n\n.icon-bitbucket-sign {\n  @include ie7icon('&#xf172;');\n}\n\n\n.icon-tumblr {\n  @include ie7icon('&#xf173;');\n}\n\n\n.icon-tumblr-sign {\n  @include ie7icon('&#xf174;');\n}\n\n\n.icon-long-arrow-down {\n  @include ie7icon('&#xf175;');\n}\n\n\n.icon-long-arrow-up {\n  @include ie7icon('&#xf176;');\n}\n\n\n.icon-long-arrow-left {\n  @include ie7icon('&#xf177;');\n}\n\n\n.icon-long-arrow-right {\n  @include ie7icon('&#xf178;');\n}\n\n\n.icon-apple {\n  @include ie7icon('&#xf179;');\n}\n\n\n.icon-windows {\n  @include ie7icon('&#xf17a;');\n}\n\n\n.icon-android {\n  @include ie7icon('&#xf17b;');\n}\n\n\n.icon-linux {\n  @include ie7icon('&#xf17c;');\n}\n\n\n.icon-dribbble {\n  @include ie7icon('&#xf17d;');\n}\n\n\n.icon-skype {\n  @include ie7icon('&#xf17e;');\n}\n\n\n.icon-foursquare {\n  @include ie7icon('&#xf180;');\n}\n\n\n.icon-trello {\n  @include ie7icon('&#xf181;');\n}\n\n\n.icon-female {\n  @include ie7icon('&#xf182;');\n}\n\n\n.icon-male {\n  @include ie7icon('&#xf183;');\n}\n\n\n.icon-gittip {\n  @include ie7icon('&#xf184;');\n}\n\n\n.icon-sun {\n  @include ie7icon('&#xf185;');\n}\n\n\n.icon-moon {\n  @include ie7icon('&#xf186;');\n}\n\n\n.icon-archive {\n  @include ie7icon('&#xf187;');\n}\n\n\n.icon-bug {\n  @include ie7icon('&#xf188;');\n}\n\n\n.icon-vk {\n  @include ie7icon('&#xf189;');\n}\n\n\n.icon-weibo {\n  @include ie7icon('&#xf18a;');\n}\n\n\n.icon-renren {\n  @include ie7icon('&#xf18b;');\n}\n\n\n"
  },
  {
    "path": "automatic/static/css/font-awesome/scss/font-awesome.scss",
    "content": "/*!\n *  Font Awesome 3.2.1\n *  the iconic font designed for Bootstrap\n *  ------------------------------------------------------------------------------\n *  The full suite of pictographic icons, examples, and documentation can be\n *  found at http://fontawesome.io.  Stay up to date on Twitter at\n *  http://twitter.com/fontawesome.\n *\n *  License\n *  ------------------------------------------------------------------------------\n *  - The Font Awesome font is licensed under SIL OFL 1.1 -\n *    http://scripts.sil.org/OFL\n *  - Font Awesome CSS, LESS, and SASS files are licensed under MIT License -\n *    http://opensource.org/licenses/mit-license.html\n *  - Font Awesome documentation licensed under CC BY 3.0 -\n *    http://creativecommons.org/licenses/by/3.0/\n *  - Attribution is no longer required in Font Awesome 3.0, but much appreciated:\n *    \"Font Awesome by Dave Gandy - http://fontawesome.io\"\n *\n *  Author - Dave Gandy\n *  ------------------------------------------------------------------------------\n *  Email: dave@fontawesome.io\n *  Twitter: http://twitter.com/byscuits\n *  Work: Lead Product Designer @ Kyruus - http://kyruus.com\n */\n\n@import \"variables\";\n@import \"mixins\";\n@import \"path\";\n@import \"core\";\n@import \"bootstrap\";\n@import \"extras\";\n@import \"icons\";\n"
  },
  {
    "path": "automatic/static/css/font-awesome.css",
    "content": "/*!\n *  Font Awesome 3.2.1\n *  the iconic font designed for Bootstrap\n *  ------------------------------------------------------------------------------\n *  The full suite of pictographic icons, examples, and documentation can be\n *  found at http://fontawesome.io.  Stay up to date on Twitter at\n *  http://twitter.com/fontawesome.\n *\n *  License\n *  ------------------------------------------------------------------------------\n *  - The Font Awesome font is licensed under SIL OFL 1.1 -\n *    http://scripts.sil.org/OFL\n *  - Font Awesome CSS, LESS, and SASS files are licensed under MIT License -\n *    http://opensource.org/licenses/mit-license.html\n *  - Font Awesome documentation licensed under CC BY 3.0 -\n *    http://creativecommons.org/licenses/by/3.0/\n *  - Attribution is no longer required in Font Awesome 3.0, but much appreciated:\n *    \"Font Awesome by Dave Gandy - http://fontawesome.io\"\n *\n *  Author - Dave Gandy\n *  ------------------------------------------------------------------------------\n *  Email: dave@fontawesome.io\n *  Twitter: http://twitter.com/byscuits\n *  Work: Lead Product Designer @ Kyruus - http://kyruus.com\n */\n/* FONT PATH\n * -------------------------- */\n@font-face {\n  font-family: 'FontAwesome';\n  src: url('../font/fontawesome-webfont.eot?v=3.2.1');\n  src: url('../font/fontawesome-webfont.eot?#iefix&v=3.2.1') format('embedded-opentype'), url('../font/fontawesome-webfont.woff?v=3.2.1') format('woff'), url('../font/fontawesome-webfont.ttf?v=3.2.1') format('truetype'), url('../font/fontawesome-webfont.svg#fontawesomeregular?v=3.2.1') format('svg');\n  font-weight: normal;\n  font-style: normal;\n}\n/* FONT AWESOME CORE\n * -------------------------- */\n[class^=\"icon-\"],\n[class*=\" icon-\"] {\n  font-family: FontAwesome;\n  font-weight: normal;\n  font-style: normal;\n  text-decoration: inherit;\n  -webkit-font-smoothing: antialiased;\n  *margin-right: .3em;\n}\n[class^=\"icon-\"]:before,\n[class*=\" icon-\"]:before {\n  text-decoration: inherit;\n  display: inline-block;\n  speak: none;\n}\n/* makes the font 33% larger relative to the icon container */\n.icon-large:before {\n  vertical-align: -10%;\n  font-size: 1.3333333333333333em;\n}\n/* makes sure icons active on rollover in links */\na [class^=\"icon-\"],\na [class*=\" icon-\"] {\n  display: inline;\n}\n/* increased font size for icon-large */\n[class^=\"icon-\"].icon-fixed-width,\n[class*=\" icon-\"].icon-fixed-width {\n  display: inline-block;\n  width: 1.1428571428571428em;\n  text-align: right;\n  padding-right: 0.2857142857142857em;\n}\n[class^=\"icon-\"].icon-fixed-width.icon-large,\n[class*=\" icon-\"].icon-fixed-width.icon-large {\n  width: 1.4285714285714286em;\n}\n.icons-ul {\n  margin-left: 2.142857142857143em;\n  list-style-type: none;\n}\n.icons-ul > li {\n  position: relative;\n}\n.icons-ul .icon-li {\n  position: absolute;\n  left: -2.142857142857143em;\n  width: 2.142857142857143em;\n  text-align: center;\n  line-height: inherit;\n}\n[class^=\"icon-\"].hide,\n[class*=\" icon-\"].hide {\n  display: none;\n}\n.icon-muted {\n  color: #eeeeee;\n}\n.icon-light {\n  color: #ffffff;\n}\n.icon-dark {\n  color: #333333;\n}\n.icon-border {\n  border: solid 1px #eeeeee;\n  padding: .2em .25em .15em;\n  -webkit-border-radius: 3px;\n  -moz-border-radius: 3px;\n  border-radius: 3px;\n}\n.icon-2x {\n  font-size: 2em;\n}\n.icon-2x.icon-border {\n  border-width: 2px;\n  -webkit-border-radius: 4px;\n  -moz-border-radius: 4px;\n  border-radius: 4px;\n}\n.icon-3x {\n  font-size: 3em;\n}\n.icon-3x.icon-border {\n  border-width: 3px;\n  -webkit-border-radius: 5px;\n  -moz-border-radius: 5px;\n  border-radius: 5px;\n}\n.icon-4x {\n  font-size: 4em;\n}\n.icon-4x.icon-border {\n  border-width: 4px;\n  -webkit-border-radius: 6px;\n  -moz-border-radius: 6px;\n  border-radius: 6px;\n}\n.icon-5x {\n  font-size: 5em;\n}\n.icon-5x.icon-border {\n  border-width: 5px;\n  -webkit-border-radius: 7px;\n  -moz-border-radius: 7px;\n  border-radius: 7px;\n}\n.pull-right {\n  float: right;\n}\n.pull-left {\n  float: left;\n}\n[class^=\"icon-\"].pull-left,\n[class*=\" icon-\"].pull-left {\n  margin-right: .3em;\n}\n[class^=\"icon-\"].pull-right,\n[class*=\" icon-\"].pull-right {\n  margin-left: .3em;\n}\n/* BOOTSTRAP SPECIFIC CLASSES\n * -------------------------- */\n/* Bootstrap 2.0 sprites.less reset */\n[class^=\"icon-\"],\n[class*=\" icon-\"] {\n  display: inline;\n  width: auto;\n  height: auto;\n  line-height: normal;\n  vertical-align: baseline;\n  background-image: none;\n  background-position: 0% 0%;\n  background-repeat: repeat;\n  margin-top: 0;\n}\n/* more sprites.less reset */\n.icon-white,\n.nav-pills > .active > a > [class^=\"icon-\"],\n.nav-pills > .active > a > [class*=\" icon-\"],\n.nav-list > .active > a > [class^=\"icon-\"],\n.nav-list > .active > a > [class*=\" icon-\"],\n.navbar-inverse .nav > .active > a > [class^=\"icon-\"],\n.navbar-inverse .nav > .active > a > [class*=\" icon-\"],\n.dropdown-menu > li > a:hover > [class^=\"icon-\"],\n.dropdown-menu > li > a:hover > [class*=\" icon-\"],\n.dropdown-menu > .active > a > [class^=\"icon-\"],\n.dropdown-menu > .active > a > [class*=\" icon-\"],\n.dropdown-submenu:hover > a > [class^=\"icon-\"],\n.dropdown-submenu:hover > a > [class*=\" icon-\"] {\n  background-image: none;\n}\n/* keeps Bootstrap styles with and without icons the same */\n.btn [class^=\"icon-\"].icon-large,\n.nav [class^=\"icon-\"].icon-large,\n.btn [class*=\" icon-\"].icon-large,\n.nav [class*=\" icon-\"].icon-large {\n  line-height: .9em;\n}\n.btn [class^=\"icon-\"].icon-spin,\n.nav [class^=\"icon-\"].icon-spin,\n.btn [class*=\" icon-\"].icon-spin,\n.nav [class*=\" icon-\"].icon-spin {\n  display: inline-block;\n}\n.nav-tabs [class^=\"icon-\"],\n.nav-pills [class^=\"icon-\"],\n.nav-tabs [class*=\" icon-\"],\n.nav-pills [class*=\" icon-\"],\n.nav-tabs [class^=\"icon-\"].icon-large,\n.nav-pills [class^=\"icon-\"].icon-large,\n.nav-tabs [class*=\" icon-\"].icon-large,\n.nav-pills [class*=\" icon-\"].icon-large {\n  line-height: .9em;\n}\n.btn [class^=\"icon-\"].pull-left.icon-2x,\n.btn [class*=\" icon-\"].pull-left.icon-2x,\n.btn [class^=\"icon-\"].pull-right.icon-2x,\n.btn [class*=\" icon-\"].pull-right.icon-2x {\n  margin-top: .18em;\n}\n.btn [class^=\"icon-\"].icon-spin.icon-large,\n.btn [class*=\" icon-\"].icon-spin.icon-large {\n  line-height: .8em;\n}\n.btn.btn-small [class^=\"icon-\"].pull-left.icon-2x,\n.btn.btn-small [class*=\" icon-\"].pull-left.icon-2x,\n.btn.btn-small [class^=\"icon-\"].pull-right.icon-2x,\n.btn.btn-small [class*=\" icon-\"].pull-right.icon-2x {\n  margin-top: .25em;\n}\n.btn.btn-large [class^=\"icon-\"],\n.btn.btn-large [class*=\" icon-\"] {\n  margin-top: 0;\n}\n.btn.btn-large [class^=\"icon-\"].pull-left.icon-2x,\n.btn.btn-large [class*=\" icon-\"].pull-left.icon-2x,\n.btn.btn-large [class^=\"icon-\"].pull-right.icon-2x,\n.btn.btn-large [class*=\" icon-\"].pull-right.icon-2x {\n  margin-top: .05em;\n}\n.btn.btn-large [class^=\"icon-\"].pull-left.icon-2x,\n.btn.btn-large [class*=\" icon-\"].pull-left.icon-2x {\n  margin-right: .2em;\n}\n.btn.btn-large [class^=\"icon-\"].pull-right.icon-2x,\n.btn.btn-large [class*=\" icon-\"].pull-right.icon-2x {\n  margin-left: .2em;\n}\n/* Fixes alignment in nav lists */\n.nav-list [class^=\"icon-\"],\n.nav-list [class*=\" icon-\"] {\n  line-height: inherit;\n}\n/* EXTRAS\n * -------------------------- */\n/* Stacked and layered icon */\n.icon-stack {\n  position: relative;\n  display: inline-block;\n  width: 2em;\n  height: 2em;\n  line-height: 2em;\n  vertical-align: -35%;\n}\n.icon-stack [class^=\"icon-\"],\n.icon-stack [class*=\" icon-\"] {\n  display: block;\n  text-align: center;\n  position: absolute;\n  width: 100%;\n  height: 100%;\n  font-size: 1em;\n  line-height: inherit;\n  *line-height: 2em;\n}\n.icon-stack .icon-stack-base {\n  font-size: 2em;\n  *line-height: 1em;\n}\n/* Animated rotating icon */\n.icon-spin {\n  display: inline-block;\n  -moz-animation: spin 2s infinite linear;\n  -o-animation: spin 2s infinite linear;\n  -webkit-animation: spin 2s infinite linear;\n  animation: spin 2s infinite linear;\n}\n/* Prevent stack and spinners from being taken inline when inside a link */\na .icon-stack,\na .icon-spin {\n  display: inline-block;\n  text-decoration: none;\n}\n@-moz-keyframes spin {\n  0% {\n    -moz-transform: rotate(0deg);\n  }\n  100% {\n    -moz-transform: rotate(359deg);\n  }\n}\n@-webkit-keyframes spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n  }\n  100% {\n    -webkit-transform: rotate(359deg);\n  }\n}\n@-o-keyframes spin {\n  0% {\n    -o-transform: rotate(0deg);\n  }\n  100% {\n    -o-transform: rotate(359deg);\n  }\n}\n@-ms-keyframes spin {\n  0% {\n    -ms-transform: rotate(0deg);\n  }\n  100% {\n    -ms-transform: rotate(359deg);\n  }\n}\n@keyframes spin {\n  0% {\n    transform: rotate(0deg);\n  }\n  100% {\n    transform: rotate(359deg);\n  }\n}\n/* Icon rotations and mirroring */\n.icon-rotate-90:before {\n  -webkit-transform: rotate(90deg);\n  -moz-transform: rotate(90deg);\n  -ms-transform: rotate(90deg);\n  -o-transform: rotate(90deg);\n  transform: rotate(90deg);\n  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1);\n}\n.icon-rotate-180:before {\n  -webkit-transform: rotate(180deg);\n  -moz-transform: rotate(180deg);\n  -ms-transform: rotate(180deg);\n  -o-transform: rotate(180deg);\n  transform: rotate(180deg);\n  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2);\n}\n.icon-rotate-270:before {\n  -webkit-transform: rotate(270deg);\n  -moz-transform: rotate(270deg);\n  -ms-transform: rotate(270deg);\n  -o-transform: rotate(270deg);\n  transform: rotate(270deg);\n  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);\n}\n.icon-flip-horizontal:before {\n  -webkit-transform: scale(-1, 1);\n  -moz-transform: scale(-1, 1);\n  -ms-transform: scale(-1, 1);\n  -o-transform: scale(-1, 1);\n  transform: scale(-1, 1);\n}\n.icon-flip-vertical:before {\n  -webkit-transform: scale(1, -1);\n  -moz-transform: scale(1, -1);\n  -ms-transform: scale(1, -1);\n  -o-transform: scale(1, -1);\n  transform: scale(1, -1);\n}\n/* ensure rotation occurs inside anchor tags */\na .icon-rotate-90:before,\na .icon-rotate-180:before,\na .icon-rotate-270:before,\na .icon-flip-horizontal:before,\na .icon-flip-vertical:before {\n  display: inline-block;\n}\n/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen\n   readers do not read off random characters that represent icons */\n.icon-glass:before {\n  content: \"\\f000\";\n}\n.icon-music:before {\n  content: \"\\f001\";\n}\n.icon-search:before {\n  content: \"\\f002\";\n}\n.icon-envelope-alt:before {\n  content: \"\\f003\";\n}\n.icon-heart:before {\n  content: \"\\f004\";\n}\n.icon-star:before {\n  content: \"\\f005\";\n}\n.icon-star-empty:before {\n  content: \"\\f006\";\n}\n.icon-user:before {\n  content: \"\\f007\";\n}\n.icon-film:before {\n  content: \"\\f008\";\n}\n.icon-th-large:before {\n  content: \"\\f009\";\n}\n.icon-th:before {\n  content: \"\\f00a\";\n}\n.icon-th-list:before {\n  content: \"\\f00b\";\n}\n.icon-ok:before {\n  content: \"\\f00c\";\n}\n.icon-remove:before {\n  content: \"\\f00d\";\n}\n.icon-zoom-in:before {\n  content: \"\\f00e\";\n}\n.icon-zoom-out:before {\n  content: \"\\f010\";\n}\n.icon-power-off:before,\n.icon-off:before {\n  content: \"\\f011\";\n}\n.icon-signal:before {\n  content: \"\\f012\";\n}\n.icon-gear:before,\n.icon-cog:before {\n  content: \"\\f013\";\n}\n.icon-trash:before {\n  content: \"\\f014\";\n}\n.icon-home:before {\n  content: \"\\f015\";\n}\n.icon-file-alt:before {\n  content: \"\\f016\";\n}\n.icon-time:before {\n  content: \"\\f017\";\n}\n.icon-road:before {\n  content: \"\\f018\";\n}\n.icon-download-alt:before {\n  content: \"\\f019\";\n}\n.icon-download:before {\n  content: \"\\f01a\";\n}\n.icon-upload:before {\n  content: \"\\f01b\";\n}\n.icon-inbox:before {\n  content: \"\\f01c\";\n}\n.icon-play-circle:before {\n  content: \"\\f01d\";\n}\n.icon-rotate-right:before,\n.icon-repeat:before {\n  content: \"\\f01e\";\n}\n.icon-refresh:before {\n  content: \"\\f021\";\n}\n.icon-list-alt:before {\n  content: \"\\f022\";\n}\n.icon-lock:before {\n  content: \"\\f023\";\n}\n.icon-flag:before {\n  content: \"\\f024\";\n}\n.icon-headphones:before {\n  content: \"\\f025\";\n}\n.icon-volume-off:before {\n  content: \"\\f026\";\n}\n.icon-volume-down:before {\n  content: \"\\f027\";\n}\n.icon-volume-up:before {\n  content: \"\\f028\";\n}\n.icon-qrcode:before {\n  content: \"\\f029\";\n}\n.icon-barcode:before {\n  content: \"\\f02a\";\n}\n.icon-tag:before {\n  content: \"\\f02b\";\n}\n.icon-tags:before {\n  content: \"\\f02c\";\n}\n.icon-book:before {\n  content: \"\\f02d\";\n}\n.icon-bookmark:before {\n  content: \"\\f02e\";\n}\n.icon-print:before {\n  content: \"\\f02f\";\n}\n.icon-camera:before {\n  content: \"\\f030\";\n}\n.icon-font:before {\n  content: \"\\f031\";\n}\n.icon-bold:before {\n  content: \"\\f032\";\n}\n.icon-italic:before {\n  content: \"\\f033\";\n}\n.icon-text-height:before {\n  content: \"\\f034\";\n}\n.icon-text-width:before {\n  content: \"\\f035\";\n}\n.icon-align-left:before {\n  content: \"\\f036\";\n}\n.icon-align-center:before {\n  content: \"\\f037\";\n}\n.icon-align-right:before {\n  content: \"\\f038\";\n}\n.icon-align-justify:before {\n  content: \"\\f039\";\n}\n.icon-list:before {\n  content: \"\\f03a\";\n}\n.icon-indent-left:before {\n  content: \"\\f03b\";\n}\n.icon-indent-right:before {\n  content: \"\\f03c\";\n}\n.icon-facetime-video:before {\n  content: \"\\f03d\";\n}\n.icon-picture:before {\n  content: \"\\f03e\";\n}\n.icon-pencil:before {\n  content: \"\\f040\";\n}\n.icon-map-marker:before {\n  content: \"\\f041\";\n}\n.icon-adjust:before {\n  content: \"\\f042\";\n}\n.icon-tint:before {\n  content: \"\\f043\";\n}\n.icon-edit:before {\n  content: \"\\f044\";\n}\n.icon-share:before {\n  content: \"\\f045\";\n}\n.icon-check:before {\n  content: \"\\f046\";\n}\n.icon-move:before {\n  content: \"\\f047\";\n}\n.icon-step-backward:before {\n  content: \"\\f048\";\n}\n.icon-fast-backward:before {\n  content: \"\\f049\";\n}\n.icon-backward:before {\n  content: \"\\f04a\";\n}\n.icon-play:before {\n  content: \"\\f04b\";\n}\n.icon-pause:before {\n  content: \"\\f04c\";\n}\n.icon-stop:before {\n  content: \"\\f04d\";\n}\n.icon-forward:before {\n  content: \"\\f04e\";\n}\n.icon-fast-forward:before {\n  content: \"\\f050\";\n}\n.icon-step-forward:before {\n  content: \"\\f051\";\n}\n.icon-eject:before {\n  content: \"\\f052\";\n}\n.icon-chevron-left:before {\n  content: \"\\f053\";\n}\n.icon-chevron-right:before {\n  content: \"\\f054\";\n}\n.icon-plus-sign:before {\n  content: \"\\f055\";\n}\n.icon-minus-sign:before {\n  content: \"\\f056\";\n}\n.icon-remove-sign:before {\n  content: \"\\f057\";\n}\n.icon-ok-sign:before {\n  content: \"\\f058\";\n}\n.icon-question-sign:before {\n  content: \"\\f059\";\n}\n.icon-info-sign:before {\n  content: \"\\f05a\";\n}\n.icon-screenshot:before {\n  content: \"\\f05b\";\n}\n.icon-remove-circle:before {\n  content: \"\\f05c\";\n}\n.icon-ok-circle:before {\n  content: \"\\f05d\";\n}\n.icon-ban-circle:before {\n  content: \"\\f05e\";\n}\n.icon-arrow-left:before {\n  content: \"\\f060\";\n}\n.icon-arrow-right:before {\n  content: \"\\f061\";\n}\n.icon-arrow-up:before {\n  content: \"\\f062\";\n}\n.icon-arrow-down:before {\n  content: \"\\f063\";\n}\n.icon-mail-forward:before,\n.icon-share-alt:before {\n  content: \"\\f064\";\n}\n.icon-resize-full:before {\n  content: \"\\f065\";\n}\n.icon-resize-small:before {\n  content: \"\\f066\";\n}\n.icon-plus:before {\n  content: \"\\f067\";\n}\n.icon-minus:before {\n  content: \"\\f068\";\n}\n.icon-asterisk:before {\n  content: \"\\f069\";\n}\n.icon-exclamation-sign:before {\n  content: \"\\f06a\";\n}\n.icon-gift:before {\n  content: \"\\f06b\";\n}\n.icon-leaf:before {\n  content: \"\\f06c\";\n}\n.icon-fire:before {\n  content: \"\\f06d\";\n}\n.icon-eye-open:before {\n  content: \"\\f06e\";\n}\n.icon-eye-close:before {\n  content: \"\\f070\";\n}\n.icon-warning-sign:before {\n  content: \"\\f071\";\n}\n.icon-plane:before {\n  content: \"\\f072\";\n}\n.icon-calendar:before {\n  content: \"\\f073\";\n}\n.icon-random:before {\n  content: \"\\f074\";\n}\n.icon-comment:before {\n  content: \"\\f075\";\n}\n.icon-magnet:before {\n  content: \"\\f076\";\n}\n.icon-chevron-up:before {\n  content: \"\\f077\";\n}\n.icon-chevron-down:before {\n  content: \"\\f078\";\n}\n.icon-retweet:before {\n  content: \"\\f079\";\n}\n.icon-shopping-cart:before {\n  content: \"\\f07a\";\n}\n.icon-folder-close:before {\n  content: \"\\f07b\";\n}\n.icon-folder-open:before {\n  content: \"\\f07c\";\n}\n.icon-resize-vertical:before {\n  content: \"\\f07d\";\n}\n.icon-resize-horizontal:before {\n  content: \"\\f07e\";\n}\n.icon-bar-chart:before {\n  content: \"\\f080\";\n}\n.icon-twitter-sign:before {\n  content: \"\\f081\";\n}\n.icon-facebook-sign:before {\n  content: \"\\f082\";\n}\n.icon-camera-retro:before {\n  content: \"\\f083\";\n}\n.icon-key:before {\n  content: \"\\f084\";\n}\n.icon-gears:before,\n.icon-cogs:before {\n  content: \"\\f085\";\n}\n.icon-comments:before {\n  content: \"\\f086\";\n}\n.icon-thumbs-up-alt:before {\n  content: \"\\f087\";\n}\n.icon-thumbs-down-alt:before {\n  content: \"\\f088\";\n}\n.icon-star-half:before {\n  content: \"\\f089\";\n}\n.icon-heart-empty:before {\n  content: \"\\f08a\";\n}\n.icon-signout:before {\n  content: \"\\f08b\";\n}\n.icon-linkedin-sign:before {\n  content: \"\\f08c\";\n}\n.icon-pushpin:before {\n  content: \"\\f08d\";\n}\n.icon-external-link:before {\n  content: \"\\f08e\";\n}\n.icon-signin:before {\n  content: \"\\f090\";\n}\n.icon-trophy:before {\n  content: \"\\f091\";\n}\n.icon-github-sign:before {\n  content: \"\\f092\";\n}\n.icon-upload-alt:before {\n  content: \"\\f093\";\n}\n.icon-lemon:before {\n  content: \"\\f094\";\n}\n.icon-phone:before {\n  content: \"\\f095\";\n}\n.icon-unchecked:before,\n.icon-check-empty:before {\n  content: \"\\f096\";\n}\n.icon-bookmark-empty:before {\n  content: \"\\f097\";\n}\n.icon-phone-sign:before {\n  content: \"\\f098\";\n}\n.icon-twitter:before {\n  content: \"\\f099\";\n}\n.icon-facebook:before {\n  content: \"\\f09a\";\n}\n.icon-github:before {\n  content: \"\\f09b\";\n}\n.icon-unlock:before {\n  content: \"\\f09c\";\n}\n.icon-credit-card:before {\n  content: \"\\f09d\";\n}\n.icon-rss:before {\n  content: \"\\f09e\";\n}\n.icon-hdd:before {\n  content: \"\\f0a0\";\n}\n.icon-bullhorn:before {\n  content: \"\\f0a1\";\n}\n.icon-bell:before {\n  content: \"\\f0a2\";\n}\n.icon-certificate:before {\n  content: \"\\f0a3\";\n}\n.icon-hand-right:before {\n  content: \"\\f0a4\";\n}\n.icon-hand-left:before {\n  content: \"\\f0a5\";\n}\n.icon-hand-up:before {\n  content: \"\\f0a6\";\n}\n.icon-hand-down:before {\n  content: \"\\f0a7\";\n}\n.icon-circle-arrow-left:before {\n  content: \"\\f0a8\";\n}\n.icon-circle-arrow-right:before {\n  content: \"\\f0a9\";\n}\n.icon-circle-arrow-up:before {\n  content: \"\\f0aa\";\n}\n.icon-circle-arrow-down:before {\n  content: \"\\f0ab\";\n}\n.icon-globe:before {\n  content: \"\\f0ac\";\n}\n.icon-wrench:before {\n  content: \"\\f0ad\";\n}\n.icon-tasks:before {\n  content: \"\\f0ae\";\n}\n.icon-filter:before {\n  content: \"\\f0b0\";\n}\n.icon-briefcase:before {\n  content: \"\\f0b1\";\n}\n.icon-fullscreen:before {\n  content: \"\\f0b2\";\n}\n.icon-group:before {\n  content: \"\\f0c0\";\n}\n.icon-link:before {\n  content: \"\\f0c1\";\n}\n.icon-cloud:before {\n  content: \"\\f0c2\";\n}\n.icon-beaker:before {\n  content: \"\\f0c3\";\n}\n.icon-cut:before {\n  content: \"\\f0c4\";\n}\n.icon-copy:before {\n  content: \"\\f0c5\";\n}\n.icon-paperclip:before,\n.icon-paper-clip:before {\n  content: \"\\f0c6\";\n}\n.icon-save:before {\n  content: \"\\f0c7\";\n}\n.icon-sign-blank:before {\n  content: \"\\f0c8\";\n}\n.icon-reorder:before {\n  content: \"\\f0c9\";\n}\n.icon-list-ul:before {\n  content: \"\\f0ca\";\n}\n.icon-list-ol:before {\n  content: \"\\f0cb\";\n}\n.icon-strikethrough:before {\n  content: \"\\f0cc\";\n}\n.icon-underline:before {\n  content: \"\\f0cd\";\n}\n.icon-table:before {\n  content: \"\\f0ce\";\n}\n.icon-magic:before {\n  content: \"\\f0d0\";\n}\n.icon-truck:before {\n  content: \"\\f0d1\";\n}\n.icon-pinterest:before {\n  content: \"\\f0d2\";\n}\n.icon-pinterest-sign:before {\n  content: \"\\f0d3\";\n}\n.icon-google-plus-sign:before {\n  content: \"\\f0d4\";\n}\n.icon-google-plus:before {\n  content: \"\\f0d5\";\n}\n.icon-money:before {\n  content: \"\\f0d6\";\n}\n.icon-caret-down:before {\n  content: \"\\f0d7\";\n}\n.icon-caret-up:before {\n  content: \"\\f0d8\";\n}\n.icon-caret-left:before {\n  content: \"\\f0d9\";\n}\n.icon-caret-right:before {\n  content: \"\\f0da\";\n}\n.icon-columns:before {\n  content: \"\\f0db\";\n}\n.icon-sort:before {\n  content: \"\\f0dc\";\n}\n.icon-sort-down:before {\n  content: \"\\f0dd\";\n}\n.icon-sort-up:before {\n  content: \"\\f0de\";\n}\n.icon-envelope:before {\n  content: \"\\f0e0\";\n}\n.icon-linkedin:before {\n  content: \"\\f0e1\";\n}\n.icon-rotate-left:before,\n.icon-undo:before {\n  content: \"\\f0e2\";\n}\n.icon-legal:before {\n  content: \"\\f0e3\";\n}\n.icon-dashboard:before {\n  content: \"\\f0e4\";\n}\n.icon-comment-alt:before {\n  content: \"\\f0e5\";\n}\n.icon-comments-alt:before {\n  content: \"\\f0e6\";\n}\n.icon-bolt:before {\n  content: \"\\f0e7\";\n}\n.icon-sitemap:before {\n  content: \"\\f0e8\";\n}\n.icon-umbrella:before {\n  content: \"\\f0e9\";\n}\n.icon-paste:before {\n  content: \"\\f0ea\";\n}\n.icon-lightbulb:before {\n  content: \"\\f0eb\";\n}\n.icon-exchange:before {\n  content: \"\\f0ec\";\n}\n.icon-cloud-download:before {\n  content: \"\\f0ed\";\n}\n.icon-cloud-upload:before {\n  content: \"\\f0ee\";\n}\n.icon-user-md:before {\n  content: \"\\f0f0\";\n}\n.icon-stethoscope:before {\n  content: \"\\f0f1\";\n}\n.icon-suitcase:before {\n  content: \"\\f0f2\";\n}\n.icon-bell-alt:before {\n  content: \"\\f0f3\";\n}\n.icon-coffee:before {\n  content: \"\\f0f4\";\n}\n.icon-food:before {\n  content: \"\\f0f5\";\n}\n.icon-file-text-alt:before {\n  content: \"\\f0f6\";\n}\n.icon-building:before {\n  content: \"\\f0f7\";\n}\n.icon-hospital:before {\n  content: \"\\f0f8\";\n}\n.icon-ambulance:before {\n  content: \"\\f0f9\";\n}\n.icon-medkit:before {\n  content: \"\\f0fa\";\n}\n.icon-fighter-jet:before {\n  content: \"\\f0fb\";\n}\n.icon-beer:before {\n  content: \"\\f0fc\";\n}\n.icon-h-sign:before {\n  content: \"\\f0fd\";\n}\n.icon-plus-sign-alt:before {\n  content: \"\\f0fe\";\n}\n.icon-double-angle-left:before {\n  content: \"\\f100\";\n}\n.icon-double-angle-right:before {\n  content: \"\\f101\";\n}\n.icon-double-angle-up:before {\n  content: \"\\f102\";\n}\n.icon-double-angle-down:before {\n  content: \"\\f103\";\n}\n.icon-angle-left:before {\n  content: \"\\f104\";\n}\n.icon-angle-right:before {\n  content: \"\\f105\";\n}\n.icon-angle-up:before {\n  content: \"\\f106\";\n}\n.icon-angle-down:before {\n  content: \"\\f107\";\n}\n.icon-desktop:before {\n  content: \"\\f108\";\n}\n.icon-laptop:before {\n  content: \"\\f109\";\n}\n.icon-tablet:before {\n  content: \"\\f10a\";\n}\n.icon-mobile-phone:before {\n  content: \"\\f10b\";\n}\n.icon-circle-blank:before {\n  content: \"\\f10c\";\n}\n.icon-quote-left:before {\n  content: \"\\f10d\";\n}\n.icon-quote-right:before {\n  content: \"\\f10e\";\n}\n.icon-spinner:before {\n  content: \"\\f110\";\n}\n.icon-circle:before {\n  content: \"\\f111\";\n}\n.icon-mail-reply:before,\n.icon-reply:before {\n  content: \"\\f112\";\n}\n.icon-github-alt:before {\n  content: \"\\f113\";\n}\n.icon-folder-close-alt:before {\n  content: \"\\f114\";\n}\n.icon-folder-open-alt:before {\n  content: \"\\f115\";\n}\n.icon-expand-alt:before {\n  content: \"\\f116\";\n}\n.icon-collapse-alt:before {\n  content: \"\\f117\";\n}\n.icon-smile:before {\n  content: \"\\f118\";\n}\n.icon-frown:before {\n  content: \"\\f119\";\n}\n.icon-meh:before {\n  content: \"\\f11a\";\n}\n.icon-gamepad:before {\n  content: \"\\f11b\";\n}\n.icon-keyboard:before {\n  content: \"\\f11c\";\n}\n.icon-flag-alt:before {\n  content: \"\\f11d\";\n}\n.icon-flag-checkered:before {\n  content: \"\\f11e\";\n}\n.icon-terminal:before {\n  content: \"\\f120\";\n}\n.icon-code:before {\n  content: \"\\f121\";\n}\n.icon-reply-all:before {\n  content: \"\\f122\";\n}\n.icon-mail-reply-all:before {\n  content: \"\\f122\";\n}\n.icon-star-half-full:before,\n.icon-star-half-empty:before {\n  content: \"\\f123\";\n}\n.icon-location-arrow:before {\n  content: \"\\f124\";\n}\n.icon-crop:before {\n  content: \"\\f125\";\n}\n.icon-code-fork:before {\n  content: \"\\f126\";\n}\n.icon-unlink:before {\n  content: \"\\f127\";\n}\n.icon-question:before {\n  content: \"\\f128\";\n}\n.icon-info:before {\n  content: \"\\f129\";\n}\n.icon-exclamation:before {\n  content: \"\\f12a\";\n}\n.icon-superscript:before {\n  content: \"\\f12b\";\n}\n.icon-subscript:before {\n  content: \"\\f12c\";\n}\n.icon-eraser:before {\n  content: \"\\f12d\";\n}\n.icon-puzzle-piece:before {\n  content: \"\\f12e\";\n}\n.icon-microphone:before {\n  content: \"\\f130\";\n}\n.icon-microphone-off:before {\n  content: \"\\f131\";\n}\n.icon-shield:before {\n  content: \"\\f132\";\n}\n.icon-calendar-empty:before {\n  content: \"\\f133\";\n}\n.icon-fire-extinguisher:before {\n  content: \"\\f134\";\n}\n.icon-rocket:before {\n  content: \"\\f135\";\n}\n.icon-maxcdn:before {\n  content: \"\\f136\";\n}\n.icon-chevron-sign-left:before {\n  content: \"\\f137\";\n}\n.icon-chevron-sign-right:before {\n  content: \"\\f138\";\n}\n.icon-chevron-sign-up:before {\n  content: \"\\f139\";\n}\n.icon-chevron-sign-down:before {\n  content: \"\\f13a\";\n}\n.icon-html5:before {\n  content: \"\\f13b\";\n}\n.icon-css3:before {\n  content: \"\\f13c\";\n}\n.icon-anchor:before {\n  content: \"\\f13d\";\n}\n.icon-unlock-alt:before {\n  content: \"\\f13e\";\n}\n.icon-bullseye:before {\n  content: \"\\f140\";\n}\n.icon-ellipsis-horizontal:before {\n  content: \"\\f141\";\n}\n.icon-ellipsis-vertical:before {\n  content: \"\\f142\";\n}\n.icon-rss-sign:before {\n  content: \"\\f143\";\n}\n.icon-play-sign:before {\n  content: \"\\f144\";\n}\n.icon-ticket:before {\n  content: \"\\f145\";\n}\n.icon-minus-sign-alt:before {\n  content: \"\\f146\";\n}\n.icon-check-minus:before {\n  content: \"\\f147\";\n}\n.icon-level-up:before {\n  content: \"\\f148\";\n}\n.icon-level-down:before {\n  content: \"\\f149\";\n}\n.icon-check-sign:before {\n  content: \"\\f14a\";\n}\n.icon-edit-sign:before {\n  content: \"\\f14b\";\n}\n.icon-external-link-sign:before {\n  content: \"\\f14c\";\n}\n.icon-share-sign:before {\n  content: \"\\f14d\";\n}\n.icon-compass:before {\n  content: \"\\f14e\";\n}\n.icon-collapse:before {\n  content: \"\\f150\";\n}\n.icon-collapse-top:before {\n  content: \"\\f151\";\n}\n.icon-expand:before {\n  content: \"\\f152\";\n}\n.icon-euro:before,\n.icon-eur:before {\n  content: \"\\f153\";\n}\n.icon-gbp:before {\n  content: \"\\f154\";\n}\n.icon-dollar:before,\n.icon-usd:before {\n  content: \"\\f155\";\n}\n.icon-rupee:before,\n.icon-inr:before {\n  content: \"\\f156\";\n}\n.icon-yen:before,\n.icon-jpy:before {\n  content: \"\\f157\";\n}\n.icon-renminbi:before,\n.icon-cny:before {\n  content: \"\\f158\";\n}\n.icon-won:before,\n.icon-krw:before {\n  content: \"\\f159\";\n}\n.icon-bitcoin:before,\n.icon-btc:before {\n  content: \"\\f15a\";\n}\n.icon-file:before {\n  content: \"\\f15b\";\n}\n.icon-file-text:before {\n  content: \"\\f15c\";\n}\n.icon-sort-by-alphabet:before {\n  content: \"\\f15d\";\n}\n.icon-sort-by-alphabet-alt:before {\n  content: \"\\f15e\";\n}\n.icon-sort-by-attributes:before {\n  content: \"\\f160\";\n}\n.icon-sort-by-attributes-alt:before {\n  content: \"\\f161\";\n}\n.icon-sort-by-order:before {\n  content: \"\\f162\";\n}\n.icon-sort-by-order-alt:before {\n  content: \"\\f163\";\n}\n.icon-thumbs-up:before {\n  content: \"\\f164\";\n}\n.icon-thumbs-down:before {\n  content: \"\\f165\";\n}\n.icon-youtube-sign:before {\n  content: \"\\f166\";\n}\n.icon-youtube:before {\n  content: \"\\f167\";\n}\n.icon-xing:before {\n  content: \"\\f168\";\n}\n.icon-xing-sign:before {\n  content: \"\\f169\";\n}\n.icon-youtube-play:before {\n  content: \"\\f16a\";\n}\n.icon-dropbox:before {\n  content: \"\\f16b\";\n}\n.icon-stackexchange:before {\n  content: \"\\f16c\";\n}\n.icon-instagram:before {\n  content: \"\\f16d\";\n}\n.icon-flickr:before {\n  content: \"\\f16e\";\n}\n.icon-adn:before {\n  content: \"\\f170\";\n}\n.icon-bitbucket:before {\n  content: \"\\f171\";\n}\n.icon-bitbucket-sign:before {\n  content: \"\\f172\";\n}\n.icon-tumblr:before {\n  content: \"\\f173\";\n}\n.icon-tumblr-sign:before {\n  content: \"\\f174\";\n}\n.icon-long-arrow-down:before {\n  content: \"\\f175\";\n}\n.icon-long-arrow-up:before {\n  content: \"\\f176\";\n}\n.icon-long-arrow-left:before {\n  content: \"\\f177\";\n}\n.icon-long-arrow-right:before {\n  content: \"\\f178\";\n}\n.icon-apple:before {\n  content: \"\\f179\";\n}\n.icon-windows:before {\n  content: \"\\f17a\";\n}\n.icon-android:before {\n  content: \"\\f17b\";\n}\n.icon-linux:before {\n  content: \"\\f17c\";\n}\n.icon-dribbble:before {\n  content: \"\\f17d\";\n}\n.icon-skype:before {\n  content: \"\\f17e\";\n}\n.icon-foursquare:before {\n  content: \"\\f180\";\n}\n.icon-trello:before {\n  content: \"\\f181\";\n}\n.icon-female:before {\n  content: \"\\f182\";\n}\n.icon-male:before {\n  content: \"\\f183\";\n}\n.icon-gittip:before {\n  content: \"\\f184\";\n}\n.icon-sun:before {\n  content: \"\\f185\";\n}\n.icon-moon:before {\n  content: \"\\f186\";\n}\n.icon-archive:before {\n  content: \"\\f187\";\n}\n.icon-bug:before {\n  content: \"\\f188\";\n}\n.icon-vk:before {\n  content: \"\\f189\";\n}\n.icon-weibo:before {\n  content: \"\\f18a\";\n}\n.icon-renren:before {\n  content: \"\\f18b\";\n}\n"
  },
  {
    "path": "automatic/static/css/jquery-ui.css",
    "content": "/*! jQuery UI - v1.12.1 - 2016-09-14\n* http://jqueryui.com\n* Includes: core.css, accordion.css, autocomplete.css, menu.css, button.css, controlgroup.css, checkboxradio.css, datepicker.css, dialog.css, draggable.css, resizable.css, progressbar.css, selectable.css, selectmenu.css, slider.css, sortable.css, spinner.css, tabs.css, tooltip.css, theme.css\n* To view and modify this theme, visit http://jqueryui.com/themeroller/?bgShadowXPos=&bgOverlayXPos=&bgErrorXPos=&bgHighlightXPos=&bgContentXPos=&bgHeaderXPos=&bgActiveXPos=&bgHoverXPos=&bgDefaultXPos=&bgShadowYPos=&bgOverlayYPos=&bgErrorYPos=&bgHighlightYPos=&bgContentYPos=&bgHeaderYPos=&bgActiveYPos=&bgHoverYPos=&bgDefaultYPos=&bgShadowRepeat=&bgOverlayRepeat=&bgErrorRepeat=&bgHighlightRepeat=&bgContentRepeat=&bgHeaderRepeat=&bgActiveRepeat=&bgHoverRepeat=&bgDefaultRepeat=&iconsHover=url(%22images%2Fui-icons_555555_256x240.png%22)&iconsHighlight=url(%22images%2Fui-icons_777620_256x240.png%22)&iconsHeader=url(%22images%2Fui-icons_444444_256x240.png%22)&iconsError=url(%22images%2Fui-icons_cc0000_256x240.png%22)&iconsDefault=url(%22images%2Fui-icons_777777_256x240.png%22)&iconsContent=url(%22images%2Fui-icons_444444_256x240.png%22)&iconsActive=url(%22images%2Fui-icons_ffffff_256x240.png%22)&bgImgUrlShadow=&bgImgUrlOverlay=&bgImgUrlHover=&bgImgUrlHighlight=&bgImgUrlHeader=&bgImgUrlError=&bgImgUrlDefault=&bgImgUrlContent=&bgImgUrlActive=&opacityFilterShadow=Alpha(Opacity%3D30)&opacityFilterOverlay=Alpha(Opacity%3D30)&opacityShadowPerc=30&opacityOverlayPerc=30&iconColorHover=%23555555&iconColorHighlight=%23777620&iconColorHeader=%23444444&iconColorError=%23cc0000&iconColorDefault=%23777777&iconColorContent=%23444444&iconColorActive=%23ffffff&bgImgOpacityShadow=0&bgImgOpacityOverlay=0&bgImgOpacityError=95&bgImgOpacityHighlight=55&bgImgOpacityContent=75&bgImgOpacityHeader=75&bgImgOpacityActive=65&bgImgOpacityHover=75&bgImgOpacityDefault=75&bgTextureShadow=flat&bgTextureOverlay=flat&bgTextureError=flat&bgTextureHighlight=flat&bgTextureContent=flat&bgTextureHeader=flat&bgTextureActive=flat&bgTextureHover=flat&bgTextureDefault=flat&cornerRadius=3px&fwDefault=normal&ffDefault=Arial%2CHelvetica%2Csans-serif&fsDefault=1em&cornerRadiusShadow=8px&thicknessShadow=5px&offsetLeftShadow=0px&offsetTopShadow=0px&opacityShadow=.3&bgColorShadow=%23666666&opacityOverlay=.3&bgColorOverlay=%23aaaaaa&fcError=%235f3f3f&borderColorError=%23f1a899&bgColorError=%23fddfdf&fcHighlight=%23777620&borderColorHighlight=%23dad55e&bgColorHighlight=%23fffa90&fcContent=%23333333&borderColorContent=%23dddddd&bgColorContent=%23ffffff&fcHeader=%23333333&borderColorHeader=%23dddddd&bgColorHeader=%23e9e9e9&fcActive=%23ffffff&borderColorActive=%23003eff&bgColorActive=%23007fff&fcHover=%232b2b2b&borderColorHover=%23cccccc&bgColorHover=%23ededed&fcDefault=%23454545&borderColorDefault=%23c5c5c5&bgColorDefault=%23f6f6f6\n* Copyright jQuery Foundation and other contributors; Licensed MIT */\n\n/* Layout helpers\n----------------------------------*/\n.ui-helper-hidden {\n\tdisplay: none;\n}\n.ui-helper-hidden-accessible {\n\tborder: 0;\n\tclip: rect(0 0 0 0);\n\theight: 1px;\n\tmargin: -1px;\n\toverflow: hidden;\n\tpadding: 0;\n\tposition: absolute;\n\twidth: 1px;\n}\n.ui-helper-reset {\n\tmargin: 0;\n\tpadding: 0;\n\tborder: 0;\n\toutline: 0;\n\tline-height: 1.3;\n\ttext-decoration: none;\n\tfont-size: 100%;\n\tlist-style: none;\n}\n.ui-helper-clearfix:before,\n.ui-helper-clearfix:after {\n\tcontent: \"\";\n\tdisplay: table;\n\tborder-collapse: collapse;\n}\n.ui-helper-clearfix:after {\n\tclear: both;\n}\n.ui-helper-zfix {\n\twidth: 100%;\n\theight: 100%;\n\ttop: 0;\n\tleft: 0;\n\tposition: absolute;\n\topacity: 0;\n\tfilter:Alpha(Opacity=0); /* support: IE8 */\n}\n\n.ui-front {\n\tz-index: 100;\n}\n\n\n/* Interaction Cues\n----------------------------------*/\n.ui-state-disabled {\n\tcursor: default !important;\n\tpointer-events: none;\n}\n\n\n/* Icons\n----------------------------------*/\n.ui-icon {\n\tdisplay: inline-block;\n\tvertical-align: middle;\n\tmargin-top: -.25em;\n\tposition: relative;\n\ttext-indent: -99999px;\n\toverflow: hidden;\n\tbackground-repeat: no-repeat;\n}\n\n.ui-widget-icon-block {\n\tleft: 50%;\n\tmargin-left: -8px;\n\tdisplay: block;\n}\n\n/* Misc visuals\n----------------------------------*/\n\n/* Overlays */\n.ui-widget-overlay {\n\tposition: fixed;\n\ttop: 0;\n\tleft: 0;\n\twidth: 100%;\n\theight: 100%;\n}\n.ui-accordion .ui-accordion-header {\n\tdisplay: block;\n\tcursor: pointer;\n\tposition: relative;\n\tmargin: 2px 0 0 0;\n\tpadding: .5em .5em .5em .7em;\n\tfont-size: 100%;\n}\n.ui-accordion .ui-accordion-content {\n\tpadding: 1em 2.2em;\n\tborder-top: 0;\n\toverflow: auto;\n}\n.ui-autocomplete {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\tcursor: default;\n}\n.ui-menu {\n\tlist-style: none;\n\tpadding: 0;\n\tmargin: 0;\n\tdisplay: block;\n\toutline: 0;\n}\n.ui-menu .ui-menu {\n\tposition: absolute;\n}\n.ui-menu .ui-menu-item {\n\tmargin: 0;\n\tcursor: pointer;\n\t/* support: IE10, see #8844 */\n\tlist-style-image: url(\"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\");\n}\n.ui-menu .ui-menu-item-wrapper {\n\tposition: relative;\n\tpadding: 3px 1em 3px .4em;\n}\n.ui-menu .ui-menu-divider {\n\tmargin: 5px 0;\n\theight: 0;\n\tfont-size: 0;\n\tline-height: 0;\n\tborder-width: 1px 0 0 0;\n}\n.ui-menu .ui-state-focus,\n.ui-menu .ui-state-active {\n\tmargin: -1px;\n}\n\n/* icon support */\n.ui-menu-icons {\n\tposition: relative;\n}\n.ui-menu-icons .ui-menu-item-wrapper {\n\tpadding-left: 2em;\n}\n\n/* left-aligned */\n.ui-menu .ui-icon {\n\tposition: absolute;\n\ttop: 0;\n\tbottom: 0;\n\tleft: .2em;\n\tmargin: auto 0;\n}\n\n/* right-aligned */\n.ui-menu .ui-menu-icon {\n\tleft: auto;\n\tright: 0;\n}\n.ui-button {\n\tpadding: .4em 1em;\n\tdisplay: inline-block;\n\tposition: relative;\n\tline-height: normal;\n\tmargin-right: .1em;\n\tcursor: pointer;\n\tvertical-align: middle;\n\ttext-align: center;\n\t-webkit-user-select: none;\n\t-moz-user-select: none;\n\t-ms-user-select: none;\n\tuser-select: none;\n\n\t/* Support: IE <= 11 */\n\toverflow: visible;\n}\n\n.ui-button,\n.ui-button:link,\n.ui-button:visited,\n.ui-button:hover,\n.ui-button:active {\n\ttext-decoration: none;\n}\n\n/* to make room for the icon, a width needs to be set here */\n.ui-button-icon-only {\n\twidth: 2em;\n\tbox-sizing: border-box;\n\ttext-indent: -9999px;\n\twhite-space: nowrap;\n}\n\n/* no icon support for input elements */\ninput.ui-button.ui-button-icon-only {\n\ttext-indent: 0;\n}\n\n/* button icon element(s) */\n.ui-button-icon-only .ui-icon {\n\tposition: absolute;\n\ttop: 50%;\n\tleft: 50%;\n\tmargin-top: -8px;\n\tmargin-left: -8px;\n}\n\n.ui-button.ui-icon-notext .ui-icon {\n\tpadding: 0;\n\twidth: 2.1em;\n\theight: 2.1em;\n\ttext-indent: -9999px;\n\twhite-space: nowrap;\n\n}\n\ninput.ui-button.ui-icon-notext .ui-icon {\n\twidth: auto;\n\theight: auto;\n\ttext-indent: 0;\n\twhite-space: normal;\n\tpadding: .4em 1em;\n}\n\n/* workarounds */\n/* Support: Firefox 5 - 40 */\ninput.ui-button::-moz-focus-inner,\nbutton.ui-button::-moz-focus-inner {\n\tborder: 0;\n\tpadding: 0;\n}\n.ui-controlgroup {\n\tvertical-align: middle;\n\tdisplay: inline-block;\n}\n.ui-controlgroup > .ui-controlgroup-item {\n\tfloat: left;\n\tmargin-left: 0;\n\tmargin-right: 0;\n}\n.ui-controlgroup > .ui-controlgroup-item:focus,\n.ui-controlgroup > .ui-controlgroup-item.ui-visual-focus {\n\tz-index: 9999;\n}\n.ui-controlgroup-vertical > .ui-controlgroup-item {\n\tdisplay: block;\n\tfloat: none;\n\twidth: 100%;\n\tmargin-top: 0;\n\tmargin-bottom: 0;\n\ttext-align: left;\n}\n.ui-controlgroup-vertical .ui-controlgroup-item {\n\tbox-sizing: border-box;\n}\n.ui-controlgroup .ui-controlgroup-label {\n\tpadding: .4em 1em;\n}\n.ui-controlgroup .ui-controlgroup-label span {\n\tfont-size: 80%;\n}\n.ui-controlgroup-horizontal .ui-controlgroup-label + .ui-controlgroup-item {\n\tborder-left: none;\n}\n.ui-controlgroup-vertical .ui-controlgroup-label + .ui-controlgroup-item {\n\tborder-top: none;\n}\n.ui-controlgroup-horizontal .ui-controlgroup-label.ui-widget-content {\n\tborder-right: none;\n}\n.ui-controlgroup-vertical .ui-controlgroup-label.ui-widget-content {\n\tborder-bottom: none;\n}\n\n/* Spinner specific style fixes */\n.ui-controlgroup-vertical .ui-spinner-input {\n\n\t/* Support: IE8 only, Android < 4.4 only */\n\twidth: 75%;\n\twidth: calc( 100% - 2.4em );\n}\n.ui-controlgroup-vertical .ui-spinner .ui-spinner-up {\n\tborder-top-style: solid;\n}\n\n.ui-checkboxradio-label .ui-icon-background {\n\tbox-shadow: inset 1px 1px 1px #ccc;\n\tborder-radius: .12em;\n\tborder: none;\n}\n.ui-checkboxradio-radio-label .ui-icon-background {\n\twidth: 16px;\n\theight: 16px;\n\tborder-radius: 1em;\n\toverflow: visible;\n\tborder: none;\n}\n.ui-checkboxradio-radio-label.ui-checkboxradio-checked .ui-icon,\n.ui-checkboxradio-radio-label.ui-checkboxradio-checked:hover .ui-icon {\n\tbackground-image: none;\n\twidth: 8px;\n\theight: 8px;\n\tborder-width: 4px;\n\tborder-style: solid;\n}\n.ui-checkboxradio-disabled {\n\tpointer-events: none;\n}\n.ui-datepicker {\n\twidth: 17em;\n\tpadding: .2em .2em 0;\n\tdisplay: none;\n}\n.ui-datepicker .ui-datepicker-header {\n\tposition: relative;\n\tpadding: .2em 0;\n}\n.ui-datepicker .ui-datepicker-prev,\n.ui-datepicker .ui-datepicker-next {\n\tposition: absolute;\n\ttop: 2px;\n\twidth: 1.8em;\n\theight: 1.8em;\n}\n.ui-datepicker .ui-datepicker-prev-hover,\n.ui-datepicker .ui-datepicker-next-hover {\n\ttop: 1px;\n}\n.ui-datepicker .ui-datepicker-prev {\n\tleft: 2px;\n}\n.ui-datepicker .ui-datepicker-next {\n\tright: 2px;\n}\n.ui-datepicker .ui-datepicker-prev-hover {\n\tleft: 1px;\n}\n.ui-datepicker .ui-datepicker-next-hover {\n\tright: 1px;\n}\n.ui-datepicker .ui-datepicker-prev span,\n.ui-datepicker .ui-datepicker-next span {\n\tdisplay: block;\n\tposition: absolute;\n\tleft: 50%;\n\tmargin-left: -8px;\n\ttop: 50%;\n\tmargin-top: -8px;\n}\n.ui-datepicker .ui-datepicker-title {\n\tmargin: 0 2.3em;\n\tline-height: 1.8em;\n\ttext-align: center;\n}\n.ui-datepicker .ui-datepicker-title select {\n\tfont-size: 1em;\n\tmargin: 1px 0;\n}\n.ui-datepicker select.ui-datepicker-month,\n.ui-datepicker select.ui-datepicker-year {\n\twidth: 45%;\n}\n.ui-datepicker table {\n\twidth: 100%;\n\tfont-size: .9em;\n\tborder-collapse: collapse;\n\tmargin: 0 0 .4em;\n}\n.ui-datepicker th {\n\tpadding: .7em .3em;\n\ttext-align: center;\n\tfont-weight: bold;\n\tborder: 0;\n}\n.ui-datepicker td {\n\tborder: 0;\n\tpadding: 1px;\n}\n.ui-datepicker td span,\n.ui-datepicker td a {\n\tdisplay: block;\n\tpadding: .2em;\n\ttext-align: right;\n\ttext-decoration: none;\n}\n.ui-datepicker .ui-datepicker-buttonpane {\n\tbackground-image: none;\n\tmargin: .7em 0 0 0;\n\tpadding: 0 .2em;\n\tborder-left: 0;\n\tborder-right: 0;\n\tborder-bottom: 0;\n}\n.ui-datepicker .ui-datepicker-buttonpane button {\n\tfloat: right;\n\tmargin: .5em .2em .4em;\n\tcursor: pointer;\n\tpadding: .2em .6em .3em .6em;\n\twidth: auto;\n\toverflow: visible;\n}\n.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {\n\tfloat: left;\n}\n\n/* with multiple calendars */\n.ui-datepicker.ui-datepicker-multi {\n\twidth: auto;\n}\n.ui-datepicker-multi .ui-datepicker-group {\n\tfloat: left;\n}\n.ui-datepicker-multi .ui-datepicker-group table {\n\twidth: 95%;\n\tmargin: 0 auto .4em;\n}\n.ui-datepicker-multi-2 .ui-datepicker-group {\n\twidth: 50%;\n}\n.ui-datepicker-multi-3 .ui-datepicker-group {\n\twidth: 33.3%;\n}\n.ui-datepicker-multi-4 .ui-datepicker-group {\n\twidth: 25%;\n}\n.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,\n.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {\n\tborder-left-width: 0;\n}\n.ui-datepicker-multi .ui-datepicker-buttonpane {\n\tclear: left;\n}\n.ui-datepicker-row-break {\n\tclear: both;\n\twidth: 100%;\n\tfont-size: 0;\n}\n\n/* RTL support */\n.ui-datepicker-rtl {\n\tdirection: rtl;\n}\n.ui-datepicker-rtl .ui-datepicker-prev {\n\tright: 2px;\n\tleft: auto;\n}\n.ui-datepicker-rtl .ui-datepicker-next {\n\tleft: 2px;\n\tright: auto;\n}\n.ui-datepicker-rtl .ui-datepicker-prev:hover {\n\tright: 1px;\n\tleft: auto;\n}\n.ui-datepicker-rtl .ui-datepicker-next:hover {\n\tleft: 1px;\n\tright: auto;\n}\n.ui-datepicker-rtl .ui-datepicker-buttonpane {\n\tclear: right;\n}\n.ui-datepicker-rtl .ui-datepicker-buttonpane button {\n\tfloat: left;\n}\n.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,\n.ui-datepicker-rtl .ui-datepicker-group {\n\tfloat: right;\n}\n.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,\n.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {\n\tborder-right-width: 0;\n\tborder-left-width: 1px;\n}\n\n/* Icons */\n.ui-datepicker .ui-icon {\n\tdisplay: block;\n\ttext-indent: -99999px;\n\toverflow: hidden;\n\tbackground-repeat: no-repeat;\n\tleft: .5em;\n\ttop: .3em;\n}\n.ui-dialog {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\tpadding: .2em;\n\toutline: 0;\n}\n.ui-dialog .ui-dialog-titlebar {\n\tpadding: .4em 1em;\n\tposition: relative;\n}\n.ui-dialog .ui-dialog-title {\n\tfloat: left;\n\tmargin: .1em 0;\n\twhite-space: nowrap;\n\twidth: 90%;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n}\n.ui-dialog .ui-dialog-titlebar-close {\n\tposition: absolute;\n\tright: .3em;\n\ttop: 50%;\n\twidth: 20px;\n\tmargin: -10px 0 0 0;\n\tpadding: 1px;\n\theight: 20px;\n}\n.ui-dialog .ui-dialog-content {\n\tposition: relative;\n\tborder: 0;\n\tpadding: .5em 1em;\n\tbackground: none;\n\toverflow: auto;\n}\n.ui-dialog .ui-dialog-buttonpane {\n\ttext-align: left;\n\tborder-width: 1px 0 0 0;\n\tbackground-image: none;\n\tmargin-top: .5em;\n\tpadding: .3em 1em .5em .4em;\n}\n.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {\n\tfloat: right;\n}\n.ui-dialog .ui-dialog-buttonpane button {\n\tmargin: .5em .4em .5em 0;\n\tcursor: pointer;\n}\n.ui-dialog .ui-resizable-n {\n\theight: 2px;\n\ttop: 0;\n}\n.ui-dialog .ui-resizable-e {\n\twidth: 2px;\n\tright: 0;\n}\n.ui-dialog .ui-resizable-s {\n\theight: 2px;\n\tbottom: 0;\n}\n.ui-dialog .ui-resizable-w {\n\twidth: 2px;\n\tleft: 0;\n}\n.ui-dialog .ui-resizable-se,\n.ui-dialog .ui-resizable-sw,\n.ui-dialog .ui-resizable-ne,\n.ui-dialog .ui-resizable-nw {\n\twidth: 7px;\n\theight: 7px;\n}\n.ui-dialog .ui-resizable-se {\n\tright: 0;\n\tbottom: 0;\n}\n.ui-dialog .ui-resizable-sw {\n\tleft: 0;\n\tbottom: 0;\n}\n.ui-dialog .ui-resizable-ne {\n\tright: 0;\n\ttop: 0;\n}\n.ui-dialog .ui-resizable-nw {\n\tleft: 0;\n\ttop: 0;\n}\n.ui-draggable .ui-dialog-titlebar {\n\tcursor: move;\n}\n.ui-draggable-handle {\n\t-ms-touch-action: none;\n\ttouch-action: none;\n}\n.ui-resizable {\n\tposition: relative;\n}\n.ui-resizable-handle {\n\tposition: absolute;\n\tfont-size: 0.1px;\n\tdisplay: block;\n\t-ms-touch-action: none;\n\ttouch-action: none;\n}\n.ui-resizable-disabled .ui-resizable-handle,\n.ui-resizable-autohide .ui-resizable-handle {\n\tdisplay: none;\n}\n.ui-resizable-n {\n\tcursor: n-resize;\n\theight: 7px;\n\twidth: 100%;\n\ttop: -5px;\n\tleft: 0;\n}\n.ui-resizable-s {\n\tcursor: s-resize;\n\theight: 7px;\n\twidth: 100%;\n\tbottom: -5px;\n\tleft: 0;\n}\n.ui-resizable-e {\n\tcursor: e-resize;\n\twidth: 7px;\n\tright: -5px;\n\ttop: 0;\n\theight: 100%;\n}\n.ui-resizable-w {\n\tcursor: w-resize;\n\twidth: 7px;\n\tleft: -5px;\n\ttop: 0;\n\theight: 100%;\n}\n.ui-resizable-se {\n\tcursor: se-resize;\n\twidth: 12px;\n\theight: 12px;\n\tright: 1px;\n\tbottom: 1px;\n}\n.ui-resizable-sw {\n\tcursor: sw-resize;\n\twidth: 9px;\n\theight: 9px;\n\tleft: -5px;\n\tbottom: -5px;\n}\n.ui-resizable-nw {\n\tcursor: nw-resize;\n\twidth: 9px;\n\theight: 9px;\n\tleft: -5px;\n\ttop: -5px;\n}\n.ui-resizable-ne {\n\tcursor: ne-resize;\n\twidth: 9px;\n\theight: 9px;\n\tright: -5px;\n\ttop: -5px;\n}\n.ui-progressbar {\n\theight: 2em;\n\ttext-align: left;\n\toverflow: hidden;\n}\n.ui-progressbar .ui-progressbar-value {\n\tmargin: -1px;\n\theight: 100%;\n}\n.ui-progressbar .ui-progressbar-overlay {\n\tbackground: url(\"data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==\");\n\theight: 100%;\n\tfilter: alpha(opacity=25); /* support: IE8 */\n\topacity: 0.25;\n}\n.ui-progressbar-indeterminate .ui-progressbar-value {\n\tbackground-image: none;\n}\n.ui-selectable {\n\t-ms-touch-action: none;\n\ttouch-action: none;\n}\n.ui-selectable-helper {\n\tposition: absolute;\n\tz-index: 100;\n\tborder: 1px dotted black;\n}\n.ui-selectmenu-menu {\n\tpadding: 0;\n\tmargin: 0;\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\tdisplay: none;\n}\n.ui-selectmenu-menu .ui-menu {\n\toverflow: auto;\n\toverflow-x: hidden;\n\tpadding-bottom: 1px;\n}\n.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup {\n\tfont-size: 1em;\n\tfont-weight: bold;\n\tline-height: 1.5;\n\tpadding: 2px 0.4em;\n\tmargin: 0.5em 0 0 0;\n\theight: auto;\n\tborder: 0;\n}\n.ui-selectmenu-open {\n\tdisplay: block;\n}\n.ui-selectmenu-text {\n\tdisplay: block;\n\tmargin-right: 20px;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n}\n.ui-selectmenu-button.ui-button {\n\ttext-align: left;\n\twhite-space: nowrap;\n\twidth: 14em;\n}\n.ui-selectmenu-icon.ui-icon {\n\tfloat: right;\n\tmargin-top: 0;\n}\n.ui-slider {\n\tposition: relative;\n\ttext-align: left;\n}\n.ui-slider .ui-slider-handle {\n\tposition: absolute;\n\tz-index: 2;\n\twidth: 1.2em;\n\theight: 1.2em;\n\tcursor: default;\n\t-ms-touch-action: none;\n\ttouch-action: none;\n}\n.ui-slider .ui-slider-range {\n\tposition: absolute;\n\tz-index: 1;\n\tfont-size: .7em;\n\tdisplay: block;\n\tborder: 0;\n\tbackground-position: 0 0;\n}\n\n/* support: IE8 - See #6727 */\n.ui-slider.ui-state-disabled .ui-slider-handle,\n.ui-slider.ui-state-disabled .ui-slider-range {\n\tfilter: inherit;\n}\n\n.ui-slider-horizontal {\n\theight: .8em;\n}\n.ui-slider-horizontal .ui-slider-handle {\n\ttop: -.3em;\n\tmargin-left: -.6em;\n}\n.ui-slider-horizontal .ui-slider-range {\n\ttop: 0;\n\theight: 100%;\n}\n.ui-slider-horizontal .ui-slider-range-min {\n\tleft: 0;\n}\n.ui-slider-horizontal .ui-slider-range-max {\n\tright: 0;\n}\n\n.ui-slider-vertical {\n\twidth: .8em;\n\theight: 100px;\n}\n.ui-slider-vertical .ui-slider-handle {\n\tleft: -.3em;\n\tmargin-left: 0;\n\tmargin-bottom: -.6em;\n}\n.ui-slider-vertical .ui-slider-range {\n\tleft: 0;\n\twidth: 100%;\n}\n.ui-slider-vertical .ui-slider-range-min {\n\tbottom: 0;\n}\n.ui-slider-vertical .ui-slider-range-max {\n\ttop: 0;\n}\n.ui-sortable-handle {\n\t-ms-touch-action: none;\n\ttouch-action: none;\n}\n.ui-spinner {\n\tposition: relative;\n\tdisplay: inline-block;\n\toverflow: hidden;\n\tpadding: 0;\n\tvertical-align: middle;\n}\n.ui-spinner-input {\n\tborder: none;\n\tbackground: none;\n\tcolor: inherit;\n\tpadding: .222em 0;\n\tmargin: .2em 0;\n\tvertical-align: middle;\n\tmargin-left: .4em;\n\tmargin-right: 2em;\n}\n.ui-spinner-button {\n\twidth: 1.6em;\n\theight: 50%;\n\tfont-size: .5em;\n\tpadding: 0;\n\tmargin: 0;\n\ttext-align: center;\n\tposition: absolute;\n\tcursor: default;\n\tdisplay: block;\n\toverflow: hidden;\n\tright: 0;\n}\n/* more specificity required here to override default borders */\n.ui-spinner a.ui-spinner-button {\n\tborder-top-style: none;\n\tborder-bottom-style: none;\n\tborder-right-style: none;\n}\n.ui-spinner-up {\n\ttop: 0;\n}\n.ui-spinner-down {\n\tbottom: 0;\n}\n.ui-tabs {\n\tposition: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as \"fixed\") */\n\tpadding: .2em;\n}\n.ui-tabs .ui-tabs-nav {\n\tmargin: 0;\n\tpadding: .2em .2em 0;\n}\n.ui-tabs .ui-tabs-nav li {\n\tlist-style: none;\n\tfloat: left;\n\tposition: relative;\n\ttop: 0;\n\tmargin: 1px .2em 0 0;\n\tborder-bottom-width: 0;\n\tpadding: 0;\n\twhite-space: nowrap;\n}\n.ui-tabs .ui-tabs-nav .ui-tabs-anchor {\n\tfloat: left;\n\tpadding: .5em 1em;\n\ttext-decoration: none;\n}\n.ui-tabs .ui-tabs-nav li.ui-tabs-active {\n\tmargin-bottom: -1px;\n\tpadding-bottom: 1px;\n}\n.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,\n.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,\n.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor {\n\tcursor: text;\n}\n.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor {\n\tcursor: pointer;\n}\n.ui-tabs .ui-tabs-panel {\n\tdisplay: block;\n\tborder-width: 0;\n\tpadding: 1em 1.4em;\n\tbackground: none;\n}\n.ui-tooltip {\n\tpadding: 8px;\n\tposition: absolute;\n\tz-index: 9999;\n\tmax-width: 300px;\n}\nbody .ui-tooltip {\n\tborder-width: 2px;\n}\n\n/* Component containers\n----------------------------------*/\n.ui-widget {\n\tfont-family: Arial,Helvetica,sans-serif;\n\tfont-size: 1em;\n}\n.ui-widget .ui-widget {\n\tfont-size: 1em;\n}\n.ui-widget input,\n.ui-widget select,\n.ui-widget textarea,\n.ui-widget button {\n\tfont-family: Arial,Helvetica,sans-serif;\n\tfont-size: 1em;\n}\n.ui-widget.ui-widget-content {\n\tborder: 1px solid #c5c5c5;\n}\n.ui-widget-content {\n\tborder: 1px solid #dddddd;\n\tbackground: #ffffff;\n\tcolor: #333333;\n}\n.ui-widget-content a {\n\tcolor: #333333;\n}\n.ui-widget-header {\n\tborder: 1px solid #dddddd;\n\tbackground: #e9e9e9;\n\tcolor: #333333;\n\tfont-weight: bold;\n}\n.ui-widget-header a {\n\tcolor: #333333;\n}\n\n/* Interaction states\n----------------------------------*/\n.ui-state-default,\n.ui-widget-content .ui-state-default,\n.ui-widget-header .ui-state-default,\n.ui-button,\n\n/* We use html here because we need a greater specificity to make sure disabled\nworks properly when clicked or hovered */\nhtml .ui-button.ui-state-disabled:hover,\nhtml .ui-button.ui-state-disabled:active {\n\tborder: 1px solid #c5c5c5;\n\tbackground: #f6f6f6;\n\tfont-weight: normal;\n\tcolor: #454545;\n}\n.ui-state-default a,\n.ui-state-default a:link,\n.ui-state-default a:visited,\na.ui-button,\na:link.ui-button,\na:visited.ui-button,\n.ui-button {\n\tcolor: #454545;\n\ttext-decoration: none;\n}\n.ui-state-hover,\n.ui-widget-content .ui-state-hover,\n.ui-widget-header .ui-state-hover,\n.ui-state-focus,\n.ui-widget-content .ui-state-focus,\n.ui-widget-header .ui-state-focus,\n.ui-button:hover,\n.ui-button:focus {\n\tborder: 1px solid #cccccc;\n\tbackground: #ededed;\n\tfont-weight: normal;\n\tcolor: #2b2b2b;\n}\n.ui-state-hover a,\n.ui-state-hover a:hover,\n.ui-state-hover a:link,\n.ui-state-hover a:visited,\n.ui-state-focus a,\n.ui-state-focus a:hover,\n.ui-state-focus a:link,\n.ui-state-focus a:visited,\na.ui-button:hover,\na.ui-button:focus {\n\tcolor: #2b2b2b;\n\ttext-decoration: none;\n}\n\n.ui-visual-focus {\n\tbox-shadow: 0 0 3px 1px rgb(94, 158, 214);\n}\n.ui-state-active,\n.ui-widget-content .ui-state-active,\n.ui-widget-header .ui-state-active,\na.ui-button:active,\n.ui-button:active,\n.ui-button.ui-state-active:hover {\n\tborder: 1px solid #003eff;\n\tbackground: #007fff;\n\tfont-weight: normal;\n\tcolor: #ffffff;\n}\n.ui-icon-background,\n.ui-state-active .ui-icon-background {\n\tborder: #003eff;\n\tbackground-color: #ffffff;\n}\n.ui-state-active a,\n.ui-state-active a:link,\n.ui-state-active a:visited {\n\tcolor: #ffffff;\n\ttext-decoration: none;\n}\n\n/* Interaction Cues\n----------------------------------*/\n.ui-state-highlight,\n.ui-widget-content .ui-state-highlight,\n.ui-widget-header .ui-state-highlight {\n\tborder: 1px solid #dad55e;\n\tbackground: #fffa90;\n\tcolor: #777620;\n}\n.ui-state-checked {\n\tborder: 1px solid #dad55e;\n\tbackground: #fffa90;\n}\n.ui-state-highlight a,\n.ui-widget-content .ui-state-highlight a,\n.ui-widget-header .ui-state-highlight a {\n\tcolor: #777620;\n}\n.ui-state-error,\n.ui-widget-content .ui-state-error,\n.ui-widget-header .ui-state-error {\n\tborder: 1px solid #f1a899;\n\tbackground: #fddfdf;\n\tcolor: #5f3f3f;\n}\n.ui-state-error a,\n.ui-widget-content .ui-state-error a,\n.ui-widget-header .ui-state-error a {\n\tcolor: #5f3f3f;\n}\n.ui-state-error-text,\n.ui-widget-content .ui-state-error-text,\n.ui-widget-header .ui-state-error-text {\n\tcolor: #5f3f3f;\n}\n.ui-priority-primary,\n.ui-widget-content .ui-priority-primary,\n.ui-widget-header .ui-priority-primary {\n\tfont-weight: bold;\n}\n.ui-priority-secondary,\n.ui-widget-content .ui-priority-secondary,\n.ui-widget-header .ui-priority-secondary {\n\topacity: .7;\n\tfilter:Alpha(Opacity=70); /* support: IE8 */\n\tfont-weight: normal;\n}\n.ui-state-disabled,\n.ui-widget-content .ui-state-disabled,\n.ui-widget-header .ui-state-disabled {\n\topacity: .35;\n\tfilter:Alpha(Opacity=35); /* support: IE8 */\n\tbackground-image: none;\n}\n.ui-state-disabled .ui-icon {\n\tfilter:Alpha(Opacity=35); /* support: IE8 - See #6059 */\n}\n\n/* Icons\n----------------------------------*/\n\n/* states and images */\n.ui-icon {\n\twidth: 16px;\n\theight: 16px;\n}\n.ui-icon,\n.ui-widget-content .ui-icon {\n\tbackground-image: url(\"images/ui-icons_444444_256x240.png\");\n}\n.ui-widget-header .ui-icon {\n\tbackground-image: url(\"images/ui-icons_444444_256x240.png\");\n}\n.ui-state-hover .ui-icon,\n.ui-state-focus .ui-icon,\n.ui-button:hover .ui-icon,\n.ui-button:focus .ui-icon {\n\tbackground-image: url(\"images/ui-icons_555555_256x240.png\");\n}\n.ui-state-active .ui-icon,\n.ui-button:active .ui-icon {\n\tbackground-image: url(\"images/ui-icons_ffffff_256x240.png\");\n}\n.ui-state-highlight .ui-icon,\n.ui-button .ui-state-highlight.ui-icon {\n\tbackground-image: url(\"images/ui-icons_777620_256x240.png\");\n}\n.ui-state-error .ui-icon,\n.ui-state-error-text .ui-icon {\n\tbackground-image: url(\"images/ui-icons_cc0000_256x240.png\");\n}\n.ui-button .ui-icon {\n\tbackground-image: url(\"images/ui-icons_777777_256x240.png\");\n}\n\n/* positioning */\n.ui-icon-blank { background-position: 16px 16px; }\n.ui-icon-caret-1-n { background-position: 0 0; }\n.ui-icon-caret-1-ne { background-position: -16px 0; }\n.ui-icon-caret-1-e { background-position: -32px 0; }\n.ui-icon-caret-1-se { background-position: -48px 0; }\n.ui-icon-caret-1-s { background-position: -65px 0; }\n.ui-icon-caret-1-sw { background-position: -80px 0; }\n.ui-icon-caret-1-w { background-position: -96px 0; }\n.ui-icon-caret-1-nw { background-position: -112px 0; }\n.ui-icon-caret-2-n-s { background-position: -128px 0; }\n.ui-icon-caret-2-e-w { background-position: -144px 0; }\n.ui-icon-triangle-1-n { background-position: 0 -16px; }\n.ui-icon-triangle-1-ne { background-position: -16px -16px; }\n.ui-icon-triangle-1-e { background-position: -32px -16px; }\n.ui-icon-triangle-1-se { background-position: -48px -16px; }\n.ui-icon-triangle-1-s { background-position: -65px -16px; }\n.ui-icon-triangle-1-sw { background-position: -80px -16px; }\n.ui-icon-triangle-1-w { background-position: -96px -16px; }\n.ui-icon-triangle-1-nw { background-position: -112px -16px; }\n.ui-icon-triangle-2-n-s { background-position: -128px -16px; }\n.ui-icon-triangle-2-e-w { background-position: -144px -16px; }\n.ui-icon-arrow-1-n { background-position: 0 -32px; }\n.ui-icon-arrow-1-ne { background-position: -16px -32px; }\n.ui-icon-arrow-1-e { background-position: -32px -32px; }\n.ui-icon-arrow-1-se { background-position: -48px -32px; }\n.ui-icon-arrow-1-s { background-position: -65px -32px; }\n.ui-icon-arrow-1-sw { background-position: -80px -32px; }\n.ui-icon-arrow-1-w { background-position: -96px -32px; }\n.ui-icon-arrow-1-nw { background-position: -112px -32px; }\n.ui-icon-arrow-2-n-s { background-position: -128px -32px; }\n.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }\n.ui-icon-arrow-2-e-w { background-position: -160px -32px; }\n.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }\n.ui-icon-arrowstop-1-n { background-position: -192px -32px; }\n.ui-icon-arrowstop-1-e { background-position: -208px -32px; }\n.ui-icon-arrowstop-1-s { background-position: -224px -32px; }\n.ui-icon-arrowstop-1-w { background-position: -240px -32px; }\n.ui-icon-arrowthick-1-n { background-position: 1px -48px; }\n.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }\n.ui-icon-arrowthick-1-e { background-position: -32px -48px; }\n.ui-icon-arrowthick-1-se { background-position: -48px -48px; }\n.ui-icon-arrowthick-1-s { background-position: -64px -48px; }\n.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }\n.ui-icon-arrowthick-1-w { background-position: -96px -48px; }\n.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }\n.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }\n.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }\n.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }\n.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }\n.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }\n.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }\n.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }\n.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }\n.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }\n.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }\n.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }\n.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }\n.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }\n.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }\n.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }\n.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }\n.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }\n.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }\n.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }\n.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }\n.ui-icon-arrow-4 { background-position: 0 -80px; }\n.ui-icon-arrow-4-diag { background-position: -16px -80px; }\n.ui-icon-extlink { background-position: -32px -80px; }\n.ui-icon-newwin { background-position: -48px -80px; }\n.ui-icon-refresh { background-position: -64px -80px; }\n.ui-icon-shuffle { background-position: -80px -80px; }\n.ui-icon-transfer-e-w { background-position: -96px -80px; }\n.ui-icon-transferthick-e-w { background-position: -112px -80px; }\n.ui-icon-folder-collapsed { background-position: 0 -96px; }\n.ui-icon-folder-open { background-position: -16px -96px; }\n.ui-icon-document { background-position: -32px -96px; }\n.ui-icon-document-b { background-position: -48px -96px; }\n.ui-icon-note { background-position: -64px -96px; }\n.ui-icon-mail-closed { background-position: -80px -96px; }\n.ui-icon-mail-open { background-position: -96px -96px; }\n.ui-icon-suitcase { background-position: -112px -96px; }\n.ui-icon-comment { background-position: -128px -96px; }\n.ui-icon-person { background-position: -144px -96px; }\n.ui-icon-print { background-position: -160px -96px; }\n.ui-icon-trash { background-position: -176px -96px; }\n.ui-icon-locked { background-position: -192px -96px; }\n.ui-icon-unlocked { background-position: -208px -96px; }\n.ui-icon-bookmark { background-position: -224px -96px; }\n.ui-icon-tag { background-position: -240px -96px; }\n.ui-icon-home { background-position: 0 -112px; }\n.ui-icon-flag { background-position: -16px -112px; }\n.ui-icon-calendar { background-position: -32px -112px; }\n.ui-icon-cart { background-position: -48px -112px; }\n.ui-icon-pencil { background-position: -64px -112px; }\n.ui-icon-clock { background-position: -80px -112px; }\n.ui-icon-disk { background-position: -96px -112px; }\n.ui-icon-calculator { background-position: -112px -112px; }\n.ui-icon-zoomin { background-position: -128px -112px; }\n.ui-icon-zoomout { background-position: -144px -112px; }\n.ui-icon-search { background-position: -160px -112px; }\n.ui-icon-wrench { background-position: -176px -112px; }\n.ui-icon-gear { background-position: -192px -112px; }\n.ui-icon-heart { background-position: -208px -112px; }\n.ui-icon-star { background-position: -224px -112px; }\n.ui-icon-link { background-position: -240px -112px; }\n.ui-icon-cancel { background-position: 0 -128px; }\n.ui-icon-plus { background-position: -16px -128px; }\n.ui-icon-plusthick { background-position: -32px -128px; }\n.ui-icon-minus { background-position: -48px -128px; }\n.ui-icon-minusthick { background-position: -64px -128px; }\n.ui-icon-close { background-position: -80px -128px; }\n.ui-icon-closethick { background-position: -96px -128px; }\n.ui-icon-key { background-position: -112px -128px; }\n.ui-icon-lightbulb { background-position: -128px -128px; }\n.ui-icon-scissors { background-position: -144px -128px; }\n.ui-icon-clipboard { background-position: -160px -128px; }\n.ui-icon-copy { background-position: -176px -128px; }\n.ui-icon-contact { background-position: -192px -128px; }\n.ui-icon-image { background-position: -208px -128px; }\n.ui-icon-video { background-position: -224px -128px; }\n.ui-icon-script { background-position: -240px -128px; }\n.ui-icon-alert { background-position: 0 -144px; }\n.ui-icon-info { background-position: -16px -144px; }\n.ui-icon-notice { background-position: -32px -144px; }\n.ui-icon-help { background-position: -48px -144px; }\n.ui-icon-check { background-position: -64px -144px; }\n.ui-icon-bullet { background-position: -80px -144px; }\n.ui-icon-radio-on { background-position: -96px -144px; }\n.ui-icon-radio-off { background-position: -112px -144px; }\n.ui-icon-pin-w { background-position: -128px -144px; }\n.ui-icon-pin-s { background-position: -144px -144px; }\n.ui-icon-play { background-position: 0 -160px; }\n.ui-icon-pause { background-position: -16px -160px; }\n.ui-icon-seek-next { background-position: -32px -160px; }\n.ui-icon-seek-prev { background-position: -48px -160px; }\n.ui-icon-seek-end { background-position: -64px -160px; }\n.ui-icon-seek-start { background-position: -80px -160px; }\n/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */\n.ui-icon-seek-first { background-position: -80px -160px; }\n.ui-icon-stop { background-position: -96px -160px; }\n.ui-icon-eject { background-position: -112px -160px; }\n.ui-icon-volume-off { background-position: -128px -160px; }\n.ui-icon-volume-on { background-position: -144px -160px; }\n.ui-icon-power { background-position: 0 -176px; }\n.ui-icon-signal-diag { background-position: -16px -176px; }\n.ui-icon-signal { background-position: -32px -176px; }\n.ui-icon-battery-0 { background-position: -48px -176px; }\n.ui-icon-battery-1 { background-position: -64px -176px; }\n.ui-icon-battery-2 { background-position: -80px -176px; }\n.ui-icon-battery-3 { background-position: -96px -176px; }\n.ui-icon-circle-plus { background-position: 0 -192px; }\n.ui-icon-circle-minus { background-position: -16px -192px; }\n.ui-icon-circle-close { background-position: -32px -192px; }\n.ui-icon-circle-triangle-e { background-position: -48px -192px; }\n.ui-icon-circle-triangle-s { background-position: -64px -192px; }\n.ui-icon-circle-triangle-w { background-position: -80px -192px; }\n.ui-icon-circle-triangle-n { background-position: -96px -192px; }\n.ui-icon-circle-arrow-e { background-position: -112px -192px; }\n.ui-icon-circle-arrow-s { background-position: -128px -192px; }\n.ui-icon-circle-arrow-w { background-position: -144px -192px; }\n.ui-icon-circle-arrow-n { background-position: -160px -192px; }\n.ui-icon-circle-zoomin { background-position: -176px -192px; }\n.ui-icon-circle-zoomout { background-position: -192px -192px; }\n.ui-icon-circle-check { background-position: -208px -192px; }\n.ui-icon-circlesmall-plus { background-position: 0 -208px; }\n.ui-icon-circlesmall-minus { background-position: -16px -208px; }\n.ui-icon-circlesmall-close { background-position: -32px -208px; }\n.ui-icon-squaresmall-plus { background-position: -48px -208px; }\n.ui-icon-squaresmall-minus { background-position: -64px -208px; }\n.ui-icon-squaresmall-close { background-position: -80px -208px; }\n.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }\n.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }\n.ui-icon-grip-solid-vertical { background-position: -32px -224px; }\n.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }\n.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }\n.ui-icon-grip-diagonal-se { background-position: -80px -224px; }\n\n\n/* Misc visuals\n----------------------------------*/\n\n/* Corner radius */\n.ui-corner-all,\n.ui-corner-top,\n.ui-corner-left,\n.ui-corner-tl {\n\tborder-top-left-radius: 3px;\n}\n.ui-corner-all,\n.ui-corner-top,\n.ui-corner-right,\n.ui-corner-tr {\n\tborder-top-right-radius: 3px;\n}\n.ui-corner-all,\n.ui-corner-bottom,\n.ui-corner-left,\n.ui-corner-bl {\n\tborder-bottom-left-radius: 3px;\n}\n.ui-corner-all,\n.ui-corner-bottom,\n.ui-corner-right,\n.ui-corner-br {\n\tborder-bottom-right-radius: 3px;\n}\n\n/* Overlays */\n.ui-widget-overlay {\n\tbackground: #aaaaaa;\n\topacity: .003;\n\tfilter: Alpha(Opacity=.3); /* support: IE8 */\n}\n.ui-widget-shadow {\n\t-webkit-box-shadow: 0px 0px 5px #666666;\n\tbox-shadow: 0px 0px 5px #666666;\n}\n"
  },
  {
    "path": "automatic/static/css/login-app.css",
    "content": "@charset \"UTF-8\";html{overflow:visible}body,input,textarea{font-family:'微软雅黑','Helvetica Neue',sans-serif,SimHei;-webkit-font-smoothing:antialiased}body,html{height:100%}body{background:#F7F6F2}a{color:#2D59A2;text-decoration:none;border-bottom:1px solid inherit}a.hovered:hover{border-bottom:1px solid #2D59A2}a.green{color:#A1CF64!important}a.green.hovered:hover{border-bottom:1px solid #A1CF64}a.red{color:#D95C5C!important}a.red.hovered:hover{border-bottom:1px solid #D95C5C}code{font-family:Consolas,Courier,'微软雅黑',\"Liberation Mono\",monospace!important}.monospaced-font{font-family:Consolas,Courier,Courier New,'Liberation Mono',monospace!important}.clearfix:after,.clearfix:before{content:\"\";display:table}.clearfix:after{clear:both;overflow:hidden}.clearfix{zoom:1}.ellipsis{overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis;white-space:nowrap}.ellipsis-2{display:-webkit-box;overflow:hidden;text-overflow:ellipsis;white-space:normal!important;-webkit-line-clamp:2;-webkit-box-orient:vertical}.empty.list{width:auto;padding:10px;font-size:12px;color:#999}.empty.list.center{text-align:center}.empty.list.right{text-align:right}a.down.more:before,a.right.more:before,a.up.more:before{display:inline-block;opacity:.75;margin:0 .25em 0 0;width:1.23em;height:1em;font-family:Icons;font-style:normal;line-height:1;font-weight:400;text-decoration:inherit;text-align:center;speak:none;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}a.down.more:before{content:'\\f103'}a.right.more:before{content:'\\f061'}a.up.more:before{content:'\\f102'}a.more{display:block;font-size:14px;color:#999}a.center.more{text-align:center}a.more:hover{color:#2D59A2}a img{border:none}[class*=\"-center\"]>.wrapper{-webkit-transition:padding-left ease-in-out .3s;-moz-transition:padding-left ease-in-out .3s;-ms-transition:padding-left ease-in-out .3s;-o-transition:padding-left ease-in-out .3s;transition:padding-left ease-in-out .3s;padding:60px 0 0}[class*=\"-center\"]>.wrapper>section{padding:14px 40px}#global-modal .actions>.button{font-size:14px}textarea.comment{font-size:13px;border:1px solid #CCC;padding:5px 0 0 5px;background:#FFF;border-radius:3px;color:rgba(0,0,0,.7);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;outline:0;resize:none;margin-left:42px;width:60%;height:23px}#top-menu{height:60px;padding:0;z-index:1000}#top-menu .header{font-size:20px;line-height:40px;text-align:center;height:40px;margin:auto;padding:10px 0;position:relative}#top-menu .ui.coding.login.button,#top-menu .ui.coding.register.button{padding:0 2em;font-weight:400}#top-menu .ui.coding.register.button{background-color:#323A45!important;color:#fff!important;margin-left:15px}#top-menu .not-login-menu>a.item,#top-menu .not-login-menu>div{margin-left:10px!important;margin-right:10px!important}#top-menu .not-login-menu>a.item.func-item{padding-left:5px!important;padding-right:5px!important}#top-menu .left.menu{position:absolute;margin:9px 0;left:75px;top:0;z-index:999}#top-menu .left.menu .item{font-size:16px}#top-menu .left.menu .item:before{height:0}#top-menu .left.menu a.item{padding:3px 5px;margin:10px 2px;text-align:center;font-size:14px}#top-menu .left.menu a.item .icon{margin-right:0}#top-menu .right.menu{position:absolute;top:0;right:0;padding:0}#top-menu .right.menu .dropdown .menu{width:120px}#top-menu .right.menu .dropdown .menu:after{right:55px;left:auto}#top-menu .right.menu .dropdown .menu.wide{width:300px!important}#top-menu .right.menu .dropdown .menu.task-menu{width:auto;left:-30px}#top-menu .right.menu .dropdown .menu.wide.task-menu{left:-88px}#top-menu .right.menu .dropdown .menu.wide.task-menu:after{right:178px}#top-menu .right.menu .dropdown .menu.message-menu{left:-148px}#top-menu .right.menu .dropdown .menu.message-menu:after{right:118px}#top-menu .right.menu .dropdown:hover .menu.message-menu{height:310px}#top-menu .right.menu .dropdown.icon{padding-left:50px;margin:0;font-size:24px}#top-menu .right.menu .add .menu{left:-30px}#top-menu .right.menu .add .menu :after{right:55px}#top-menu .right.menu .item{padding:17.5px 15px}#top-menu .right.menu .item:before{height:0}#top-menu .right.menu .icon.item i.icon{font-size:25px;z-index:999}#top-menu .right.menu>.login.button,#top-menu .right.menu>.register.button{margin:15px 6px}#top-menu .logo{padding:0;margin:0;position:absolute;left:0;top:0;z-index:999}#top-menu .inbox.message:after{content:'';width:8px;height:8px;border-radius:8px;background-color:#f75288;position:absolute;right:14px;top:14px;border:2px solid #FFF}#top-menu .public-pages{position:absolute;top:2px;left:150px;width:352px;height:40px}#top-menu .public-pages .folded{display:none}#top-menu .public-pages .normal .dropdown>.no-arrow{margin-right:2px}#top-menu .public-pages .normal .dropdown>.no-arrow :after{border:none}#top-menu .public-pages .normal .dropdown>.item{margin-right:10px}#top-menu .public-pages .normal .dropdown>.item:after{content:'';width:0;height:0;border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid #000;position:absolute;top:10px;right:-7px}#top-menu #quick-search{margin-top:3px}#top-menu #quick-search .search:focus{width:340px}#top-menu .list-wrapper{position:absolute;top:0;left:0;right:0;bottom:36px;overflow:auto}#top-menu .list-wrapper .list{font-size:12px;border-bottom:2px solid #EFEFEF;overflow:hidden;margin:0 10px;padding:6px 0;box-sizing:border-box;cursor:default;transition:background .2s ease}#top-menu .list-wrapper .list:last-child{border-bottom:none}#top-menu .list-wrapper .list:hover{background:#F9F9F9}#top-menu .list-wrapper .list.unread{color:#333;font-weight:700}#top-menu .list-wrapper .list.oneline{height:36px;line-height:22px}#top-menu .list-wrapper .list.twoline{height:48px;line-height:18px;white-space:normal}#top-menu .list-wrapper .list .loading{line-height:initial;text-align:center}#top-menu .list-wrapper .list.empty{padding-top:100px;text-align:center}#top-menu .list-wrapper .list.empty:hover{background:none!important}#top-menu .list-wrapper .list.empty .button{margin-top:20px;font-weight:400}#top-menu .list-wrapper .message.list{display:block;position:relative}#top-menu .list-wrapper .message.list .reply.icon{display:none}#top-menu .list-wrapper .message.list.replied .reply.icon{display:inline-block}#top-menu .list-wrapper .message.list>div,#top-menu .list-wrapper .message.list>img{float:left}#top-menu .list-wrapper .message.list>img{width:36px;height:36px;border-radius:50%;margin:0 6px}#top-menu .list-wrapper .message.list .message-content{color:#666;top:24px}#top-menu .list-wrapper .message.list .message-content,#top-menu .list-wrapper .message.list .message-friend{width:100%;box-sizing:border-box;padding:3px 8px 3px 50px;position:absolute}#top-menu .list-wrapper .message.list .message-content p,#top-menu .list-wrapper .message.list .message-friend p{margin:0}#top-menu .frames{position:absolute;top:36px;left:0;right:0;bottom:0}#top-menu .frames .frame{height:276px}#top-menu .frames .show-all-link{position:absolute;left:0;right:0;bottom:0;height:36px;line-height:36px;font-size:12px;text-align:center;color:#666;border-top:2px solid #EFEFEF}@media only screen and (min-width:1260px) and (max-width:1420px){#top-menu .left.menu a.item{margin:10px 2px}}@media only screen and (max-width:1260px){#top-menu .public-pages>a{display:list-item!important;list-style:none;width:50px}#top-menu .public-pages .normal{display:none}#top-menu .public-pages .folded{display:block;position:relative;width:50px}#top-menu .public-pages .folded:after{content:'';width:0;height:0;border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid #000;position:absolute;top:20px;right:0}.random-background.account-background #top-menu .public-pages{background:0 0}.random-background.account-background #top-menu .public-pages:hover{background:rgba(255,255,255,.5)}}.menu-item-wrapper{width:114px;padding-left:360px;height:100%}.menu-item-wrapper .item{border-top:none!important}.menu-item-wrapper .item.with-border-bottom{border-bottom:1px solid #DDD!important}.top-menu-tasks .list .empty{width:100px}.top-menu-tasks .task{position:relative;height:36px;line-height:36px;padding:0 6px;box-sizing:border-box;transition:background .2s ease}.top-menu-tasks .task:hover{background:rgba(0,0,0,.02)}.top-menu-tasks .task:last-child{text-align:center}.top-menu-tasks .task:last-child>div{border-bottom:none}.top-menu-tasks .task>div{margin:0 6px;color:#333;position:absolute;top:0;left:0;right:0;bottom:0;border-bottom:1px solid #DDD}.top-menu-tasks .task>div:hover{color:#333}.top-menu-tasks .task>div:last-child{color:#666}.top-menu-tasks .task .status{font-size:1em;color:#333}.top-menu-tasks .task .status i{margin:0;width:1em}.top-menu-tasks .task .task-urgency-dropdown{position:relative!important;width:auto!important;vertical-align:top}.top-menu-tasks .task .task-urgency-dropdown .task-urgency-wrapper{position:relative!important}.top-menu-tasks .task .task-urgency-dropdown .urgency.icon{float:left;margin-left:4px;line-height:36px}.top-menu-tasks .task .date{display:inline-block;padding:2px 4px;color:#FFF;background:#90A9C2;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;cursor:pointer;line-height:1em;font-size:12px;margin:0 .4em 0 .1em}.top-menu-tasks .task .date.expired{background:#D04D4D}.top-menu-tasks .task .date.today{background:#F25858}.top-menu-tasks .task .date.tomorrow{background:#F4AE60}.top-menu-tasks .task .date.done{background:#999!important}.top-menu-tasks .task .title,.top-menu-tasks .task a,.top-menu-tasks .task a:hover{color:#666}.top-menu-tasks .task .title.em,.top-menu-tasks .task a.em,.top-menu-tasks .task a:hover.em{font-weight:700;color:#333}.menu.wide .tabs{height:36px}.menu.wide .tabs .tab{float:left;height:36px;line-height:36px;border-bottom:2px solid #EEE;box-sizing:border-box;font-size:14px;text-align:center;cursor:pointer;transition:background .2s ease}.menu.wide .tabs .tab:hover{background:rgba(0,0,0,.02)}.menu.wide .tabs .tab.active{font-weight:700;border-bottom-color:#999}.menu.wide .tabs .tab>span{background:#F75288;border-radius:10px;font-size:12px;min-width:20px;height:20px;line-height:20px;padding:0 2px;box-sizing:border-box;color:#FFF;display:inline-block;font-weight:400}#top-menu .avatar.image{position:absolute;margin-top:-10px;height:40px;width:40px;z-index:999;-webkit-border-radius:40px;-moz-border-radius:40px;border-radius:40px}#top-menu .avatar img{height:40px;width:40px}#top-menu input.search{width:120px;-webkit-transition:all ease-in-out .3s;-moz-transition:all ease-in-out .3s;-ms-transition:all ease-in-out .3s;-o-transition:all ease-in-out .3s;transition:all ease-in-out .3s}.not-confirmed-top#top-menu{top:24px}@media screen and (max-width:880px){.not-confirmed-top#top-menu{top:40.5px}}@media screen and (max-width:442px){.not-confirmed-top#top-menu{top:57px}}#dropdown-icon:before{content:\"\\f107\"}.mart-logo{padding:0!important;height:60px}.mart-logo a{padding:5px 10px 0!important;height:60px}.mart-logo img{height:50px}.mart-logo .vertical-line{position:absolute;top:0;right:0;margin-top:20px;height:20px;border-left:1px solid rgba(0,0,0,.2)}.coding .ui.menu:not(.vertical) .item>.input>.icon{padding-top:.82em}.ui.menu a.item.func-item{line-height:normal!important;margin:0!important;padding:6px 14px!important;font-weight:400!important;text-align:left!important}.search-input input.search:focus{width:340px!important}.project-num{position:absolute;width:auto;line-height:12px;background:#f75288;border-radius:10px;padding:2px 6px;color:#FFF;font-size:10px;border:2px solid #FFF;text-align:center;transform:scale(0.875);margin-top:-2px}#context-menu{width:80px!important;height:100%!important;overflow-y:auto;top:60px;-webkit-transition:margin-left .8s ease,margin-top .8s ease;-moz-transition:margin-left .8s ease,margin-top .8s ease;transition:margin-left .8s ease,margin-top .8s ease}#context-menu.active+.wrapper{margin-left:80px}#context-menu a.item{text-align:center;height:60px!important}#context-menu i.icon{margin-bottom:3px!important}#context-avatar{border:1px solid #FFF;margin-top:3px;background:#FFF}#context-menu .item:before{height:0}#context-menu .item.divider{height:30px!important}#context-menu .item.divider:last-child{height:60px!important}#context-menu .menu-title{font-size:12px}.not-confirmed-sidebar#context-menu{top:84px}@media screen and (max-width:880px){.not-confirmed-sidebar#context-menu{top:100.5px}}@media screen and (max-width:442px){.not-confirmed-sidebar#context-menu{top:117px}}#need-confirm-email{width:100%;text-align:center;z-index:1000;position:fixed;font-weight:700;padding:2px;font-size:14px;height:24px}@media screen and (max-width:880px){#need-confirm-email{height:40.5px}}@media screen and (max-width:442px){#need-confirm-email{height:57px}}@media only screen and (max-height:660px){#context-menu a.item{width:100%;height:auto!important;display:inline-block;padding:8px 0}}#inner-menu~.container{margin-left:200px;padding:30px 60px 0}#inner-menu{width:200px;height:100%!important;overflow-y:hidden;border-right:1px solid #CCC}#inner-menu:hover{overflow-y:auto}#inner-menu>.sep{width:100%;height:1px;background:#CCC;visibility:visible;margin:20px 0}#inner-menu header.item{font-size:18px;padding:30px 25px 10px}#inner-menu header a{float:right}#inner-menu header a i.icon{margin:0}#inner-menu header article{margin:5px 0;font-size:12px;font-weight:400;line-height:16px;color:#666;word-wrap:break-word;word-break:normal}#inner-menu a.item{font-size:14px;padding:10px 25px;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis;white-space:nowrap}#inner-menu a.item.active{border-radius:0}#inner-menu a.item i.icon{float:none;margin:0 .25em 0 0}.scroll-holder{display:block;height:60px}#project-list .item{position:relative;margin:5px;display:inline-block;vertical-align:top;text-align:center;font-size:12px;width:120px}#project-list .item img{margin:0;padding:0;border-radius:3px}#project-list .project-name{word-break:break-all;margin-top:15px;color:#666}#project-list .project-name i.lock.icon{margin:0 -4px 0 0;padding:0}#project-list .create-project{float:left;width:117px;height:118px;border:1px dashed #CCC;text-align:center;line-height:119px;display:inline-block;margin:0 0 15px;padding:0}#project-list .create-project .add.icon{margin:0}#project-list .item.loading{height:120px;line-height:110px}#project-list .list.view{display:block;position:relative;margin:0 10px;padding:20px 0;border-bottom:1px solid #DDD;min-height:56px}#project-list .list.view>.icon{position:relative;float:left;display:inline-block;width:56px;height:56px}#project-list .list.view>.icon img{border-radius:3px;border:1px solid #EEE}#project-list .list.view>.info{font-size:14px;padding-left:75px}#project-list .list.view>.info p.name{margin:7px 0 6px}#project-list .list.view>.info p.name a{color:#000;font-size:16px}#project-list .list.view>.info p.description{margin:0;color:#666;word-break:break-all;display:block;height:20px;line-height:20px;overflow:hidden}.message-tip{position:absolute;padding:2px;right:10px;top:0;width:auto;min-width:12px;height:12px;line-height:12px;background:#f75288;border-radius:12px;color:#FFF;font-size:10px;font-style:normal;border:2px solid #FFF;text-align:center}.dark.message-tip{border:2px solid #000}.message-tip.tiny{top:-5px;right:-8px}.message-breath{box-shadow:0 1px 8px #f75288}@-webkit-keyframes breathe{0%{box-shadow:0 1px 4px rgba(255,255,255,.1)}100%{box-shadow:0 0 15px #f75288}}.avatar-title-action{position:relative;display:table;width:100%}.avatar-title-action>.action,.avatar-title-action>.avatar,.avatar-title-action>.title{display:table-cell;vertical-align:middle}@media only screen and (max-width:767px){#top-menu .left.menu,#top-menu .right.menu .add-project,#top-menu .right.menu .inbox{display:none}}@media only screen and (min-width:1400px){#project-list .list.view{display:inline-block;width:46%;vertical-align:top}#project-list .list.view:nth-child(2n+1){margin-right:4%}}.cg.flash{width:300px;font-size:14px;margin-left:-150px;position:fixed;top:-500px;left:50%;z-index:9999;background-color:#F4F4F4;color:#666;border-bottom-left-radius:5px;border-bottom-right-radius:5px;-webkit-box-shadow:2px 2px 7px #CCC;-moz-box-shadow:2px 2px 7px #CCC;-ms-box-shadow:2px 2px 7px #CCC;-o-box-shadow:2px 2px 7px #CCC;box-shadow:2px 2px 7px #CCC;-webkit-transition:all ease-in-out .6s;-moz-transition:all ease-in-out .6s;-ms-transition:all ease-in-out .6s;-o-transition:all ease-in-out .6s;transition:all ease-in-out .6s;opacity:0}.cg.flash>.hide,.cg.flash>.more{padding:3px;font-size:12px;cursor:pointer}.cg.flash>.outer{max-height:300px;overflow-x:hidden;overflow-y:auto;-webkit-transition:margin ease-in-out .2s;-moz-transition:margin ease-in-out .2s;-ms-transition:margin ease-in-out .2s;-o-transition:margin ease-in-out .2s;transition:margin ease-in-out .2s}.cg.flash:hover>.outer{margin-top:15px}.cg.flash>.outer>.message{height:0;opacity:0;-webkit-transition:all linear .6s;-moz-transition:all linear .6s;-ms-transition:all linear .6s;-o-transition:all linear .6s;transition:all linear .6s;position:relative}.cg.flash>.outer>.active.message{opacity:1;height:auto;padding:10px;word-break:break-all}.cg.flash>.close.icon:first-child{z-index:inherit;position:absolute;right:-5px;top:-14px;opacity:0;color:#A95252;display:inline;cursor:pointer;-webkit-transition:all ease-in-out .2s;-moz-transition:all ease-in-out .2s;-ms-transition:all ease-in-out .2s;-o-transition:all ease-in-out .2s;transition:all ease-in-out .2s}.cg.flash:hover>.close.icon:first-child{opacity:1;top:0}.cg.center.flash{text-align:center}.cg.active.flash{top:0;opacity:1}.cg.flash>.outer>.success.message,.cg.success.flash{background-color:#DEFCD5;color:#52A954}.cg.fail.flash,.cg.flash>.outer>.fail.message{background-color:#F1D7D7;color:#A95252}.cg.flash>.outer>.warn.message,.cg.warn.flash{background-color:#F6F3D5;color:#96904D}.cg.pagination-outer{display:block;margin:10px}.cg.inline.pagination-outer{display:inline-block}.cg.center.pagination-outer{text-align:center}.cg.pagination{height:auto;background:#FFF;width:auto;display:inline-block;padding:5px;border-radius:2px}.cg.left.pagination-outer .cg.pagination{float:left}.cg.right.pagination-outer .cg.pagination{float:right}.cg.pagination .page{min-width:20px;margin:3px;font-size:10px;display:inline-block;text-align:center;cursor:pointer;color:#999}.cg.pagination .page i.icon{margin:0;background:0 0}.cg.pagination .page.active,.cg.pagination .page:hover{background:#EEE;color:#000}.cg.pagination .page.next:hover,.cg.pagination .page.prev:hover{background:0 0}.file-icon{float:left;margin-right:5px;width:45px;height:45px;text-align:center;background:50% 50%/contain #000;color:#fff;-webkit-background-size:contain;box-sizing:border-box;line-height:45px;font-weight:bolder}.file-icon.img{width:45px;height:45px;background:0 0}.file-icon.doc,.file-icon.docx{background-color:#4a83dc}.file-icon.ppt,.file-icon.pptx{background-color:#fcba17}.file-icon.pdf{background-color:#ff0034}.file-icon.xls,.file-icon.xlsx{background-color:#00c075}.file-icon.txt{background-color:#b5bbc4}.file-icon.rar,.file-icon.zip{background-color:#8e6dd2}.file-icon.html,.file-icon.markd,.file-icon.markdown,.file-icon.md,.file-icon.mdown{background-color:#c5f0e9}img.emotion.emoji{width:22px!important;vertical-align:middle}img.emotion.monkey{width:96px;vertical-align:bottom}cg-emotion>.ui.top.right.pointing.emotion.box:first-child{top:3px;right:-.75em}.ui.top.right.pointing.emotion.box .menu:after{right:.75em}cg-emotion>.ui.top.right.pointing.emotion.box:first-child .menu:after{right:1em}.ui.dropdown.emotion.box .item{padding:0!important;background:#FFF!important}.ui.dropdown.emotion.box .item:hover{background-color:#FFF}.ui.dropdown.emotion.box .emotions.coding{padding:5px;width:348px;transition:display .5s;-webkit-transition:display .5s;-moz-transition:display .5s;-o-transition:display .5s}.ui.dropdown.emotion.box .emotions.coding ul{list-style:none;padding:0;margin:0}.ui.dropdown.emotion.box .emotions.coding li.coding-emoji{background-image:url(/static/2caef0ae611d6f3d10b521aa71787b6b.png)}.ui.dropdown.emotion.box .emotions.coding li.festival-emoji{background-image:url(/static/6d8aaa2341cdffdb15912bbe4e849744.png)}.ui.dropdown.emotion.box .emotions.coding li.coding-emoji,.ui.dropdown.emotion.box .emotions.coding li.festival-emoji{width:50px;height:50px;float:left;background-repeat:no-repeat;border:1px solid #EEE;margin:3px;cursor:pointer;background-size:auto 50px}.ui.dropdown.emotion.box .emotions.emojis{transition:display .5s;-webkit-transition:display .5s;-moz-transition:display .5s;-o-transition:display .5s}.ui.dropdown.emotion.box .tabs{border-top:1px solid #eee}.ui.dropdown.emotion.box li:hover{border:1px solid #AAA!important}.ui.dropdown.emotion.box .tab{padding:5px 10px;margin-left:7px;font-size:14px;float:left;text-align:center;background:#FFF;border-bottom:0;line-height:24px;color:#666}.ui.dropdown.emotion.box .tab.active{border-bottom:1px solid #000!important;margin-bottom:0;color:#000;background:#FFF!important}.ui.dropdown.emotion.box .tab img.small{height:23px;padding:2px}.ui.dropdown.emotion.box .tab img{height:25px;padding:1px}.ui.dropdown.emotion.box .emotions.emojis{width:348px;background:#FFF;padding:5px;display:inline-block}.ui.dropdown.emotion.box .emotions.emojis ul{margin:0;padding:0}.ui.dropdown.emotion.box .emotions.emojis ul li{list-style:none}.ui.dropdown.emotion.box .emotions.emojis .emoji{float:left;width:25px;height:25px;margin-left:2px;margin-bottom:2px;background-image:url(/static/9abc65a18775b83f68aecb0edec7e8bf.png);background-repeat:no-repeat;border:1px solid #FFF;cursor:pointer;background-size:auto 24px}.ui.dropdown.emotion.box .emotions.coding,.ui.dropdown.emotion.box .emotions.emojis{position:relative}.ui.dropdown.emotion.box .active.item{border-top:1px solid rgba(0,0,0,.05)!important}.ui.dropdown.emotion.box .emotion-preview{position:absolute;display:none;background:#FFF;border:1px solid #EEE;box-shadow:1px 1px 0 0 #eee}.ui.dropdown.emotion.box .emotion-preview:hover{display:none}.ui.dropdown.emotion.box .emotion-preview>div{position:relative;height:100%}.ui.dropdown.emotion.box .emotion-preview .emotion-word{position:absolute;font-size:12px;color:#333;bottom:0;left:0;width:100%;text-align:center;margin:0;line-height:30px}.ui.dropdown.emotion.box .emotions.coding .emotion-preview{height:198px}.ui.dropdown.emotion.box .emotions.coding .emotion-preview:hover{display:none!important}.ui.dropdown.emotion.box .emotions.emojis .emotion-preview img{width:53px;height:53px}.ui.dropdown.emotion.box .emotions.coding .emotion-preview img{width:168px;height:168px;padding:4px}.ui.dropdown.emotion.box .emotion-preview.left-top{left:5px;top:5px}.ui.dropdown.emotion.box .emotion-preview.right-top{right:5px;top:5px}.ui.dropdown.emotion.box .emotion-preview.left-bottom{left:5px;bottom:5px}.ui.dropdown.emotion.box .emotion-preview.right-bottom{right:5px;bottom:5px}.atwho-view{z-index:1000}.atwho-view ul li{padding:3px 8px;font-size:12px;border-bottom:none}.atwho-view .cur{background:#36F;color:#fff}.atwho-view ul li img{width:20px;vertical-align:middle;margin:0 5px}.rotate-image-wrapper{position:relative;overflow:hidden;margin:auto}.rotate-image-wrapper img{cursor:url(/static/740dcb3dfcf4f2a75155855dcd943241.png),auto;-webkit-transition:all .2s linear}.rotate-image-wrapper.horizon img{position:absolute}.markdown-editor .markdown.content{position:relative}#markdown-refresh-btn{position:absolute;right:10px;top:10px;color:#000;background:rgba(255,255,255,.6);width:30px;height:30px;text-align:center;line-height:30px;font-size:24px;border-radius:3px}.ui.modal.coding-modal .header{padding-top:15px;padding-bottom:15px}.ui.coding-modal.modal .content{padding-top:10px}.ui.coding-modal.modal .actions{padding-top:5px;padding-bottom:5px}.fancy-overflow{position:relative!important;overflow-y:hidden!important}.fancy-overflow-modal{position:absolute;width:100%;height:100%;z-index:2;background:rgba(0,0,0,.02);cursor:pointer;left:0;top:0}.fancy-overflow-modal:hover{background:rgba(0,0,0,.1)}.fancy-overflow-modal:hover:before{content:'点击查看完整内容';font-size:16px;display:inline-block;width:180px;height:40px;line-height:40px;text-align:center;position:absolute;left:50%;top:50%;margin:-25px 0 0 -100px;color:#FFF;background:rgba(0,0,0,.6);-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.fancy-overflow-modal:after{content:'';width:100%;display:block;height:12px;position:absolute;bottom:0;left:0;color:#CCC;text-align:center;background-image:url(/static/a3b359a70259cce7827a5d461b76ca15.png);background-size:12px 12px;background-repeat:repeat-x}.word-break-all{word-break:break-all}#project-activities .start-date{font-size:18px;margin-bottom:10px}#project-activities .wrapper{margin:0 0 20px}#project-activities .activity{padding:10px 0 10px 50px;position:relative;font-size:14px;min-height:32px}#project-activities .activity:before{width:1px;position:absolute;top:20px;left:15px;height:100%;border-left:1px solid #CCC;content:''}#project-activities .activity .timeline{width:120px;float:left}#project-activities .activity .timeline .time:before{position:absolute;top:14px;left:11px;display:block;width:7px;height:7px;background-color:#EEE;border:1px solid gray;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;content:''}#project-activities .activity.not-bordered:before{border:0}#project-activities .activity .content{padding-left:120px;word-break:break-all}#project-activities .activity .content .target{color:#666;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis;white-space:nowrap}#project-activities .activity .content .target>a{display:inline-block;margin-top:10px}#project-activities .activity .avatar{position:absolute;left:125px}.rotate30.icon{-webkit-transform:rotate(30deg);-moz-transform:rotate(30deg);-ms-transform:rotate(30deg);-o-transform:rotate(30deg);transform:rotate(30deg)}.rotate180.icon{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.rotate180.icon.activity-icon{-webkit-transform:rotate(180deg) translate(5px,0);-moz-transform:rotate(180deg) translate(5px,0);-ms-transform:rotate(180deg) translate(5px,0);-o-transform:rotate(180deg) translate(5px,0);transform:rotate(180deg) translate(5px,0)}.ui.dimmer{z-index:1100}.heartbeat{-webkit-animation:heartbeat .3s forwards;-o-animation:heartbeat .3s forwards;animation:heartbeat .3s forwards}@keyframes heartbeat{0%{transform:none}60%{transform:scale(1.3)}100%{transform:none}}@-webkit-keyframes heartbeat{0%{transform:none}60%{transform:scale(1.3)}100%{transform:none}}@-moz-keyframes heartbeat{0%{transform:none}60%{transform:scale(1.3)}100%{transform:none}}@-o-keyframes heartbeat{0%{transform:none}60%{transform:scale(1.3)}100%{transform:none}}@-ms-keyframes heartbeat{0%{transform:none}60%{transform:scale(1.3)}100%{transform:none}}.layout-content-right-menu{display:table;table-layout:fixed;width:100%}.layout-content-right-menu .layout-content,.layout-content-right-menu .layout-menu{vertical-align:top;display:table-cell}.atwho-view{max-height:none}.select2-chosen,.select2-input,.select2-results li{font-size:14px}.select2-results li{line-height:150%}.select2-container .select2-choice,.select2-container .select2-choice:active,.select2-container .select2-choice:focus,.select2-container .select2-choice:hover{color:#444}.flex-box{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex}.flex-none{-webkit-flex:none;-moz-flex:none;-ms-flex:none;-o-flex:none;flex:none}.flex-auto-justify{-webkit-flex:1;-moz-flex:1;-ms-flex:1;-o-flex:1;flex:1}.flex-direction-row{-ms-box-orient:vertical;-webkit-flex-direction:row;flex-direction:row;justify-content:flex-start;align-items:stretch;align-content:stretch}.flex-direction-column{-ms-box-orient:horizontal;-webkit-flex-direction:column;flex-direction:column;justify-content:flex-start;align-items:stretch;align-content:stretch}[class*=overflow-auto]{position:relative}.overflow-auto{overflow:hidden}.clickable-textarea-link-tip{position:absolute;background-color:#FFF;border:1px solid #EEE;border-radius:3px;padding:5px;z-index:99;word-wrap:break-word;word-break:break-all;left:50%;margin-left:-150px;font-size:12px;color:#666}.clickable-textarea-link-tip:before{margin-left:-11px;left:50%;top:-4px;bottom:auto;right:auto;position:absolute;content:\"\";width:.6em;height:.6em;-webkit-transform:rotate(135deg);-moz-transform:rotate(135deg);-ms-transform:rotate(135deg);-o-transform:rotate(135deg);transform:rotate(135deg);z-index:inherit;-webkit-transition:background .1s linear;-moz-transition:background .1s linear;transition:background .1s linear;background-color:#FFF;border-left:1px solid #EEE;border-bottom:1px solid #EEE}.ui.small.modal>.header:not(.ui){font-size:1.3em}@media only screen and (max-width:767px){.ui.small.modal{width:95%;margin:0 0 0 -47.5%}}@media only screen and (min-width:768px){.ui.small.modal{width:70.4%;margin:0 0 0 -35.2%}}@media only screen and (min-width:992px){.ui.small.modal{width:680px;margin:0 0 0 -340px}}@media only screen and (min-width:1200px){.ui.small.modal{width:720px;margin:0 0 0 -360px}}@media only screen and (min-width:1920px){.ui.small.modal{width:760px;margin:0 0 0 -380px}}.feed-editor,.feed-editor .editor{position:relative;z-index:99}.feed-editor{position:relative;padding-left:56px}.feed-editor>.avatar{position:absolute;left:0;top:2px}.feed-editor textarea{font-size:13px;border:1px solid #ddd;padding:5px 0 0 1%;background:#FFF;border-radius:3px;color:rgba(0,0,0,.7);outline:0;width:98.8%;resize:none;display:block;min-height:57px}.feed-editor .dimmer{border-radius:3px;opacity:.7}.feed-editor .dimmer .loading{position:absolute;top:50%;left:50%;margin-top:-8px}.feed-editor .toolbar{padding-top:5px}.feed-editor .toolbar ul{float:right}.feed-editor .toolbar ul,.feed-editor .toolbar ul li{list-style:none;padding:0;margin:0}.feed-editor .toolbar>ul>li{float:left;font-size:16px;margin-right:5px;cursor:pointer;height:20px;width:20px}.feed-editor .preview{border:1px solid #ddd;background:#FFF;width:100%;height:100%;border-radius:3px;box-shadow:0 0 2px 0 #ddd;min-height:57px}.dark .feed-editor .preview{border:0;color:#000}.feed-editor .left.preview{position:absolute;left:-105%;top:0;width:102%;z-index:999;overflow:auto}.feed-editor .right.preview{position:absolute;right:-105%;top:0;width:102%;z-index:999;overflow:auto}.feed-editor .hide{display:none}@media only screen and (max-width:767px){.feed-editor .left.preview,.feed-editor .right.preview{position:relative;right:auto;top:0;left:auto;overflow:auto}}.feed-editor .preview .action .icon{cursor:pointer;margin:2px 5px 0 0;padding:0;font-size:11px;float:right}.feed-editor .right.preview .action{right:auto;left:0}.feed-editor .right.preview .remove.icon{float:left}.feed-editor .right.preview .refresh.icon{float:right}.feed-editor .preview .content{padding:6px 1% 2% 3%}.flex-text-wrap{position:relative}.flex-text-wrap,.flex-text-wrap textarea{outline:0;margin:0;border:none;padding:0}.flex-text-wrap pre,.flex-text-wrap textarea{white-space:pre-wrap;width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.flex-text-wrap textarea{overflow:hidden;position:absolute;top:0;left:0;height:100%;width:100%;resize:none}.flex-text-wrap pre{display:block;visibility:hidden;margin:0}.flex-text-wrap pre span{word-break:break-all;font-size:10px}.cke_wysiwyg_div table{border-collapse:collapse}.cke_wysiwyg_div td{border:1px solid #ccc;padding:5px 10px}li.tweet-topic-name{height:24px;line-height:24px}.feed-editor .toolbar .topic{font-size:12px;color:#666;margin-right:6px}.feed-editor .toolbar .topic .content{display:inline-block;max-width:120px;line-height:16px;vertical-align:middle}.feed-editor .toolbar .topic .topic-anchor{vertical-align:middle}.ui.tiny.modal{width:60%;margin-left:-30%}.ui.tiny40.modal{width:40%;margin-left:-20%}@media only screen and (max-width:1400px){.ui.responsive.tiny40.modal{width:60%;margin-left:-30%}}.ui.tiny.modal>.header,.ui.tiny40.modal>.header{font-size:1.3em;padding:.8rem 1.2rem}.ui.tiny.modal>.content,.ui.tiny40.modal>.content{padding:1.2em;display:block}.ui.tiny.modal>.content .overflow-hidden,.ui.tiny40.modal>.content .overflow-hidden{overflow:hidden}.ui.tiny.modal .actions,.ui.tiny40.modal .actions{padding:.8rem 1.2rem}.ui.modal .action-buttons{padding:1rem 2rem;text-align:right}.ui.modal .action-buttons>.button{margin-left:.75em}@media only screen and (max-width:768px){.ui.modal .action-buttons{padding-bottom:0}.ui.modal .action-buttons>.button,.ui.modal .action-buttons>.buttons{margin-bottom:1em}}.ui.modal>form>.close{cursor:pointer;position:absolute;z-index:1;opacity:.8;font-size:1.25em;top:-1.75em;right:-1.75em;color:#FFF}.ui.modal>form>.close:hover{opacity:1}.ui.modal>form>.header{margin:0;padding:1.5rem 2rem;font-size:1.6em;font-weight:700;border-radius:.325em .325em 0 0}.ui.modal>form>.content{display:table;width:100%;position:relative;padding:2em;background-color:#F4F4F4;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.ui.modal>form>.content p{line-height:1.6}.ui.modal>form>.content>.left:not(.ui){display:table-cell;padding-right:1.5%;min-width:25%}.ui.modal>form>.content>.left:not(.ui)>i.icon{font-size:8em;margin:0}.ui.modal>form>.content>.right:not(.ui){display:table-cell;padding-left:1.5%;vertical-align:top}.ui.modal.dark{background-color:rgba(0,0,0,.7);border:1px solid rgba(0,0,0,.7)}.ui.modal{border:none}.ui.modal.dark>.header{color:#FFF}.ui.modal.dark>.content{color:#FFF;background:0 0;display:block;overflow:hidden}@media only screen and (max-width:998px){.ui.modal.dark>.close{color:#fff}}.ui.form.small.loading:after{background-size:25px}.ui .heading.icon:before{content:'H1'}.ui.button.borderless{border:none;background:0 0;cursor:default;-webkit-box-shadow:none;-moz-box-shadow:none;-ms-box-shadow:none;-o-box-shadow:none;box-shadow:none}.ui.page.dimmer{background-color:rgba(0,0,0,.5)}.ui.input.prefix.large .prefix{height:46px}.ui.input.prefix.large .prefix>.icon{padding-top:14px;width:46px;height:100%}.ui.input.prefix .prefix{position:absolute;display:table;width:180px}.ui.input.prefix .prefix>.icon{display:table-cell;right:auto;left:1px;border-radius:.3125em 0 0 .3125em}.ui.input.prefix .prefix>.words{display:table-cell;padding-left:10px}.ui.labeled.input{display:table}.ui.labeled.input>input{display:table-cell;vertical-align:top}.ui.labeled.input>.label{display:table-cell;vertical-align:middle;white-space:nowrap;font-size:1em}.ui.labeled.input>.label>.icon{display:inline;vertical-align:top}.ui.fluid.labeled.input{display:table;width:100%}.ui.fluid.labeled.input>.label{width:.01%}.ui.borderless{border:none!important;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}i.icon.clickable{cursor:pointer}.ui.dropdown.disabled{color:rgba(0,0,0,.2)}.user-index .header .more-link{float:right;font-size:14px;color:#000;margin-top:5px;margin-left:10px}.user-index .recomm-pp{margin-top:40px!important}.user-index .recomm-pp:after,.user-index .recomm-pp:before{width:45%!important}.user-index .activity.tabs{padding-bottom:0}.user-index .activity.tabs .tab{margin-right:20px;font-weight:400;cursor:pointer;font-size:14px;display:inline-table;color:#666}.user-index .activity.tabs .tab.active{color:#000;font-weight:700}#user-space{width:980px;margin-top:20px;margin-left:auto;margin-right:auto;color:#666}#user-space .column{background:#fff;padding:30px}#user-space .column.info-column{border-right:3px solid #F7F6F2}#user-space .column.info-column .user-avatar{margin-left:15px}#user-space .column.info-column .user-name{font-size:24px;color:#000;font-weight:700;margin-top:20px;margin-bottom:20px}#user-space .column.info-column .user-slogan{font-size:14px;color:#666;margin-bottom:20px}#user-space .column.info-column .user-email{font-size:14px}#user-space .column.info-column .user-created-at,#user-space .column.info-column .user-global-key{font-size:14px;margin:8px 0}#user-space .column.info-column .user-login-at{font-size:14px;color:#999}#user-space .column.info-column .number{font-size:18px;color:#000}#user-space .column.info-column .show-info-link a{float:right;font-size:13px}#user-space .column.info-column .user-more-info{font-size:14px}#user-space .column.content-column{min-height:700px}#user-space .column.content-column .filter-menu{margin-top:30px}#user-space .column.content-column .user-projects table tr{border-bottom:1px solid #ddd}#user-space .column.content-column .user-projects table .avatar{vertical-align:top;padding:18px 0 0 10px}#user-space .column.content-column .user-projects table .project-info{width:450px;padding:15px}#user-space .column.content-column .user-projects table .project-info .project-name{font-size:16px;font-weight:700;margin-bottom:5px}#user-space .column.content-column .user-projects table .project-info .project-description{font-size:14px;color:#666;margin-bottom:10px;word-break:break-all}#user-space .column.content-column .user-projects table .project-info .project-time{font-size:12px;color:#666}#user-space .column.content-column .user-projects table .star-count{width:100px;font-size:12px;color:#666}#user-space .column.content-column .user-projects table .star-count .fork-count-item{margin-left:20px}#user-space .column.content-column .user-activities .activity{margin-bottom:15px;padding:10px;border-bottom:1px solid #ddd}#user-space .column.content-column .user-activities .activity .activity-icon{width:40px;float:left;position:absolute}#user-space .column.content-column .user-activities .activity .inner{width:560px;margin-left:50px;position:relative;min-height:25px;word-break:break-all}#user-space .column.content-column .user-activities .activity .inner .Depot_push .more-info{padding:6px 2px}#user-space .column.content-column .user-activities .activity .inner .Depot_push .more-info .commit-message{color:#666}#user-space .column.content-column .user-activities .activity .inner .toolbar{margin-top:5px;color:#999;font-size:12px}#user-space .column.content-column .user-activities .activity .inner .toolbar span{margin-right:5px}#user-space .column.content-column .user-activities .show-more-link{cursor:pointer;font-size:12px}#user-space .column.content-column .user-tweet-topics .bubble-topic-item{border-bottom:1px solid #ddd}#user-space .column.content-column .user-tweet-topics .bubble-topic-item .topic-content-wrapper{margin-top:10px;font-size:14px}#user-space .column.content-column .user-tweet-topics .bubble-topic-item .topic-content-wrapper .detail{margin-bottom:10px}#user-space .column.content-column .user-tweet-topics .bubble-topic-item .topic-content-wrapper .detail .created-at{font-size:12px;margin-left:10px;vertical-align:top}#user-space .column.content-column .user-tweet-topics .bubble-topic-item .topic-content-wrapper .detail .ui.small.button{float:right}#user-space .column.content-column .user-tweet-topics .bubble-topic-item .topic-content-wrapper .detail .title{font-size:16px;margin-bottom:10px}#user-space .column.content-column .user-tweet-topics .bubble-topic-item .topic-content-wrapper .join-in{margin-bottom:10px}.select2-container{margin:0;position:relative;display:inline-block;zoom:1;vertical-align:middle;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.select2-drop,.select2-search,.select2-search input{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.select2-container .select2-choice{display:block;height:26px;padding:0 0 0 8px;overflow:hidden;position:relative;border:1px solid #aaa;white-space:nowrap;line-height:26px;color:#444;text-decoration:none;border-radius:4px;background-clip:padding-box;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#fff;background-image:-webkit-gradient(linear,left bottom,left top,color-stop(0,#eee),color-stop(0.5,#fff));background-image:-webkit-linear-gradient(center bottom,#eee 0,#fff 50%);background-image:-moz-linear-gradient(center bottom,#eee 0,#fff 50%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#eeeeee', GradientType=0);background-image:linear-gradient(to top,#eee 0,#fff 50%)}.select2-container.select2-drop-above .select2-choice{border-bottom-color:#aaa;border-radius:0 0 4px 4px;background-image:-webkit-gradient(linear,left bottom,left top,color-stop(0,#eee),color-stop(0.9,#fff));background-image:-webkit-linear-gradient(center bottom,#eee 0,#fff 90%);background-image:-moz-linear-gradient(center bottom,#eee 0,#fff 90%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#eeeeee', GradientType=0);background-image:linear-gradient(to bottom,#eee 0,#fff 90%)}.select2-container.select2-allowclear .select2-choice .select2-chosen{margin-right:42px}.select2-container .select2-choice>.select2-chosen{margin-right:26px;display:block;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;float:none;width:auto}.select2-container .select2-choice abbr{display:none;width:12px;height:12px;position:absolute;right:24px;top:8px;font-size:1px;text-decoration:none;border:0;background:url(/static/2ca61b76e22053571dd8611e5aac4900.png) right top no-repeat;cursor:pointer;outline:0}.select2-container.select2-allowclear .select2-choice abbr{display:inline-block}.select2-container .select2-choice abbr:hover{background-position:right -11px;cursor:pointer}.select2-drop-mask{border:0;margin:0;padding:0;position:fixed;left:0;top:0;min-height:100%;min-width:100%;height:auto;width:auto;opacity:0;z-index:9998;background-color:#fff;filter:alpha(opacity=0)}.select2-drop{width:100%;margin-top:-1px;position:absolute;z-index:9999;top:100%;background:#fff;color:#000;border:1px solid #aaa;border-radius:4px;-webkit-box-shadow:0 4px 5px rgba(0,0,0,.15);box-shadow:0 4px 5px rgba(0,0,0,.15)}.select2-drop.select2-drop-above{margin-top:1px;border-top:1px solid #aaa;border-radius:4px;-webkit-box-shadow:0 -4px 5px rgba(0,0,0,.15);box-shadow:0 -4px 5px rgba(0,0,0,.15)}.select2-drop.select2-drop-above.select2-drop-active{line-height:16px}.select2-drop-auto-width{border-top:1px solid #aaa;width:auto}.select2-drop-auto-width .select2-search{padding-top:4px}.select2-container .select2-choice .select2-arrow{display:inline-block;width:18px;height:100%;position:absolute;right:0;top:0;border-left:1px solid #aaa;border-radius:0 4px 4px 0;background:#ccc;background:-webkit-gradient(linear,left bottom,left top,color-stop(0,#ccc),color-stop(0.6,#eee)) #ccc;background:-webkit-linear-gradient(center bottom,#ccc 0,#eee 60%) #ccc;background:-moz-linear-gradient(center bottom,#ccc 0,#eee 60%) #ccc;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#cccccc', GradientType=0);background:linear-gradient(to top,#ccc 0,#eee 60%) #ccc}.select2-container .select2-choice .select2-arrow b{display:block;width:100%;height:100%;background:url(/static/2ca61b76e22053571dd8611e5aac4900.png) 0 1px no-repeat}.select2-search{display:inline-block;width:100%;min-height:26px;margin:4px 0 0;padding-left:4px;padding-right:4px;position:relative;z-index:10000;white-space:nowrap}.select2-search input{width:100%;height:auto!important;min-height:26px;padding:4px 20px 4px 5px;margin:0;outline:0;font-family:sans-serif;font-size:1em;border:1px solid #aaa;border-radius:0;-webkit-box-shadow:none;box-shadow:none;background:url(/static/2ca61b76e22053571dd8611e5aac4900.png) 100% -22px no-repeat #fff;background:url(/static/2ca61b76e22053571dd8611e5aac4900.png) 100% -22px no-repeat,-moz-linear-gradient(center bottom,#fff 85%,#eee 99%)}.select2-drop.select2-drop-above .select2-search input{margin-top:4px}.select2-search input.select2-active{background:url(/static/7b9776076d5fceef4993b55c9383dedd.gif) 100% no-repeat #fff;background:url(/static/7b9776076d5fceef4993b55c9383dedd.gif) 100% no-repeat,linear-gradient(to bottom,#fff 85%,#eee 99%)}.select2-container-active .select2-choice,.select2-container-active .select2-choices{outline:0}.select2-dropdown-open .select2-choice{border-bottom-color:transparent;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;border-bottom-left-radius:0;border-bottom-right-radius:0;background-color:#eee;background-image:-webkit-gradient(linear,left bottom,left top,color-stop(0,#fff),color-stop(0.5,#eee));background-image:-webkit-linear-gradient(center bottom,#fff 0,#eee 50%);background-image:-moz-linear-gradient(center bottom,#fff 0,#eee 50%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#ffffff', GradientType=0);background-image:linear-gradient(to top,#fff 0,#eee 50%)}.select2-dropdown-open.select2-drop-above .select2-choice,.select2-dropdown-open.select2-drop-above .select2-choices{border-top-color:transparent;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#ffffff', GradientType=0)}.select2-dropdown-open .select2-choice .select2-arrow{background:0 0;border-left:none;filter:none}.select2-dropdown-open .select2-choice .select2-arrow b{background-position:-18px 1px}.select2-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.select2-results{max-height:200px;padding:0 0 0 4px;margin:4px 4px 4px 0;position:relative;overflow-x:hidden;overflow-y:auto;-webkit-tap-highlight-color:transparent}.select2-results ul.select2-result-sub{margin:0;padding-left:0}.select2-results ul.select2-result-sub>li .select2-result-label{padding-left:20px}.select2-results ul.select2-result-sub ul.select2-result-sub>li .select2-result-label{padding-left:40px}.select2-results ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub>li .select2-result-label{padding-left:60px}.select2-results ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub>li .select2-result-label{padding-left:80px}.select2-results ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub>li .select2-result-label{padding-left:100px}.select2-results ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub>li .select2-result-label{padding-left:110px}.select2-results ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub>li .select2-result-label{padding-left:120px}.select2-results li{list-style:none;display:list-item;background-image:none}.select2-results li.select2-result-with-children>.select2-result-label{font-weight:700}.select2-results .select2-result-label{padding:3px 7px 4px;margin:0;cursor:pointer;min-height:1em;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.select2-results .select2-highlighted{background:#3875d7;color:#fff}.select2-results li em{background:#feffde;font-style:normal}.select2-results .select2-highlighted em{background:0 0}.select2-results .select2-highlighted ul{background:#fff;color:#000}.select2-results .select2-no-results,.select2-results .select2-searching,.select2-results .select2-selection-limit{background:#f4f4f4;display:list-item;padding-left:5px}.select2-results .select2-disabled{background:#f4f4f4;display:list-item;cursor:default}.select2-results .select2-disabled.select2-highlighted{color:#666;background:#f4f4f4;display:list-item;cursor:default}.select2-results .select2-selected{display:none}.select2-more-results{background:#f4f4f4;display:list-item}.select2-more-results.select2-active{background:url(/static/7b9776076d5fceef4993b55c9383dedd.gif) 100% no-repeat #f4f4f4}.select2-container.select2-container-disabled .select2-choice{background-color:#f4f4f4;background-image:none;border:1px solid #ddd;cursor:default}.select2-container.select2-container-disabled .select2-choice .select2-arrow{background-color:#f4f4f4;background-image:none;border-left:0}.select2-container.select2-container-disabled .select2-choice abbr{display:none}.select2-container-multi .select2-choices{height:100%;margin:0;padding:0;border-radius:.3125em;position:relative;border:1px solid #ddd;cursor:text;overflow:hidden}.select2-locked{padding:3px 5px!important}.select2-container-multi .select2-choices{min-height:26px}.select2-container-multi.select2-container-active .select2-choices{outline:0}.select2-container-multi .select2-choices li{float:left;list-style:none}html[dir=rtl] .select2-container-multi .select2-choices li{float:right}.select2-container-multi .select2-choices .select2-search-field{margin:0;padding:0;white-space:nowrap}.select2-container-multi .select2-choices .select2-search-field input{padding:.65em 1em;font-family:sans-serif;font-size:100%;color:#666;outline:0;border:0;-webkit-box-shadow:none;box-shadow:none;background:0 0!important;height:41px}.select2-container-multi .select2-choices .select2-search-field input.select2-active{background:url(/static/7b9776076d5fceef4993b55c9383dedd.gif) 100% no-repeat #fff!important}.select2-container-multi .select2-choices .select2-search-field input[type=text]:focus{box-shadow:none}.select2-default{color:#999!important}.select2-container-multi .select2-choices .select2-search-choice{padding:6px 18px 6px 5px;margin:5px 0 5px 5px;position:relative;line-height:16px;font-size:14px;color:#fff;cursor:default;border-radius:.3125em;background-clip:padding-box;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#df5a5a;opacity:.8;font-weight:700}html[dir=rtl] .select2-container-multi .select2-choices .select2-search-choice{margin-left:0;margin-right:5px}.select2-container-multi .select2-choices .select2-search-choice .select2-chosen{cursor:default}.select2-container-multi .select2-choices .select2-search-choice-focus{background:red}.select2-search-choice-close{display:block;width:12px;height:13px;position:absolute;right:3px;top:8px;font-size:1px;outline:0}html[dir=rtl] .select2-search-choice-close{right:auto;left:3px}.select2-container-multi .select2-choices .select2-search-choice .select2-search-choice-close:hover,.select2-container-multi .select2-choices .select2-search-choice-close,.select2-container-multi .select2-choices .select2-search-choice-focus .select2-search-choice-close{background:url(/static/a1f8f8ad8630730ca2478c02a41e6c29.png) right -1px no-repeat}.select2-container-multi.select2-container-disabled .select2-choices{background-color:#f4f4f4;background-image:none;border:1px solid #ddd;cursor:default}.select2-container-multi.select2-container-disabled .select2-choices .select2-search-choice{padding:3px 5px;border:1px solid #ddd;background-image:none;background-color:#f4f4f4}.select2-container-multi.select2-container-disabled .select2-choices .select2-search-choice .select2-search-choice-close{display:none;background:0 0}.select2-result-selectable .select2-match,.select2-result-unselectable .select2-match{text-decoration:underline}.select2-offscreen,.select2-offscreen:focus{clip:rect(0 0 0 0)!important;width:1px!important;height:1px!important;border:0!important;margin:0!important;padding:0!important;overflow:hidden!important;position:absolute!important;outline:0!important;left:0!important;top:0!important}.select2-display-none{display:none}.select2-measure-scrollbar{position:absolute;top:-10000px;left:-10000px;width:100px;height:100px;overflow:scroll}@media only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (min-resolution:2dppx){.select2-search input,.select2-search-choice-close{background-repeat:no-repeat!important;background-size:60px 40px!important}.select2-container .select2-choice .select2-arrow b,.select2-container .select2-choice abbr{background-image:url(/static/49e3f006018662f60f1db2aec0b2cca9.png)!important;background-repeat:no-repeat!important;background-size:60px 40px!important}.select2-search input{background-position:100% -22px!important}}.select2-drop-multi{font-size:14px}.select2-drop-multi .select2-results li{display:inline-block;background-color:#df5a5a;border-radius:4px;margin-left:3px;margin-top:3px;opacity:.8}.select2-drop-multi .select2-selected{display:none!important}.select2-drop-multi .select2-result-label{padding:3px 7px 4px;margin:0;cursor:pointer;min-height:1em;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;color:#fff}.select2-drop-multi .select2-highlighted{background-color:#df5a5a!important;color:#fff!important;opacity:1!important}#tweet-list{width:980px;margin-left:auto;margin-right:auto;margin-top:20px}#tweet-list .left-column{border-right:1px solid #ddd;width:620px;float:left;margin-left:20px;padding:0 20px 0 0}#tweet-list .left-column .menu .active{background:#F7F6F2;border-bottom:1px solid #F7F6F2}#tweet-list .left-column .show-more{text-align:center;padding:10px}#tweet-list .left-column .show-more a{cursor:pointer}#tweet-list .right-column{width:300px;padding:0;float:right;margin-right:20px}#tweet-list .right-column .app-download-button{margin-bottom:12px;width:100%;cursor:pointer;display:inline-block;position:relative}#tweet-list .right-column .app-download-button:after{clear:both}#tweet-list .right-column .app-download-button>img{float:left}#tweet-list .right-column .app-download-button>.app-qrcode{display:none;padding:12px;border-radius:4px;box-shadow:inset 0 0 1px #DDD,0 2px 6px rgba(0,0,0,.2);width:150px;height:150px;background:#FFF;position:absolute;top:50px;left:50%;margin-left:-75px;box-sizing:border-box;z-index:1}#tweet-list .right-column .app-download-button>.app-qrcode:before{content:\"\";display:inline-block;position:absolute;box-shadow:0 0 6px rgba(0,0,0,.2);width:10px;height:10px;top:-4px;left:50%;margin-left:-7px;transform:rotate(45deg);background:#FFF}#tweet-list .right-column .app-download-button>.app-qrcode:after{content:\"\";display:inline-block;position:absolute;top:0;left:10px;right:10px;background:#FFF;height:10px}#tweet-list .right-column .app-download-button:hover>.app-qrcode{display:inline-block}#tweet-list .right-column .topic-link{font-size:20px;width:100%;background:#E3E9EF;height:100px;display:table;text-align:center}#tweet-list .right-column .topic-link span{display:table-cell;vertical-align:middle}#tweet-list .right-column .icon.right{float:right;font-size:12px;line-height:22px}#tweet-list .right-column .hot-topics{font-size:14px}#tweet-list .right-column .hot-topics .icon{float:right;font-size:12px;line-height:20px}#tweet-list .right-column .hot-topics .list .item{margin-bottom:10px;height:18px}#tweet-list .right-column .hot-topics .list .add.icon{color:#999}#tweet-list .right-column .hot-users .user-item{padding-top:10px;position:relative;margin:5px;display:inline-block;vertical-align:top;text-align:center;width:125px;color:#666;font-size:13px}#tweet-list .right-column .hot-users .user-item:hover{background-color:rgba(0,0,0,.02)}#tweet-detail .user-avatar{width:50px;float:left;position:absolute}#tweet-detail .tweet-content{margin-left:0;position:relative;box-shadow:none}#tweet-detail .tweet-content .tweet-detail{background:#fff;padding:15px;font-size:14px;color:#000}#tweet-detail .tweet-content .tweet-detail .markdown.content{max-height:none;overflow-y:auto}#tweet-detail .tweet-content .tweet-detail p{font-size:14px;margin:2px 0}#tweet-detail .tweet-content .tweet-detail .author-time{font-size:12px;color:#666;margin-top:15px}#tweet-detail .tweet-content .tweet-detail .author-time>span.action{cursor:pointer;display:none}#tweet-detail .tweet-content .comment-list{padding:10px 20px}#tweet-detail .tweet-content .comment-list .comment-item{padding:10px 0 0;border-bottom:1px solid #eee}#tweet-detail .tweet-content .comment-list .comment-item.last{border-bottom:0 none}#tweet-detail .tweet-content .comment-list .comment-item .comment-content{margin-left:40px;position:relative;min-height:50px;font-size:12px;word-break:break-all}#tweet-detail .tweet-content .comment-list .comment-item .comment-content .comment-author{margin-top:10px;font-size:10px;color:#666}#tweet-detail .tweet-content .comment-list .comment-item .comment-content img.monkey.emotion{width:64px}#tweet-detail .tweet-content .comment-list .show-all-link{margin-top:10px;text-align:center}#tweet-detail .tweet-content .comment-list .show-all-link a{font-size:12px;color:#999;cursor:pointer}#tweet-detail .show-more{text-align:center;padding:10px}#tweet-detail .show-more a{cursor:pointer}.tweet-item{margin:30px 0;border-radius:3px}.tweet-item .user-avatar{width:50px;float:left;position:absolute;margin-top:4px}.tweet-item .tweet-content{margin-left:56px;position:relative;box-shadow:1px 1px 0 0 #eee;border-radius:3px;border:1px solid #eee}.tweet-item .tweet-content:before{margin-top:-11px;bottom:auto;right:auto;top:28px;left:-6px;position:absolute;content:\"\";width:.6em;height:.6em;background-image:none;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);z-index:2;-webkit-transition:background .1s linear;-moz-transition:background .1s linear;transition:background .1s linear;background-color:#fff;border-left:1px solid #eee;border-bottom:1px solid #eee}.tweet-item .tweet-content .tweet-detail{background:#fff;padding:15px;font-size:14px;color:#000;border-radius:3px 3px 0 0}.tweet-item .tweet-content .tweet-detail p{font-size:14px;margin:2px 0}.tweet-item .tweet-content .tweet-detail .author-time a.author-name{color:#666}.tweet-item .tweet-content .tweet-detail .author-time,.tweet-item .tweet-content .tweet-detail .like-users{font-size:12px;color:#666;margin-top:15px}.tweet-item .tweet-content .tweet-detail .author-time>a.action,.tweet-item .tweet-content .tweet-detail .like-users>a.action{cursor:pointer;display:none}.tweet-item .tweet-content .tweet-detail .like-users{margin-top:10px;line-height:18px}.tweet-item .tweet-content .tweet-detail .like-users img{margin:0 1px 1px 0}.tweet-item .tweet-content .tweet-detail .like-users a{cursor:pointer}.tweet-item .tweet-content .tweet-detail:hover .author-time>a.action{display:inline}.tweet-item .tweet-content .comment-list{padding:10px 20px;background-color:#FDFCFA}.tweet-item .tweet-content .comment-list .comment-item{padding:5px 0;border-bottom:1px solid #eee}.tweet-item .tweet-content .comment-list .comment-item.last,.tweet-item .tweet-content .comment-list .comment-item:last-child{border-bottom:0 none}.tweet-item .tweet-content .comment-list .comment-item .comment-content{margin-left:40px;position:relative;min-height:40px;font-size:12px;word-break:break-all;line-height:22px}.tweet-item .tweet-content .comment-list .comment-item .comment-content .comment-author{font-size:10px;color:#666}.tweet-item .tweet-content .comment-list .comment-item .comment-content .comment-author>a.action{cursor:pointer;display:none}.tweet-item .tweet-content .comment-list .comment-item .comment-content .comment-author a.author-name{color:#666}.tweet-item .tweet-content .comment-list .comment-item .comment-content img.monkey.emotion{width:64px}.tweet-item .tweet-content .comment-list .comment-item .comment-content .comment-form{padding-top:15px}.tweet-item .tweet-content .comment-list .comment-item:hover .comment-author>a.action{display:inline}.tweet-item .tweet-content .comment-list .show-all-link{margin-top:10px;text-align:center}.tweet-item .tweet-content .comment-list .show-all-link a{font-size:12px;color:#999;cursor:pointer}.tweet-item .tweet-content form{border-top:1px solid #eee}.tweet-item .tweet-content form input{overflow:hidden;border:0;font-size:13px;border-radius:0}.tweet-item .tweet-content form .right.icon{padding-top:12px!important}.projects-search{font-size:13px;height:30px;line-height:30px;width:180px!important;max-width:180px!important;-webkit-transition:background-color .3s ease-out,box-shadow .2s ease,border-color .2s ease,width .5s ease-in!important;-moz-transition:background-color .3s ease-out,box-shadow .2s ease,border-color .2s ease,width .5s ease-in!important;-ms-transition:background-color .3s ease-out,box-shadow .2s ease,border-color .2s ease,width .5s ease-in!important;-o-transition:background-color .3s ease-out,box-shadow .2s ease,border-color .2s ease,width .5s ease-in!important;transition:background-color .3s ease-out,box-shadow .2s ease,border-color .2s ease,width .5s ease-in!important}.projects-search .icon.search-right-icon{width:2.6em!important;padding-right:0!important;padding-top:8px!important;font-size:initial;cursor:pointer}.projects-search input{height:30px}.projects-edit{line-height:30px}.projects-empty{text-align:center;font-size:12px;padding:20px 0;color:#777}.projects-list-view ul li{outline:0;padding-left:5px!important;padding-right:5px!important;position:relative}.projects-list-view ul li.focus,.projects-list-view ul li:focus,.projects-list-view ul li:hover{background:rgba(0,0,0,.03)}.projects-list-view ul li a{outline:0}.projects-header em{font-style:normal}.projects-tab{margin-bottom:10px;padding:0 10px;color:#333}.projects-tab small{cursor:pointer;margin-right:10px}.projects-tab .active{color:#333;font-weight:700}.gallery{position:fixed;top:0;left:0;z-index:1001;width:102%;height:100%;background:rgba(0,0,0,.6);overflow-y:scroll;text-align:center}.gallery .gallery-wrapper .gallery-content{height:100%;position:relative}.gallery .gallery-wrapper .gallery-content img{max-width:980px;cursor:zoom-out}.gallery .gallery-wrapper .gallery-content .icon{color:#FFF;font-size:72px;cursor:pointer;opacity:.6;margin:auto;position:absolute;top:0;bottom:0}.gallery .close-wrapper .icon.close:hover,.gallery .gallery-wrapper .icon:hover{opacity:1}.gallery .gallery-wrapper .gallery-content .left.angle.icon{left:100px}.gallery .gallery-wrapper .gallery-content .right.angle.icon{right:100px}.gallery .close-wrapper{margin-top:24px;display:table;background:#000;width:48px;height:48px;border-radius:24px;position:fixed;right:2%;opacity:.6}.gallery .close-wrapper:hover{opacity:1}.gallery .close-wrapper .icon.close{display:table-cell;vertical-align:middle;color:#fff;opacity:.6}@media only screen and (max-width:1280px){.gallery .gallery-wrapper .gallery-content img{max-width:800px;cursor:zoom-out}}.gallery .gallery-wrapper .gallery-content .gallery-image{margin-left:auto;margin-right:auto;position:absolute;top:0;left:0;bottom:0;right:0;background-color:#FFF}.gallery .gallery-wrapper .gallery-content .gallery-origin{position:absolute;left:0;right:0}.gallery .gallery-wrapper .gallery-content .gallery-origin a{color:#fff}.bubble-detail .bubble-markdown-image-link:hover{cursor:zoom-in}.gallery:hover{cursor:zoom-out}#tweet-topic-list{width:980px;margin-left:auto;margin-right:auto;margin-top:30px}#tweet-topic-list .loading.block{color:#999;text-align:center;margin-left:auto;margin-right:auto;font-size:14px}#tweet-topic-list .loading.block .icon.loading{float:none!important}#tweet-topic-list .left-column{padding:0 16px 0 0;width:670px;border-right:1px solid #ddd;font-size:12px}#tweet-topic-list .left-column .header{border-bottom:1px solid #ddd;padding-bottom:10px;margin-bottom:10px;font-size:18px}#tweet-topic-list .left-column .bubble-topic-item{background:#fff;padding:15px;margin-bottom:10px}#tweet-topic-list .left-column .bubble-topic-item .topic-content-wrapper .detail{width:100%;display:inline-block}#tweet-topic-list .left-column .bubble-topic-item .topic-content-wrapper .detail .ui.button.small{float:right;margin:10px 0}#tweet-topic-list .left-column .bubble-topic-item .topic-content-wrapper .detail .created-at{vertical-align:top;margin-left:10px;font-size:12px}#tweet-topic-list .left-column .bubble-topic-item .topic-content-wrapper .detail .title{padding:10px 0;font-size:16px;color:#EA9663}#tweet-topic-list .left-column .bubble-topic-item .topic-content-wrapper .detail .title.no1{color:#DE5A5A}#tweet-topic-list .left-column .bubble-topic-item .topic-content-wrapper .join-in{margin-top:10px}#tweet-topic-list .left-column .bubble-topic-item .topic-content-wrapper .join-in .avatar{margin:0 3px 3px 0}#tweet-topic-list .right-column{font-size:14px;padding-right:0}#tweet-topic-list .right-column .icon{float:right;font-size:12px;margin:0;line-height:18px}#tweet-topic-list .right-column .header{font-size:18px;border-bottom:1px solid #ddd;padding:4px;margin-bottom:10px}#tweet-topic-list .right-column .header .icon{line-height:20px}#tweet-topic-list .right-column .list .item{margin-bottom:10px}#tweet-topic-list .right-column .list .add.icon{color:#999}#tweet-topic-list .marketing-tweet-topic .item{text-align:center;display:inline-block;margin-right:40px;font-size:12px;width:300px}#tweet-topic-list .marketing-tweet-topic .item img{width:300px}#tweet-topic-list .marketing-tweet-topic .item .topic-name{font-size:16px;margin-top:0;margin-bottom:10px}#tweet-topic-list .marketing-tweet-topic .item:last-child{margin-right:0}#tweet-topic-detail{width:980px;margin-left:auto;margin-right:auto;padding-top:20px}#tweet-topic-detail .loading.block{color:#999;text-align:center;font-size:14px}#tweet-topic-detail .loading.block .icon.loading{float:none!important}#tweet-topic-detail .left-column{width:620px;float:left;border-right:1px solid #ddd;margin-left:20px;padding:0 20px 0 0}#tweet-topic-detail .left-column .menu .active{background:#F7F6F2;border-bottom:1px solid #F7F6F2}#tweet-topic-detail .left-column .show-more{text-align:center;padding:10px}#tweet-topic-detail .left-column .show-more a{cursor:pointer}#tweet-topic-detail .left-column .topic-users{background:#fff;padding:24px}#tweet-topic-detail .left-column .topic-users .header{display:block;font-size:18px}#tweet-topic-detail .left-column .topic-users .topic-user{vertical-align:top;margin:24px 6px 0;display:inline-block;border-bottom:1px solid #f2f2f2;width:250px;padding-bottom:20px;height:60px}#tweet-topic-detail .left-column .topic-users .topic-user .avatar{float:left}#tweet-topic-detail .left-column .topic-users .topic-user .info{margin-left:64px}#tweet-topic-detail .left-column .topic-users .topic-user .info .user-name{display:inline-block;vertical-align:top}#tweet-topic-detail .left-column .topic-users .topic-user .join-in-at{font-size:12px;color:#999}#tweet-topic-detail .left-column .topic-users .topic-user .actions{margin-top:10px}#tweet-topic-detail .right-column{width:300px;padding-right:0;padding-left:0;margin-left:20px}#tweet-topic-detail .right-column .area{margin-bottom:24px}#tweet-topic-detail .right-column .area .title{display:block;font-size:16px;padding-bottom:10px;border-bottom:1px solid #ddd}#tweet-topic-detail .right-column .topic-banner{text-align:center}#tweet-topic-detail .right-column .topic-banner img{width:300px}#tweet-topic-detail .right-column .topic-banner .topic-info{background:#fff;padding:20px}#tweet-topic-detail .right-column .topic-banner .topic-info .topic-title{font-size:18px;color:#333;text-align:center;margin-bottom:16px}#tweet-topic-detail .right-column .topic-banner .topic-info .related{margin-top:10px}#tweet-topic-detail .right-column .topic-banner .topic-info .related .joins{font-size:14px;color:#666;vertical-align:middle}#tweet-topic-detail .right-column .topic-banner .topic-info .related .joins .num{font-size:20px}#tweet-topic-detail .right-column .topic-banner .topic-info .content{font-size:14px;color:#666;line-height:150%}#tweet-topic-detail .right-column .topic-banner .topic-info .actions{margin-top:16px;margin-bottom:16px}#tweet-topic-detail .right-column .topic-banner .topic-info .actions .button{margin-right:10px}#tweet-topic-detail .right-column .topic-description .content{display:block;font-size:14px;padding-top:4px;color:#666}#tweet-topic-detail .right-column .topic-hot-joins .title .icon{float:right;font-size:12px;line-height:20px}#tweet-topic-detail .right-column .topic-hot-joins .joins .user-item{padding:5px;display:inline-block;text-align:center;width:65px}#tweet-topic-detail .right-column .topic-hot-joins .joins .user-item:hover{background-color:rgba(0,0,0,.02)}#tweet-topic-detail .right-column .hot-topics .icon{float:right;margin:0;font-size:12px;line-height:18px}#tweet-topic-detail .right-column .hot-topics .list{margin-top:10px;color:#666}#tweet-topic-detail .right-column .hot-topics .list .item{margin-bottom:10px;font-size:14px;height:18px}#tweet-topic-detail .right-column .hot-topics .list .add.icon{color:#999}.ui.feed.messages .header .count,.ui.feed.notifications .header .count{color:#777;font-size:.8em}.ui.feed.messages .event,.ui.feed.notifications .event{position:relative;padding:.75em .6em;border-bottom:1px solid #e2e2e2;cursor:pointer;display:block}.ui.feed.messages .event .icon.remove,.ui.feed.notifications .event .icon.remove{position:absolute;right:-1em;top:.8em;cursor:pointer;visibility:hidden;font-size:1.6em}.ui.feed.messages .event .comment.icon,.ui.feed.notifications .event .comment.icon{float:right}.ui.feed.messages .event:hover,.ui.feed.notifications .event:hover{background-color:#fff}.ui.feed.messages .event:hover .icon.remove,.ui.feed.notifications .event:hover .icon.remove{visibility:visible}.ui.feed.messages .event.read .label .icon,.ui.feed.notifications .event.read .label .icon{color:#999}.ui.feed.messages .event.read .content .actions .ui.button,.ui.feed.notifications .event.read .content .actions .ui.button{visibility:hidden}.ui.feed.messages .event.read .content .header a,.ui.feed.notifications .event.read .content .header a{font-weight:400}.ui.feed.messages .event.read .content .summary,.ui.feed.notifications .event.read .content .summary{color:#777;font-weight:400}.ui.feed.messages .event.read .content .summary a,.ui.feed.notifications .event.read .content .summary a{color:#6983B4}.ui.feed.messages .label .icon,.ui.feed.notifications .label .icon{color:#444;font-size:1em}.ui.feed.messages .label img,.ui.feed.notifications .label img{width:2.5em;height:2.5em}.ui.feed.messages .content,.ui.feed.notifications .content{width:100%}.ui.feed.messages .content .actions,.ui.feed.notifications .content .actions{float:right;margin-left:2em}.ui.feed.messages .content .actions .ui.button,.ui.feed.notifications .content .actions .ui.button{padding:.2em;color:#666;background-color:#eee}.ui.feed.messages .content .header,.ui.feed.notifications .content .header{margin-bottom:.5em}.ui.feed.messages .content .header a,.ui.feed.notifications .content .header a{font-weight:700}.ui.feed.messages .content .summary,.ui.feed.notifications .content .summary{font-size:14px;font-weight:700;color:#000;display:inline-block;overflow:hidden;text-overflow:ellipsis;vertical-align:top;white-space:nowrap;max-width:45em}.ui.feed.messages .content .summary a,.ui.feed.notifications .content .summary a{font-weight:400}.ui.feed.messages .content .summary .icon.reply,.ui.feed.notifications .content .summary .icon.reply{color:#aaa}.ui.feed.messages .content .summary div.message-image-box,.ui.feed.notifications .content .summary div.message-image-box{float:left;padding:3px;vertical-align:middle;text-align:center;background:#FFF;margin-right:5px;border:1px solid #eee;position:relative;overflow:hidden;cursor:pointer;width:80px;height:80px;line-height:80px;border-radius:1px;margin-top:8px}.ui.feed.messages .content .summary div.message-image-box img.message-image,.ui.feed.notifications .content .summary div.message-image-box img.message-image{max-width:74px;vertical-align:middle;border-radius:0!important;width:inherit;margin-right:0!important}.ui.feed.notifications .event.read{cursor:default}.ui.feed.notifications .content{padding:0!important;vertical-align:middle;line-height:20px}.ui.feed.messages .event{cursor:pointer}.ui.feed.messages .label+.content{padding:0 .4em}.ui.list.messages{min-width:680px;max-width:740px}.ui.list.messages .date{text-align:center;padding:0 10px}.ui.list.messages .date time{color:#C0A5A5;font-size:12px}.ui.list.messages .unread-tips{padding:5px 12px;font-size:13px;border-radius:5px;background:#F6F3D5;color:#000;text-align:center;cursor:pointer;margin:10px auto;width:200px}.ui.list.messages .item>.content{padding:10px 20px;border-radius:5px;max-width:80%;word-wrap:break-word;font-size:.85em}.ui.list.messages .item>.content .icon.remove{color:#666;font-size:1.2em;cursor:pointer;visibility:hidden}.ui.list.messages .item>.content:hover .icon.remove{visibility:visible}.ui.list.messages .item>.content img.message-image{max-height:400px;max-width:500px;padding:10px 0}.ui.list.messages .item>.content .detail{font-family:'微软雅黑','Helvetica Neue',sans-serif,SimHei;font-size:1em;line-height:20px;margin:0}.ui.list.messages .item .arrow{position:relative;border:1px solid #eaeaea}.ui.list.messages .item .arrow:after,.ui.list.messages .item .arrow:before{border:solid transparent;content:\" \";height:0;width:0;position:absolute;pointer-events:none}.ui.list.messages .item .arrow:after{border-color:rgba(237,246,248,0);border-width:7px;margin-top:-7px}.ui.list.messages .item .arrow:before{border-color:rgba(234,234,234,0);border-right-color:#ededed;border-width:8px;margin-top:-8px}.ui.list.messages .item.left>.sender{float:left;margin-right:1em}.ui.list.messages .item.left>.content{float:left;background:#FFF;color:#222}.ui.list.messages .item.left>.content .icon.remove{float:right;margin:0 -30px 0 0}.ui.list.messages .item.left .arrow:after,.ui.list.messages .item.left .arrow:before{right:100%;top:1em}.ui.list.messages .item.left .arrow:after{border-right-color:#fff;border-left-color:transparent}.ui.list.messages .item.left .arrow:before{border-right-color:#eaeaea}.ui.list.messages .item.right>.sender{float:right;margin-left:1em}.ui.list.messages .item.right>.content{float:right;background:#ECF9FF;color:#444;border:1px solid #D7E4F4}.ui.list.messages .item.right>.content .icon.remove{float:left;margin:0 0 0 -30px}.ui.list.messages .item.right .arrow:after,.ui.list.messages .item.right .arrow:before{left:100%;top:1em}.ui.list.messages .item.right .arrow:after{border-left-color:#ECF9FF}.ui.list.messages .item.right .arrow:before{border-left-color:#D7E4F4;border-right-color:transparent}.ui.list.messages .item.form .ui.button.send{margin:.6em 0 0 1em}.ui.list.messages .item.form>.content{font-size:13px;color:#777;padding:10px 10px 0;width:520px}.ui.list.messages .item.form>.content textarea{width:100%;height:2em;outline:0;margin:0;border:none;padding:0;resize:none}.ui.list.messages .item.form>.content .meh-photo{margin-bottom:5px}.ui.list.messages .item.form>.content .meh-photo span{float:right}.ui.list.messages .item.form>.content .meh-photo span i.icon{font-size:15px;color:#444;cursor:pointer}.ui.list.messages .item.form>.content .meh-photo span i.icon:hover{color:#000}.ui.list.messages .preview{margin:5px 55px 30px}.ui.list.messages .preview>div ul{list-style:none;padding:0;margin:0;display:table;border-collapse:collapse}.ui.list.messages .preview>div ul li{float:left;padding:5px;vertical-align:middle;text-align:center;background:#FFF;border:1px solid #eee;position:relative;overflow:hidden;cursor:pointer;width:90px;height:90px;line-height:90px;border-radius:1px;margin-right:2px}.ui.list.messages .preview>div ul li div.close{background:rgba(0,0,0,.5);width:100%;height:100%;position:absolute;left:0;top:0;margin-top:100%;-webkit-transition:margin-top .5s;transition:margin-top .5s}.ui.list.messages .preview>div ul li div.close i.icon{font-size:60px;color:#FFF;width:100%;height:100%;display:inline-block;line-height:90px}.ui.list.messages .preview>div ul li:hover div.close{margin-top:0}#send-message-modal .content{margin-bottom:0;padding-bottom:1em;display:block}#send-message-modal textarea.send-message-text{resize:none;min-height:5em;max-height:8em;border-bottom:0;border-bottom-left-radius:0;border-bottom-right-radius:0}#send-message-modal textarea.send-message-text:focus{color:rgba(0,0,0,.85);border-color:rgba(0,0,0,.2);border-bottom-left-radius:0;border-top-left-radius:0;-webkit-appearance:none;-webkit-box-shadow:none;box-shadow:none}#send-message-modal .meh-photo{margin-bottom:5px;padding:5px;background:#FFF;border:1px solid rgba(0,0,0,.15);border-top:0;border-bottom-left-radius:.3215em;border-bottom-right-radius:.3215em}#send-message-modal .meh-photo span{float:right}#send-message-modal .meh-photo span i.icon{font-size:15px;color:#444;cursor:pointer}#send-message-modal .meh-photo span i.icon:hover{color:#000}#send-message-modal .preview>div ul{list-style:none;padding:0;margin:0;display:table;border-collapse:collapse}#send-message-modal .preview>div ul li{float:left;padding:5px;vertical-align:middle;text-align:center;background:#FFF;border:1px solid #eee;position:relative;overflow:hidden;cursor:pointer;width:90px;height:90px;line-height:90px;border-radius:1px;margin-right:2px}#send-message-modal .preview>div ul li div.close{background:rgba(0,0,0,.5);width:100%;height:100%;position:absolute;left:0;top:0;margin-top:100%;-webkit-transition:margin-top .5s;transition:margin-top .5s}#send-message-modal .preview>div ul li div.close i.icon{font-size:60px;color:#FFF;width:100%;height:100%;display:inline-block;line-height:90px}#send-message-modal .preview>div ul li:hover div.close{margin-top:0}#send-message-modal .preview>div img{width:90px;vertical-align:middle}@media screen and (max-width:1100px){.ui.feed.messages .content .summary{max-width:36em}}.activities_flow .activity{position:relative;margin-bottom:20px}.activities_flow .activity>.avatar{position:absolute;left:0;top:2px;width:32px;z-index:99}.activities_flow .activity>.inner>.content{position:relative;min-height:25px;word-break:break-all}.activities_flow .activity>.inner{margin-left:57px;padding:10px;border-radius:3px;background:#FFF;position:relative}.activities_flow .activity>.inner .toolbar{font-size:12px;color:#999}.activities_flow .activity>.inner:before{margin-top:-11px;bottom:auto;right:auto;top:23px;left:-6px;position:absolute;content:\"\";width:.6em;height:.6em;background-image:none;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);z-index:2;-webkit-transition:background .1s linear;-moz-transition:background .1s linear;transition:background .1s linear;background-color:#fff;border-left:1px solid #eee;border-bottom:1px solid #eee}.activities_flow .activity #activities_flow .activity>.comments,.activities_flow .activity>.inner{border:1px solid #e5e5e5;-webkit-box-shadow:0 0 3px #E8E8E8;-moz-box-shadow:0 0 3px #E8E8E8;-ms-box-shadow:0 0 3px #E8E8E8;-o-box-shadow:0 0 3px #E8E8E8;box-shadow:0 0 3px #E8E8E8}.activities_flow .activity>.comments{border-radius:0 0 3px 3px;border-top:0;margin-left:40px;padding:10px;background:#F7F6F2;position:relative}.activities_flow .activity>.comments>.comment:first-child{margin-top:0}.activities_flow .activity>.comments>.comment{position:relative;border-bottom:1px solid #E5E5E5;margin:10px 0}.activities_flow .activity>.comments>.comment .avatar{position:absolute;left:0;top:2px;width:30px;height:30px}.activities_flow .activity>.comments>.comment .toolbar{margin-top:0}.activities_flow .activity>.comments>.comment .content{font-size:12px;margin-left:40px;min-height:32px;line-height:23px;color:#666}.activities_flow .activity .Depot_push .more-info{padding:6px 2px}.activities_flow .activity .Depot_push .more-info .commit-message{color:#666}#activity-wall{margin-bottom:40px}#activity-wall a.more{cursor:pointer}.arrowkey-selected{background:rgba(0,0,0,.2)!important}.wmd-panel{width:auto;min-width:550px;border:1px solid #CCC}.wmd-panel>[id*=wmd-button-bar]{padding:10px!important;border-bottom:1px solid #CCC}.wmd-button-bar{width:100%;background-color:Silver}.wmd-input{height:500px;width:100%;min-height:0!important;max-height:100%!important;background-color:#FFF;border:none!important;box-shadow:none!important;letter-spacing:1px}.wmd-preview{padding:15px;background-color:#f5f5f5}.wmd-button-row{position:relative;margin:5px;margin-bottom:0!important;margin-top:0!important;padding:0;height:20px}.wmd-spacer{width:1px;height:20px;margin-left:14px;position:absolute;background-color:Silver;display:inline-block;list-style:none}.wmd-button{width:20px;height:20px;padding-left:2px;padding-right:3px;position:absolute;display:inline-block;list-style:none;cursor:pointer}.wmd-button:hover i{color:#666}.wmd-button>span{width:20px;height:20px;display:inline-block}.wmd-spacer1{left:50px}.wmd-spacer2{left:175px}.wmd-spacer3{left:300px}.wmd-prompt-background{background-color:#000}.wmd-prompt-dialog{border:1px solid #999;background-color:#F5F5F5}.wmd-prompt-dialog>div{font-size:.8em;font-family:arial,helvetica,sans-serif}.wmd-prompt-dialog>form>input[type=text]{border:1px solid #999;color:#000}.wmd-prompt-dialog>form>input[type=button]{border:1px solid #888;font-family:trebuchet MS,helvetica,sans-serif;font-size:.8em;font-weight:700}.auto-scroll{height:223px;overflow:auto}.zero-desc{width:100%;height:180px;line-height:180px;text-align:center}.qc-inner-menu{float:left;border-right:none!important}.public-qc-container{border-left:1px solid #CCC;min-height:400px!important;height:inherit!important}.public-qc-init{float:left;width:100%}#qc-container{min-height:300px}#qc-container ::-webkit-scrollbar-track-piece{background-color:#fff;-webkit-border-radius:0;border-right:1px solid #ccc}#qc-container ::-webkit-scrollbar{width:12px;height:12px}#qc-container ::-webkit-scrollbar-thumb{height:50px;background-color:rgba(3,3,3,.2);-webkit-border-radius:0;outline:#ccc solid 2px;outline-offset:-2px;border:2px solid #fff}#qc-container ::-webkit-scrollbar-thumb:hover{height:50px;background-color:#9f9f9f;-webkit-border-radius:0;outline:#9f9f9f solid 2px}#qc-container .qc-auto-height{height:inherit!important}#qc-container .min-w{min-width:1000px}#qc-container .qc_title{font-size:13px}#qc-container .qc-code-info{display:inline-block;width:100%}#qc-container .qc.init input[name=sourceEncoding][type=text]{border:none;padding:2px}#qc-container .qc.init input[name=sourceEncoding][type=text]:focus{-webkit-box-shadow:none;box-shadow:none}#qc-container .qc-tabular.tabular.ui.menu .item.active{background:rgba(255,255,255,0)!important;border-bottom:3px solid #333;border-top-color:rgba(255,255,255,0)!important;border-left-color:rgba(255,255,255,0)!important;border-right-color:rgba(255,255,255,0)!important}#qc-container .qc-tabular.tabular.ui.menu .item.qc-commit-info{display:inline-block;width:450px;padding:0;margin:0;font-size:12px;word-wrap:break-word;word-spacing:normal;overflow:hidden;text-overflow:ellipsis}#qc-container .qc-tabular.tabular.ui.menu .item.qc-commit-info .info{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#qc-container .qc-tabular.tabular.ui.menu .item.qc-commit-info .name{font-family:Consolas,Courier,\"Liberation Mono\",monospace!important;margin-left:20px}#qc-container .qc-tabular.tabular.ui.menu .item.qc-commit-info .ago{font-size:12px;color:#aaa}#qc-container .qc-tabular.tabular.ui.menu .item.qc-commit-info .gravatar{vertical-align:middle;border-radius:8px;margin-right:5px;margin-left:10px;margin-top:0}#inner-menu .qc-versions .item{font-size:13px;-webkit-box-shadow:none!important;box-shadow:none!important;font-family:Consolas,Courier,\"Liberation Mono\",monospace!important}#inner-menu .qc-versions .item .icon.close{float:right;display:none;margin-top:1px}#inner-menu .qc-versions .item img{width:16px;border-radius:8px;vertical-align:-4px}#inner-menu .qc-versions .item:hover .icon.close{display:block}#inner-menu .icon.stop{font-size:10px}#inner-menu .icon.stop.finish{color:#228119}#inner-menu .icon.stop.failed{color:#E24631}#inner-menu .icon.stop.running{color:#CEDD26}#inner-menu .icon.stop.ready{color:#3CA0D8}#inner-menu .item.active{background:rgba(0,0,0,.08)}.no-qc-report{font-size:13px;text-align:center;margin-top:50px;color:#999}.qc-help .title{border-bottom:1px solid #acc;margin-bottom:5px;padding-bottom:3px;display:block;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.07);-moz-box-shadow:0 1px 2px rgba(0,0,0,.07);box-shadow:0 1px 2px rgba(0,0,0,.07);color:#15B4B4}.qc-help p{margin:2px 0}.qc-help .content,.qc-help .intro{font-size:12px}.qc-help .intro{font-weight:700;color:#FC7F0E}.qc-help .content{color:#dedede}#qc-container .file,#qc-container .folder{cursor:pointer}#qc-container .box.duplications{overflow-y:auto;margin-right:0;margin-bottom:20px;height:initial;max-height:initial}#qc-container .box.duplications .duplication-group{border-top:3px solid #EAE9E5;margin-bottom:20px}#qc-container .box.duplications .duplication-group:first-child{border-top:none}#qc-container .box.duplications .duplication-group ul{padding:0;margin:0}#qc-container .box.duplications .duplication-group ul li{list-style:none}#qc-container .box.duplications .duplication-group ul li.group.filename{cursor:pointer;border:1px solid #ccc;border-bottom:none;border-left:none;border-right:none;background:#F7F7F7}#qc-container .box.duplications .duplication-group ul li.group.filename .filename,#qc-container .box.duplications .duplication-group ul li.group.filename .lines,#qc-container .box.duplications .duplication-group ul li.group.filename .start{display:inline-block;padding:2px 5px;font-size:12px}#qc-container .box.duplications .duplication-group ul li.group.filename .lines,#qc-container .box.duplications .duplication-group ul li.group.filename .start{min-width:30px;text-align:right}#qc-container .box.duplications .duplication-group ul li.group.filename.active{background:#95BABD;color:#FFF}#qc-container .box.duplications .duplication-group ul li.group.code .box.code{border-left:none;border-right:none;margin-bottom:0;border-bottom:none}#qc-container .box.dashboard{height:400px;max-height:inherit}#qc-container .box.dashboard p.filename{margin:0;padding:10px 30px 0;font-size:14px;font-weight:700}#qc-container .box.dashboard .column.row{padding:10px 20px;margin-bottom:0!important}#qc-container .box.dashboard .column.row .column{margin:0!important;padding:0!important}#qc-container .box.dashboard .column.row .column.row{margin:0!important;padding:10px 0!important}#qc-container .box.dashboard ul{padding:0;margin:0}#qc-container .box.dashboard ul li{list-style:none;font-size:13px}#qc-container .box.dashboard ul li span.value{font-size:12px;color:#555}#qc-container .box.dashboard ul li span.value.best{font-size:12px;color:#0CC431}#qc-container .box.dashboard ul li span.value.better{font-size:12px;color:#1A58C5}#qc-container .box.dashboard ul li span.value.normal{font-size:12px;color:#555}#qc-container .box.dashboard ul li span.value.worse{font-size:12px;color:#EBD910}#qc-container .box.dashboard ul li span.value.bad{font-size:12px;color:#EB1045}#qc-container .box.dashboard ul li span.value.terrible{font-size:12px;color:red}#qc-container .box.dashboard .column p.title{margin:0;padding:0;font-weight:700;font-size:14px}#qc-container .box.dashboard .column .content{padding-top:10px}#qc-container .box.dashboard .column .content li{float:left;padding-right:30px}#qc-container .code.box{overflow:auto}#qc-container .code-snippet{border:none!important;border-radius:0!important;box-shadow:none!important}#qc-container .code-snippet p.filename{padding:2px 5px;margin:0;font-size:12px;color:#333}#qc-container .code-snippet pre{margin:2px 0}#qc-container .code-snippet pre code{padding:0;background:#FFF}#qc-container .code-snippet .line{position:relative;padding-left:32px;line-height:18px;font-size:12px;font-family:Menlo,Monaco,Consolas,\"Courier New\",monospace}#qc-container .code-snippet .line .line-number{position:absolute;left:2px;top:0}#qc-container .code-snippet .line .line-code{white-space:pre}#qc-container .code-snippet .line.highlighted{background:#FF9090;color:#FFF}#qc-container .code-snippet .line.highlighted .line-number{color:#000}#qc-container .code-snippet .line.highlighted [class^=hljs-]{color:#FFF}#qc-container .code-snippet .issues-rule{font-size:12px;border:1px solid #CCC;margin:5px 0;white-space:normal}#qc-container .code-snippet .issues-rule .header{cursor:pointer}#qc-container .code-snippet .issues-rule .content{padding:5px 10px}#qc-container .code-snippet .issues-rule .hidden{display:none}#qc-container .issues-rule .footer,#qc-container .issues-rule .header{background-color:#E4ECF3;padding:5px}@media only sreen and (max-width:768px){.code-snippet{overflow-x:auto;width:100%}}#qc-container .box{height:400px;border:1px solid #ccc;margin-top:0;background:#FFF;margin-bottom:20px}#qc-container .folder.box{overflow-y:scroll;height:400px;margin-right:0}#qc-container .folder.box .item{font-size:12px;padding:8px;color:#000!important}#qc-container .folder.box .item i.icon{color:#000!important;margin-right:5px!important}#qc-container .folder.box .item label.num{color:#000!important;font-size:12px;float:right}#qc-container .folder.box .item span.folder-name{display:inline-block;width:200px;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}#qc-container .folder.box .files.ui.link.list{padding:0 0 0 1em}#qc-container .folder.box .files.ui.link.list .item{font-size:12px;padding:5px 8px;color:#333!important;text-overflow:ellipsis;white-space:nowrap}#qc-container .folder.box .files.ui.link.list .item i.icon{color:#333!important;margin-right:5px!important}#qc-container .folder.box .files.ui.link.list .item label.num{color:#333!important;font-size:12px;float:right}#qc-container .folder.box .files.ui.link.list .active.item{font-size:12px;padding:5px 8px;color:#a00!important}#qc-container .folder.box .files.ui.link.list .active.item i.icon,#qc-container .folder.box .files.ui.link.list .active.item label.num{color:#a00!important}#qc-container .ui.block.header{color:#333!important;border:1px solid #ccc;margin-bottom:0;border-bottom:none}#qc-container .ui.block.header .icon.fullscreen,#qc-container .ui.block.header .icon.remove{float:right;vertical-align:middle;margin-top:3px;margin-right:0;cursor:pointer}#qc-container .ui.block.header span{cursor:pointer}#qc-container .ui.block.header span.filename{font-size:11px;font-weight:400;margin-left:20px;cursor:auto}#qc-container .issues.filter{margin-bottom:20px;display:inline-block;width:100%}#qc-container .issues.filter .issues-box .ui.grid{margin:0}#qc-container .issues.filter .issues-box .ui.grid .column{padding:0;margin:0}#qc-container .issues.filter .issues-box .ui.menu.issues-type-menu{border-radius:0!important;margin:0}#qc-container .issues.filter .issues-box .ui.menu.issues-type-menu .item{font-size:12px;border-radius:0!important}#qc-container .issues.filter .issues-box .ui.menu.issues-type-list{border-radius:0!important;margin:0;background:#FFF;height:191px;overflow-y:scroll;overflow-x:hidden}#qc-container .issues.filter .issues-box .ui.menu.issues-type-list .item{text-overflow:ellipsis;white-space:nowrap;border-radius:0!important;font-size:12px;padding-left:20px}#qc-container .issues.filter .issues-box .ui.menu.issues-type-list .item .num{float:right}#qc-container .issues.filter .issues-box .ui.menu.issues-type-list .item.active{background:#F7F7F7;-webkit-box-shadow:none!important;box-shadow:none!important}#qc-container .issues.code.list .ui.grid{margin:0}#qc-container .issues.code.list .ui.grid .wide.column{padding:0;margin:0}#qc-container .issues.code.list .ui.grid .wide.column:first-child{padding-right:20px}#qc-container .full{width:initial!important;display:block!important;height:700px!important}#qc-container .full .code.box{max-height:600px!important;height:600px!important}#qc-container .hide{display:none!important}#qc-container{padding:30px 10px 0!important}#qc-container svg{font:10px sans-serif}#qc-container .qc-dashboard>.two.column>.column:first-child{padding-left:0}#qc-container .qc-dashboard>.two.column>.column:last-child{padding-left:0;padding-right:0}#qc-container .qc-dashboard section{padding-bottom:10px}#qc-container .report-box{background:#FFF;border:1px solid #ccc;padding:5px 10px}#qc-container .report-box .report-header{margin:0;padding-bottom:10px}#qc-container .report-box .report-header .title{font-size:16px;color:#333;margin-right:30px}#qc-container .report-box .report-header .title i.icon{font-size:13px}#qc-container .report-box .report-header .num{font-size:24px;color:#333;margin-right:10px;font-weight:600}#qc-container .report-box .report-header .desc{font-size:14px;color:#333;margin-right:30px}#qc-container .report-box .box-item{display:inline-block;font-size:12px;padding-bottom:8px;color:#555}#qc-container .report-box .box-item p{text-align:center;margin:0}#qc-container .report-box .box-item p:first-child{margin-top:8px;font-size:14px;font-weight:700}#qc-container .report-box .box-item p:last-child{font-size:12px;padding-bottom:8px;color:#555}#qc-container .report-box .three.column .box-item{width:32%}#qc-container .report-box .two.column .box-item{width:49%}#qc-container .report-box .one.column .box-item{width:100%}#qc-container .report-box .two-split.column .box-item:first-child{width:60%;border-right:1px solid #ccc}#qc-container .report-box .two-split.column .box-item:last-child{width:38%;vertical-align:top}#qc-container .report-box p.alone{margin:0;font-size:14px;color:#333;padding:3px 0;font-weight:700}#qc-container .report-box .report-content{margin-bottom:10px}#qc-container .report-box .report-content div.rect{width:50%;display:inline-block;vertical-align:middle}#qc-container .report-box .report-content div.rect svg{float:right}#qc-container .report-box .report-content span.label{font-size:13px;margin-right:8px}#qc-container .report-box .report-content span.num{font-size:13px}#qc-container .vr-dashes{border-right:1px dashed #ccc}#qc-container .hb-dashes{border-bottom:1px dashed #ccc}.ui.popup{z-index:9999}.git-container{min-width:860px;margin-bottom:50px}.git.tab-bar{height:32px;box-sizing:border-box;border-bottom:1px solid #5191bd}.git.tab-bar .item{color:#000;background-color:#fff;font-size:14px;padding:0 15px;border-top:2px solid #ccc;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;line-height:29px;display:inline-block;position:relative;margin-left:-1px}.git.tab-bar .item:first-child{margin-left:0}.git.tab-bar .item.active{border-top:2px solid #5191bd;border-bottom:none}.git.tab-bar .item.active:before{content:\"\";z-index:-1;-webkit-box-shadow:0 0 10px rgba(0,0,0,.4);box-shadow:0 0 10px rgba(0,0,0,.4);width:100%;height:100%;top:-2px;right:0;position:absolute}.git.tab-content{display:none;width:600px;background-color:#fff;padding:15px;box-sizing:border-box}.git.tab-content.active{display:block}.git.tab-btn{position:absolute;top:31px;left:600px;cursor:pointer;color:#fff;background-color:#5191bd;padding:10px 5px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;font-size:14px}.git.tab-btn:hover{color:#fff}.git.tab-btn.disabled{background-color:rgba(81,145,189,.6)}.git.select2 .select2-container:first-child{margin-left:0}.git.select2 .select2-container{margin:0 20px}.git.select2 .select2-choice{background:#fff}.git.select2 .select2-arrow{border-left:none;background:0 0}.code-reviewer-select{width:250px;margin:0;position:relative;display:inline-block;vertical-align:middle;box-sizing:border-box}.code-reviewer-select-choice{display:block;height:26px;padding:0 0 0 8px;overflow:hidden;position:relative;border:1px solid #aaa;background:#fff;line-height:26px;white-space:nowrap;text-decoration:none;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.diffstat{font-size:12px;font-weight:700;color:#666;white-space:nowrap;cursor:default;max-width:72px}.diffstat .block{position:relative}.text-diff-added{color:#9ACA3F}.text-diff-deleted{color:#DF5A5A}.block-diff-added,.block-diff-deleted,.block-diff-neutral{display:inline-block;width:8px;height:8px;margin-left:1px;vertical-align:middle}.block-diff-added{background-color:#9ACA3F}.block-diff-deleted{background-color:#DF5A5A}.block-diff-neutral{background-color:#ddd}.git-main-content{min-width:750px;max-width:800px}.git-main-form{min-width:600px;max-width:700px}.pull-request .pagedown.wmd-panel>.pagedown-editor{height:220px}.pull-request .pr-title{word-break:break-all}.pull-request .pr-id{color:#888;font-size:14px}.pull-request .pr-status{color:#fff;font-size:12px!important;border-radius:3px;padding:5px}.pull-request .pr-status.accepted{background-color:#D19D6B}.pull-request .pr-status.canmerge{background-color:#78B98E}.pull-request .pr-status.cannotmerge{background-color:#A78CD3}.pull-request .pr-status.refused{background-color:#D97577}.pull-request .pr-status.cancel{background-color:#BBB}.pull-request .pr-item{margin-top:20px;margin-bottom:20px;display:block}.pull-request .pr-item .author,.pull-request .pr-item .time{color:#333;text-decoration:none;font-size:12px;line-height:20px;height:20px;vertical-align:middle}.pull-request .pr-item .pr-created-at{line-height:20px;height:20px;vertical-align:middle}.pull-request .pr-item .header{margin-bottom:7px}.pull-request .pr-item .header a{color:#444;font-weight:500;outline:0;font-size:14px;box-sizing:border-box}.pull-request .pr-item .header .pr-label{font-size:12px!important;font-weight:400;color:#000;border-radius:3px;padding:2px 5px!important}.pull-request .pr-item .header .pr-label.src{margin-left:30px;background-color:#E3EdF6}.pull-request .pr-item .header .pr-label.des{background-color:#E8E8E8}.pull-request .pr-item .footer{font-size:12px}.pull-request .pr-item .pr-author{display:inline;height:20px;line-height:20px;vertical-align:middle;color:#333}.pull-request .pr-item .merge-form{margin:30px 0}.pull-request .pr-item .pr-merged-time{font-size:12px;height:14px;line-height:14px;margin-top:5px;text-align:center;margin-left:10px}.pull-request .pull-right{float:right}.pull-request .pr-author{font-size:12px;color:#999}.pull-request .pr-merge{padding:20px;background:0 0}.pull-request .pr-action{margin-bottom:30px}.pull-request .pr-action .buttons .button{border:none!important;padding-left:15px;padding-right:15px}.pull-request .pr-action .buttons .button.refuse-btn{border-top-left-radius:30px!important;border-bottom-left-radius:30px!important}.pull-request .pr-action .buttons .button.merge-btn{border-top-right-radius:30px!important;border-bottom-right-radius:30px!important}.pull-request .pr-action .pr-label{color:#fff;border-radius:3px;font-size:13px;padding:2px 5px!important}.pull-request .pr-action .pr-label.src{background-color:#44689b}.pull-request .pr-action .pr-label.des{background-color:#444}.pull-request .pr-content{margin-bottom:30px;word-wrap:break-word}.pull-request .author-gravatar{vertical-align:middle;border-radius:10px;display:inline-block}.pull-request .diff-notes-wrapper{position:relative;margin-bottom:20px}.pull-request .diff-notes-wrapper .commit-diff{margin-left:100px}.pull-request .diff-notes-wrapper .commit-diff .header{border-top-left-radius:3px;border-top-right-radius:3px;border-color:#ddd}.pull-request .diff-notes-wrapper .commit-diff .diff{border-color:#ddd;margin-bottom:0}.pull-request .diff-notes-wrapper .diff-comments{margin-left:100px;background-color:#fff;border:1px solid #ddd;border-top:none;border-bottom-left-radius:3px;border-bottom-right-radius:3px;padding:10px;max-width:initial}.pull-request .diff-notes-wrapper .diff-comments .cancel-comment{bottom:14px}.pull-request .diff-notes-wrapper.outdated .commit-diff,.pull-request .diff-notes-wrapper.outdated .diff-comments{display:none}.pull-request .activity{font-size:12px;line-height:32px;color:#999}.pull-request .activity .icon.activity{width:30px;height:30px;position:absolute;left:59px;top:-2px;border-radius:19px;text-align:center;line-height:32px;color:#666;border:2px solid #f7f6f2;background-color:#efdddd}.pull-request .activity .icon.activity>i{margin:0;font-size:14px;opacity:1}.pull-request .activity .icon.activity.create{background-color:#eee}.pull-request .activity .icon.activity.merge{background-color:#32be77;color:#FFF}.pull-request .activity .icon.activity.cancel,.pull-request .activity .icon.activity.refuse{background-color:#DF5A5A;color:#FFF}.pull-request .activity .icon.activity.update{background-color:#eee}.pull-request .activity .icon.activity.review{background-color:#eb935d;color:#FFF}.pull-request .activity .icon.activity.review_undo{background-color:#eee}.pull-request .activity .icon.activity.grant{background-color:#eb935d;color:#FFF}.pull-request .activity .icon.activity.grant_undo{background-color:#eee}.pull-request .activity .icon.activity.push{background-color:#5191bd;color:#FFF}.pull-request .activity .detail{padding-left:100px}.pull-request .activity .button.toggle-diff{float:right;font-size:12px;font-weight:700;color:#666;cursor:pointer}.pull-request .mr-title{position:relative;border-radius:3px;margin:18px 0;height:25px}.pull-request .mr-title>textarea{overflow:hidden;word-wrap:break-word;resize:none;height:25px;font-size:18px;color:#333;line-height:25px;width:100%;padding:0;margin:0;border:none;-webkit-box-shadow:none;box-shadow:none;outline:0;word-break:break-all;background:#f7f6f2;white-space:nowrap}.pull-request .mr-title>textarea:hover{background:#eee}.pull-request .mr-title>div{word-wrap:break-word;height:25px;font-size:18px;color:#333;line-height:25px;width:100%;padding:0;margin:0;border:0;word-break:break-all}.pull-request .mr-status{color:#fff;font-size:12px!important;border-radius:3px;padding:5px;margin-right:10px}.pull-request .mr-status.accepted{background-color:#D19D6B}.pull-request .mr-status.canmerge{background-color:#78B98E}.pull-request .mr-status.cannotmerge{background-color:#A78CD3}.pull-request .mr-status.refused{background-color:#D97577}.pull-request .mr-status.cancel{background-color:#BBB}.pull-request .mr-status.granted{background-color:#32BE77;margin-right:10px}.pull-request .mr-action{margin-bottom:20px}.pull-request .mr-action .mr-label{padding:2px 5px!important;font-size:14px;line-height:24px}.pull-request .mr-action .mr-label.src{color:#5092BD}.pull-request .mr-action .mr-label.des{color:#000}.pull-request .mr-content{margin-bottom:30px;border:1px solid #EEE;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;padding:20px;background:#FFF;position:relative}.pull-request .mr-content i.edit.icon{position:absolute;right:4px;top:4px;font-size:12px!important;color:#999!important;margin:0!important;z-index:2;transform-origin:47% 47%;cursor:pointer}.pull-request .mr-content i.edit.icon:hover{cursor:pointer}.pull-request .mr-content.editing{padding:0!important;border:0!important}.pull-request .mr-content .empty.content{width:auto;font-size:14px;color:#999}#pulls-comments .comment{position:relative;padding:15px 10px}#pulls-comments .comment img.avatar{position:absolute;top:19px;left:12px}#pulls-comments .comment .content{padding-left:50px;line-height:23px;font-size:14px;margin-bottom:3px}#pulls-comments .comment .time{padding-left:50px;font-size:12px;color:#999}#pulls-comments .comment .time a.remove{margin-left:5px;display:none}#pulls-comments .comment .time a.reply{margin-left:10px;display:none}#pulls-comments .comment:hover .time a.remove,#pulls-comments .comment:hover .time a.reply{display:inline}#merges-comment-form{margin:50px 0}.merge-request-activity-filter{text-align:right;padding-right:10px;margin-bottom:10px;font-size:14px;margin-top:20px}.git-comments{position:relative}.git-comments:before{width:2px;position:absolute;top:2px;left:74px;height:100%;border-left:3px solid #EEE;content:'';z-index:0}.git-comments .comment{position:relative;margin-bottom:20px;border:2px solid transparent;border-bottom:none}.git-comments .comment .commont-avatar{position:absolute;left:3px;top:8px}.git-comments .comment img.avatar{width:36px;height:36px;margin:0}.git-comments .comment .content-wrapper{margin-left:60px;padding:15px;position:relative;border:1px solid #EEE;background:#FFF;border-radius:3px}.git-comments .comment .content-wrapper:before{margin-top:-11px;bottom:auto;right:auto;top:30px;left:-6px;position:absolute;content:\"\";width:.6em;height:.6em;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);z-index:2;-webkit-transition:background .1s linear;-moz-transition:background .1s linear;transition:background .1s linear;background-color:#FFF;border-left:1px solid #EEE;border-bottom:1px solid #EEE}.git-comments .comment .content{line-height:23px;font-size:14px;margin-bottom:10px}.git-comments .comment .content img.monkey.emotion{width:64px}.git-comments .comment .time{font-size:12px;color:#999}.git-comments .comment .time a.remove,.git-comments .comment .time a.reply{display:none}.git-comments .comment .time .mr10{margin-right:10px}.git-comments .comment:hover .time a.remove,.git-comments .comment:hover .time a.reply{display:inline}.git-comments .comment:first-child{border:2px solid #f7f6f2}.merges-comment-editor.light-md-editor .editor>textarea{min-height:0;max-height:none}.merge-request-layout{padding-right:30px}.select-reviewer.select2-drop{border:0;border-radius:0 0 .2em .2em;box-shadow:0 0 1px 1px rgba(0,0,0,.1);color:#333!important;min-width:175px}.select-reviewer.select2-drop>.select2-search{padding:4px;margin-top:0;background-color:#eee}.select-reviewer.select2-drop>.select2-search input{margin-top:0!important;padding:5px 25px 5px 10px;border:1px solid #ddd;border-radius:2px;font-size:12px;color:#333;background:url(/static/2ca61b76e22053571dd8611e5aac4900.png) 100% -22px no-repeat #fff}.select-reviewer.select2-drop>.select2-results{padding:0;margin:0;max-height:205px}.select-reviewer.select2-drop>.select2-results .select2-result{height:40px;color:#333;border-top:1px solid rgba(0,0,0,.05)}.select-reviewer.select2-drop>.select2-results .select2-highlighted{background:rgba(0,0,0,.02)}.select-reviewer.select2-drop>.select2-results .select2-no-results,.select-reviewer.select2-drop>.select2-results .select2-result-label{padding:0 5px;height:40px;line-height:40px}.select-reviewer.select2-drop>.select2-results .select2-no-results>div,.select-reviewer.select2-drop>.select2-results .select2-result-label>div{display:flex;display:-webkit-flex;align-items:center;-webkit-align-items:center;margin-left:10px}.select-reviewer.select2-drop>.select2-results .select2-no-results>div>img,.select-reviewer.select2-drop>.select2-results .select2-result-label>div>img{width:30px;height:30px}.select-reviewer.select2-drop>.select2-results .select2-no-results>div>span,.select-reviewer.select2-drop>.select2-results .select2-result-label>div>span{margin-left:5px}.diffstat-block{float:right;display:inline-block;padding-top:15px;margin-left:10px}.mr-tasks .mr-task{width:250px;height:27px}.mr-tasks .mr-task>span{font-size:14px;color:#333;height:20px;line-height:20px;display:-webkit-flex;display:flex;box-sizing:border-box}.mr-tasks .mr-task>span>a{color:#333;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;width:200px}.mr-tasks .mr-task>span>img{width:20px;height:20px}.mr-tasks .mr-task>span>i{margin-top:3px!important}.mr-tasks .mr-task>span>i.icon.remove{float:right}.mr-tasks .mr-task>span>i.icon.remove:hover{cursor:pointer}.merge-request-info-menu{width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding-right:10px;overflow-x:visible!important}.merge-request-info-menu-item{position:relative;color:#555;font-size:12px;margin-bottom:6px}.merge-request-info-menu-item header{padding:5px 0 8px;font-size:12px!important;margin:0!important}.merge-request-info-menu-item header .icon.add{line-height:16px;float:right}.merge-request-info-menu-item header .icon.add:hover{cursor:pointer}.merge-request-info-menu-item.with-top-separator{margin-top:8px;padding-top:8px;border-top:1px solid #DDD}.merge-request-info-menu-item>.button{width:100%}.review-good{color:#32be77}.review-good:before{font-family:Icons;content:\"\\f164\";position:absolute;left:15px;z-index:1;top:13px;width:14px;height:14px;font-size:12px}.review-good:after{content:\"\";position:absolute;left:13px;z-index:0;top:12px;width:15px;height:15px;background-color:#fff;border-radius:14px}.merge-request-info-menu-item-content{color:#333;font-size:14px}.merge-request-info-menu-item-content .reviewer-list{display:flex;display:-webkit-flex;margin-bottom:5px;align-items:center;-webkit-align-items:center;position:relative}.merge-request-info-menu-item-content .reviewer-list>span{padding-left:30px;display:inline-block;height:24px;line-height:24px;width:100%}.merge-request-info-menu-item-content .reviewer-list>img{position:absolute!important;top:0;left:0}.merge-request-info-menu-item-content .reviewer-list>i{display:none}.merge-request-info-menu-item-content .reviewer-list>i:hover{cursor:pointer}.merge-request-info-menu-item-content .reviewer-list:hover>i{display:inline}.merge-request-info-menu-item-content>.select2-container{width:0!important;height:0!important;overflow:hidden}.merge-request-reference{display:block;width:100%;height:100%}.merge-request-reference .resource-reference{padding:0;margin:0 0 30px}.merge-request-reference .resource-reference .attention.icon,.merge-request-reference .resource-reference div.icon{display:none}.merge-request-reference .resource-reference .detail{margin:0}.merge-request-reference .resource-reference .detail:before{content:none}#merge-request-list{min-width:800px;min-height:650px;padding:25px;background-color:#fff}#merge-request-list .ui.header{font-weight:500;color:#333}#merge-request-list .ui.header .ui.button.right{float:right;font-size:14px;padding:0 15px;height:26px;line-height:26px}#merge-request-list .search-filter{color:#545454;font-size:14px;margin-bottom:10px}#merge-request-list .search-filter i.icon{cursor:pointer}#merge-request-list .search .search-box{border-bottom:1px solid #ddd;display:table;float:left}#merge-request-list .search .search-box>i{color:#000;font-size:13px;margin-left:0}#merge-request-list .search .search-box input{border:none;background:0 0;height:20px;font-size:14px;width:200px;outline:0;padding-left:6px}#merge-request-list .search .filters{font-size:14px;float:right;margin:5px 0 10px 5px}#merge-request-list .search .filters .task-urgency-wrapper{position:relative!important;display:inline-block;width:1.5em}#merge-request-list .search .filters i.icon.checkmark{display:inline-block}#merge-request-list .search .filters .task-urgency-wrapper i.icon{margin:0;padding:0}#merge-request-list .search .filters div.input{display:block;padding:.3em;background-color:rgba(0,0,0,.05);margin-bottom:0}#merge-request-list .search .filters div.input input{min-width:205px}#merge-request-list .search .filters div.input .search.icon{padding-top:11px}#merge-request-list .search .filters .ui.dropdown .menu .members-outer{max-height:200px;overflow-y:auto;max-width:210px}#merge-request-list .search .filters .ui.dropdown .menu .members-outer .item{padding:.5em 2em .5em 1em!important}#merge-request-list .search .filters .ui.dropdown .menu .members-outer .item i.icon{visibility:hidden}#merge-request-list .search .filters .ui.dropdown .menu .members-outer .item.selected i.icon{visibility:visible}#merge-request-list .search .filters .ui.dropdown .menu .members-outer .item .tag-color{position:relative;margin-right:5px;width:16px;height:16px;display:inline-block;vertical-align:middle;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}#merge-request-list .item.active{background-color:#F7F6F2;border-bottom:1px solid #F7F6F2}#merge-request-list .item.active .label{padding:3px 9px!important;background-color:rgba(0,0,0,.15)!important;color:#666}#merge-request-list .merge-request-list-item{margin-top:0;display:flex;display:-webkit-flex;padding:10px 0;border-bottom:1px solid #ddd}#merge-request-list .merge-request-list-item .status{display:inline-block;color:#32BE77;padding-top:4px;padding-right:3px}#merge-request-list .merge-request-list-item .status i.icon{width:18px;font-size:18px;opacity:1}#merge-request-list .merge-request-list-item .status i.icon.merge-request,#merge-request-list .merge-request-list-item .status i.icon.thumbs.up{color:#32BE77}#merge-request-list .merge-request-list-item .status i.icon.exclamation{color:#A78CD3}#merge-request-list .merge-request-list-item .status i.icon.remove{color:#D95C5C}#merge-request-list .merge-request-list-item .status i.icon.thumbs.up.outline{color:#888}#merge-request-list .merge-request-list-item .content .header{margin-bottom:6px;width:580px;line-height:24px;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}#merge-request-list .merge-request-list-item .content .header a{color:#333;font-weight:500;outline:0;font-size:16px;box-sizing:border-box}#merge-request-list .merge-request-list-item .content .header .tag{font-size:12px;font-weight:400;color:#FFF;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;padding:2px 3px;margin-right:5px;word-break:break-all;vertical-align:text-bottom;line-height:1.3em;display:inline-block}#merge-request-list .merge-request-list-item .content .footer{font-size:12px;line-height:16px}#merge-request-list .merge-request-list-item .content .footer .mr-id{color:#999;margin-right:20px}#merge-request-list .merge-request-list-item .content .footer .mr-author{color:#666;margin-right:20px}#merge-request-list .merge-request-list-item .content .footer i.time.icon{margin:0}#merge-request-list .merge-request-list-item .content .footer .chat.outline.icon{color:#999;margin:0 0 0 20px}#merge-request-list .merge-request-list-item .time{color:#999;text-decoration:none;font-size:12px;line-height:20px;height:20px;vertical-align:middle}#merge-request-list .merge-request-list-item .reviewers{margin-left:auto;padding-top:2px;padding-right:5px}#merge-request-list .merge-request-list-item .reviewers a{color:#32be77;display:flex;display:-webkit-flex;margin-bottom:5px;align-items:center;-webkit-align-items:center;position:relative;float:left;margin-left:5px}#merge-request-list .merge-request-list-item .reviewers a.more{color:#666}#merge-request-list .merge-request-list-item .reviewers a img{width:24px;height:24px;-webkit-border-radius:24px;-moz-border-radius:24px;border-radius:24px}.forks .author,.forks .time{color:#FFA487;text-decoration:none;font-size:12px}.forks .root-label{font-size:10px!important;font-weight:400;color:#fff;background-color:#73c345;border-radius:3px;padding:2px 5px!important}.forks .line{float:left;line-height:59px;width:20px}.forks .line .cross-line{position:relative;top:15px}.forks hr{border:none;border-top:1px solid #ddd}.forks .children{border-left:1px solid #ddd;border-top:0!important;margin-left:23px;margin-right:30px;padding-left:0!important}.forks .child{padding-left:30px!important}.forks .last-children{height:19px}.readme{margin-top:27px}.readme-title{background:#f7f8f9;border-top:1px solid #b7c7cf;border-left:1px solid #b7c7cf;border-right:1px solid #b7c7cf}.readme-title p{margin:0;padding:10px 11px}.empty-readme{background:#f7f8f9;padding:10px 11px;border:1px solid #b7c7cf;font-size:14px}.blobmd{padding:30px;background:#FFF}.git-empty{margin:0 auto;width:720px}.git-empty .back-monkey{margin-top:105px}.git-empty h2{margin-top:55px;margin-bottom:25px;font-size:18px;text-align:center}.git-empty p{text-align:center;font-size:14px}.git-empty .about-git{text-align:center;font-size:14px;display:block}.git-empty .proto-url{font-size:12px;width:600px;margin:0 auto}.git-empty .proto-switch{border-radius:0!important;height:35px!important;width:70px;font-weight:400;line-height:10px!important;display:table-cell;cursor:pointer;vertical-align:middle;min-height:1em;outline:0;text-align:center;box-sizing:border-box;margin:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.08) inset;box-shadow:0 0 0 1px rgba(0,0,0,.08) inset;background:#FFF}.git-empty .scaffold-link{margin:25px auto;text-align:center;cursor:pointer;font-size:14px;color:#2d59a2;font-weight:700;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.git-empty .scaffold-form{width:600px;margin:0 auto;position:relative}.git-empty .quick-setup{width:600px;margin:30px auto 0;font-size:14px;position:relative}.git-empty .quick-setup pre{font-family:Consolas,Menlo,\"Liberation Mono\",Courier,monospace!important;margin:0;text-align:left;word-wrap:normal;overflow:auto}.git-empty .empty-repo-recommend{text-align:center;box-sizing:border-box;font-size:13px;font-style:normal;font-variant:normal;font-weight:400}.git-empty .new-repo-cli-container{padding-top:0;text-align:center}.git-empty .new-repo-cli-container h3{text-align:left;margin:1em 0 15px;padding:0;font-weight:700;line-height:1.7;cursor:text;position:relative}.git-empty .new-repo-cli-container pre{text-align:left;word-wrap:normal;background-color:#f8f8f8;border:1px solid #ddd;font-size:13px;line-height:19px;overflow:auto;padding:6px 10px;border-radius:3px}.git-empty .new-repo-cli-container code{margin:0;padding:0;background-color:transparent;border:none;word-wrap:normal;max-width:initial;display:inline;overflow:initial;line-height:inherit}.keys .key-list p{font-size:12px!important}.keys .delete-link{color:red;cursor:pointer;margin-left:15px}.tree{font-size:12px;box-sizing:border-box}.tree a{text-decoration:none}.tree a .flatten-path{color:#888}.tree .files-list{border:1px solid #ccc;margin-bottom:10px;border-top:0}.tree table.files{border-collapse:collapse;width:100%;background:#F8F8F8;border-spacing:0}.tree table.files tr{height:34px}.tree table.files td{padding:2px 3px;border-top:1px solid #eee;line-height:20px}.tree table.files td.icon{width:17px;padding-right:2px;padding-left:10px;color:#767676}.tree table.files td.icon .folder{color:#4183c4}.tree table.files td.content{max-width:180px}.tree table.files td.committer{padding-left:20px;height:20px;overflow:hidden;color:#888;font-size:12px;width:25px}.tree table.files td.committer img{vertical-align:middle;padding:2px;border-radius:20px}.tree table.files td.name{width:100px}.tree table.files td.name a{color:#777}.tree table.files td.message{padding-left:10px;height:20px;overflow:hidden;color:#888;font-size:12px;max-width:400px}.tree table.files td.message a{color:#888}.tree table.files td.message a:hover{color:#4183c4}.tree table.files td.age{padding-left:20px;text-align:right;color:#888;width:100px;padding-right:10px;white-space:nowrap}.tree table.files td .truncate{max-width:100%!important}.tree table.files td .truncate-target{display:inline-block;max-width:125px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:top}.commit-tease{font-size:12px;position:relative;padding:10px;margin-bottom:-1px;line-height:20px;color:#68777d;background:#f7f8f9;border:1px solid #b7c7cf;border-radius:3px 3px 0 0;word-wrap:break-word}.commit-tease .commit-author-section{color:#333}.commit-tease .author-gravatar{margin-top:-3px;display:inline-block;overflow:hidden;line-height:1;vertical-align:middle;border-radius:20px}.commit-tease .author-name a{font-weight:700;color:#333;white-space:nowrap}.commit-tease .author-name a:hover{color:#333}.commit-tease .refer-resource-link{color:#2D59A2!important;margin:0 5px}.commit-tease .refer-resource-link:hover{color:inherit;text-decoration:underline}.commit-tease .at-someone{font-weight:700;color:#333;white-space:nowrap}.commit-tease .at-someone:hover{color:#333;text-decoration:underline}.commit-tease .message,.commit-tease .message a{color:inherit}.commit-tease .message a:hover{color:inherit;text-decoration:underline}.commit-tease .commit-desc{display:block}.commit-tease .commit-desc pre{font-size:12px;max-width:700px;margin-top:10px;line-height:1.45;color:#596063;white-space:pre-wrap;margin-bottom:0}.commit-tease .floated.right{color:#444}.commit-tease span.hidden-text-expander{position:relative;top:-1px;display:inline-block;margin-left:5px;line-height:0;margin-top:3px}.commit-tease span.hidden-text-expander a{display:inline-block;height:12px;padding:0 5px;font-size:12px;font-weight:700;line-height:6px;text-decoration:none;vertical-align:middle;background:#ddd;border-radius:1px}.commit-tease span.hidden-text-expander a:hover{cursor:pointer}.commit-meta .zeroclipboard-link{float:right;margin-left:5px;margin-top:-2px}.commit-tease-sha{display:inline-block;color:#445055!important}.commit-tease-sha:hover{text-decoration:underline!important}.blob-code-view{width:100%;background-color:#fff;border-collapse:separate;tab-size:8}.blob-code-view a{color:#4183c4;text-decoration:none}.blob-code-view td,.blob-code-view tr{margin:0;padding:0;vertical-align:top}.blob-code-view .blob-nums{line-height:1;padding:5px 0;text-align:right}.blob-code-view .blob-nums span{display:block;line-height:18px;padding:0 8px;color:inherit;height:18px;cursor:pointer}.blob-nums,.diff-num{width:1%;padding-left:8px;padding-right:8px;font-family:Consolas,\"Liberation Mono\",Courier,monospace;line-height:18px;color:rgba(0,0,0,.3);vertical-align:top;text-align:right;border-right:1px solid #e5e5e5}.blob-code-view .blob-nums ::selection{text-shadow:none}.blob-code-view .blob-body{padding-top:5px;padding-bottom:5px;white-space:nowrap;line-height:18px;overflow:auto;overflow-y:hidden}.blob-code-view .blob-body ::selection{text-shadow:none;background:rgba(65,131,196,.4)}.blob-body pre,.blob-nums{font-family:Consolas,Menlo,\"Liberation Mono\",Courier,monospace!important;line-height:18px;margin:0;padding:0;font-size:12px}.blob-body pre .line,.blob-nums{padding-left:10px;height:18px}.blob-body,.blob-nums{font-family:Consolas,\"Liberation Mono\",Courier,monospace!important;line-height:18px;font-size:12px}.file-box{position:relative;margin-bottom:15px;border:1px solid #ccc}.file-box .file-meta{padding:5px 10px;font-size:12px;text-align:left;color:#555;border-bottom:1px solid #d8d8d8}.file-box .file-meta .info{line-height:32px;height:32px}.file-box .file-meta .info .icon i.icon{font-size:18px;vertical-align:-1px}.file-box .file-meta .meta-divider{display:inline-block;width:2px;height:18px;margin:0 3px;vertical-align:middle;background-color:#ddd;border-right:1px solid #fff}.file-box .file-meta .ui.compact.menu.opt{background-color:#ddd;float:right}.file-box .file-meta .ui.compact.menu.opt a{font-size:12px}.file-box .file-preview{overflow:auto}.file-box .file-preview .not-support{padding:20px;text-align:center;color:#999}.file-box .file-preview .code-preview{margin:0}.file-box .file-preview .blob-img{background:url(/static/5d487aa5c207cf1ca5a36524acb953f1.gif) right bottom #eee}.ui.large.breadcrumb.tree-nav{display:block;font-size:16px}.ui.large.breadcrumb.tree-nav .nav-refs{float:left;height:26px;line-height:26px;margin-bottom:20px}.ui.large.breadcrumb.tree-nav .nav-buttons{display:inline-block;float:right;height:26px;line-height:26px;margin-bottom:20px}.ui.large.breadcrumb.tree-nav .nav-buttons .ui.button{padding:0 1em!important}.ui.large.breadcrumb.tree-nav .nav-buttons .ui.button .icon{margin-right:.4em!important;margin-left:0}.ui.large.breadcrumb.tree-nav .nav-buttons .ui.buttons .ui.button{border-radius:0;box-shadow:none;border-top:1px solid rgba(0,0,0,.08);border-bottom:1px solid rgba(0,0,0,.08);border-right:1px solid rgba(0,0,0,.08)}.ui.large.breadcrumb.tree-nav .nav-buttons .ui.buttons .ui.button:first-child{border-radius:2em 0 0 2em;border-right:1px solid rgba(0,0,0,.08)}.ui.large.breadcrumb.tree-nav .nav-buttons .ui.buttons .ui.button:last-child{border-radius:0 2em 2em 0}.ui.large.breadcrumb.tree-nav .nav-buttons .ui.buttons .ui.button:only-child{border-radius:2em;border:1px solid rgba(0,0,0,.08)}.ui.large.breadcrumb.tree-nav .nav-breadcrumb{float:left;line-height:26px;margin-left:5px;margin-bottom:20px}.refs.ref-block{line-height:10px}.refs.ref{font-size:12px!important}.refs.selector{background-color:#FFF;border:1px solid #DDD;padding:6px 20px 6px 4px;margin-right:5px;cursor:pointer;color:#333;position:relative;display:inline-block}.refs.selector:hover{background-color:#F5F8Fb}.refs.selector:before{position:absolute;top:10px;right:10px;display:block;width:0;height:0;content:\"\";border:4px solid;border-right-color:transparent;border-left-color:transparent;border-bottom-color:transparent}.refs.dropdown.box{display:inline-block;position:relative}.refs.selector i{font-weight:500;font-style:normal;opacity:.6}.refs.selector i.icon{font-size:12px;margin-right:0}.refs.ui.dropdown{min-width:300px;position:absolute;left:0;top:28px}.refs.ui.dropdown .menu{box-shadow:0 3px 12px rgba(0,0,0,.25);border-radius:3px}.refs.ui.dropdown .box.items{max-height:300px;overflow-y:auto}.refs.ui.dropdown .box.items .item{font-size:12px;padding:8px!important}.refs.ui.dropdown .item.search .refs.search{display:block;width:96%;max-width:99%;padding:5px;border:1px solid #ddd;border-radius:3px;margin:0 auto;height:30px}.refs.ui.dropdown .item.refs .tab.refs{list-style:none;overflow:hidden;padding:14px 10px 0;margin:0}.refs.ui.dropdown .item.refs .tab.refs li{display:inline-block}.refs.ui.dropdown .item.refs .tab.refs .tab{height:20px;padding:5px 8px;font-size:11px;font-weight:700;color:#888;text-decoration:none;line-height:20px;cursor:pointer}.refs.ui.dropdown .item.refs .tab.refs .tab.active{height:20px;padding:5px 8px;font-size:11px;font-weight:700;color:#888;text-decoration:none;line-height:20px;border-radius:3px 3px 0 0;cursor:pointer;border:1px solid #ccc;background:#fff}.refs.ui.dropdown .item.search{border-bottom:none!important;padding:5px 0!important;background:#F7F7F7!important}.refs.ui.dropdown .item.search.active:hover,.refs.ui.dropdown .item.search:hover{border-bottom:none!important;padding:5px 0!important}.refs.ui.dropdown .item.refs{padding-top:0!important;padding-bottom:0!important;background:#F7F7F7!important;border-bottom:1px solid #ccc;border-top:1px solid #F7F7F7!important;height:35px}.refs.ui.dropdown .item.refs.active:hover,.refs.ui.dropdown .item.refs:hover,.refs.ui.dropdown .item.search.active:hover,.refs.ui.dropdown .item.search:hover{background:#F7F7F7!important}.git-rename-form{display:inline-block}.git-rename-form .input{height:26px;line-height:26px;vertical-align:top}.git-rename-form .input #git-rename-text-input{background:0 0;padding:2px 0!important;font-size:16px;font-weight:700;border-radius:0;border:0;color:#000;overflow:hidden;display:inline-flex;line-height:22px;vertical-align:top;min-width:200px}.git-rename-form .input #git-rename-text-input.changed,.git-rename-form .input #git-rename-text-input:active,.git-rename-form .input #git-rename-text-input:focus,.git-rename-form .input #git-rename-text-input:hover{background:#ddd;outline:0}.git-rename-form .input #git-rename-text-input.changed,.git-rename-form .input #git-rename-text-input:active,.git-rename-form .input #git-rename-text-input:focus{max-width:500px}.git-rename-form #git-rename-cancel-button,.git-rename-form #git-rename-save-button{font-size:12px;height:20px;line-height:20px;font-weight:400;border-radius:3px;padding:0 5px;border:0;vertical-align:top;margin:3px 0}.git-rename-form #git-rename-save-button{margin-left:5px;margin-right:5px}.branch-metric{width:202px}.branch-metric .bar-col{padding:0!important;width:101px;height:4px;position:relative;vertical-align:top!important}.branch-metric .bar-col .bar-wrapper{border:0;padding:0;margin:0;height:4px;display:block;position:absolute}.branch-metric .bar-col .bar-wrapper .bar{position:absolute;background-color:#999;height:4px;animation-name:branch-metric-grow;animation-duration:.3s;animation-fill-mode:forwards}.branch-metric .bar-col:first-child{border-right:1px solid #999}.branch-metric .bar-col:first-child .bar-wrapper{right:0}.branch-metric .bar-col:first-child .bar-wrapper .bar{right:0;border-radius:3px 0 0 3px}.branch-metric .bar-col:last-child{border-left:1px solid #999}.branch-metric .bar-col:last-child .bar-wrapper{left:0}.branch-metric .bar-col:last-child .bar-wrapper .bar{left:0;border-radius:0 3px 3px 0}.branch-metric .count-col{width:100px;padding:1px 5px!important;height:14px}.branch-metric .count-col .count{height:14px;line-height:14px;font-size:12px;color:#333}.branch-metric .count-col:first-child{border-right:1px solid #cdcdcd}.branch-metric .count-col:first-child .count{float:right}.branch-metric .count-col:last-child{border-left:1px solid #cdcdcd}.branch-metric .count-col:last-child .count{float:left}@keyframes branch-metric-grow{from{width:0}to{width:100%}}.private-project-git-branch-list{min-width:800px;min-height:650px;padding:25px;background-color:#fff}.private-project-git-branch-list .ui.header{font-weight:500;color:#333}.branches .search-filter{color:#545454;font-size:14px;margin-bottom:10px}.branches .search-filter i.icon{cursor:pointer}.branches .search .search-box{border-bottom:1px solid #ddd;display:table;float:left}.branches .search .search-box>i{color:#000;font-size:13px;margin-left:0}.branches .search .search-box input{border:none;background:0 0;height:20px;font-size:14px;width:200px;outline:0;padding-left:6px}.branches .branch-list{border-bottom:1px solid #ddd;position:relative}.branches .branch-list tr{border:0!important}.branches .branch-list td{word-break:break-all}.branches .branch-list .branch-name{font-weight:700;padding-left:0!important;padding-bottom:2px!important}.branches .branch-list .branch-name .icon{font-weight:400;color:#32be77}.branches .branch-list .branch-name a{font-weight:500;color:#333}.branches .branch-list .branch-metrics{width:218px;text-align:center}.branches .branch-list .branch-metrics .default-branch{font-size:14px;padding:5px;line-height:14px;background-color:#5191BD!important;border-color:#5191BD!important;margin:0}.branches .branch-list .branch-metrics .ui.popup{max-width:inherit;white-space:nowrap;background-color:#000;padding-top:5px;padding-bottom:5px}.branches .branch-list .branch-metrics .ui.popup:before{background-color:#000!important}.branches .branch-list .branch-metrics .ui.popup .content{color:#fff!important}.branches .branch-list .branch-operator{padding-right:0!important;width:1px;white-space:nowrap;text-align:right}.branches .branch-list .branch-operator .ui.button .coding.icon.merge-request{margin-right:-5px}.branches .branch-list .branch-operator .more-operator .dropdown-icon{margin-left:10px;font-weight:700}.branches .branch-list .branch-operator .more-operator .menu{right:0;top:30px;left:inherit}.branches .branch-list .branch-operator .more-operator .menu .red{color:#D95C5C}.branches .branch-list .last-commit{padding-left:0!important;padding-top:2px!important}.branches .branch-list .last-commit>*{font-weight:400;color:#666;font-size:12px}.branches .branch-list .last-commit .commit-time{color:#999;display:inline-block}.branch-setting{margin:20px 100px;padding:15px 20px;border:1px solid #eee;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;background:#fff}.branch-setting .close-setting .icon.remove{cursor:pointer;color:#888785;float:right;margin-top:-5px;margin-right:-7px}.branch-setting .enable-protected-branch{margin:10px 0 20px}.branch-setting .enable-protected-branch .content{padding-left:63px}.branch-setting .enable-protected-branch .content p{font-size:14px;color:#888785}.branch-setting .enable-protected-branch .content .members{border:1px solid #ddd;border-bottom:none;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;background:#f5f5f5}.branch-setting .enable-protected-branch .content .members h4{margin-top:10px;padding:0 10px;font-weight:400;font-size:16px;line-height:1em}.branch-setting .enable-protected-branch .content .members p{padding:0 10px}.branch-setting .enable-protected-branch .content .members ul{list-style-type:none;border-top:1px solid #ddd;margin:0;padding:0}.branch-setting .enable-protected-branch .content .members ul li{padding:15px 10px;border-bottom:1px solid #ddd}.branch-setting .enable-protected-branch .content .members ul li.add-member input{width:98%;height:2em;border:1px solid #ddd;padding:3px 5px;font-size:14px}.branch-setting .enable-protected-branch .content .members ul li.add-member .select2-container .select2-choice{border:1px solid #ddd;color:#888785;background:#fff;padding-left:0}.branch-setting .enable-protected-branch .content .members ul li.add-member .select2-container .select2-choice .select2-arrow{background:#fff;border:none}.branch-setting .enable-protected-branch .content .members ul li span{margin-left:10px}.branch-setting .enable-protected-branch .content .members ul li .ui.image{display:inline-block}.branch-setting .enable-protected-branch .content .members ul li .icon.remove{float:right;cursor:pointer;font-size:16px;color:#D95B5C;margin-top:5px;margin-left:5px}.branch-setting .enable-protected-branch .content .members ul li .ui.checkbox{float:right;margin-top:6px;font-size:14px;color:#888785}.branch-setting .enable-protected-branch .content .members ul li .ui.checkbox label{padding-left:3.2em}.branch-setting .deny-force-push{margin:0 0 30px}.branch-setting .deny-force-push a{color:rgba(0,0,0,.6)}.branch-setting .member{height:40px;margin:10px 0}.branch-setting .member .avatar{float:left;margin-top:-7px;margin-right:20px}.default-branch-label{background:#999;color:#fff;font-weight:700;font-size:12px;border-radius:3px;display:inline;padding:1px 4px;vertical-align:baseline;white-space:nowrap;line-height:14px}.no-branch-tips{margin:55px auto 0}.no-branch-tips strong{font-size:18px;color:#000}.no-branch-tips p{margin-top:25px;font-size:14px;color:#000}.no-branch-tips p:nth-child(2){margin-top:40px}#change-default-branch-modal{width:30%;margin-left:-15%;border-radius:20px;background-color:#F4F4F4}#change-default-branch-modal .content{border-radius:20px;width:320px;margin:0 auto}.blame .blame-view .file-blame{font-size:12px;overflow-x:scroll;background:#FFF}.blame .blame-view .file-blame table{overflow:auto;padding:0;width:100%;border-collapse:collapse;border-spacing:1px}.blame .blame-view .file-blame table tbody{padding:0}.blame .blame-view .file-blame table tr{width:100%}.blame .blame-view .file-blame table td{padding-left:10px}.blame .blame-view .file-blame table .section-first td{border-top:1px solid #ccc;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.blame .blame-view .file-blame .commit-meta,.blame .blame-view .file-blame .line-num{padding:5px 10px;border-right:1px solid #e5e5e5;font-size:12px}.blame .blame-view .file-blame .commit-meta{background:#fbfbfb;width:250px;font-size:12px}.blame .blame-view .file-blame .commit-meta p{padding:2px 3px;margin:0;font-size:12px}.blame .blame-view .file-blame .commit-meta .commit-message{color:#666;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:240px;display:inline-block}.blame .blame-view .file-blame .commit-meta .commit-message a{color:#4183c4}.blame .blame-view .file-blame .commit-meta .author .author-gravatar{vertical-align:middle;border-radius:10px}.blame .blame-view .file-blame .commit-meta .author .author-name{color:#4183c4}.blame .blame-view .file-blame .commit-meta .author .author-date{color:#aaa}.blame .blame-view .file-blame .line-num{width:1%;padding-left:8px;padding-right:8px;line-height:16px;color:rgba(0,0,0,.3);vertical-align:middle;text-align:right;border-right:1px solid #e5e5e5;cursor:pointer;font-size:12px}.blame .blame-view .file-blame .commit-meta ::selection,.blame .blame-view .file-blame .commit-meta::selection,.blame .blame-view .file-blame .line-data ::selection,.blame .blame-view .file-blame .line-data::selection,.blame .blame-view .file-blame .line-num::selection{text-shadow:none}.blame .blame-view .file-blame .line-data pre{font-family:Consolas,Menlo,\"Liberation Mono\",Courier,monospace!important;line-height:16px;margin:0;padding:0;font-size:12px}.commit-list{position:relative;padding-bottom:0;margin-bottom:35px;padding-left:39px}.commit-list:before{position:absolute;top:0;bottom:0;left:14px;z-index:-1;display:block;width:3px;content:\"\";background-color:#eee}.commit-group-title{margin-top:15px;margin-left:-32px;color:#333;font-size:14px}.commit-group-title i.icon.coding-commit{margin-right:17px;color:#777;background:#F7F6F2}.commit-group{display:table;table-layout:fixed;width:100%;color:#999;margin-top:10px;list-style-type:none;padding-left:0;box-shadow:1px 1px 0 0 #eee;border:1px solid #eee;background:#fff;border-radius:3px;border-top:none}.loading-diff{margin-bottom:20px}.commit-list-item{display:flex;flex-direction:row;width:100%}.commit-list-item>div{padding:8px 10px;font-size:12px;vertical-align:top;border-top:1px solid #eee}.commit-list-item .commit-info{display:flex;flex:1;max-width:calc(100% - 250px)}.commit-list-item .commit-title{margin:0;font-size:15px;font-weight:700;color:#333;height:21px;line-height:21px}.commit-list-item .commit-title a{color:#4e575b!important}.commit-list-item .commit-title a:hover{text-decoration:underline}.commit-list-item .commit-title span .refer-resource-link{color:#4078c0!important}.commit-list-item .commit-title .hidden-text-expander{margin-top:5px;text-overflow:ellipsis;white-space:nowrap;padding-right:8px;cursor:pointer}.commit-list-item .commit-meta{margin-top:1px;font-weight:400;color:#767676;height:16px;line-height:16px}.commit-list-item .commit-meta .author{color:#767676}.commit-list-item .commit-desc>pre{padding-left:8px;margin-top:5px;margin-bottom:10px;color:#596063;border-left:1px solid #e5e5e5}.commits-diff{padding:0 10px 10px;border-top:1px solid #eee}.committer-gravatar{padding-right:0!important;width:36px}.committer-gravatar .ava{position:relative}.committer-gravatar img{display:inline-block;overflow:hidden;line-height:1;vertical-align:middle;border-radius:36px}.commit-links{width:190px;text-align:right;line-height:38px}.commit-links .commit-links-sha{color:#445055!important}.commit-links .commit-links-sha:hover{text-decoration:underline}.commit-links>i.icon.checkmark:hover,.commit-links>i.icon.paste:hover{cursor:pointer}.commits .commits-view .pagination{margin-top:20px}.hidden-text-expander{position:relative;top:-1px;display:inline-block;margin-left:5px;line-height:0;margin-top:3px}.commits-count{width:auto;line-height:12px;background:#ddd;border-radius:10px;padding:2px 6px;color:#000;font-size:10px;text-align:center;transform:scale(0.875);margin-top:-2px}.commit .commit-view .full-commit{margin:10px 0;padding:8px 8px 0;background:#f7f8f9;border:1px solid #c5d5dd}.commit .commit-view .full-commit a{color:#4078c0}.commit .commit-view .full-commit a:hover{text-decoration:underline}.commit .commit-view .full-commit .commit-title{font-size:16px;font-weight:500;color:#213f4d;text-shadow:0 1px rgba(255,255,255,.5);margin-bottom:10px}.commit .commit-view .full-commit .commit-title-full{font-family:Consolas,\"Liberation Mono\",Courier,monospace;font-size:13px;color:#666;margin:0;padding:0;white-space:pre-wrap;word-wrap:break-word}.full-commit .commit-branchs{color:#333;font-size:12px;vertical-align:middle;margin-top:-6px;margin-bottom:8px;font-weight:700}.full-commit .commit-meta{margin-left:-8px;margin-right:-8px;padding:8px 8px 5px;background:#fff;border-top:1px solid #d8e6ec}.full-commit .commit-meta .gravatar{margin:-2px 3px 0 0;vertical-align:middle;border-radius:10px}.full-commit .commit-meta .author-name{font-size:12px;color:#333;font-weight:700}.full-commit .commit-meta .author-name a{text-decoration:none}.full-commit .commit-meta .author-name a:hover{text-decoration:underline}.full-commit .commit-meta .commit-time{font-size:12px;color:#aaa}.full-commit .commit-meta .sha-block{float:right;font-size:12px;color:#aaa;line-height:20px}.full-commit .commit-meta .sha-block .sha-value{color:#333;font-size:11px}.full-commit .commit-meta .diff-link{float:right;font-size:12px;margin-left:15px;line-height:20px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.commit_info_popup{margin:2px;word-break:break-all;font-family:Consolas,\"Liberation Mono\",Courier,monospace;font-size:12px}.commit_info_popup p{padding:2px 3px;margin:0}.commit_info_popup .author{margin-bottom:5px}.commit_info_popup .author img{vertical-align:middle;border:1px solid #f1f2f3;padding:2px;width:50px;float:left;margin-right:10px}.commit_info_popup .author_email,.commit_info_popup .author_name{padding-left:5px;line-height:25px;overflow:hidden}.commit_info_popup .author_name{font-size:12.5px;color:#1B74EB;font-weight:700}.commit_info_popup .author_email a{text-decoration:none;font-size:12px;color:#396CC7;text-overflow:ellipsis;white-space:nowrap;width:190px;display:inline-block}.commit_info_popup .commit_date{color:#777;font-size:11px}.commit_info_popup .commit_tag{font-size:12px;font-weight:700}.commit_info_popup .commit_id{font-weight:700;color:#E63E14;margin-top:5px}.commit_info_popup .commit_message{color:#444;font-size:12px}.renamed{margin-left:12px!important}.commit-diff .header{padding:5px 10px;text-align:left;color:#5092BD;text-shadow:0 1px 0 #fff;border-bottom:1px solid #d8d8d8}.commit-diff .header .diff-header{font-size:13px;line-height:24px;display:flex;display:-webkit-flex}.commit-diff .header .diff-header .toggle-show-diff{flex-grow:1;-webkit-flex-grow:1;display:flex;display:-webkit-flex;width:calc(100% - 72px)}.commit-diff .header .diff-header .toggle-show-diff .diff-file-path{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.commit-diff .header .diff-header .toggle-show-diff span.change-type-icon{margin-top:8px;display:inline-block;width:8px;min-width:8px;height:8px;margin-right:10px;vertical-align:middle}.commit-diff .header .diff-header .toggle-show-diff.count .comment-count,.commit-diff .header .diff-header .toggle-show-diff.count .icon.chat{display:inline}.commit-diff .header .diff-header span.create.change-type-icon{background-color:#32BE77}.commit-diff .header .diff-header span.delete.change-type-icon{background-color:#DF5A5A}.commit-diff .header .diff-header span.update.change-type-icon{background-color:#A78CD3}.commit-diff .header .diff-header i.triangle{font-size:16px;line-height:24px;height:16px;padding-right:10px;color:#555;width:20px;min-width:20px}.commit-diff .header .diff-header i.triangle.down{padding-right:0}.commit-diff .header .diff-header i.triangle.right{margin-left:6px}.commit-diff .header .diff-header i.chat{display:none;color:#555;margin-left:10px;line-height:24px}.commit-diff .header .diff-header span.comment-count{display:none;color:#555}.commit-diff .header .diff-header .icon.file{font-size:13px}.commit-diff .header .diff-header a i.icon{color:#000;vertical-align:middle;font-size:14px}.commit-diff .header .diff-header .edit-file,.commit-diff .header .diff-header .fullscreen,.commit-diff .header .diff-header .view-file{display:none}.commit-diff .header .diff-header .toggle-notes{float:right;margin-right:10px;display:none;white-space:nowrap}.commit-diff .header .diff-header .toggle-notes label{color:#333;font-weight:700;cursor:pointer}.commit-diff .header .diff-header:hover{cursor:pointer}.commit-diff .header.show.header{border-bottom:none}.commit-diff .header.show.header .ui.button{display:inline;margin-left:10px;white-space:nowrap}.commit-diff .header.show.header .toggle-show-diff{width:calc(100% - 400px)}.commit-diff .header.show.header .view-file{display:inline;margin-left:8px;white-space:nowrap}.commit-diff .header.show.header .view-file .ui.dropdown{height:24px;line-height:24px}.commit-diff .header.show.header .view-file .ui.dropdown>.menu{width:100px;left:-15px}.commit-diff .header.show.header .view-file .ui.dropdown .menu .item{padding:.25em 1.2em!important}.commit-diff .header.show.header .view-file .ui.dropdown .menu .item .icon{margin-right:.3em;color:#444}.commit-diff .header.show.header .view-file .ui.dropdown .menu .item a{color:#444;display:block}.commit-diff .header.show.header .view-file i.dropdown{margin-left:2px}.commit-diff .header .fullscreen-diff-header-bar{display:none}.commit-diff .header.fullscreen-diff-header{width:100%;position:fixed;background:#fff;top:0;left:0;z-index:1000;height:50px}.commit-diff .header.fullscreen-diff-header .diff-header:hover{cursor:default}.commit-diff .header.fullscreen-diff-header i{display:none}.commit-diff .header.fullscreen-diff-header span.change-type-icon{display:none!important}.commit-diff .header.fullscreen-diff-header i.chat{font-size:14px}.commit-diff .header.fullscreen-diff-header .comment-count{font-weight:400;font-size:14px}.commit-diff .header.fullscreen-diff-header .toggle-show-diff{font-size:16px;font-weight:700}.commit-diff .header.fullscreen-diff-header .toggle-notes{display:none!important}.commit-diff .header.fullscreen-diff-header .diffstat{display:none}.commit-diff .header.fullscreen-diff-header .edit-file,.commit-diff .header.fullscreen-diff-header .fullscreen,.commit-diff .header.fullscreen-diff-header .view-file{display:none!important}.commit-diff .header.fullscreen-diff-header .fullscreen-diff-header-bar{display:block;color:#333}.commit-diff .header.fullscreen-diff-header .fullscreen-diff-header-bar span{font-size:14px}.commit-diff .header.fullscreen-diff-header .fullscreen-diff-header-bar i.arrow.icon{display:inline}.commit-diff .header.fullscreen-diff-header .fullscreen-diff-header-bar i.remove.icon{display:inline;float:right;margin-right:15px}.commit-diff .header.fullscreen-diff-header .fullscreen-diff-header-bar i:hover{cursor:pointer}.commit-diff .header.fullscreen-diff-header .fullscreen-diff-header-bar .disabled{color:#aaa}.commit-diff.color-off .diff .code-line .diff-line-code .diff-code [class^=hljs-]{color:#333;font-weight:400}.commit-diff.inline-diff-off .diff .code-line .diff-line-code.gd .x,.commit-diff.inline-diff-off .diff .code-line .diff-line-code.gi .x{background-color:transparent}.commit-diff .diff{overflow:auto;text-overflow:ellipsis;white-space:nowrap;margin-bottom:15px;border:1px solid #ccc;margin-left:34px}.commit-diff .diff .change-mode{font-size:12px;color:#444;height:21px;line-height:21px;border-bottom:solid 1px #ccc}.commit-diff .diff .change-mode span{margin-left:10px}.commit-diff .diff .code-line .diff-line-num{width:30px;min-width:30px;padding-left:5px;padding-right:5px;font-family:Consolas,\"Liberation Mono\",Courier,monospace;line-height:18px;color:rgba(0,0,0,.3);vertical-align:top;text-align:right;border-right:1px solid #eee;font-size:12px;font-weight:400;cursor:pointer;white-space:nowrap}.commit-diff .diff .code-line .diff-line-num .line-num{display:none}.commit-diff .diff .code-line .diff-line-num.btn-expand{text-align:center;color:#767676;background-color:#edf2f9}.commit-diff .diff .code-line .diff-line-num.btn-expand:before{content:initial}.commit-diff .diff .code-line .diff-line-num.btn-expand:hover{color:#fff;background-color:#3b60b1}.commit-diff .diff .code-line .diff-line-num.gi{border-color:#c1e9c1}.commit-diff .diff .code-line .diff-line-num.gd{border-color:#f1c0c0}.commit-diff .diff .code-line .diff-line-num:before{content:attr(line-data)}.commit-diff .diff .code-line .diff-line-num:hover{color:rgba(0,0,0,.7)}.commit-diff .diff .code-line .diff-line-num:hover+.diff-line-code .add-line-note,.commit-diff .diff .code-line .diff-line-num:hover+.diff-line-num+.diff-line-code .add-line-note{opacity:100}.commit-diff .diff .code-line .diff-line-code{padding-left:10px;padding-right:10px;font-family:Consolas,\"Liberation Mono\",Courier,monospace;font-size:13px;color:#333;white-space:nowrap;vertical-align:top;position:relative}.commit-diff .diff .code-line .diff-line-code.gd .x{background-color:#f8cbcb}.commit-diff .diff .code-line .diff-line-code.gi .x{background-color:#a6f3a6}.commit-diff .diff .code-line .diff-line-code:hover .add-line-note{opacity:100}.commit-diff .diff .code-line .diff-line-code .add-line-note{z-index:5;float:left;width:18px;height:18px;margin:-1px -10px -1px -20px;line-height:18px;color:#fff;text-align:center;text-indent:0;cursor:pointer;opacity:0;background-color:#618FCA;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;box-shadow:0 1px 4px rgba(0,0,0,.15)}.commit-diff .diff .code-line .diff-line-code.empty+.line-comments{border-left:1px solid #eee;border-right:1px solid #eee}.commit-diff .diff .code-line .diff-line-code .lint-mark{border-bottom:1px dotted red;cursor:pointer}.commit-diff .diff .code-line.expanded .diff-line-code,.commit-diff .diff .code-line.expanded .diff-line-num{background-color:#fafafa}.commit-diff .diff .code-line.expanded+:not(.expanded) .diff-line-code,.commit-diff .diff .code-line.expanded+:not(.expanded) .diff-line-num,.commit-diff .diff .code-line:not(.expanded)+.expanded .diff-line-code,.commit-diff .diff .code-line:not(.expanded)+.expanded .diff-line-num{border-top:1px solid #eee}.commit-diff .diff .code-line:hover>.diff-line-code,.commit-diff .diff .code-line:hover>.diff-line-num{background-color:#ffffe1}.commit-diff .diff .code-line .hunk-header,.commit-diff .diff .hunk_line .hunk_header{padding-left:5px;padding-right:5px;font-size:12px;color:rgba(0,0,0,.3);background-color:#f4f7fb}.commit-diff .diff .hunk_line th{width:24px;padding-left:5px;padding-right:5px}.commit-diff .diff .hunk_line th.show{border-bottom:none}.commit-diff .diff .inline-comments{background-color:#ffffe1;display:table-row}.commit-diff .diff .inline-comments .line-comments{vertical-align:top;padding:10px;border-top:1px solid #eee;border-bottom:1px solid #eee}.commit-diff .diff .inline-comments .line-comments+.diff-line-num.empty,.commit-diff .diff .inline-comments .line-comments+.line-comments{border-left:1px solid #eee}.commit-diff .diff table{width:100%;background-color:#fff;border-collapse:separate;tab-size:8;border-spacing:0}.commit-diff .diff table tr{text-shadow:0 1px 0 rgba(255,255,255,.25)}.commit-diff .diff .bin-add{padding-top:20px;padding-bottom:20px;text-align:center;background-color:#dfd}.commit-diff .diff .bin-add img{background:url(/static/5d487aa5c207cf1ca5a36524acb953f1.gif) right bottom #eee}.commit-diff .diff .bin-delete{padding-top:20px;padding-bottom:20px;text-align:center;background-color:#fdd}.commit-diff .diff .bin-delete img{background-color:#fff}.commit-diff .diff pre{display:inline-block;background:0 0;margin:0;padding:0;font-family:Consolas,Menlo,\"Liberation Mono\",Courier,monospace!important;font-size:12px}.commit-diff .diff pre.no-change,.commit-diff .diff pre.no-preview{display:block;color:#666;background-color:#F7F6F2;padding:3px 5px}.commit-diff .diff pre span.no-newline{color:#bd2c00;vertical-align:middle;font-size:14px}.commit-diff .diff .gc{color:#999;background:#EAF2F5}.commit-diff .diff .gi{color:#000;background-color:#eaffea}.commit-diff .diff .gd{color:#000;background-color:#ffecec}.commit-diff .diff .empty{background-color:#fafafa}.commit-diff .diff.split table{table-layout:fixed}.commit-diff .diff.split pre{white-space:pre-wrap;word-break:break-word}.commit-diff .diff.split .diff-line-code+.diff-line-num{border-left:1px solid #eee}.commit-diff .diff.fullscreen-diff{position:fixed;top:55px;left:0;z-index:1000;margin:0;width:100%;height:calc(100% - 55px);height:-webkit-calc(100% - 55px);height:-moz-calc(100% - 55px);background:#fff;display:block!important}.commit-diff.tab .diff .diff-line-code .t:before{content:\"\\0000bb\";color:rgba(255,0,0,.5)}.commit-diff.wrap .diff .diff-line-code .diff-code{word-wrap:break-word;white-space:pre-wrap;line-height:15px}.commit-diff .popup{width:600px;max-width:600px}.commit-diff .popup .header{position:relative;font-size:16px}.commit-diff .popup .content{position:relative;font-size:14px;font-weight:400}.commit-diff .popup .content ul{position:relative}.commit-diff .popup .content ul li{position:relative;white-space:normal}.diff-comments{max-width:780px;position:relative}.diff-comments .comment-header{margin:20px 0;color:#444}.diff-comments .add-comment{margin-top:10px}.diff-comments .cancel-comment{margin-left:5px;bottom:4px;position:absolute;z-index:100}.diff-comments .comment{position:relative;margin-bottom:15px;padding:10px}.diff-comments .comment img.avatar{position:absolute;top:15px;left:10px}.diff-comments .comment .comment-detail{margin-left:45px;position:relative;background:#fff}.diff-comments .comment .comment-detail .light-md-editor{border-color:#eee}.diff-comments .comment .comment-detail.arrow{padding:10px;border:1px solid #EEE;border-radius:3px}.diff-comments .comment .comment-detail.arrow:before{margin-top:-11px;bottom:auto;right:auto;top:30px;left:-6px;position:absolute;content:initial;width:.7em;height:.7em;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);z-index:2;-webkit-transition:background .1s linear;-moz-transition:background .1s linear;transition:background .1s linear;background-color:#FFF;border-left:1px solid #EEE;border-bottom:1px solid #EEE}.diff-comments .comment .content{line-height:23px;font-size:14px;margin-bottom:10px}.diff-comments .comment .content img.monkey.emotion{width:64px}.diff-comments .comment .content pre{display:block;white-space:initial;word-break:initial;overflow-x:auto}.diff-comments .comment .line{color:#777}.diff-comments .comment .line a{color:#444;cursor:pointer}.diff-comments .comment .time{font-size:12px;color:#999}.diff-comments .comment .time a{cursor:pointer}.diff-comments .comment .time a.remove,.diff-comments .comment .time a.reply{opacity:0}.diff-comments .comment .time .mr10{margin-right:10px}.diff-comments .comment .time:hover a.remove,.diff-comments .comment .time:hover a.reply{opacity:100}.diff-comments .comment.form{margin-top:20px}.diff-comments .comment.form .comment-detail{border:none;padding:0}.diff-comments .comment.inline{margin-bottom:0;border:1px solid #ddd;border-top:none;background-color:#fff}.diff-comments .comment.inline img.avatar{position:absolute;top:10px;left:10px;width:24px;height:24px}.diff-comments .comment.inline .comment-detail{margin-left:40px}.diff-comments .comment.inline .content{font-size:13px;white-space:normal}.diff-comments .comment.inline.form{border:none;padding:0;margin-top:0;margin-bottom:0}.diff-comments .comment.inline.form .comment-detail{margin-left:0}.diff-comments .comment.inline.form .comment-detail .light-md-editor{border-top:none;border-color:#ddd;border-top-left-radius:0;border-top-right-radius:0}.diff-comments .comment.inline:first-child{border-top:1px solid #ddd;border-top-left-radius:3px;border-top-right-radius:3px}.file-diff-stat-bar{font-size:11px;color:#999}.file-diff-stat-bar .diff-stat-bar{margin-left:3px}.commit-diff-stat .diff-stat-bar i,.file-diff-stat-bar i{display:inline-block;height:8px;width:8px;background:#ccc;margin-top:2px;margin-left:1px}.commit-diff-stat .diff-stat-bar i.plus,.file-diff-stat-bar i.plus{background:#6cc644}.commit-diff-stat .diff-stat-bar i.minus,.file-diff-stat-bar i.minus{background:#bd2c00}.commit-diff-stat{padding:0 10px}.commit-diff-stat .modify-type .add{color:#6cc644}.commit-diff-stat .modify-type .modify{color:#FCCB0E}.commit-diff-stat .commit-diff-header{color:#666;line-height:24px}.commit-diff-stat .commit-diff-header .info.icon{color:#ddc478}.commit-diff-stat .commit-diff-header strong{font-size:14px}.commit-diff-stat .commit-diff-header .diff-toggle-show-button{margin-right:10px;float:right}.commit-diff-stat .commit-diff-header .diff-mode-box{display:block;line-height:24px;float:right;font-size:14px}.commit-diff-stat .commit-diff-header .diff-mode-box .ui.dropdown .dropdown.icon{margin-top:5px;margin-left:.1em}.commit-diff-stat .commit-diff-header .diff-mode-box .ui.simple.dropdown{float:right;height:24px;line-height:24px}.commit-diff-stat .commit-diff-header .diff-mode-box .ui.simple.dropdown>.menu{left:-15px}.commit-diff-stat .commit-diff-header .diff-mode-box .ui.simple.dropdown .menu .item{padding:.25em 1em!important}.commit-diff-stat .toggle-diff-stat{color:#333;font-weight:700}.commit-diff-stat .diff-mode-button{float:right;margin-right:10px}.commit-diff-stat .diff-mode-button.toggle.checkbox{font-size:14px;margin-top:5px;margin-right:15px}.commit-diff-stat .diff-mode-button.toggle.checkbox label{padding-left:3.5em}.diff-too-long{font-size:12px;color:#777;padding:10px;text-align:center;margin-top:30px}.comment-commit-diff.commit-diff .header{padding:5px 10px;text-align:left;color:#555;text-shadow:0 1px 0 #fff;background-color:#FAF8F8;background-image:-moz-linear-gradient(#fafafa,#faf8f8);background-image:-webkit-linear-gradient(#fafafa,#faf8f8);background-image:linear-gradient(#fafafa,#faf8f8);background-repeat:repeat-x;border:1px solid #ccc}.comment-commit-diff.commit-diff .diff-header .triangle.icon{display:none}.comment-commit-diff.commit-diff .diff-header:hover{cursor:default}.comment-commit-diff.commit-diff .diff-header i.chat,.comment-commit-diff.commit-diff .diff-header span.comment-count{display:none}.comment-commit-diff.commit-diff .diff{border-top:none;border-bottom:solid 1px #ccc;border-left:solid 1px #ccc;border-right:solid 1px #ccc;margin-left:0}.edit .edit-view .file-box .file-edit .code-editor{border:none;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;height:560px;margin:0;padding:0;position:relative;width:100%;font-size:12px}.edit .edit-view .file-delete-info{margin-left:20px;font-size:14px;color:red}.edit .edit-view .ui.form .field.commit-message textarea{height:80px}.edit .edit-view .ui.form .form-opt{padding:5px 0}.edit .edit-view .ui.form .form-opt label{margin:0;font-size:12px}.edit .edit-view .ui.form .form-opt .submit{float:right;cursor:pointer;font-size:12px}.edit .edit-view .ui.form .form-opt label.submit.red:hover{background:#CF5757!important}.git-new-file-select{display:inline;float:right}.git-new-file-select span{font-size:14px;color:#333}.plot.view{min-height:500px}.plot.popup{width:300px;max-width:300px}#network{padding:0;width:100%;font-size:12px;background:#FFF}#network .svg{border-left:1px solid #eee;border-right:1px solid #eee;border-top:1px solid #f8f8f8;overflow-y:scroll;position:relative;width:100%;min-height:500px}#network .svg .text{cursor:pointer}#network .svg .text:hover{text-decoration:underline}#network .info,#network .more{border-left:1px solid #eee;border-right:1px solid #eee;color:#999;text-align:left;line-height:30px;height:30px;width:100%;background:#FFF;font-size:12px}#network .more{border-bottom:1px solid #eee;text-align:center;margin-bottom:30px;cursor:pointer}#network .info{text-indent:10px;border-top:1px solid #eee}#network .info .dot{vertical-align:middle;width:12px;height:12px;border-radius:6px;background:#000;display:inline-block;margin-right:5px}#network .info .cdot{vertical-align:middle;width:14px;height:14px;border-radius:7px;border:1px solid #888;background:#FFF;display:inline-block;margin-right:5px;position:relative}#network .info .cdot>i{vertical-align:middle;width:12px;height:12px;border-radius:6px;background:#000;display:inline-block;margin-right:5px;position:absolute;left:1px;top:1px}#network ::-webkit-scrollbar-track-piece{background-color:#fff;-webkit-border-radius:0}#network ::-webkit-scrollbar{width:12px;height:12px}#network ::-webkit-scrollbar-thumb{height:50px;background-color:rgba(3,3,3,.2);-webkit-border-radius:0;outline:#fff solid 2px;outline-offset:-2px;border:2px solid #fff}#network ::-webkit-scrollbar-thumb:hover{height:50px;background-color:#9f9f9f;-webkit-border-radius:0}#network .clean{clear:both}.tag-list{width:800px;margin:0 auto;padding-top:5px!important}.tag-list>ul{list-style-type:none}.tag-list>ul>li{display:block}.tag-list .date{max-width:80px;background-color:#fecf54;margin-left:160px;padding:10px 0;text-align:center;vertical-align:middle;border-radius:5px;color:#fff;box-sizing:border-box;font-size:12px}.tag-list .date.green{background-color:#a0d568}.tag-list .tag-name{width:200px;line-height:70px;text-align:right;position:relative;float:left;padding:20px;box-sizing:border-box;height:110px;font-size:14px;color:#000}.tag-list .tag-name:after{box-sizing:border-box;content:\" \";display:block;position:absolute;top:50%;right:-7px;z-index:10;width:12px;height:12px;margin-top:-6px;background-color:#bfbfbf;border-radius:6px}.tag-list .tag-name a{color:#000}.tag-list .content{width:560px;border-left:1px solid #bfbfbf;position:relative;float:left;padding:20px;box-sizing:border-box}.tag-list .content .tag-info a.avatar{width:40px;height:40px;position:absolute;-webkit-box-shadow:0 0 10px rgba(0,0,0,.3);box-shadow:0 0 10px rgba(0,0,0,.3);border-radius:40px;top:35px;left:22px}.tag-list .content .tag-info a.avatar>img{width:40px;height:40px;border-radius:40px}.tag-list .content .tag-info .tag-page{background-color:#fff;display:inline-block;float:left;margin-left:70px;-webkit-box-shadow:0 0 10px rgba(0,0,0,.3);box-shadow:0 0 10px rgba(0,0,0,.3);font-size:12px;color:#7c7c7c;position:relative;margin-top:10px}.tag-list .content .tag-info .tag-page>div{margin-left:40px;margin-right:60px}.tag-list .content .tag-info .tag-page .circle{background-color:#F7F6F2;width:16px;height:16px;border-radius:15px;-webkit-box-shadow:inset 0 0 5px rgba(0,0,0,.2);box-shadow:inset 0 0 5px rgba(0,0,0,.2);float:left;position:relative;left:10px;top:10px}.tag-list .content .tag-info .tag-page .message{min-height:35px;margin-top:20px;border-bottom:1px solid #eee;padding-bottom:10px}.tag-list .content .tag-info .tag-page .message pre{margin:0}.tag-list .content .tag-info .tag-page .info{height:35px;line-height:35px}.tag-list .content .tag-info .tag-page .info a{color:#7c7c7c}.tag-list .content .tag-info .tag-page .btn{font-size:14px;margin-bottom:20px}.tag-list .content .tag-info .tag-page .btn>i:hover{cursor:pointer}.tag-list .content .tag-info .tag-page .btn>a{margin-left:10px;color:#7c7c7c}.tag-list .content .tag-info .tag-page .btn>a:hover{cursor:pointer}.tag-list .content .tag-info .tag-page .btn>a:first-child{margin-left:0}.tag-list .tag-references{padding:14px 0 0;margin:0;list-style-type:none;font-size:13px}.tag-list .tag-references li{display:inline-block}.tag-list .hidden-text-expander{position:relative;top:-1px;display:inline-block;margin-left:5px;line-height:0}.tag-list .hidden-text-expander a{display:inline-block;height:12px;padding:0 5px;font-size:12px;font-weight:700;line-height:6px;text-decoration:none;vertical-align:middle;background:#ddd;border-radius:1px}.create-tag-tips{width:330px;margin:55px auto 0}.create-tag-tips strong{font-size:18px;color:#000}.create-tag-tips p{margin-top:25px;font-size:14px;color:#000}.create-tag-tips p:nth-child(2){margin-top:40px}.compare .compare-item{font-size:12px;margin:12px 0;background:#FFF;padding:10px}.compare .compare-commit-group{padding:0;margin-bottom:10px;font-size:12px;width:100%;border:1px solid #e5e5e5;border-collapse:separate;border-spacing:0}.compare .compare-commit-group .compare-date-head{padding:10px;color:#333;text-align:left;background-color:#FFF;font-size:18px}.compare .compare-commit-group .compare-commit-item{background:#FFF;font-size:12px}.compare .compare-commit-group .compare-commit-item td{border:none;padding:7px 5px;font-size:12px;line-height:18px;vertical-align:top;border-top:1px solid #e5e5e5}.compare .compare-commit-group .compare-commit-item td.octicon{width:30px}.compare .compare-commit-group .compare-commit-item td.gravatar{width:20px}.compare .compare-commit-group .compare-commit-item td.gravatar img{border-radius:10px;vertical-align:middle}.compare .compare-commit-group .compare-commit-item td.author{width:200px;white-space:nowrap;padding-right:20px}.compare .compare-commit-group .compare-commit-item td.author a{color:#555;text-decoration:none}.compare .compare-commit-group .compare-commit-item td.message{white-space:nowrap;padding-right:20px;color:#777}.compare .compare-commit-group .compare-commit-item a{color:#777;text-decoration:none}.compare .compare-commit-group .compare-commit-item td.sha{padding-right:10px;white-space:nowrap;text-align:right;color:#777}.compare .ui.four.fields.compare .field.and{width:15px;padding:0;text-align:center;margin:0 0 1em}.compare .ui.four.fields.compare .field.button{width:80px}.compare .compare-content .comit-diff-stat .commit-diff-stat-list{display:block}@-moz-keyframes git-rotate-loading{0%{transform:rotate(0deg);-ms-transform:rotate(0deg);-webkit-transform:rotate(0deg);-o-transform:rotate(0deg);-moz-transform:rotate(0deg)}100%{transform:rotate(360deg);-ms-transform:rotate(360deg);-webkit-transform:rotate(360deg);-o-transform:rotate(360deg);-moz-transform:rotate(360deg)}}@-o-keyframes git-rotate-loading{0%{transform:rotate(0deg);-ms-transform:rotate(0deg);-webkit-transform:rotate(0deg);-o-transform:rotate(0deg);-moz-transform:rotate(0deg)}100%{transform:rotate(360deg);-ms-transform:rotate(360deg);-webkit-transform:rotate(360deg);-o-transform:rotate(360deg);-moz-transform:rotate(360deg)}}@-webkit-keyframes git-rotate-loading{0%{transform:rotate(0deg);-ms-transform:rotate(0deg);-webkit-transform:rotate(0deg);-o-transform:rotate(0deg);-moz-transform:rotate(0deg)}100%{transform:rotate(360deg);-ms-transform:rotate(360deg);-webkit-transform:rotate(360deg);-o-transform:rotate(360deg);-moz-transform:rotate(360deg)}}@keyframes git-rotate-loading{0%{transform:rotate(0deg);-ms-transform:rotate(0deg);-webkit-transform:rotate(0deg);-o-transform:rotate(0deg);-moz-transform:rotate(0deg)}100%{transform:rotate(360deg);-ms-transform:rotate(360deg);-webkit-transform:rotate(360deg);-o-transform:rotate(360deg);-moz-transform:rotate(360deg)}}@-moz-keyframes git-loading-text-opacity{0%{opacity:1}25%{opacity:.5}50%{opacity:0}75%{opacity:.5}100%{opacity:1}}@-o-keyframes git-loading-text-opacity{0%{opacity:1}25%{opacity:.5}50%{opacity:0}75%{opacity:.5}100%{opacity:1}}@-webkit-keyframes git-loading-text-opacity{0%{opacity:1}25%{opacity:.5}50%{opacity:0}75%{opacity:.5}100%{opacity:1}}@keyframes git-loading-text-opacity{0%{opacity:1}25%{opacity:.5}50%{opacity:0}75%{opacity:.5}100%{opacity:1}}.git-loading,.git-loading-container{height:60px;position:relative;width:60px;border-radius:100%}.git-loading-container{margin:40px auto}.git-loading{border:1px solid transparent;border-color:transparent #000;-moz-animation:git-rotate-loading 1.5s linear 0s infinite normal;-moz-transform-origin:50% 50%;-o-animation:git-rotate-loading 1.5s linear 0s infinite normal;-o-transform-origin:50% 50%;-webkit-animation:git-rotate-loading 1.5s linear 0s infinite normal;-webkit-transform-origin:50% 50%;animation:git-rotate-loading 1.5s linear 0s infinite normal;transform-origin:50% 50%}.git-loading-container .git-loading,.git-loading-container:hover .git-loading{-webkit-transition:all .5s ease-in-out;-moz-transition:all .5s ease-in-out;-ms-transition:all .5s ease-in-out;-o-transition:all .5s ease-in-out;transition:all .5s ease-in-out}#git-loading-text{-moz-animation:git-loading-text-opacity 2s linear 0s infinite normal;-o-animation:git-loading-text-opacity 2s linear 0s infinite normal;-webkit-animation:git-loading-text-opacity 2s linear 0s infinite normal;animation:git-loading-text-opacity 2s linear 0s infinite normal;color:#000;font-family:\"Helvetica Neue\",Helvetica,Arial,sans-serif;font-size:10px;font-weight:700;margin-top:4px;position:absolute;text-align:center;text-transform:uppercase;top:5px;width:40px;left:10px}.webhook{position:relative;background:#fff;padding:0 5px;border-left:1px solid #e2eaee;border-right:1px solid #e2eaee;border-bottom:1px solid #e2eaee;margin:0;height:30px;display:table;max-width:800px;min-width:800px}.webhook table{width:100%;table-layout:fixed}.webhook .content,.webhook .result,.webhook .url{border:0;max-width:300px;font-size:13px;display:table-cell;text-overflow:ellipsis;-o-text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.webhook .token{border:0;font-size:13px;max-width:200px;display:table-cell;text-overflow:ellipsis;-o-text-overflow:ellipsis;overflow:hidden;white-space:nowrap;padding-left:20px}.webhook .reason,.webhook .send-time,.webhook .status{border:0;font-size:13px;max-width:60px;display:table-cell;padding-left:20px}.webhook .oper{border:0;font-size:13px;max-width:200px;display:table-cell}.webhook-title{position:relative;padding:0 5px;margin:0;height:30px;display:table;width:100%;border:1px solid #c5d5dd;background:#f7f8f9;font-size:13px;max-width:800px;min-width:800px}.webhook-title table{width:100%;table-layout:fixed}.webhook-title .content,.webhook-title .result,.webhook-title .url{border:0;max-width:300px;font-size:13px;display:table-cell}.webhook-title .token{border:0;font-size:13px;max-width:200px;display:table-cell;padding-left:20px}.webhook-title .reason,.webhook-title .send-time,.webhook-title .status{border:0;font-size:13px;max-width:60px;display:table-cell;padding-left:20px}.webhook-title .oper{border:0;font-size:13px;max-width:130px;display:table-cell}.tint-box{background:#f3f3f3;position:relative;margin-bottom:10px}.area{fill:#1db34f;fill-opacity:.5}.axis{fill:#aaa;font-size:10px}#contributors .contributors-list{margin:0 0 10px;list-style:none;padding:0}#contributors .person{float:left;margin-top:10px}#contributors .person:nth-child(even){float:right}#contributors .person .spark{display:block;background:#f3f3f3}#contributors .person .area-contributor{fill:#f17f49}.selection rect{fill:#333;fill-opacity:.1;stroke:#333;stroke-width:1px;stroke-opacity:.4;shape-rendering:crispedges;stroke-dasharray:3 3}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{position:relative;margin-top:1em;margin-bottom:16px;font-weight:700;line-height:1.4}.markdown-body ol,.markdown-body ul{padding:0 0 0 2em}.markdown-body .highlight pre,.markdown-body pre{padding:16px;overflow:auto;font-size:85%;line-height:1.45;background-color:#f7f7f7;border-radius:3px}.markdown-body a{background:0 0;color:#4183c4;text-decoration:none}.markdown-body a:active,.markdown-body a:hover{outline:0;text-decoration:underline}.markdown-body a:focus{text-decoration:underline}.markdown-body strong{font-weight:700}.markdown-body h1{margin:.67em 0;padding-bottom:.3em;font-size:2.25em;line-height:1.2;border-bottom:1px solid #eee}.markdown-body h1 .coding-anchor{margin-top:-20px;padding-top:20px}.markdown-body h1:hover .coding.icon.coding-anchor{visibility:visible}.markdown-body img{border:0;max-width:100%;box-sizing:border-box}.markdown-body hr{box-sizing:content-box;overflow:hidden;background:#e7e7e7;height:4px;padding:0;margin:16px 0;border:0!important}.markdown-body hr:before{display:table;content:\"\"}.markdown-body hr:after{display:table;clear:both;content:\"\"}.markdown-body pre{overflow:auto;font:12px Consolas,Liberation Mono,Menlo,Courier,monospace;word-wrap:normal;font-family:monospace,monospace;font-size:1em;margin-top:0;margin-bottom:16px}.markdown-body pre code{display:inline;max-width:initial;padding:0;margin:0;overflow:initial;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}.markdown-body pre code:after,.markdown-body pre code:before{content:normal}.markdown-body code{font:12px Consolas,Liberation Mono,Menlo,Courier,monospace!important;padding:.2em 0;margin:0;font-size:85%;background-color:rgba(0,0,0,.04);border-radius:3px}.markdown-body code:after,.markdown-body code:before{letter-spacing:-.2em;content:\"\\00a0\"}.markdown-body kbd{background-color:#e7e7e7;background-image:linear-gradient(#fefefe,#e7e7e7);background-repeat:repeat-x;border-radius:2px;border:1px solid #cfcfcf;color:#000;padding:3px 5px;line-height:10px;font:11px Consolas,Liberation Mono,Menlo,Courier,monospace;display:inline-block}.markdown-body input{color:inherit;margin:0;line-height:normal;font:13px/1.4 Helvetica,arial,freesans,clean,sans-serif,\"Segoe UI Emoji\",\"Segoe UI Symbol\"}.markdown-body input[type=checkbox]{box-sizing:border-box;padding:0}.markdown-body table{border-collapse:collapse;border-spacing:0;display:block;width:100%;overflow:auto;word-break:normal;word-break:keep-all;margin-top:0;margin-bottom:16px}.markdown-body table th{font-weight:700;padding:6px 13px;border:1px solid #ddd}.markdown-body table td{padding:6px 13px;border:1px solid #ddd}.markdown-body table tr{background-color:#fff;border-top:1px solid #cfcfcf}.markdown-body table tr:nth-child(2n){background-color:#f8f8f8}.markdown-body td,.markdown-body th{padding:0}.markdown-body *{box-sizing:border-box;line-height:1.6}.markdown-body h2{padding-bottom:.3em;font-size:1.75em!important;line-height:1.225;border-bottom:1px solid #eee}.markdown-body h2 .coding-anchor{margin-top:-14px;padding-top:14px}.markdown-body h2:hover .coding.icon.coding-anchor{visibility:visible}.markdown-body h3{font-size:16px;font-size:1.5em;line-height:1.43}.markdown-body h3 .coding-anchor{margin-top:-14px;padding-top:14px}.markdown-body h3:hover .coding.icon.coding-anchor{visibility:visible}.markdown-body h4{font-size:14px;font-size:1.25em}.markdown-body h4 .coding-anchor{margin-top:-12px;padding-top:12px}.markdown-body h4:hover .coding.icon.coding-anchor{visibility:visible}.markdown-body h5{font-size:12px;font-size:1em}.markdown-body h5 .coding-anchor{margin-top:-8px;padding-top:8px}.markdown-body h5:hover .coding.icon.coding-anchor{visibility:visible}.markdown-body h6{font-size:11px;font-size:1em;color:#777}.markdown-body h6 .coding-anchor{margin-top:-8px;padding-top:8px}.markdown-body h6:hover .coding.icon.coding-anchor{visibility:visible}.markdown-body blockquote{margin:0 0 16px;padding:0 15px;color:#777;border-left:4px solid #ddd}.markdown-body ul{margin-top:0;margin-bottom:16px}.markdown-body ul ol{list-style-type:lower-roman;margin-top:0;margin-bottom:0}.markdown-body ul ol ol,.markdown-body ul ul ol{list-style-type:lower-alpha}.markdown-body ol{margin-top:0;margin-bottom:16px}.markdown-body ol ol{list-style-type:lower-roman;margin-top:0;margin-bottom:0}.markdown-body ol ol ol,.markdown-body ol ul ol{list-style-type:lower-alpha}.markdown-body li{line-height:1.4}.markdown-body dd{margin-left:0}.markdown-body p{margin-top:0;margin-bottom:16px}.markdown-body dl{margin-top:0;margin-bottom:16px;padding:0}.markdown-body dl dt{padding:0;margin-top:16px;font-size:1em;font-style:italic;font-weight:700}.markdown-body dl dd{padding:0 16px;margin-bottom:16px}.markdown-body li>p{margin-top:16px}.markdown-body blockquote>:first-child{margin-top:0}.markdown-body blockquote>:last-child{margin-bottom:0}.markdown-body pre>code{padding:0;margin:0;font-size:14px!important;word-break:normal;white-space:pre;background:0 0;border:0}.markdown-body .highlight{margin-bottom:16px;background:#fff}.markdown-body .highlight pre{margin-bottom:0;word-break:normal}.markdown-body .highlight .il,.markdown-body .highlight .m,.markdown-body .highlight .mf,.markdown-body .highlight .mh,.markdown-body .highlight .mi,.markdown-body .highlight .mo{color:#945277}.markdown-body .highlight .s,.markdown-body .highlight .s1,.markdown-body .highlight .s2,.markdown-body .highlight .sb,.markdown-body .highlight .sc,.markdown-body .highlight .sd,.markdown-body .highlight .se,.markdown-body .highlight .sh,.markdown-body .highlight .si,.markdown-body .highlight .sx{color:#df5000}.markdown-body .highlight .kc,.markdown-body .highlight .kd,.markdown-body .highlight .kn,.markdown-body .highlight .kp,.markdown-body .highlight .kr{font-weight:700}.markdown-body .highlight .kt{font-weight:700;color:#458}.markdown-body .highlight .k,.markdown-body .highlight .o{font-weight:700}.markdown-body .highlight .c,.markdown-body .highlight .c1,.markdown-body .highlight .cm{color:#998;font-style:italic}.markdown-body .highlight .cp{color:#999;font-weight:700}.markdown-body .highlight .cs{color:#999;font-weight:700;font-style:italic}.markdown-body .highlight .n{color:#333}.markdown-body .highlight .na,.markdown-body .highlight .nv,.markdown-body .highlight .vc,.markdown-body .highlight .vg,.markdown-body .highlight .vi{color:teal}.markdown-body .highlight .nb{color:#0086B3}.markdown-body .highlight .nc{color:#458;font-weight:700}.markdown-body .highlight .no{color:#094e99}.markdown-body .highlight .ni{color:purple}.markdown-body .highlight .ne{color:#900;font-weight:700}.markdown-body .highlight .nf{color:#945277;font-weight:700}.markdown-body .highlight .nn{color:#555}.markdown-body .highlight .nt{color:navy}.markdown-body .highlight .err{color:#a61717;background-color:#e3d2d2}.markdown-body .highlight .gd{color:#000;background-color:#fdd}.markdown-body .highlight .gd .x{color:#000;background-color:#faa}.markdown-body .highlight .ge{font-style:italic}.markdown-body .highlight .gr{color:#a00}.markdown-body .highlight .gh{color:#999}.markdown-body .highlight .gi{color:#000;background-color:#dfd}.markdown-body .highlight .gi .x{color:#000;background-color:#afa}.markdown-body .highlight .go{color:#888}.markdown-body .highlight .gp{color:#555}.markdown-body .highlight .gs{font-weight:700}.markdown-body .highlight .gu{color:purple;font-weight:700}.markdown-body .highlight .gt{color:#a00}.markdown-body .highlight .ow{font-weight:700}.markdown-body .highlight .w{color:#bbb}.markdown-body .highlight .sr{color:#017936}.markdown-body .highlight .ss{color:#8b467f}.markdown-body .highlight .bp{color:#999}.markdown-body .highlight .gc{color:#999;background-color:#EAF2F5}.markdown-body .task-list-item{list-style-type:none}.markdown-body .task-list-item input{float:left;margin:.3em 0 .25em -1.6em;vertical-align:middle}.markdown-body html input[disabled]{cursor:default}.markdown-body .task-list-item+.task-list-item{margin-top:3px}.markdown-body>:first-child{margin-top:0!important}.markdown-body>:last-child{margin-bottom:0!important}.deploy-key-table{background-color:#fff;border:1px solid #e2eaee;border-collapse:collapse;font-size:13px;width:100%}.deploy-key-table tr{border:1px solid #e2eaee}.deploy-key-table td{height:30px}.deploy-key-table .deploy-key-title{background-color:#f7f8f9;border:1px solid #c5d5dd}.deploy-key-table .content{width:50%;padding-left:10px}.deploy-key-table .time,.deploy-key-table .title{width:20%}.deploy-key-table .oper{width:10%;text-align:center}.deploy-key-text{margin:20px 0 10px;font-size:13px}.deploy-key,.deploy-key-title{position:relative;padding:0 5px;margin:0;width:100%;font-size:13px}.deploy-key table,.deploy-key-title table{width:100%;height:30px}.deploy-key td,.deploy-key-title td{border:0}.deploy-key .content,.deploy-key-title .content{width:50%}.deploy-key .time,.deploy-key .title,.deploy-key-title .time,.deploy-key-title .title{width:20%}.deploy-key .oper,.deploy-key-title .oper{width:10%}.deploy-key{background-color:#fff;border:1px solid #e2eaee;border-top:none}.deploy-key-title{background-color:#f7f8f9;border:1px solid #c5d5dd}.public-project-view{background-color:#FFF;padding:40px 20px;margin:10px auto;min-height:550px}.public-project-view h2{font-size:18px}.public-project-view hr{border:none;border-top:1px solid #ddd}@media screen and (max-width:1200px){.public-project-view{width:1200px}}@media screen and (min-width:1200px){.public-project-view{width:1200px}}.public-project-view-top .project-title{height:60px;border-bottom:1px solid #ddd}.public-project-view-top .project-title .project-logo{border-radius:3px;float:left}.public-project-view-top .project-title .project-name{font-size:22px;color:#4183c4;float:left;margin-left:22px;width:1130px}.public-project-view-top .project-title .project-fork{font-size:12px;margin-left:22px}.public-project-view-top .title{font-size:20px;float:left}.public-project-view-top .title a{color:#4183c4}.public-project-view-top .watch-panel{font-size:15px;display:inline-block}.public-project-view-top .watch-panel .watch{font-size:14px;line-height:26px;margin-top:3px;display:inline-block}.public-project-view-top .watch-panel .watch.button{background:#e8e8e8;height:26px;padding:0 5px;text-align:center;border-bottom-left-radius:5px;border-top-left-radius:5px;color:#000}.public-project-view-top .watch-panel .watch.button:hover{background:#d5d5d5;cursor:pointer}.public-project-view-top .watch-panel .watch.count{margin-top:0;background:#e8e8e8;height:26px;min-width:20px;text-align:center;margin-left:-3px;border-bottom-right-radius:5px;border-top-right-radius:5px;padding:0 5px}.public-project-view-top .watch-panel .watch.count a,.public-project-view-top .watch-panel .watch.count a:hover{color:#000}.public-project-view-top .pulls{float:left;font-size:14px;line-height:26px;margin-top:0;background:#e8e8e8;height:26px;padding:0 5px;text-align:center;margin-left:0!important;margin-right:10px;border-radius:5px;color:#000}.public-project-view-top .pulls:hover{background:#d5d5d5;cursor:pointer}.public-project-view-second{padding:20px 0}.public-project-view-second .ui.tabular.menu{padding:0}.public-project-view-second .ui.tabular.menu a{padding:10px 18px}.public-project-view-second .ui.tabular.menu a .label{padding:3px 9px!important;background-color:rgba(0,0,0,.15)!important;color:#666}.public-project-view-third{margin-top:20px}.public-project-view-clone{background:#f7f7f7;width:230px;height:100px;font-size:12px;border-radius:5px;border:1px solid #999;position:absolute;right:70px;z-index:999;top:206px}.public-project-view-clone:after,.public-project-view-clone:before{bottom:100%;left:80%;border:solid transparent;content:\" \";height:0;width:0;position:absolute;pointer-events:none}.public-project-view-clone:after{border-color:rgba(127,127,7,0) rgba(127,127,7,0) #f7f7f7;border-width:10px;margin-left:-10px}.public-project-view-clone:before{border-color:rgba(221,221,221,0);border-bottom-color:#ddd;border-width:11px;margin-left:-11px}.project-clone-url-button{background:#f6f6f6;height:34px;display:inline}.public-project-view-clone-panel{line-height:30px;padding:2px 10px}.public-project-view-clone-panel .other a{padding:0;cursor:pointer}.public-project-view-watchers{padding:20px 10px;position:relative;height:64px;width:350px;display:inline-block;background-color:#fff;margin:10px;border:1px solid #ddd;border-radius:3px}.public-project-view-watchers .avatar{position:absolute;left:10px;margin-top:-30}.public-project-view-watchers .info{height:50%;padding-left:80px;line-height:32px}.public-project-view-watchers .action{font-size:12px;height:44%;padding-left:80px;line-height:32px}.public-project-view-watchers .self{line-height:14px;font-size:14px;font-weight:700;width:80px;text-align:center;border-radius:20px}.public-project-view-watchers .ui.button{padding:0 1em}.public-project-view-watchers .ui.button>.icon{margin-right:0}.public-project-view .git.tab-content{border:1px solid #eee;border-top:none}.public-project-view .git.tab-bar .item{border-left:1px solid #eee;border-right:1px solid #eee;margin-left:-5px}.public-project-view .git.tab-bar .item:first-child{margin-left:0}.public-project-view .commit-group-title i.icon.coding-commit{background-color:#FFF}.public-project-view .commit-list:before{z-index:0}.merge-request-squash-form .ui.segment{line-height:1.4em}.merge-request-squash-form .fake-folded-editor{height:15px;margin:0;padding:.65em 1em;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;border:1px solid rgba(0,0,0,.15);cursor:text;font-size:1em;color:rgba(0,0,0,.7);background:#FFF}.merge-request-squash-form .fake-folded-editor:before{content:'使用自定义 Commit Message';font-size:14px}.merge-request-squash-form textarea.squash-message{height:167px;font-size:14px;resize:none}.merge-request-squash-form .commit-messages{position:relative;padding:5px 0 0 5px;height:90px;box-sizing:border-box}.merge-request-squash-form .commit-messages .ui.checkbox{margin-bottom:10px;font-size:14px;width:100%}.merge-request-squash-form .commit-messages input[type=checkbox]~label{color:rgba(0,0,0,.5);padding-left:1.5em}.merge-request-squash-form .commit-messages input[type=checkbox]:checked~label,.merge-request-squash-form .commit-messages input[type=checkbox]~label:hover{color:#000}.merge-request-squash-form .squash-msg-preview{height:153px;font-family:'微软雅黑','Helvetica Neue',sans-serif,SimHei;color:#333;font-size:14px;position:relative}.public-key-container .add-key-form{padding:1.5em;border-radius:5px;background-color:#fff}.public-key-container .no-key-cell{padding:1.5em;border-radius:5px;background-color:#f8f8f8;border:1px solid #dfdedc}.public-key-container .no-key-cell .no-key-msg{color:#aaa;text-align:center}.public-key-container .key-list{padding:0;border-radius:5px;background-color:#f8f8f8;border:1px solid #dfdedc}.public-key-container .key-list .key-list-table{border-collapse:collapse;width:100%}.public-key-container .key-list .key-list-table tr td{border-bottom:1px solid #eee;padding:15px 1.5em}.public-key-container .key-list .key-list-table tr:last-child td{border:0}.public-key-container .key-list .key-list-table .key-info .info-entry{font-size:14px;color:#555;margin:5px 0}.public-key-container .key-list .key-list-table .key-info .expired{color:#d95c5c}.public-key-container .key-list .key-list-table .key-info .expired .expired-msg{padding-left:15px;font-weight:700;display:inline-block}.public-key-container .key-list .key-list-table .key-operator{width:1px;white-space:nowrap}.public-key-container .key-list .key-list-table .key-operator .button{font-weight:400;font-size:14px;padding:0 15px!important}.public-key-container .key-list .key-list-table .key-operator .delete{color:#d95c5c!important}.public-key-container .key-list .key-list-table .key-edit-form .button{font-weight:400}.public-key-container .key-list .key-list-table .key-edit-form .cancel{background-color:transparent!important;box-shadow:none;padding:0 10px}.finder .finder-bar{display:table;line-height:26px;width:100%}.finder .finder-bar .finder-project{display:table-cell;width:1px;white-space:nowrap}.finder .finder-bar .finder-field-wrapper{display:table-cell}.finder .finder-bar .finder-field-wrapper input.tree-finder-field{background-color:transparent;border:0;padding:0 10px}.finder .finder-bar .finder-escaper-wrapper{display:table-cell;width:1px;white-space:nowrap}.finder .keyboard-help-message{width:100%;border:1px solid rgba(137,184,75,.3);border-radius:3px;background-color:#E0F7C2;padding:16px 0;margin:16px 0;display:table}.finder .keyboard-help-message .content{display:table-cell;padding-left:12px}.finder .keyboard-help-message .content p{margin:0;color:#3E660A;font-size:14px;line-height:23px}.finder .keyboard-help-message .content p .key-label{font-size:13px;color:#4D4D4D;border:1px solid rgba(137,184,75,.3);border-radius:2px;background-color:#fff;box-shadow:0 1px rgba(137,184,75,.2);padding:1px 5px;margin:0 5px}.finder .keyboard-help-message .close-button{display:table-cell;width:120px}.finder .keyboard-help-message .close-button .close-link{cursor:pointer}.finder .keyboard-help-message .close-button .close-link .icon{color:rgba(0,0,0,.2);float:right}.finder .finder-result .files-list{border:1px solid #ccc;margin-bottom:10px}.finder .finder-result .files-list table.files{border-collapse:collapse;width:100%;background:#F8F8F8;border-spacing:0}.finder .finder-result .files-list table.files tr{height:34px}.finder .finder-result .files-list table.files tr td{font-size:12px;padding:2px 3px;border-top:1px solid #eee;line-height:20px}.finder .finder-result .files-list table.files tr td.icon{width:17px;padding-right:2px;padding-left:10px;color:#767676}.finder .finder-result .files-list table.files tr td.path .truncate{display:inline-block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:top}.finder .finder-result .files-list table.files tr.active{background-color:#fff}.finder .finder-result .not-found-msg{text-align:center}.ui.dimmed.dimmable .ui.dimmer.no-right{opacity:.7}.ui.dimmed.dimmable .ui.dimmer.no-right .ui.message{display:inline-block;margin-top:.3em;padding:.5em 1em;width:450px;color:#104F68}.ui.dimmed.dimmable .ui.dimmer.no-right .ui.message>.icon{font-size:1.8em}.ui.dimmed.dimmable .ui.dimmer.no-right .ui.message .header{font-size:1em;text-align:left}.ui.dimmed.dimmable .ui.dimmer.no-right .ui.message>.icon+.content p{margin:.3em 0 0;opacity:1}.ui.dimmed.dimmable .ui.dimmer.no-right .ui.message>.icon+.content a.demo-link{color:green;text-decoration:underline}.paas.container .ui.button.disabled{opacity:.5!important}.paas.container .ui.label.runtime,.paas.container .ui.label.server{float:right;font-size:12px;color:#888;margin:0;padding:3px 5px;text-transform:none}.paas.container .ui.console.table{background-color:transparent}.paas.container .ui.console.table>tbody>tr{border-bottom:1px solid #f9f9f9;background-color:transparent}.paas.container .ui.console.table>tbody>tr:last-child{border-bottom:none}.paas.container .ui.console.table>tbody>tr>th{background-color:transparent;padding:.5em}.paas.container .ui.console.table>tbody>tr>td{padding:1em 1em .3em;background-color:transparent}.paas.container .ui.console.table>tbody>tr>td .ui.label.route{text-transform:initial;font-size:1em}.paas.container .ui.console.table>tbody>tr>td .ui.form .field{font-size:12px}.paas.container .ui.console.table>tbody>tr>td .ui.form .field.memory input[type=radio]:checked+label{line-height:30px;font-weight:700;color:#A00}.paas.container .ui.console.table>tbody>tr>td .ui.form .field.memory label{margin-right:8px;font-size:14px;cursor:pointer}.paas.container .ui.console.table>tbody>tr>td .faq-link{color:#5711AE;font-size:12px;font-weight:700;margin-left:20px;padding-bottom:3px}.paas.container .ui.console.table>tbody>tr>td .deployer{font-size:12px;color:#777;margin-left:10px}.paas.container .ui.console.table>tbody>tr>td .deployer img{width:1.2em;height:1.2em}.paas.container .ui.console.table>tbody>tr>td .deployer time{color:#444}.paas.container .ui.table.stats th{padding:.4em .7em}.paas.container .ui.form.deploy .inline.field>label{width:60px;font-size:13px;font-weight:700}.paas.container .ui.form.deploy .inline.field>input{min-width:450px}.paas.container .ui.form.deploy a.expert{margin-left:10px;cursor:pointer;font-size:13px;color:#333}.paas.container .ui.form.deploy .ui.segment.expert{background-color:#f5f5f5;padding:.5em}.paas.container .ui.form.deploy .ui.checkbox{font-size:.75em;margin-right:.6em}.paas.container .ui.form.deploy .ui.checkbox input[type=radio]:checked+label{font-weight:700;color:#A00}.paas.container .ui.form.deploy .ui.checkbox label{padding-left:1.5em}.paas.container .ui.form.domain input[type=text].host{min-width:200px}.paas.container .ui.form.domain input[type=text].domain{min-width:240px}.paas.container .ui.form.domain .ui.toggle.checkbox{margin-left:95px;font-size:13px}.paas.container .ui.form.domain .ui.toggle.checkbox label{padding-left:3.5em;color:#333}.paas.container .ui.table.vars td{font-size:14px;color:#666;line-height:24px;padding:.4em .9em}.paas.container .log-filters{padding:0 10px;margin-left:120px;display:inline}.paas.container .log-filters .ui.checkbox{font-size:.75em;margin-left:1em}.paas.container .log-filters .ui.checkbox input[type=radio]:checked+label{font-weight:700;color:#A00}.paas.container .log-filters .ui.checkbox label{padding-left:1.5em}.paas.container .logs{position:relative}.paas.container .logs .log-loading{padding:10px 0;text-align:center;color:#555;font-size:12px}.paas.container .logs #tail{z-index:99;position:absolute;display:block;top:0;right:2px;margin:8px 8px 0 0;padding:0 2px 0 3px;color:#666;cursor:pointer;text-shadow:0 1px 0 #fff;font-family:\"Source Sans Pro\",Helvetica,sans-serif;font-size:11px;line-height:14px;text-decoration:none;white-space:nowrap;border:1px solid #bbb;border-top-color:#ddd;border-bottom-color:#bbb;-webkit-border-radius:8px;-moz-border-radius:8px;-ms-border-radius:8px;-o-border-radius:8px;border-radius:8px;background:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#fff),color-stop(100%,#e0e0e0));background:-webkit-linear-gradient(#fff,#e0e0e0);background:-moz-linear-gradient(#fff,#e0e0e0);background:-o-linear-gradient(#fff,#e0e0e0);background:linear-gradient(#fff,#e0e0e0)}.paas.container .logs #tail .status{display:inline-block;margin-right:1px;width:8px;height:8px;background-color:#aaa;-webkit-border-radius:4px;-moz-border-radius:4px;-ms-border-radius:4px;-o-border-radius:4px;border-radius:4px;-webkit-box-shadow:#fff 1px 1px 2px;-moz-box-shadow:#fff 1px 1px 2px;box-shadow:#fff 1px 1px 2px;background-size:auto auto;background-position:0 0}.paas.container .logs #tail .text{display:none;cursor:pointer}.paas.container .logs #tail.active .status{background-color:#6b0}.paas.container .logs #tail:hover .text{display:inline}.paas.container .logs pre{position:relative;min-height:12px;margin-top:1em;padding:5px 0;color:#f1f1f1;font-family:monospace;font-size:12px;line-height:19px;white-space:pre-wrap;word-wrap:break-word;background-color:#222;border:1px solid #ddd;counter-reset:line-numbering}.paas.container .logs pre p{position:relative;padding:0 15px 0 55px;margin:0;min-height:16px}.paas.container .logs pre p:hover{background-color:#333}.paas.container .logs pre p a{display:inline-block;text-align:right;min-width:40px;margin-left:-40px;cursor:pointer;text-decoration:none;color:#666}.paas.container .logs pre p a:before{content:counter(line-numbering);counter-increment:line-numbering;padding-right:1em}.paas.container .logs pre p span.stdout{color:#fff}.paas.container .logs pre p span.stderr{color:red}.paas.container .logs pre p span.warning{color:#ff00ff}.paas.container .logs pre p span.sys{color:#0ff}.paas.container .logs pre p span.app{color:#ff0}.paas.container .files .file-loading{padding:10px 0;text-align:center;color:#555;font-size:13px}.paas.container .files .file-explorer{min-height:260px;padding:10px;border:2px solid #f9f9f9}.paas.container .files .file-explorer hr{border-top:1px solid #eee}.paas.container .files .file-explorer table{width:100%}.paas.container .files .file-explorer table th{text-align:left;font-weight:400;width:75%}.paas.container .files .file-explorer table th a{font-size:13px;cursor:pointer;line-height:24px}.paas.container .files .file-explorer table td{text-align:right;color:#777;font-size:13px}.paas.container .files .file-explorer pre{padding:16px;overflow:auto;font-size:85%;line-height:1.45;background-color:#f7f7f7;border-radius:3px;font-family:Consolas,\"Liberation Mono\",Menlo,Courier,monospace;text-decoration:none;word-break:normal}.paas.container .files .goto-page{float:right;margin:10px;padding:5px;font-size:10px;color:#666}.paas.container .files .goto-page input[type=text]{width:25px;margin:0 10px}.paas.container .files .goto-page .ui.button{padding:0 .8em}.paas.container .ui.table.service td{font-size:14px;color:#666;line-height:24px}.paas.container .bindings .binding{color:#2d59a2;font-size:.85em;padding:0 .5em;margin:.2em;text-transform:lowercase}.paas.container .ui.button.file{position:relative;overflow:hidden}.paas.container .ui.button.file input[type=file]{display:block;position:absolute;top:0;right:0;margin:0;opacity:0;-ms-filter:'alpha(opacity=0)';font-size:200px;direction:ltr;cursor:pointer}.paas.container .service-console{min-height:300px}.paas.container .jquery-console-inner{height:520px;overflow-y:auto;background:#333;padding:.5em}.paas.container .jquery-console-prompt-box{color:#fff;font-family:monospace}.paas.container .jquery-console-focus span.jquery-console-cursor{background:#fefefe;color:#333;font-weight:700}.paas.container .jquery-console-welcome{color:#DFCADA;font-size:9pt}.paas.container .jquery-console-message{white-space:pre}.paas.container .jquery-console-message-success{color:#187718;font-family:monospace;padding:.1em}.paas.container .jquery-console-message-error{color:#ef0505;font-family:monospace;padding:.1em}.paas.container .jquery-console-message-value{color:#1ad027;font-family:monospace;padding:.1em}.paas.container .jquery-console-message-type{color:#52666f;font-family:monospace;padding:.1em}.paas.container .jquery-console-prompt-label{color:#07d1ec;font-weight:700}.marketplace.ui.modal{width:48%;margin-left:-24%}.marketplace.ui.modal>.content{padding:1em 2em}.marketplace.ui.modal>.content .ui.list .item{width:85px;padding:0;margin-left:10px;border:1px solid #ddd;cursor:pointer}.marketplace.ui.modal>.content .ui.list .item>.image{text-align:center;background-color:transparent;position:relative}.marketplace.ui.modal>.content .ui.list .item>.image>img{display:inline;width:auto}.marketplace.ui.modal>.content .ui.list .item>.image .ui.corner.label{visibility:hidden}.marketplace.ui.modal>.content .ui.list .item>.content{background-color:#ddd;text-align:center;width:100%}.marketplace.ui.modal>.content .ui.list .item>.content>.name{font-size:1em;color:#444;padding:.2em}.marketplace.ui.modal>.content .ui.list .item.active{border:1px solid #5cc26f}.marketplace.ui.modal>.content .ui.list .item.active>.image .ui.corner.label{visibility:visible}.marketplace.ui.modal>.content .ui.list .item.active>.content{background-color:#5cc26f}.marketplace.ui.modal>.content .ui.list .item.active>.content>.name{color:#fff}.service-console.fullscreen{overflow-y:auto;background:#333;position:fixed;left:0;top:0;z-index:9999999;padding:0!important;margin-left:0!important;width:100%;height:100%;display:block}.service-console.fullscreen jquery-console-inner{height:100%}.paas.container .service-console.cg-fullscreen .jquery-console-inner{height:100%;overflow-y:auto;background:#333;padding:0}i.icon.gray.remove{z-index:99999999;position:absolute;display:block;margin:0;color:#d3d3d3;right:22px;top:22px}.paas-empty{padding:40px 60px;min-width:1000px}.paas-content .content-header{font-size:18px;color:rgba(0,0,0,.6)}.paas-content .help-notice{font-size:14px;color:#666;line-height:24px}.paas-content .notice{border-radius:3px;font-size:14px;line-height:14px;padding:15px 20px;margin-bottom:20px}.paas-content .notice .text h3{font-size:18px;line-height:14px}.paas-content .notice .text p{font-size:14px;line-height:14px}.paas-content .locale-option,.paas-content .mem-option{margin-bottom:15px}.paas-content .locale-option .ui.header,.paas-content .mem-option .ui.header{font-size:14px;color:#666}.paas-content .mem-option .mem-select{margin:15px 0}.paas-content .mem-option .mem-select ul{margin:0;padding:0}.paas-content .mem-option .mem-select li{width:120px;padding:15px 0;margin-right:25px;background:#fff;border:2px solid #ddd;border-radius:3px;text-align:center;list-style:none;float:left;cursor:pointer;position:relative}.paas-content .mem-option .mem-select li.active{border:2px solid #32be77}.paas-content .mem-option .mem-select li.active:after{font-family:Icons;content:\"\\f00c\";position:absolute;top:0;right:0;padding:3px;z-index:2;color:#FFF;font-size:12px}.paas-content .mem-option .mem-select li.active:before{position:absolute;content:\"\";right:0;top:0;width:0;height:0;z-index:0;border-top:0 solid transparent;border-right:2em solid transparent;border-bottom:2em solid transparent;border-left:0 solid transparent;border-right-color:#32be77;-webkit-transition:border-color .2s ease;-moz-transition:border-color .2s ease;transition:border-color .2s ease}.paas-content .mem-option .mem-select li small,.paas-content .mem-option .mem-select li strong{display:block;line-height:1.8}.paas-content .mem-option .mem-select li strong{font-size:24px;color:#333;text-align:center;font-weight:400}.paas-content .mem-option .mem-select li small{font-size:14px;color:#f5a623}.paas-content .locale-option .ui.form{margin:15px 0}.paas-content .locale-option .ui.checkbox{margin-right:2em}.paas-content .locale-option .ui.checkbox label{display:inline-block;font-size:14px;vertical-align:middle;position:relative}.paas-content .locale-option .ui.checkbox label:before{top:.2em}.paas-content .locale-option .ui.checkbox label:after{top:.4em}.paas-content .locale-option .ui.checkbox small{font-size:12px;color:#999;vertical-align:middle}.paas-content .attention.ui.message{line-height:1.5}.paas-content .attention.ui.message .header{font-size:16px}.paas-content .attention.ui.message li{font-size:14px}.paas-content .attention.ui.message ol{padding-left:25px}.paas-content .agree.ui.checkbox{margin:15px 0}.paas-content .agree.ui.checkbox label{font-size:14px;color:#666}.paas-content .notice.closed{background:#f6f4d5;color:#96904d}.paas-content .notice.failed{background:#f5d7d7;color:#b1524e}.paas-content .detect-buttons{display:block}.paas-content .detect-labels{margin-top:20px}.paas-content .detect-labels .ui.label.success{background:#9aca3f;color:#FFF}.paas-content .detect-labels .ui.label.failed{color:#f5a623;background:#FFF}.paas-content .paas-box{background:#fff;border-radius:3px;box-shadow:none;margin:20px 0;color:rgba(0,0,0,.6)}.paas-content .paas-box .box-header .ui.header{font-size:16px;line-height:21px}.paas-content .paas-box .box-header .floated.right+.ui.header{display:inline-block;margin-top:0}.paas-content .paas-box .box-body p{font-size:14px;line-height:18.62px}.paas-content .paas-box .ui.button.coding{color:rgba(0,0,0,.6)!important}.paas-content .open-button .faq-box,.paas-content .open-button .ui.local{font-size:12px}.paas-content .current-status .info{padding:15px 0;font-size:14px;color:#333}.paas-content .current-status .info .run{margin-right:20px}.paas-content .current-status .info .run .icon.circle.running{color:#32be77}.paas-content .current-status .info .run b{font-weight:400}.paas-content .current-status .info .domain,.paas-content .current-status .info .run small{font-size:12px;color:#999}.paas-content .current-status .info .domain span{margin-right:15px}.paas-content .current-status .info .domain a{color:#5191bd}.paas-content .current-status .info .ui.button.coding{color:#FFF!important}.paas-content .current-status .stat{background:#fff;border:1px solid #eee;border-radius:3px;margin:15px 0;padding:20px}.paas-content .current-status .stat .stat-item{width:32%;float:left;margin-right:2%;border-right:1px solid #eee;margin-left:-1px}.paas-content .current-status .stat .stat-item:last-child{margin-right:0;border-right:1px solid transparent}.paas-content .current-status .stat .stat-item .chart{display:inline-block;float:left}.paas-content .current-status .stat .stat-item .val{margin-left:90px}.paas-content .current-status .stat .stat-item .val .value{opacity:.8;font-size:14px;color:#323a45;line-height:40px}.paas-content .current-status .stat .stat-item .val .label{opacity:.5;font-size:12px;color:#323a45;line-height:20px}.paas-content .current-status .stat .stat-item .val .label small{margin-right:10px;font-size:12px;color:#5191bd;cursor:pointer}.paas-content .current-status .actions-buttons{padding:20px 0}.paas-content .deploy-box{font-size:14px;color:#333}.paas-content .deploy-box .ui.form.deploy{margin:15px 0}.paas-content .deploy-box .ui.form.deploy input[type=text]{font-size:12px}.paas-content .deploy-box .ui.form.deploy .inline.field label{font-size:12px;color:#999}.paas-content .deploy-box .ui.form.deploy .ui.label.route{font-size:12px;color:rgba(0,0,0,.65)}.paas-content .deploy-box .ui.form.deploy .deployer{font-size:12px;color:#777}.pie.coding.paas{background-color:#dae7f7;border-radius:50%;width:76px;height:76px;overflow:hidden;position:relative;float:left}.pie.coding.paas>div{float:left;width:50%;height:100%;position:relative;overflow:hidden}.pie.coding.paas span{background-color:#9aca3f;display:block;width:100%;height:100%}.pie.coding.paas .left span{border-top-right-radius:0;border-bottom-right-radius:0;transform-origin:100% 50%;-o-transform-origin:100% 50%;-moz-transform-origin:100% 50%;-ms-transform-origin:100% 50%;-webkit-transform-origin:100% 50%}.pie.coding.paas .right span{border-top-left-radius:0;border-bottom-left-radius:0;transform-origin:0 50%;-o-transform-origin:0 50%;-moz-transform-origin:0 50%;-ms-transform-origin:0 50%;-webkit-transform-origin:0 50%}.pie.coding.paas:after,.pie.coding.paas:before{border-radius:50%;display:block;position:absolute;top:50%;left:50%;-webkit-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%);-o-transform:translateX(-50%) translateY(-50%);-moz-transform:translateX(-50%) translateY(-50%);-ms-transform:translateX(-50%) translateY(-50%)}.pie.coding.paas:before{background-color:#fff;content:\"\";width:64px;height:64px;z-index:100}.pie.coding.paas:after{content:attr(data-percent) \"%\";font-family:Arial,sans-serif;font-size:14px;color:#9aca3f;z-index:200;text-align:center}.paas-domain-modal.ui.modal,.paas-memory-modal.ui.modal{max-width:680px;margin-left:-340px}.paas-domain-modal.ui.modal .header,.paas-memory-modal.ui.modal .header{font-size:20px;padding:15px 20px;font-weight:400}.paas-domain-modal.ui.modal>.content,.paas-memory-modal.ui.modal>.content{padding:20px 30px}.paas-domain-modal.ui.modal>.content .ui.checkbox,.paas-memory-modal.ui.modal>.content .ui.checkbox{font-size:14px}.paas-domain-modal.ui.modal>.content .ui.checkbox+small,.paas-memory-modal.ui.modal>.content .ui.checkbox+small{font-size:12px;color:#f5a623;line-height:21px;padding-left:2em}.paas-domain-modal.ui.modal>.content input[type=text],.paas-memory-modal.ui.modal>.content input[type=text]{font-size:14px;min-width:30em}.paas-domain-modal.ui.modal>.content .field.beijing .right,.paas-memory-modal.ui.modal>.content .field.beijing .right{font-size:14px;color:#999;background:#eee;border-radius:3px;padding:6px 8px;width:80px;text-align:center;margin-left:-110px}.paas-domain-modal.ui.modal .ui.message.normal,.paas-memory-modal.ui.modal .ui.message.normal{background:0 0;margin-top:0}.paas-domain-modal.ui.modal .ui.message,.paas-memory-modal.ui.modal .ui.message{font-size:12px}.paas-domain-modal.ui.modal .ui.message strong,.paas-memory-modal.ui.modal .ui.message strong{color:#AF4343}@font-face{font-family:Coding;src:url(/static/f43a2f65f95e657abcdf212491ef50b8.eot);src:url(/static/f43a2f65f95e657abcdf212491ef50b8.eot?#iefix) format(\"embedded-opentype\"),url(/static/5d0570de997f2f1207461e0dbf4c233e.woff) format(\"woff\"),url(/static/ad5ab4f799151646c2b217191693c451.ttf) format(\"truetype\"),url(/static/d3e5447f1f2a77fb3e59d454e5a76178.svg) format(\"svg\");font-weight:400;font-style:normal}body.dimmed{overflow:hidden}.coding.ui.dimmed.dimmable .ui.page.dimmer{display:block!important;position:fixed!important;overflow-y:auto}.coding .ui.button,.coding.ui.button{font-size:14px;padding:0 1.5em;text-transform:none;line-height:30px;height:30px;color:#000!important;background-image:none;-webkit-border-radius:2em;-moz-border-radius:2em;-ms-border-radius:2em;-o-border-radius:2em;border-radius:2em;background-color:#FFF!important}.coding .ui.button:hover,.coding.ui.button:hover{background-color:#FDFDFD!important}.coding .ui.button:active,.coding.ui.button:active{background-color:#E5E5E5!important;color:#FFF}.coding .ui.button.disabled,.coding.ui.button.disabled{border:1px solid #DDD}.coding .ui.button.borderless,.coding.ui.button.borderless{background:none!important;border:0!important;-webkit-box-shadow:none!important;-moz-box-shadow:none!important;box-shadow:none!important;cursor:pointer}.coding .ui.button.blue,.coding.ui.button.blue{color:#FFF!important;background-color:#5191bd!important}.coding .ui.button.blue:hover,.coding.ui.button.blue:hover{background-color:#4b86ad!important}.coding .ui.button.blue:active,.coding.ui.button.blue:active{background-color:#447a9e!important;color:#FFF}.coding .ui.button.blue.disabled,.coding.ui.button.blue.disabled{border:none}.coding .ui.button.gray,.coding.ui.button.gray{color:#FFF!important;background-color:#666!important}.coding .ui.button.gray:hover,.coding.ui.button.gray:hover{background-color:#575757!important}.coding .ui.button.gray:active,.coding.ui.button.gray:active{background-color:#474747!important;color:#FFF}.coding .ui.button.gray.disabled,.coding.ui.button.gray.disabled{border:none}.coding .ui.button.light.gray,.coding.ui.button.light.gray{color:#FFF!important;background-color:#999!important}.coding .ui.button.light.gray:hover,.coding.ui.button.light.gray:hover{background-color:#8a8a8a!important}.coding .ui.button.light.gray:active,.coding.ui.button.light.gray:active{background-color:#7a7a7a!important;color:#FFF}.coding .ui.button.light.gray.disabled,.coding.ui.button.light.gray.disabled{border:none}.coding .ui.button.dark.gray,.coding.ui.button.dark.gray{color:#FFF!important;background-color:#333!important}.coding .ui.button.dark.gray:hover,.coding.ui.button.dark.gray:hover{background-color:#242424!important}.coding .ui.button.dark.gray:active,.coding.ui.button.dark.gray:active{background-color:#141414!important;color:#FFF}.coding .ui.button.dark.gray.disabled,.coding.ui.button.dark.gray.disabled{border:none}.coding .ui.button.red,.coding.ui.button.red{color:#FFF!important;background-color:#df5a5a!important}.coding .ui.button.red:hover,.coding.ui.button.red:hover{background-color:#cf5353!important}.coding .ui.button.red:active,.coding.ui.button.red:active{background-color:#bf4d4d!important;color:#FFF}.coding .ui.button.red.disabled,.coding.ui.button.red.disabled{border:none}.coding .ui.button.green,.coding.ui.button.green{color:#FFF!important;background-color:#32be77!important}.coding .ui.button.green:hover,.coding.ui.button.green:hover{background-color:#2eb06f!important}.coding .ui.button.green:active,.coding.ui.button.green:active{background-color:#2aa165!important;color:#FFF}.coding .ui.button.green.disabled,.coding.ui.button.green.disabled{border:none}.coding .ui.button.yellow,.coding.ui.button.yellow{color:#FFF!important;background-color:#eb935d!important}.coding .ui.button.yellow:hover,.coding.ui.button.yellow:hover{background-color:#cc8152!important}.coding .ui.button.yellow:active,.coding.ui.button.yellow:active{background-color:#bd774b!important;color:#FFF}.coding .ui.button.yellow.disabled,.coding.ui.button.yellow.disabled{border:none}.coding .ui.button.mini,.coding.ui.button.mini{font-size:10px;height:18px;line-height:18px}.coding .ui.button.small,.coding.ui.button.small{font-size:12px;height:24px;line-height:24px}.coding .ui.button.medium,.coding.ui.button.medium{font-size:18px;height:36px;line-height:36px}.coding .ui.button.large,.coding.ui.button.large{font-size:24px;height:48px;line-height:48px}.coding .ui.button.huge,.coding.ui.button.huge{font-size:30px;height:63px;line-height:63px}.coding .ui.action.input>.button,.coding .ui.action.input>.buttons,.coding.ui.action.input>.button,.coding.ui.action.input>.buttons{-webkit-border-radius:.25em;-moz-border-radius:.25em;-ms-border-radius:.25em;-o-border-radius:.25em;border-radius:0 .25em .25em 0}.coding .ui.input.mini>.button{font-size:10px;height:18px;line-height:18px}.coding .ui.input.small>.button{font-size:12px;height:24px;line-height:24px}.coding .ui.input.medium>.button{font-size:18px;height:36px;line-height:36px}.coding .ui.input.large>.button{font-size:24px;height:48px;line-height:48px}.coding .ui.input.huge>.button{font-size:30px;height:63px;line-height:63px}.coding .ui.input.mini>input{padding:.5px 1em}.coding .ui.input.small>input{padding:4px 1em}.coding .ui.input>input{padding:5px 1em;font-family:'微软雅黑','Helvetica Neue',sans-serif,SimHei}.coding .ui.input.medium>input{padding:8px 1em}.coding .ui.input.large>input{padding:12px 1em}.coding .ui.input.huge>input{padding:17px 1em}.coding .ui.input.mini.icon>.icon{padding-top:2px;width:20px}.coding .ui.input.small.icon>.icon{padding-top:6px;width:25px}.coding .ui.input.icon>.icon{padding-top:8px}.coding .ui.input.medium.icon>.icon{padding-top:11px}.coding .ui.input.large.icon>.icon{padding-top:14px}.coding .ui.input.huge.icon>.icon{padding-top:22px}.coding .ui.image,.coding.ui.image{max-width:none;height:32px;width:32px;-webkit-border-radius:32px;-moz-border-radius:32px;-ms-border-radius:32px;-o-border-radius:32px;border-radius:32px}.coding .ui.image.avatar18,.coding.ui.image.avatar18{height:18px;width:18px;display:inline-block!important;-webkit-border-radius:18px;-moz-border-radius:18px;-ms-border-radius:18px;-o-border-radius:18px;border-radius:18px}.coding .ui.image.avatar24,.coding.ui.image.avatar24{height:24px;width:24px;display:inline-block!important;-webkit-border-radius:24px;-moz-border-radius:24px;-ms-border-radius:24px;-o-border-radius:24px;border-radius:24px}.coding .ui.image.avatar32,.coding.ui.image.avatar32{height:32px;width:32px;display:inline-block!important;-webkit-border-radius:32px;-moz-border-radius:32px;-ms-border-radius:32px;-o-border-radius:32px;border-radius:32px}.coding .ui.image.avatar42,.coding.ui.image.avatar42{height:42px;width:42px;display:inline-block!important;-webkit-border-radius:42px;-moz-border-radius:42px;-ms-border-radius:42px;-o-border-radius:42px;border-radius:42px}.coding .ui.image.avatar48,.coding.ui.image.avatar48{height:48px;width:48px;display:inline-block!important;-webkit-border-radius:48px;-moz-border-radius:48px;-ms-border-radius:48px;-o-border-radius:48px;border-radius:48px}.coding .ui.image.avatar56,.coding.ui.image.avatar56{height:56px;width:56px;display:inline-block!important;-webkit-border-radius:56px;-moz-border-radius:56px;-ms-border-radius:56px;-o-border-radius:56px;border-radius:56px}.coding .ui.image.avatar64,.coding.ui.image.avatar64{height:64px;width:64px;display:inline-block!important;-webkit-border-radius:64px;-moz-border-radius:64px;-ms-border-radius:64px;-o-border-radius:64px;border-radius:64px}.coding .ui.image.avatar96,.coding.ui.image.avatar96{height:96px;width:96px;display:inline-block!important;-webkit-border-radius:96px;-moz-border-radius:96px;-ms-border-radius:96px;-o-border-radius:96px;border-radius:96px}.coding .ui.image.avatar128,.coding.ui.image.avatar128{height:128px;width:128px;display:inline-block!important;-webkit-border-radius:128px;-moz-border-radius:128px;-ms-border-radius:128px;-o-border-radius:128px;border-radius:128px}.coding .ui.image.avatar208,.coding.ui.image.avatar208{height:208px;width:208px;display:inline-block!important;-webkit-border-radius:208px;-moz-border-radius:208px;-ms-border-radius:208px;-o-border-radius:208px;border-radius:208px}.coding a{color:#2D59A2}.coding a:active,.coding a:hover{color:#203F71}.coding a.gray{color:#444}.coding a.gray:active,.coding a.gray:hover{color:#000}.coding a.red{color:#df5a5a}.coding a.red:hover{color:#cf5353}.coding a.red:active{color:#bf4d4d}.coding .ui.dividing.header,.coding.ui.dividing.header{font-size:18px;padding-bottom:10px;font-weight:400}.coding .ui.dividing.header>.actions,.coding.ui.dividing.header>.actions{float:right;margin-top:5px}.coding.hidden{display:none}.coding.floated.left{float:left}.coding.floated.right{float:right}.coding.aligned.left{text-align:left}.coding.aligned.right{text-align:right}.coding.aligned.center{text-align:center}.coding.block{display:block}.coding.inline{display:inline}.coding.inline.block{display:inline-block}.coding.border.top{border-top:1px solid #E1E1E1}.coding.border.bottom{border-bottom:1px solid #E1E1E1}.coding.icon{font-family:Coding;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.coding.icon.monkey:before{content:\"\\c600\"}.coding.icon.logo{width:auto;height:auto}.coding.icon.logo:before{content:\"\\c601\"}.coding.icon.logo-v{width:auto;height:auto}.coding.icon.logo-v:before{content:\"\\c602\"}.coding.icon.bubble:before{content:\"\\c603\"}.coding.icon.project:before{content:\"\\c604\"}.coding.icon.read:before{content:\"\\c605\"}.coding.icon.advanced-setting:before{content:\"\\c606\"}.coding.icon.fork:before{content:\"\\c607\"}.coding.icon.pull-request:before{content:\"\\c608\"}.coding.icon.coding-url{width:auto}.coding.icon.coding-url:before{content:\"\\c609\"}.coding.icon.merge-request:before{content:\"\\c610\"}.coding.icon.exclamation:before{content:\"\\c611\"}.coding.icon.exclamation.active{color:#F75288}.coding.icon.exclamation.light:before{content:\"\\c612\"}.coding.icon.team:before{content:\"\\c623\"}.coding.icon.coding-recommended:before{content:\"\\c613\"}.coding.icon.coding-anchor{color:#000;vertical-align:middle;line-height:1;font-size:16px;visibility:hidden;user-select:none;padding-right:6px;padding-left:8px;margin-left:-30px;text-decoration:none}.coding.icon.coding-anchor:hover{text-decoration:none;visibility:visible}.coding.icon.coding-anchor:before{content:'\\c614'}.coding.icon.coding-gold:before{content:\"\\c615\"}.coding.icon.no-newline:before{content:\"\\c616\"}.coding.icon.coding-share:before{content:\"\\c617\"}.coding.icon.coding-organization:before{content:\"\\c618\"}.coding.icon.coding-compare:before{content:\"\\c619\"}.coding.icon.coding-commit:before{content:\"\\c620\"}.coding.icon.coding-mabi:before{content:\"\\c621\"}#help{margin:0 auto;padding:0 20px}#help .title{margin:1rem 0;font-size:20px}#help input[type=text]{font-family:'microsoft yahei','Helvetica Neue',sans-serif,SimHei}#help a{color:#333}#help .ui.divider{border-bottom:none}#help .twelve.wide.column{border-left:1px solid rgba(0,0,0,.1);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;min-height:550px}#help .four.wide.column{padding-right:0}#help .help.menu{padding-top:20px}#help .help.search{padding-right:30px}#help .key{color:red}#help .help.list{margin:20px 0}#help .help.list .title{font-size:20px}#help .help.list .list{margin:0;padding:0;list-style:none}#help .help.list .list li{font-size:16px;line-height:48px;color:#333;cursor:pointer}#help .help.list .list li:hover{color:#000;font-weight:700}#help .help.list .list li:hover a{color:#000}#help .help.list .list li a{color:#333}#help .help.list .list li .double.angle.right.icon{margin-left:24px}#help .help.list .list li.active a,#help .help.list .list li.active i.icon{color:#000;font-weight:700}#help .help.support{color:#333}#help .help.support .icon.mail{margin-right:10px}#help .help.support .support-text{margin-left:8px;font-size:15px}#help .help.support .support-text:hover{text-decoration:underline}#help .help.box{padding-top:20px}#help .help.box .content .text{font-size:13px;color:#333;line-height:28px}#help .help.box .content .text .faq{margin-bottom:5px;margin-top:0;font-size:16px;color:#000;font-weight:700}#help .help.box .content .text .faqs{margin-bottom:20px}#help .help.box .content .text .questions{padding-left:10px}#help .help.box .content .text .questions.active{background:#FFF;padding-bottom:5px}#help .help.box .content .text .question{padding:5px 0;margin:0;font-size:14px}#help .help.box .content .text .question span{cursor:pointer}#help .help.box .content .text .question span.active{font-weight:700;color:#000}#help .help.box .content .text .question i.icon{margin-right:13px}#help .help.box .content .text .answer{margin:0;padding:0 30px}#help .help.box .content .text .intro img{max-width:100%}#help .help.box .footer .back,#help .help.box .footer .next{font-size:14px;color:#333}#help .help.box .footer .next{float:right}#help .help.index section{margin:40px auto 0}#help .help.index section .search{padding:0 5%}#help .help.index section .search .ui.input.large>.button,#help .help.index section .search .ui.input.large>input[type=text]{font-size:20px;font-weight:400}#help .help.index section .commons{padding-left:8%}#help .help.index section .commons .ui.grid .column{margin-top:0}#help .help.index section .commons ul{list-style:none;padding:0;margin:0}#help .help.index section .commons ul li{line-height:35px;font-size:14px;color:#333}#help .help.index section .commons ul li .icon.angle{margin-right:15px}#help .help.index section .commons ul li a:hover{color:#000}#help .help.index section .quick ul{list-style:none;padding:0 0 20px;margin:0}#help .help.index section .quick ul li{display:inline-block;width:25%;padding:20px 0;cursor:pointer;margin-left:3.5%;margin-right:3.5%}#help .help.index section .quick ul li i.icon{font-size:48px;margin:0 auto;display:block}#help .help.index section .quick ul li .title{text-align:center}#help .help.index section .quick ul li .desc{font-size:13px;color:#333;text-align:center;line-height:25px}#help .help.index section .quick ul li:hover{background:#fff}.icon.help.tip{font-size:.8em;margin:0;color:#333}.coding.help-popup{position:absolute;z-index:9999;border:1px solid rgba(0,0,0,.1);font-size:.875rem;font-weight:400;font-style:normal;color:rgba(0,0,0,.7);border-radius:.2em;min-width:20em;top:.5em;margin:.75em 0 0 -2.7em;max-width:30em;background:#000;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;-webkit-box-shadow:1px 1px 1px rgba(0,0,0,.1);-moz-box-shadow:1px 1px 1px rgba(0,0,0,.1);-ms-box-shadow:1px 1px 1px rgba(0,0,0,.1);box-shadow:1px 1px 1px rgba(0,0,0,.1);opacity:.85}.coding.help-popup:before{position:absolute;content:\"\";width:.7rem;height:.7em;top:-.3em;background-image:none;background-color:#000;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);z-index:2;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;-webkit-box-shadow:1px 1px 1px rgba(0,0,0,.1);box-shadow:1px 1px 1px rgba(0,0,0,.1)}.coding.help-popup>div.content{color:#dedede;line-height:22px;font-size:13px}.coding.help-popup>div.content a{color:#3BA3EB}.coding.help-popup>div.content a:last-child{display:inline-block;margin-top:5px}.snow-canvas{display:block;width:100%;height:100%;top:0;left:0;position:fixed;pointer-events:none}.cg-fullscreen{position:fixed;z-index:9999999;width:100%;display:block;left:0;top:0}.add-more-member{display:inline-block;width:31px;height:31px;border-radius:32px;border:1px solid #CCC;max-width:none;position:relative;vertical-align:middle;line-height:31px;text-align:center;font-size:16px}.add-more-member>i.icon{margin:0;padding:0}.member-picker img,.project-picker img{width:32px;height:32px}.member-picker.wide .menu,.project-picker.wide .menu{width:175px}.member-picker.wide .projects-outer .text,.project-picker.wide .projects-outer .text{width:95px!important}.member-picker .menu,.project-picker .menu{width:160px}.member-picker .menu .input-wrapper,.project-picker .menu .input-wrapper{padding:4px;background-color:#EEE}.member-picker .menu .input-wrapper .input input,.project-picker .menu .input-wrapper .input input{font-size:14px;border:1px solid #DDD!important;-webkit-border-radius:3px!important;-moz-border-radius:3px!important;border-radius:3px!important;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.member-picker .ui.dropdown .menu .item,.project-picker .ui.dropdown .menu .item{padding:5px!important;overflow-x:hidden;position:relative}.member-picker .members-outer,.member-picker .projects-outer,.project-picker .members-outer,.project-picker .projects-outer{height:170px;overflow-y:auto}.member-picker .members-outer.quick-select .selected.item,.member-picker .projects-outer.quick-select .selected.item,.project-picker .members-outer.quick-select .selected.item,.project-picker .projects-outer.quick-select .selected.item{background-color:rgba(0,0,0,.03)!important}.member-picker .projects-outer i.icon,.project-picker .projects-outer i.icon{position:absolute;left:5px;top:14px;margin-right:0!important}.member-picker .projects-outer .img,.project-picker .projects-outer .img{width:24px;height:24px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;margin-left:23px}.member-picker .projects-outer .text,.project-picker .projects-outer .text{font-size:14px;padding:4px 0;display:inline-block;vertical-align:top;width:80px!important}.project-picker .ui.dropdown .menu .item{padding:8px 5px!important}.project-task.task{position:relative;padding:5px 10px 10px;margin-left:20px;border-bottom:1px solid #E1E1E1;font-size:14px}.project-task.task:hover .created-time .mr10.hover-show a.toggle{display:inline}.project-task.task:hover .created-time .mr10.hover-show a.marked{display:none}.project-task.task.commenting,.project-task.task.editing,.project-task.task:hover{background:#FFF}.project-task.task.done textarea{text-decoration:line-through}.project-task.task .title{position:relative;padding:3px 0 0 3px;margin:5px 50px 5px 26px;border-radius:3px}.project-task.task.editing .title{background:#EEE}.project-task.task .title textarea{width:100%;height:20px;padding:0;margin:0;line-height:20px;border:none;overflow:hidden;font-size:14px;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;outline:0;resize:none;word-break:break-all;background:#F7F6F2}.project-task.task.commenting .title textarea,.project-task.task:hover .title textarea{background:#FFF}.project-task.task .title textarea:hover,.project-task.task.editing .title textarea{background:#EEE!important}.project-task.task>.remove-task{display:none}.project-task.task:hover>.remove-task{position:absolute;right:-14px;top:20px;cursor:pointer;display:inline;font-size:20px;margin-right:0}.project-task.task>i.check-icon{position:absolute;left:10px;top:14px;cursor:pointer;font-size:20px}.project-task.task>i.updating.loading.icon{position:absolute;left:13px;top:43px;margin-right:0}.project.tasks .member-picker{position:absolute;right:18px;top:14px}.project-task.task .mr10 i.icon{margin-right:0}.new-tag{font-size:12px}.project-task.task .created-time{color:#FFA487;text-decoration:none;font-size:12px;margin-left:30px;line-height:20px}.project-task.task .created-time .tags.no-icon .tag:before{display:none!important}.project-task.task .created-time .tags .tag{display:inline-block;padding:2px 4px;color:#FFF;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;word-break:break-all;line-height:1em;font-size:12px;margin-right:3px}.project-task.task .created-time .tags .tag:last-child{margin-right:0}.project-task.task .created-time .mr10{margin-right:10px;display:inline-block}.project-task.task .created-time .mr10 a{color:#FFA487}.project-task.task .created-time .mr10.hover-show a.toggle{display:none}.project-task.task .created-time .mr10.hover-show a.marked{display:inline}.project-task.task .created-time .refer-id{color:#666}.project-task.task .comment-list{display:none}.project-task.task.commenting .comment-list,.project-task.task.show-description .task-description{display:block;border:1px solid #E1E1E1;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;margin:10px 8px 10px 29px;position:relative}.project-task.task .comment-list:after{top:-.25em;left:1.25em;right:auto;margin:0;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg)}.project-task.task .task-description{display:none}.project-task.task.show-description .task-description{display:block;padding:15px}.task-comment-form,.task-comment-item{position:relative;border-bottom:1px solid #F0F0F0}.task-comment-form{padding:8px 3px}.task-comment-form.loading:after{position:absolute;top:0;left:0;content:'';width:100%;height:100%;background:url(/static/9af25aaeb6ca6d08d213b04841813eb5.gif) 50% 50%/25px no-repeat rgba(255,255,255,.8);visibility:visible}.task-comment-item{padding:8px 10px;min-height:40px}.task-comment-item:last-child{border-bottom:none}.task-comment-item>a>img{position:absolute!important;left:14px;top:8px}.task-comment-item>.comment-detail{margin-left:40px;font-size:14px;line-height:20px}.task-comment-item .comment-content{font-size:12px;color:#333}.task-comment-item .comment-time{color:#999;font-size:12px}.task-comment-item .comment-time .mr10{margin-right:10px}.task-comment-item a.comment-button,.task-comment-item a.remove-button{display:none;margin-right:10px;color:#999}.task-comment-item:hover a.comment-button,.task-comment-item:hover a.remove-button{display:inline}.task-comment-more{text-align:center;padding:12px;border-top:1px solid #F0F0F0}.task-comment-more a{font-size:14px;color:#666}.task-description-wrapper.editing{padding:0!important;border:0!important}.task-description-wrapper i.edit.icon{position:absolute;right:4px;top:4px;font-size:12px!important;color:#999!important;margin:0!important;z-index:2;transform-origin:47% 47%;cursor:pointer}.task-description-wrapper div.loading{padding:10px;box-sizing:border-box;height:45px;line-height:27px}.project-simple-task{position:relative;height:42px;padding:5px 0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border-bottom:1px solid #EEE}.project-simple-task .task-head{height:100%;position:absolute;left:0}.project-simple-task .task-head .status{position:absolute;left:0;top:6px;font-size:18px;color:#333}.project-simple-task .task-head .ui.top.right.pointing.dropdown .menu{left:0}.project-simple-task .task-head .ui.top.right.pointing.dropdown .menu:after{left:9px}.project-simple-task .task-head .textarea-urgency.task-urgency-dropdown{left:60px!important;top:1px!important}.project-simple-task .task-head .textarea-urgency.task-urgency-dropdown .ui.top.left.pointing.dropdown .menu{left:-6px}.project-simple-task .task-head .member-picker{right:auto;left:29px;top:4px}.project-simple-task .task-head .member-picker .ui.avatar.image{width:24px;height:24px;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}.project-simple-task .block-inline{display:inline-block}.project-simple-task .task-deadline{float:left}.project-simple-task .task-body{height:100%;position:relative;margin-left:100px;line-height:30px;font-size:14px}.project-simple-task .task-body .task-content .tags.no-icon .tag:before{display:none!important}.project-simple-task .task-body .task-content .tags .tag{display:inline-block;padding:2px 4px;color:#FFF;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;word-break:break-all;line-height:1em;font-size:12px;margin-right:3px}.project-simple-task .task-body .task-content .tags .tag:last-child{margin-right:0}.project-simple-task .task-body .task-content .date{display:inline-block;padding:2px 4px;color:#FFF;background:#90A9C2;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;cursor:pointer;line-height:1em}.project-simple-task .task-body .task-content .date:before{content:'\\f073';font-family:Icons;margin:0 5px 0 1px}.project-simple-task .task-body .task-content .date.expired{background:#D04D4D}.project-simple-task .task-body .task-content .date.today{background:#F25858}.project-simple-task .task-body .task-content .date.tomorrow{background:#F4AE60}.project-simple-task .task-body .task-content .date.done{background:#999!important}.project-simple-task .task-body .task-content .task-deadline i.calendar.icon{color:#90A9C2}.project-simple-task .task-body .task-content .date{font-size:12px}.project-simple-task .task-body .task-content a.title{margin-left:5px;margin-right:8px}.project-simple-task .task-body .task-content a.title-with-tags{max-width:60%}.project-simple-task .task-body .task-content a.title.dark{color:#000;outline:0}.project-simple-task .task-body .task-content .date~a.title.dark,.project-simple-task .task-body .task-content .tags~a.title.dark{margin-left:5px}.project-simple-task .task-body .task-foot{position:relative;text-align:right;color:#999;margin:0 5px 0 10px}.project-simple-task .task-body .task-foot .project-name{color:#999}.project-simple-task .task-body .task-foot .number{width:50px;display:inline-block}.project-simple-task.done .task-content .title{text-decoration:line-through}.project-simple-task .remove-button{position:absolute;right:-18px;top:0;font-size:16px;display:none}.project-simple-task:hover .remove-button{display:inline;cursor:pointer}#task-creator{margin:0 15%;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-box-orient:vertical;-webkit-flex-direction:row;flex-direction:row;justify-content:flex-start;align-items:stretch;align-content:stretch}#task-creator>div.input{display:flex;height:34px;-webkit-flex:1;-moz-flex:1;-ms-flex:1;-o-flex:1;flex:1}#task-creator .member-picker{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;padding-left:20px}.task-urgency-wrapper{cursor:pointer}.task-urgency-wrapper.project-activity-urgency{position:relative!important;display:inline;margin-right:5px!important}.task-urgency-dropdown,.task-urgency-wrapper{position:absolute!important;left:0!important;top:0!important;text-align:center!important;padding:0!important;border-radius:0!important;margin:0!important;color:#666!important;opacity:1!important}.task-urgency-dropdown .task-urgency-tooltip,.task-urgency-wrapper .task-urgency-tooltip{position:absolute;top:0;left:0;width:100%;height:100%}.input-urgency .task-urgency-wrapper{border-right:1px solid #CCC}.input-urgency .task-urgency-wrapper,.input-urgency.task-urgency-dropdown{width:36px!important;line-height:34px!important;z-index:1}.textarea-urgency .task-urgency-wrapper,.textarea-urgency.task-urgency-dropdown{width:28px!important;height:22px;line-height:28px!important}.task-urgency-dropdown>.menu{z-index:2}.task-urgency-dropdown.ui.dropdown>.menu>.item{padding:.85em .8em .85em .3em!important}.task-urgency-dropdown>.menu .urgency-list-wrapper{margin-right:5px}.task-urgency-dropdown>.menu .urgency-list-wrapper .urgency.icon,.task-urgency-wrapper>.urgency.icon{width:2px;margin:0;font-size:12px}.task-urgency-dropdown>.menu i.urgency.checkmark.icon{margin-right:2px!important;opacity:0}.task-urgency-dropdown>.menu i.urgency.checkmark.checked.icon{opacity:1}.task-urgency-dropdown .item>.task-urgency-wrapper .urgency.icon{margin-right:0!important}.task-urgency-dropdown~input.urgency{padding-left:42px!important}.task-urgency-dropdown~textarea.urgency{text-indent:28px}#task-creator .description{position:absolute;width:100%;padding-right:36px;box-sizing:border-box;height:100px;left:36px;top:34px;z-index:11}#task-creator .description.show~input{border-bottom-right-radius:0}#task-creator .description .light-md-editor{border-top:0;border-top-left-radius:0;border-top-right-radius:0}#task-creator .description .light-md-editor>.editor{padding:5px}#task-creator .description .light-md-editor textarea{height:58px}.project.tasks.just-show .task .title{margin:5px 5px 5px 26px}.project.tasks.just-show .task .title textarea{background:#FFF!important}.project.tasks.just-show{padding:0}.project.tasks.just-show .task .task-owner{margin:0;position:absolute;right:18px;top:14px}.project-task.task:hover .link-tips{display:inline}.project-task.task .link-tips{display:none}.task-detail-header{position:relative;min-height:48px;padding-bottom:4px}.task-detail-header .tag-editor .tag.editable{padding:2px 4px!important}.task-detail-header .tag-editor .tag.editable i.remove.icon{top:2px!important}.task-detail-header .tag-editor .tag.editable:hover{padding:2px 18px 2px 4px!important}.task-detail-header>.member-picker{width:48px;height:48px;position:absolute;left:0;top:5px}.task-detail-header>.member-picker img.ui.avatar{width:48px;height:48px}.task-detail-header>i.updating.loading.icon{position:absolute;left:13px;top:40px;margin-right:0}.task-detail-header>.project-task.task{border:0}.task-detail-header>.project-task.task:hover,.task-detail-header>.project-task.task:hover .title textarea{background:0 0}.task-detail-header>.project-task.task i.check-icon{z-index:2;left:-5px;top:12px;font-size:22px}.task-detail-header>.project-task.task .title{margin:0 0 0 30px}.task-detail-header>.project-task.task .title textarea{font-size:18px;color:#333;line-height:25px}.task-detail-header>.project-task.task .title .textarea-urgency.task-urgency-dropdown{height:24px;left:26px!important;top:3px!important}.task-detail-header>.project-task.task .title .task-urgency-wrapper>.urgency.icon{font-size:15px;width:3px}.task-detail-header>.project-task.task .created-time{position:relative;margin:3px 0 0 5px;padding-right:70px}.task-detail-header>.project-task.task .created-time i.loading.icon{position:relative}.task-detail-header>.ui.dropdown{position:absolute;bottom:6px;right:6px;font-size:13px;padding-bottom:5px}.task-detail-description{margin:0 5px 20px;position:relative}.task-detail-description>.icon{width:36px;height:36px;position:absolute;top:5px;left:3px;border:1px solid #EEE;background:#EEE;-webkit-border-radius:36px;-moz-border-radius:36px;border-radius:36px;line-height:36px;text-align:center}.task-detail-description>.icon i.icon{margin-right:0;-webkit-transform-origin:6px 7px;-moz-transform-origin:6px 7px;-ms-transform-origin:6px 7px;-o-transform-origin:6px 7px;transform-origin:6px 7px}.task-detail-description>.detail{margin-left:60px;background:#FFF;position:relative}.task-detail-description>.detail .task-description{border:1px solid #EEE;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.task-detail-description>.detail .task-description.has-description{padding:20px}.task-detail-description>.detail .task-description.description-loading{padding:0!important}.task-detail-description>.detail .task-description>.light-md-editor{border-color:#EEE}.task-detail-description>.detail:before{margin-top:-11px;bottom:auto;right:auto;top:29px;left:-4px;position:absolute;content:\"\";width:.6em;height:.6em;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);z-index:2;-webkit-transition:background .1s linear;-moz-transition:background .1s linear;transition:background .1s linear;background-color:#FFF;border-left:1px solid #EEE;border-bottom:1px solid #EEE}.task-activity-filter{text-align:right;padding-right:10px;margin-bottom:10px}.task-detail-activity{margin:0 5px 20px;position:relative}.task-detail-activity:before{width:1px;position:absolute;top:0;left:74px;height:100%;border-left:3px solid #EEE;content:'';z-index:-1}.task-detail-activity:after{content:'';height:20px;width:100%;display:block;border-bottom:3px solid #EEE}.task-detail-activity .task-activity{position:relative;margin-bottom:20px;border-bottom:none}.task-detail-activity .task-activity:last-child{margin-bottom:0}.task-detail-activity .task-activity.action{line-height:32px;color:#999;font-size:12px}.task-detail-activity .task-activity.action>.icon{width:30px;height:30px;position:absolute;left:59px;top:-2px;-webkit-border-radius:17px;-moz-border-radius:17px;border-radius:19px;background:#EEE;text-align:center;line-height:32px;color:#666;border:2px solid #F7F6F2}.task-detail-activity .task-activity.action>.icon.finish{background:#DF5A5A;color:#FFF}.task-detail-activity .task-activity.action>.icon.update_priority{background:#F75288;color:#FFF}.task-detail-activity .task-activity.action>.icon.restore{background:#A1CF64;color:#FFF}.task-detail-activity .task-activity.action>.icon.update_deadline{background:#eb935d;color:#FFF}.task-detail-activity .task-activity.action>.icon.commit_refer{background:#5191bd;color:#FFF}.task-detail-activity .task-activity.action>.icon i.icon{margin:0;font-size:14px;opacity:1}.task-detail-activity .task-activity.action>.detail{padding-left:100px}.task-detail-activity .task-activity.action>.detail .commits{margin:0;padding:0}.task-detail-activity .task-activity.action>.detail .commits .commit{line-height:23px}.task-detail-activity .task-activity.action>.detail .commits .all-message{line-height:1.2em;padding-left:20px;margin:0}.task-detail-activity .task-activity.comment>.avatar{position:absolute;left:3px;top:8px}.task-detail-activity .task-activity.comment>.avatar img{width:36px;height:36px}.task-detail-activity .task-activity.comment>.detail{position:relative;background:#FFF;padding:15px;margin-left:60px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;border:1px solid #EEE}.task-detail-activity .task-activity.comment>.detail .content{font-size:14px;color:#333;margin-bottom:10px}.task-detail-activity .task-activity.comment>.detail .created-time{color:#999;font-size:12px}.task-detail-activity .task-activity.comment>.detail .created-time .mr10{margin-right:10px}.task-detail-activity .task-activity.comment>.detail .created-time .mr10 a{color:#999}.task-detail-activity .task-activity.comment>.detail .created-time .mr10 a:hover{color:#666}.task-detail-activity .task-activity.comment>.detail .created-time i.icon{margin-right:0}.task-detail-activity .task-activity.comment>.detail:before{margin-top:-11px;bottom:auto;right:auto;top:30px;left:-6px;position:absolute;content:\"\";width:.6em;height:.6em;background-image:none;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);z-index:2;-webkit-transition:background .1s linear;-moz-transition:background .1s linear;transition:background .1s linear;background-color:#FFF;border-left:1px solid #EEE;border-bottom:1px solid #EEE}.task-detail-activity .task-activity.comment>.detail .created-time .comment,.task-detail-activity .task-activity.comment>.detail .created-time .remove{display:none}.task-detail-activity .task-activity.comment>.detail:hover .created-time .comment,.task-detail-activity .task-activity.comment>.detail:hover .created-time .remove{display:inline}.task-comment-creator{margin:0 5px 300px}.light-task-detail{background-color:#FFF!important}.light-task-detail .project-task.task .title textarea{background-color:#FFF}.light-task-detail .task-detail-activity .task-activity.action>.icon{border:2px solid #FFF}.light-task-detail .task-detail-activity:before{left:75px;border-left:2px solid #EEE;z-index:0}.light-task-detail .task-detail-activity:after{border-bottom:2px solid #EEE}.light-task-detail .task-detail-description>.detail .task-description.has-description{padding:12px}.task-detail-tags header{margin-bottom:10px;font-size:14px}.task-detail-tags ul{padding:0;margin:0}.task-detail-tags ul li{list-style:none;margin-bottom:5px}.task-detail-tags.tag-editor .tag.editable{padding:5px 10px}.task-detail-tags.tag-editor .tag.editable i.remove.icon{top:5px}.task-detail-tags.tag-editor .tag.editable:hover{padding:5px 20px 5px 10px}.task-detail-tags.tag-editor .tag.editable span:before{content:'\\f02b';font-family:Icons;margin-right:5px}.task-detail-watchlist{padding-top:10px}.task-detail-watchlist [cg-member-selector]{position:relative;padding-top:5px}.task-detail-watchlist [cg-member-selector] ul{position:relative}.task-deadline.with-creator{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;width:auto;height:20px;text-align:right;margin:0 20px 0 0;padding-top:8px}.task-deadline.with-creator .centered{display:inline-block;vertical-align:middle}.task-deadline.with-creator .centered i.icon{float:right;color:#333}.task-deadline.with-creator .centered.date{padding:3px;float:right}.task-deadline i.icon{cursor:pointer}.task-deadline .date{display:inline-block;padding:2px 4px;color:#FFF;background:#90A9C2;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;cursor:pointer;line-height:1em}.task-deadline .date:before{content:'\\f073';font-family:Icons;margin:0 5px 0 1px}.task-deadline .date.expired{background:#D04D4D}.task-deadline .date.today{background:#F25858}.task-deadline .date.tomorrow{background:#F4AE60}.task-deadline .date.done{background:#999!important}.search-filter-tag-color{width:16px;height:16px;border-radius:4px;display:inline-block;vertical-align:middle;position:relative;left:-5px}#task-list{position:relative}#task-list.container{margin-left:230px!important}#task-list .search-div1:after{content:\".\";display:block;height:0;clear:both;visibility:hidden;margin-bottom:10px}#task-list .search-box{border-bottom:1px solid rgba(128,128,128,.5);display:table;float:left}#task-list .search-box>i{opacity:.5}#task-list .filters{font-size:14px;float:right;margin:5px 0 10px 5px}#task-list .filters .task-urgency-wrapper{position:relative!important;display:inline-block;width:1.5em}#task-list .filters i.icon.checkmark{display:inline-block}#task-list .filters .task-urgency-wrapper i.icon{margin:0;padding:0}#task-list .filters div.input{display:block;padding:.3em;background-color:#F2F4F6;margin-bottom:0;border-bottom:1px solid #D8DDE4}#task-list .filters div.input input{min-width:205px}#task-list .filters div.input .search.icon{padding-top:11px}#task-list .filters .ui.dropdown .menu .members-outer{max-height:320px;overflow-y:auto}#task-list .filters .ui.dropdown .menu .members-outer.wide{width:240px}#task-list .filters .ui.dropdown .menu .members-outer .item{position:relative;padding:.5em 2em .5em 1em!important;border:none}#task-list .filters .ui.dropdown .menu .members-outer .item:before{content:'';display:inline-block;position:absolute;top:0;left:0;width:100%;height:0;border-top:1px solid #D8DDE4}#task-list .filters .ui.dropdown .menu .members-outer .item:first-child:before{border:none}#task-list .filters .ui.dropdown .menu .members-outer .item.no-avatar .sort{line-height:32px}#task-list .filters .ui.dropdown .menu .members-outer .item .sort{position:absolute;top:0;right:0;width:26px;height:100%;background:#F2F4F6;border-left:1px solid #D8DDE4;color:#91969D;font-size:14px;text-align:center;line-height:45px}#task-list .filters .ui.dropdown .menu .members-outer .item .sort.show-sort-key{border-top:1px solid #D8DDE4}#task-list .filters .ui.dropdown .menu .members-outer .item .sort i{margin:8px 0;padding:0;vertical-align:top}#task-list #query{float:right;font-size:14px}#task-list #query i.icon{display:inline-block;margin-left:5px;cursor:pointer}#search-input{border:none;background-color:rgba(255,255,255,0);height:20px;font-size:14px;width:200px;outline:0}#task_projects{position:relative}#task_projects .project{position:relative;display:block;height:auto;width:100%;cursor:pointer;margin:0;padding:3px 8px!important}#task_projects .project div.logo{position:absolute;left:20px;top:50%;width:32px;height:32px;margin-top:-16px}#task_projects .project img.logo{width:32px;height:32px;margin:0}#task_projects .project .name{padding:0 50px 0 60px;line-height:40px;height:40px;font-size:14px}#task_projects .project .rate{position:absolute;right:15px}.filter-select{float:right;font-size:14px;width:120px;margin-top:10px;height:24px}.owner-task-title{float:left;margin-right:5px}.select-title{margin-left:10px;width:80px}.menu-option{left:-13px!important}.task-title{padding:0;margin:0;font-size:14px}.title-desc{font-size:14px;line-height:20px}.hide{display:none}.light-md-editor{border:1px solid #ddd;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.light-md-editor .editor{background:#FFF;padding:10px 15px;position:relative;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;overflow:auto;z-index:1}.light-md-editor .editor>.dimmer i.loading{font-size:30px;position:absolute;top:50%;left:50%;margin:-15px 0 0 -15px}.light-md-editor .editor.previewed{max-height:none!important}.light-md-editor .editor.previewed>textarea{display:none}.light-md-editor .editor>textarea{background:#FFF;border:none;font-size:14px;padding:0;margin:0;color:rgba(0,0,0,.7);outline:0;width:100%;resize:none;display:block;min-height:50px;line-height:1.6}.light-md-editor .editor>.preview{height:0;width:0}.light-md-editor .editor>.preview.active{width:100%;height:100%;min-height:50px;background:#FFF;z-index:2}.light-md-editor .editor>.preview .empty{display:none;position:absolute;width:200px;text-align:center;left:50%;margin-left:-100px;top:33%}.light-md-editor .playground{-webkit-transition:all .4s ease-in-out;-moz-transition:all .4s ease-in-out;-ms-transition:all .4s ease-in-out;-o-transition:all .4s ease-in-out;transition:all .4s ease-in-out;width:100%;height:0;position:relative;word-break:break-all}.light-md-editor .toolbar{height:30px;background:#F6F6F6;border-top:1px solid #EEE}.light-md-editor .toolbar>i{cursor:pointer;line-height:30px;margin-left:5px}.light-md-editor .toolbar ul{display:inline-block;height:30px;width:auto;padding:0;margin:0;line-height:30px;float:right}.light-md-editor .toolbar ul li{list-style:none;float:left}.light-md-editor .toolbar ul li i.icon{cursor:pointer}@-moz-keyframes common-rotate-loading{0%{transform:rotate(0deg);-ms-transform:rotate(0deg);-webkit-transform:rotate(0deg);-o-transform:rotate(0deg);-moz-transform:rotate(0deg)}100%{transform:rotate(360deg);-ms-transform:rotate(360deg);-webkit-transform:rotate(360deg);-o-transform:rotate(360deg);-moz-transform:rotate(360deg)}}@-o-keyframes common-rotate-loading{0%{transform:rotate(0deg);-ms-transform:rotate(0deg);-webkit-transform:rotate(0deg);-o-transform:rotate(0deg);-moz-transform:rotate(0deg)}100%{transform:rotate(360deg);-ms-transform:rotate(360deg);-webkit-transform:rotate(360deg);-o-transform:rotate(360deg);-moz-transform:rotate(360deg)}}@-webkit-keyframes common-rotate-loading{0%{transform:rotate(0deg);-ms-transform:rotate(0deg);-webkit-transform:rotate(0deg);-o-transform:rotate(0deg);-moz-transform:rotate(0deg)}100%{transform:rotate(360deg);-ms-transform:rotate(360deg);-webkit-transform:rotate(360deg);-o-transform:rotate(360deg);-moz-transform:rotate(360deg)}}@keyframes common-rotate-loading-d{100%{transform:rotate(-360deg);-ms-transform:rotate(-360deg);-webkit-transform:rotate(-360deg);-o-transform:rotate(-360deg);-moz-transform:rotate(-360deg)}0%{transform:rotate(0deg);-ms-transform:rotate(0deg);-webkit-transform:rotate(0deg);-o-transform:rotate(0deg);-moz-transform:rotate(0deg)}}@-moz-keyframes common-rotate-loading-d{100%{transform:rotate(-360deg);-ms-transform:rotate(-360deg);-webkit-transform:rotate(-360deg);-o-transform:rotate(-360deg);-moz-transform:rotate(-360deg)}0%{transform:rotate(0deg);-ms-transform:rotate(0deg);-webkit-transform:rotate(0deg);-o-transform:rotate(0deg);-moz-transform:rotate(0deg)}}@-o-keyframes common-rotate-loading-d{100%{transform:rotate(-360deg);-ms-transform:rotate(-360deg);-webkit-transform:rotate(-360deg);-o-transform:rotate(-360deg);-moz-transform:rotate(-360deg)}0%{transform:rotate(0deg);-ms-transform:rotate(0deg);-webkit-transform:rotate(0deg);-o-transform:rotate(0deg);-moz-transform:rotate(0deg)}}@-webkit-keyframes common-rotate-loading-d{100%{transform:rotate(-360deg);-ms-transform:rotate(-360deg);-webkit-transform:rotate(-360deg);-o-transform:rotate(-360deg);-moz-transform:rotate(-360deg)}0%{transform:rotate(0deg);-ms-transform:rotate(0deg);-webkit-transform:rotate(0deg);-o-transform:rotate(0deg);-moz-transform:rotate(0deg)}}@-moz-keyframes common-loading-text-opacity{0%{opacity:1}25%{opacity:.5}50%{opacity:0}75%{opacity:.5}100%{opacity:1}}@-o-keyframes common-loading-text-opacity{0%{opacity:1}25%{opacity:.5}50%{opacity:0}75%{opacity:.5}100%{opacity:1}}@-webkit-keyframes common-loading-text-opacity{0%{opacity:1}25%{opacity:.5}50%{opacity:0}75%{opacity:.5}100%{opacity:1}}@keyframes common-loading-text-opacity{0%{opacity:1}25%{opacity:.5}50%{opacity:0}75%{opacity:.5}100%{opacity:1}}.common-loading,.common-loading-container{height:30px;position:relative;width:30px;border-radius:100%}.common-loading-container{display:table;height:100%;margin:0 auto}.common-loading-container>div{display:table-cell;vertical-align:middle;position:relative}.common-loading{border:1px solid transparent;border-color:transparent #000;-moz-animation:common-rotate-loading 1.5s linear 0s infinite normal;-moz-transform-origin:50% 50%;-o-animation:common-rotate-loading 1.5s linear 0s infinite normal;-o-transform-origin:50% 50%;-webkit-animation:common-rotate-loading 1.5s linear 0s infinite normal;-webkit-transform-origin:50% 50%;animation:common-rotate-loading 1.5s linear 0s infinite normal;transform-origin:50% 50%}.common-loading-container .common-loading,.common-loading-container:hover .common-loading{-webkit-transition:all .5s ease-in-out;-moz-transition:all .5s ease-in-out;-ms-transition:all .5s ease-in-out;-o-transition:all .5s ease-in-out;transition:all .5s ease-in-out}.common-loading-text{-moz-animation:common-loading-text-opacity 2s linear 0s infinite normal;-o-animation:common-loading-text-opacity 2s linear 0s infinite normal;-webkit-animation:common-loading-text-opacity 2s linear 0s infinite normal;animation:common-loading-text-opacity 2s linear 0s infinite normal;color:#000;font-family:\"Helvetica Neue\",Helvetica,Arial,sans-serif;font-size:10px;font-weight:700;opacity:0;position:absolute;text-align:center;text-transform:uppercase;top:0;width:30px}.common-loading-text img{vertical-align:middle;-moz-animation:common-rotate-loading-d 1.5s linear 0s infinite normal;-moz-transform-origin:50% 50%;-o-animation:common-rotate-loading-d 1.5s linear 0s infinite normal;-o-transform-origin:50% 50%;-webkit-animation:common-rotate-loading-d 1.5s linear 0s infinite normal;-webkit-transform-origin:50% 50%;animation:common-rotate-loading-d 1.5s linear 0s infinite normal;transform-origin:50% 50%}#search-body{width:980px;margin:30px auto;background-color:#fff;padding:30px}#search-body .search-input{width:100%}#search-body .search-input a{width:10%}#search-body .search-input .project-label{display:table-cell;width:10%;white-space:nowrap;padding:0 5px 0 0;margin:0;height:100%;vertical-align:middle;border:1px solid rgba(0,0,0,.15);border-right:0;border-top-left-radius:.3125em;border-bottom-left-radius:.3125em;color:#999}#search-body .search-input .project-label img{position:absolute;top:6px;left:6px}#search-body .search-input .project-label span{padding-left:46px}#search-body .search-input .project-label~input{border-top-left-radius:0;border-bottom-left-radius:0}#search-body .search-tab{padding-top:20px}#search-body .search-tab .item-num{background-color:#e9e9e9;padding:0 10px;border-radius:10px;font-weight:200}#search-body .search-tab .project-search .project,#search-body .search-tab .project-search .tweet{display:none}#search-body .search-content{padding:30px 10px}#search-body .search-content>.result{margin-bottom:15px}#search-body .search-content .attachment .uploader{position:relative;line-height:45px;padding-left:45px;width:150px}#search-body .search-content .attachment .uploader img{position:absolute;left:0;top:17px}#search-body .search-content .attachment .filename{width:500px;display:inline-block;line-height:45px;cursor:pointer}#search-body .search-content .attachment .filename em{color:#D04D4D;font-style:normal}#search-body .search-content .tag{background-color:#e9e9e9;padding:3px 10px;border-radius:5px;font-weight:200;margin-right:5px}#search-body .search-item{padding:15px 0;border-bottom:1px solid #DCDDDE;position:relative}#search-body .thumb{float:left}#search-body .thumb img{width:48px;border-radius:3px}#search-body .thumb-avatar{float:left}#search-body .thumb-avatar img{width:48px;border-radius:48px}#search-body .info{padding-left:70px;padding-right:120px}#search-body .info>div{margin-bottom:7px}#search-body .info>div:last-child{margin-bottom:0}#search-body .info em{color:#D04D4D;font-style:normal}#search-body .info .name{line-height:25px;height:25px;color:#333;font-size:14px}#search-body .info .name a{font-size:16px}#search-body .info .description{line-height:1.4em;font-size:.9em;color:#333;min-height:20px}#search-body .info .when{font-size:14px}#search-body .info .when span{margin-right:4px;color:#999}#search-body .info .when span .light{color:#999}#search-body .info .when .avatar img{width:20px;border-radius:10px;vertical-align:-4px}#search-body .info .when2{line-height:24px;font-size:14px}#search-body .info .when2 .light{color:#999}#search-body .info .pull-request .pr-action{margin-bottom:0}#search-body .info .merge-status{color:#fff;font-size:12px!important;border-radius:3px;padding:5px}#search-body .info .merge-status.accepted{background-color:#D19D6B}#search-body .info .merge-status.canmerge{background-color:#78B98E}#search-body .info .merge-status.cannotmerge{background-color:#A78CD3}#search-body .info .merge-status.refused{background-color:#D97577}#search-body .info .merge-status.cancel{background-color:#BBB}#search-body .info .merge-status.granted{background-color:#32BE77}#search-body .stat{position:absolute;top:0;right:0;margin-top:20px;color:#333}#search-body .stat span{margin-right:10px}#search-body .down.center.more{margin-top:20px;padding:10px;font-size:14px}#search-body .center.empty.list{margin-top:20px}#search-body .search-controllers{position:relative;padding:0}#search-body .search-controllers>.result{margin-bottom:15px;float:left;word-break:break-word}#search-body .search-controllers>.result>a.commit-id{color:#445055}#search-body .search-controllers>.result>a.commit-id:hover{text-decoration:underline}#search-body .search-controllers .comming-soon{background-color:#efefef;padding:20px;border-radius:3px;font-size:14px}#search-body .search-controllers>.filters{margin:0 0 15px 20px;float:right}#search-body .search-controllers>.filters .task-urgency-wrapper{position:relative!important;display:inline-block;width:1.5em}#search-body .search-controllers>.filters .task-urgency-wrapper i.icon{margin:0}#search-body .search-controllers>.filters div.input{display:block;padding:.3em;background-color:rgba(0,0,0,.05)}#search-body .search-controllers>.filters div.input i.search.icon{padding-top:11px}#search-body .search-controllers>.filters .ui.dropdown .menu input[type=text]{min-width:205px}#search-body .search-controllers>.filters .ui.dropdown .menu .members-outer .item{padding:.5em 2em .5em 1em!important}#search-body .search-controllers>.clear{clear:both}#search-body .search-controllers .members-outer{max-height:200px;height:auto!important;height:200px;overflow-y:auto}#search-body .code .title{display:flex;display:-webkit-flex;font-size:12px}#search-body .code .title .path{font-weight:700;line-height:1.2;max-width:720px}#search-body .code .title .path coding-highlight{font-style:normal;font-weight:700;background-color:#f8e71c;border-radius:3px}#search-body .code .content coding-highlight{padding:2px;margin:0 -2px;font-style:normal;font-weight:700;color:#333;background-color:#f8e71c;border-radius:3px}#search-body .code .content .result{border:1px solid #ccc;border-radius:3px;margin-top:10px}#search-body .code .content .result table{width:100%;tab-size:8;border-spacing:0;border-collapse:collapse;box-sizing:border-box}#search-body .code .content .result table tr{margin:0;padding:0;vertical-align:top}#search-body .code .content .result table td{padding:0}#search-body .code .content .result table .divider .num{height:18px;padding:0 10px;line-height:18px;background-color:#f0f5fa}#search-body .code .content .result table .divider .num:hover{cursor:pointer;color:#fff;background-color:#3b60b1}#search-body .code .content .result table .divider .line{padding-top:0;padding-bottom:0;cursor:default;background-color:#f8fafd}#search-body .code .content .result table .num{width:1%;padding:0;font-family:Consolas,\"Liberation Mono\",Menlo,Courier,monospace!important;font-size:12px;line-height:18px;color:rgba(0,0,0,.3);text-align:right;white-space:nowrap;vertical-align:top;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:solid #eee;border-width:0 1px 0 0}#search-body .code .content .result table .num a{padding:0 10px;color:inherit}#search-body .code .content .result table .num a:hover{color:#4078c0;text-decoration:underline}#search-body .code .content .result table .num a:before{content:attr(line-data)}#search-body .code .content .result table .line{white-space:pre-wrap;overflow:visible;font-family:Consolas,Menlo,\"Liberation Mono\",Courier,monospace!important;font-size:12px;color:#333;word-wrap:normal;position:relative;padding-right:10px;padding-left:10px;vertical-align:top;word-break:break-word}@media only screen and (max-width:1600px){#about_us,#footer .footer,#help,#join_us,#projects_index{width:980px;margin:0 auto}}@media only screen and (max-width:2560px) and (min-width:1601px){#about_us,#footer .footer,#help,#join_us,#projects_index{width:1200px;margin:0 auto}}@keyframes qrAni{0%{background:#ccc}100%{background:#FFF}}#footer{border-top:1px solid rgba(0,0,0,.1);padding:20px 150px;background:#FFF}#footer .footer{margin:0 auto}#footer .footer .us{font-size:13px;color:#999;display:inline-block}#footer .footer .us ul{list-style:none;margin:0;padding:0}#footer .footer .us ul li{display:inline-block;margin-right:15px}#footer .footer .us ul li a{color:#999;text-decoration:none}#footer .footer .share{float:right;vertical-align:top;display:inline-block}#footer .footer .share .share-img{opacity:.5;cursor:pointer}#footer .footer .share .share-img:hover{opacity:1}#footer .footer .share .weixin{position:relative;display:inline-block}#footer .footer .share .weixin:hover .dropdown{opacity:1;z-index:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);-ms-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}#footer .footer .share .weixin .dropdown{position:absolute;top:-226px;left:-92px;z-index:-1;border:1px solid #DDD;background:#FFF;border-radius:3px;opacity:0;-webkit-transition:all ease-in-out .3s;-moz-transition:all ease-in-out .3s;-ms-transition:all ease-in-out .3s;-o-transition:all ease-in-out .3s;transition:all ease-in-out .3s;-webkit-transform:translateY(-20px);-moz-transform:translateY(-20px);-ms-transform:translateY(-20px);-o-transform:translateY(-20px);transform:translateY(-20px)}#footer .footer .share .weixin .dropdown:after{content:'';bottom:-5px;right:102px;top:auto;left:auto;position:absolute;width:.6em;height:.6em;-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);-ms-transform:rotate(-45deg);transform:rotate(-45deg);z-index:2;-webkit-transition:background .1s linear;-moz-transition:background .1s linear;transition:background .1s linear;background-color:#FFF;border-left:1px solid #DDD;border-bottom:1px solid #DDD}#projects_index{background:#fff;margin-top:20px;border-radius:3px}#projects_index>.list{padding:40px;min-height:300px}#projects_index>.list ul{padding:0;margin:0;list-style:none}#projects_index>.list ul li{display:inline-block;width:44.5%;padding-right:5%;margin-bottom:30px}#projects_index>.list .project{position:relative}#projects_index>.list .project .thumb{position:absolute;left:0;top:0}#projects_index>.list .project .thumb img{width:48px;border-radius:3px}#projects_index>.list .project .info{padding-left:60px}#projects_index>.list .project .info div{margin-bottom:3px}#projects_index>.list .project .info .description,#projects_index>.list .project .info .name,#projects_index>.list .project .info .stat,#projects_index>.list .project .info .when{line-height:25px;color:#333;font-size:14px}#projects_index>.list .project .info .name a{font-size:18px;font-weight:700}#projects_index>.list .project .info .description{text-overflow:ellipsis;vertical-align:top;white-space:nowrap;overflow:hidden}#projects_index>.list .project .info .when{font-size:12px}#projects_index>.list .project .info .when span{margin-right:4px}#projects_index>.list .project .info .when span.avatar img{width:20px;border-radius:10px;vertical-align:-4px}#projects_index>.list .project .info .when span.time,#projects_index>.list .project .info .when span.username{color:#777}#projects_index>.list .project .info .stat span{font-size:15px;display:inline-block;width:70px}#projects_index .more{cursor:pointer;height:auto}#about_us{background:#FFF;margin-top:30px;margin-bottom:30px}#about_us .content{padding:50px}#about_us .content section{margin:0 30px 30px}#about_us .content section .title{font-size:24px;font-weight:500;color:#000;border-bottom:1px solid #EEE;padding-bottom:10px;margin-left:30px}#about_us .content section.intro p{font-size:16px;line-height:35px;color:#333;margin-top:0;margin-bottom:30px;text-indent:30px}#about_us .content section.contact .link,#about_us .content section.contact .qrcode{display:inline-block}#about_us .content section.contact .link{padding:10px 0}#about_us .content section.contact .link p{font-size:16px;color:#000;margin:8px 0;padding:5px 0;text-indent:30px}#about_us .content section.contact .link p a{text-decoration:none;color:#000}#about_us .content section.contact .qrcode{float:right;padding:30px 100px;text-align:center}#about_us .content section.contact .qrcode img{width:140px;padding:5px}#about_us .content section.contact .qrcode p{font-size:13px;margin-top:0}#about_us .content section.icons div.items{padding-left:30px;position:relative}#about_us .content section.icons div.items .thumb-box img.thumb{height:100px;float:left;margin:10px;cursor:pointer}#about_us .content section.icons div.items .thumb-box .ui.popup.box.show.logo{max-width:inherit;right:inherit;left:250px;top:-100px;padding:1em}#about_us .content section.icons div.items .thumb-box .ui.popup.box.show.logo img{height:300px}#about_us .content section.icons div.items p.dlink{line-height:120px;text-align:right;border-bottom:1px solid #EEE;padding-bottom:1em}#about_us .content section.icons div.items p.dlink span{display:inline-block;margin-left:20px}#about_us .content section.icons div.items p.dlink span a{color:#333;font-size:13px}#join_us{width:980px}#join_us .hide{display:none}#join_us .content .title{text-align:center;font-size:44px;font-family:\"Avenir Next\",\"Myriad Pro\",\"Helvetica Neue\",Helvetica,\"Segoe UI\",Arial,sans-serif;line-height:60px;font-weight:bolder;margin-top:66px;margin-bottom:10px;color:#333;text-shadow:0 2px 2px rgba(0,0,0,.1)}#join_us .content section{padding:5px;display:table;width:100%}#join_us .content section .describtion>p{font-size:13px;line-height:15px;color:#999;text-align:center}#join_us .content section .coding-emoji{display:table-cell;width:119px;height:83px;float:right;z-index:1;margin-right:50px;margin-top:-20px;margin-bottom:-21px}#join_us .content section .detail{background:#FFF;display:table;box-shadow:0 1px 3px rgba(0,0,0,.2);border-radius:4px}#join_us .content section .introduction{display:table-row;padding:15px}#join_us .content section .introduction .coding-office{margin-left:50px;margin-top:80px;border-style:groove;border-width:thin;border-color:rgba(255,255,255,.2);padding:8px;display:table-cell;width:360px;height:290px;float:left}#join_us .content section .introduction>p{margin:66.5px 50px 36.5px 34px;display:table-cell;max-width:468px;font-size:13px;line-height:40px;color:#676767;float:left}#join_us .content section .introduction>p .author{color:#333}#join_us .content section .invite{display:table-row}#join_us .content section .invite .invite-title{margin:0 50px;border-top-width:1px;border-top-style:groove;border-color:rgba(255,255,255,.2);padding-top:44.5px;padding-bottom:19.5px;font-size:24px;line-height:33px;color:#323232}#join_us .content section .invite .last-line{margin-bottom:80px}#join_us .content section .invite>p{font-size:16px;line-height:20px;text-align:center;color:#999}#join_us .content section .pink{color:#F75288}#join_us .content section .hiring-title{font-size:32px;line-height:45px;font-weight:bolder;color:#333;margin-left:422px;margin-top:70px;margin-bottom:40px;text-shadow:0 2px 2px rgba(0,0,0,.1)}#join_us .content section #job-locations{margin-left:285px;display:table;margin-bottom:30px;text-align:center}#join_us .content section #job-locations .hiring-locations-label{width:133px;height:44px;display:table-cell;vertical-align:middle;border-top:groove;border-right:groove;border-bottom:groove;border-width:1px;border-color:rgba(247,82,136,.3)}#join_us .content section #job-locations .hiring-locations-label:hover{background:#FFF}#join_us .content section #job-locations .hiring-locations-label.selected{background:#f75288}#join_us .content section #job-locations .hiring-locations-label.selected>label{color:#FFF}#join_us .content section #job-locations .hiring-locations-label.selected:hover{background:#f75288}#join_us .content section #job-locations .hiring-locations-label>label{margin-left:-5px;font-size:15.7px;line-height:22px;text-align:center;color:rgba(247,82,136,.5)}#join_us .content section #job-locations .hiring-locations-label:first-child{border-top-left-radius:4px;border-bottom-left-radius:4px;border:groove;border-width:1px;border-color:rgba(247,82,136,.3)}#join_us .content section #job-locations .hiring-locations-label:last-child{border-top-right-radius:4px;border-bottom-right-radius:4px;border-top:groove;border-right:groove;border-bottom:groove;border-width:1px;border-color:rgba(247,82,136,.3)}#join_us .content section .job-area{display:table;box-shadow:0 1px 3px rgba(0,0,0,.2);border-radius:4px;background:#F5F5F5;margin-bottom:60px}#join_us .content section #job-kinds{float:left;width:200px}#join_us .content section #job-kinds .job-kinds-label{border-top:groove;border-width:thin;border-color:rgba(255,255,255,.2);float:left;padding:19px 90px 19px 30px;font-size:16px;line-height:22px;color:#666}#join_us .content section #job-kinds .job-kinds-label:hover{background:#F9F9F9}#join_us .content section #job-kinds .job-kinds-label.selected{background:#FFF;box-shadow:none}#join_us .content section #job-kinds .job-kinds-label.selected:hover{background:#FFF}#join_us .content section #job-kinds .job-kinds-label:first-child{border-top:none;border-top-left-radius:4px}#join_us .content section #job-kinds .job-kinds-label:last-child{border-bottom:groove;border-width:thin;border-color:rgba(255,255,255,.2)}#join_us .content section #job-content{border-top-right-radius:4px;border-bottom-right-radius:4px;z-index:-1;background:#FFF;padding:44px 60px 20px;margin-left:200px;width:660px}#join_us .content section #job-content .job-title{padding:20px 0;border-width:1px;border-top-style:groove;border-bottom-style:groove;border-color:rgba(255,255,255,.2)}#join_us .content section #job-content .job-title-name{font-size:22px;line-height:30px;color:#333}#join_us .content section #job-content .job-title-salary{padding-left:30px;font-size:13px;line-height:18px;color:#333}#join_us .content section #job-content .job-describtion{font-size:14px;line-height:24px;color:#666;padding-top:4px}#join_us .content section #job-content .hr-email{font-size:14px;line-height:20px;color:rgba(52,52,52,.8);margin-bottom:30px}.bubble-item{margin:30px 0;position:relative}.bubble-item>a.avatar{position:relative;float:left}.bubble-item>.bubble-content-wrapper{margin-left:56px}.bubble-content-wrapper{min-height:42px;background:#FFF;position:relative;box-shadow:1px 1px 0 0 #EEE;border-radius:3px;border:1px solid #EEE}.bubble-content-wrapper .bubble-detail{padding:10px}.bubble-content-wrapper .bubble-detail>.content{margin-bottom:10px;padding:5px}.bubble-content-wrapper .bubble-detail>.content img.bubble-markdown-image{display:block}.bubble-content-wrapper .bubble-detail>.location{margin-bottom:10px;font-size:12px;color:#666;max-width:100%;background:#f3f3f3;padding:2px 4px 2px 2px;display:inline-block;border-radius:3px}.bubble-content-wrapper .bubble-detail>.location .icon{margin:0}.bubble-content-wrapper .bubble-detail .user_rewarded{box-shadow:0 0 3px 1px #F5A623;margin-right:2px}.bubble-content-wrapper .bubble-detail .icon_rewarded{color:#F6B439}.bubble-content-wrapper .bubble-detail>.info{font-size:12px;color:#666;position:relative;line-height:14px}.bubble-content-wrapper .bubble-detail>.info .mabi{display:inline}.bubble-content-wrapper .bubble-detail>.info .tip_rewarded{position:absolute;top:-3px;margin-left:.6em;font-size:12px;padding:1px 3px;border:1px solid #E8E8E8;background-color:#fff}.bubble-content-wrapper .bubble-detail>.info .tip_rewarded:before{border:solid #E8E8E8;border-width:0 0 1px 1px;height:.5em;left:-1px;top:9px;background-color:#fff}.bubble-content-wrapper .bubble-detail>.info .mr10{margin-right:10px}.bubble-content-wrapper .bubble-detail>.info .mr10 i.icon{margin:0}.bubble-content-wrapper .bubble-detail>.info span.remove{display:none}.bubble-content-wrapper .bubble-detail>.info span.device{float:right;color:#999}.bubble-content-wrapper .bubble-detail>.info span.device i.icon{-webkit-transform:scale(1.5);-moz-transform:scale(1.5);-ms-transform:scale(1.5);-o-transform:scale(1.5);transform:scale(1.5);margin-right:0}.bubble-content-wrapper .bubble-detail>.likes{padding:5px 0 0}.bubble-content-wrapper .bubble-detail>.likes>a{display:inline-block;margin:0 3px 3px 0}.bubble-content-wrapper .bubble-detail:hover>.info span.remove{display:inline}.bubble-content-wrapper .bubble-comments{position:relative;padding:10px 20px;background-color:#FDFCFA;border-top:1px solid #EEE}.bubble-content-wrapper .bubble-comments.none{display:none}.bubble-content-wrapper .bubble-comments>.comment-item.last,.bubble-content-wrapper .bubble-comments>.comment-item:last-child{border-bottom:0}.bubble-content-wrapper .bubble-comments>.comment-item{position:relative;padding:5px 0;border-bottom:1px solid #EEE}.bubble-content-wrapper .bubble-comments>.comment-item>a.avatar{float:left;margin-top:4px;display:inline-block}.bubble-content-wrapper .bubble-comments>.comment-item>a.avatar img{margin:0;padding:0}.bubble-content-wrapper .bubble-comments>.comment-item>.detail{font-size:12px;line-height:22px;word-break:break-all;word-wrap:break-word;margin-left:40px;min-height:32px}.bubble-content-wrapper .bubble-comments>.comment-item>.detail .info{font-size:10px;color:#666}.bubble-content-wrapper .bubble-comments>.comment-item>.detail .info .mr10{margin-right:10px}.bubble-content-wrapper .bubble-comments>.comment-item>.detail .info .mr10 i.icon{margin:0}.bubble-content-wrapper .bubble-comments>.comment-item>.detail .info .action{display:none}.bubble-content-wrapper .bubble-comments>.comment-item:hover>.detail .info .action{display:inline}.bubble-content-wrapper .bubble-comments>.show-more-comment{font-size:12px;padding:10px;text-align:center}.bubble-content-wrapper .bubble-comments>.show-more-comment a{font-size:12px}.bubble-content-wrapper form.bubble-form{border-top:1px solid #EEE}.bubble-content-wrapper form.bubble-form div.ui.large.icon.input{position:relative!important}.bubble-content-wrapper form.bubble-form i{position:absolute!important;top:auto!important;bottom:0!important;width:2.6em!important;height:2.6em!important}.bubble-content-wrapper form.bubble-form textarea{padding:1em;overflow:hidden;border:0!important;font-size:13px!important;line-height:18px;border-radius:0!important;min-height:0!important;height:3em;resize:none;transition:background-color .3s ease-out,box-shadow .2s ease,border-color .2s ease}.bubble-content-wrapper form.bubble-form textarea~i.right.icon{cursor:pointer}.bubble-content-wrapper form.bubble-form textarea:focus{color:rgba(0,0,0,.85);border-color:rgba(0,0,0,.2);border-bottom-left-radius:0;border-top-left-radius:0;-webkit-appearance:none;-webkit-box-shadow:.3em 0 0 0 rgba(0,0,0,.2) inset;box-shadow:.3em 0 0 0 rgba(0,0,0,.2) inset}.bubble-content-wrapper.arrow:before{margin-top:-11px;bottom:auto;right:auto;top:28px;left:-6px;position:absolute;content:\"\";width:.6em;height:.6em;background-image:none;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);z-index:2;-webkit-transition:background .1s linear;-moz-transition:background .1s linear;transition:background .1s linear;background-color:#FFF;border-left:1px solid #EEE;border-bottom:1px solid #EEE}.account-background.random-background.ui.dimmable{position:static}.account-background.random-background>.menu input.search{border-color:transparent;background:rgba(255,255,255,.5)}.account-background.random-background>.menu input.search:-moz-placeholder{color:#807677}.account-background.random-background>.menu input.search:focus{background:#fff}.account-background.random-background .cg.flash{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.account-background.random-background:before{content:'';width:100%;height:100%;position:absolute;left:0;top:0;background:rgba(0,0,0,.5)}.account-background.random-background .account-box{width:380px;padding:50px;-webkit-border-radius:10px;-moz-border-radius:10px;border-radius:10px;background:rgba(255,255,255,.6);position:absolute;left:50%;margin-left:-240px;top:50%}.account-background.random-background .account-box h2{text-align:center;font-size:25px;font-weight:400;padding:0;margin:0 0 20px;height:40px;width:100%;display:inline-block;line-height:40px}.account-background.random-background .account-box .ui.form .field{height:46px;margin:0 0 20px;position:relative}.account-background.random-background .account-box .ui.form .field.words{height:auto}.account-background.random-background .account-box .ui.form .field input{background:rgba(255,255,255,.5);border:none}.account-background.random-background .account-box .ui.form .field .captcha.input,.account-background.random-background .account-box .ui.form .field .captcha.input input[name=captcha]{width:250px}.account-background.random-background .account-box img.captcha{height:45px;width:auto;cursor:pointer;position:absolute;right:0;top:0;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.account-background.random-background .account-box .activate{margin-top:20px;text-align:center}.account-background.random-background .account-box .activate .oauth-binding-button{background:none!important;border:1px solid #FFF;height:38px;font-weight:400;color:#FFF!important}.account-background.random-background .account-box .activate .oauth-binding-button:hover{background:#FFF!important;color:#000!important}.account-background.random-background .account-box .arrow_box{position:relative;background:#d50000}.account-background.random-background .account-box .arrow_box:after{right:100%;top:50%;border:solid transparent;content:\" \";height:0;width:0;position:absolute;pointer-events:none;border-color:rgba(213,0,0,0);border-right-color:#D95C5C;border-width:5px;margin-top:-5px}.account-background.random-background .account-box .ui.red.horizontal.label{background:#D95C5C;left:387px;top:-33px;min-width:126px}.account-background.random-background .account-box ul.third-party-login{list-style:none;display:inline-block;margin:0;padding:0;position:absolute;right:10px;bottom:10px}.account-background.random-background .account-box ul.third-party-login li{float:left}.account-background.random-background .account-box ul.third-party-login li a{display:inline-block;height:32px;width:32px}.account-background.random-background .account-box ul.third-party-login li a.github{background:url(/static/c5e7d0a61689238571befe5131ef91e2.png) 0 0/32px 32px no-repeat;opacity:.7}.account-background.random-background .account-box ul.third-party-login li a.github:hover{background:url(/static/ba6b317bc9af471bfd93cd2f7cca7713.png) 0 0/32px 32px no-repeat}.account-background.random-background .account-box #phone-icon{position:absolute;bottom:13px;right:50px;width:32px;height:32px;border-radius:32px;cursor:pointer;background-color:#606060}.account-background.random-background .account-box #phone-icon:hover{background-color:#76A2C1!important}.account-background.random-background .account-box #phone-icon.green{background-color:#32be77}.account-background.random-background .account-box #phone-icon i{padding-right:7px;padding-top:1px;font-size:32px;color:#fff}.account-background.random-background .account-box .phone-input input{padding-right:120px!important}.account-background.random-background .account-box .phone-input .button{position:absolute;top:11px;right:12px;border-radius:12px;height:24px;line-height:24px;width:98px;font-size:12px}.account-background.random-background .account-box.login{height:260px;margin-top:-150px}.account-background.random-background .account-box.login .oauth-info{display:none}.account-background.random-background .account-box.login.with-captcha{height:320px;margin-top:-180px}.account-background.random-background .account-box.login.with-captcha.oauth{height:410px;margin-top:-225px}.account-background.random-background .account-box.login.oauth{height:350px;margin-top:-195px}.account-background.random-background .account-box.login.oauth .oauth-info{height:120px;text-align:center;display:block}.account-background.random-background .account-box.login.oauth .oauth-info .oauth-email{height:30px;max-width:300px;overflow:hidden;-webkit-border-radius:30px;-moz-border-radius:30px;border-radius:30px;background:#404040;position:relative;line-height:30px;margin:auto;padding:0 16px 0 50px;display:inline-block;color:#FFF}.account-background.random-background .account-box.login.oauth .oauth-info .oauth-email.github:before{font-family:Icons;content:'\\f09b';position:absolute;left:12px;top:0;font-size:30px}.account-background.random-background .account-box.login.oauth .oauth-info .oauth-link{width:100%;background:rgba(255,255,255,.5);height:1px;margin:34px 0;position:absolute;left:0}.account-background.random-background .account-box.login.oauth .oauth-info .oauth-link span{position:absolute;display:inline-block;width:38px;height:38px;border-radius:38px;background:#404040;color:#FFF;text-align:center;line-height:38px;top:-19px;left:50%;margin-left:-19px}.account-background.random-background .account-box.login.oauth .oauth-info .oauth-link span i.icon{margin:0}.account-background.random-background .account-box.login a.forget-password{float:right}.account-background.random-background .account-box.register{height:278px;margin-top:-159px}.account-background.random-background .account-box.register p.invite-words,.account-background.random-background .account-box.register p.oauth-words{text-align:center;font-size:16px;color:#000;line-height:28px;margin:0 0 20px}.account-background.random-background .account-box.register.phone{height:398px;margin-top:-219px}.account-background.random-background .account-box.register.with-captcha{height:338px;margin-top:-189px}.account-background.random-background .account-box.register.with-captcha.phone{height:458px;margin-top:-269px}.account-background.random-background .account-box.register.oauth{height:318px;margin-top:-179px}.account-background.random-background .account-box.register.oauth.with-captcha{height:378px;margin-top:-209px}.account-background.random-background .account-box.register .field{position:relative}.account-background.random-background .account-box.register .field.global-key input{padding-left:180px!important}.account-background.random-background .account-box.reactivate{height:140px;margin-top:-90px}.account-background.random-background .account-box.reactivate.email{height:200px;margin-top:-120px}.account-background.random-background .account-box.reactivate.phone{height:400px;margin-top:-220px}.account-background.random-background .account-box.confirm,.account-background.random-background .account-box.confirm.phone{height:280px;margin-top:-160px}.account-background.random-background .account-box.confirm.email{height:140px;margin-top:-110px}.account-background.random-background .account-box.reset{height:140px;margin-top:-90px}.account-background.random-background .account-box.reset.email{height:200px;margin-top:-120px}.account-background.random-background .account-box.reset.phone{height:400px;margin-top:-220px}.account-background.random-background .account-about{position:absolute;left:30px;bottom:25px}.account-background.random-background .account-about a,.account-background.random-background .account-about span{font-size:12px;color:rgba(255,255,255,.5);margin-right:15px}.account-flex-container{display:flex;align-items:center;position:absolute;top:0;height:100%;width:100%}.account-container{position:relative;z-index:1001;width:400px;margin-left:auto;margin-right:auto;padding:30px 40px 40px;border-radius:10px;background-color:#fff}.account-container h2{margin:0 0 25px;font-size:25px;font-weight:400;text-align:center;color:#323a45}.account-container .account-input{position:relative;height:68px}.account-container .account-input input{height:48px;width:370px;padding-left:15px;padding-right:15px;margin-bottom:15px;font-size:16px;border:1px solid rgba(50,58,69,.2);border-radius:5px}.account-container .account-input input[disabled=true],.account-container .account-input input[disabled]{opacity:.5!important}.account-container .account-input input:focus{outline:0;border-color:#499dd6}.account-container .account-input span.error{display:none}.account-container .account-input.twofa{height:auto!important}.account-container .account-input .twofa-outer{border:1px solid rgba(50,58,69,.2);border-radius:5px;position:relative;width:396px;height:58px;margin:auto auto 16px}.account-container .account-input .twofa-outer .twofa-cursor,.account-container .account-input .twofa-outer .twofa-inner{float:left;display:inline-block;box-sizing:border-box}.account-container .account-input .twofa-outer .twofa-inner{width:66px;outline:0;height:28px;line-height:28px;font-size:28px;text-align:center;margin:15px 0;border-left:1px solid rgba(50,58,69,.2)}.account-container .account-input .twofa-outer .twofa-cursor{width:67px;position:absolute;left:0;top:0;height:58px;border-radius:5px;border:1px solid rgba(73,157,214,.8);box-shadow:0 0 8px rgba(73,157,214,.5),inset 0 1px 2px rgba(51,58,68,.5);transition:left .1s linear}.account-container .account-input .twofa-outer .twofa-inner:first-child{border-left:none}.account-container .account-input .twofa-outer .twofa-input{position:absolute;top:0;left:0;opacity:0;width:98%;height:58px;margin:0;padding:0 0 0 32px;box-sizing:border-box;cursor:default;font-family:Menlo;font-size:16px;-webkit-tap-highlight-color:transparent;letter-spacing:56.5px}.account-container .account-input.dirty input.error{border-color:#d95c5c}.account-container .account-input.dirty span.error{display:inline;position:relative;left:410px;top:-51px;padding:7px 10px;background-color:#d95c5c;color:#fff;border-radius:4px;font-size:14px;min-width:126px;white-space:nowrap}.account-container .account-input.dirty span.error:before{right:100%;top:50%;border:solid transparent;content:\" \";height:0;width:0;position:absolute;pointer-events:none;border-color:rgba(213,0,0,0);border-right-color:#d95c5c;border-width:5px;margin-top:-5px}.account-container .account-input.captcha input{width:275px;padding-right:110px}.account-container .account-input.captcha img{position:absolute;right:4px;top:6px;height:40px;width:95px;cursor:pointer}.account-container .account-input.phone-code input{margin-right:140px;width:260px}.account-container .account-input.phone-code a{position:absolute;top:0;right:0;display:inline-block;height:30px;width:100px;line-height:30px;border-radius:15px;color:#000;background-color:#fff;border:1px solid rgba(50,58,69,.2);font-size:14px;margin-top:11px;white-space:nowrap;text-align:center;vertical-align:middle;cursor:pointer}.account-container .account-input.phone-code a:hover{opacity:.8}.account-container .account-input.phone-code a:active{opacity:.5}.account-container .account-input.phone-code a[disabled=true],.account-container .account-input.phone-code a[disabled]{opacity:.5!important;cursor:not-allowed!important}.account-container .account-input.phone-input{display:flex;display:-webkit-flex}.account-container .account-input.phone-input.dirty .error{border-color:#d95c5c!important}.account-container .account-input.phone-input .countries-selector{width:50px;height:50px;border:1px solid rgba(50,58,69,.2);border-bottom-left-radius:5px;border-top-left-radius:5px;border-right:none;display:flex;display:-webkit-flex}.account-container .account-input.phone-input .countries-selector:hover{cursor:pointer}.account-container .account-input.phone-input .countries-selector i{margin-right:0;line-height:50px;height:50px}.account-container .account-input.phone-input .countries-selector i.flag{margin-left:8px}.account-container .account-input.phone-input .countries-selector .select2-container{width:0!important;height:50px!important;overflow:hidden}.account-container .account-input.phone-input .current-country-code{height:50px;line-height:50px;border-top:1px solid rgba(50,58,69,.2);border-bottom:1px solid rgba(50,58,69,.2);width:50px;padding-left:8px}.account-container .account-input.phone-input input{border-left:none;border-top-left-radius:0;border-bottom-left-radius:0;width:270px}.account-container .account-input.phone-input input:focus .countries-selector{border:#ff0!important}.account-container .account-input.phone-input span.error{position:absolute;top:10px;min-width:auto;width:85px}.account-container button{width:400px;height:48px;border:none;background-color:#323a45;color:#fff;font-size:24px;border-radius:24px;cursor:pointer;transition:opacity .2s ease}.account-container button:focus{outline:0}.account-container button:hover{opacity:.9}.account-container button:active{opacity:.8}.account-container button[disabled=true],.account-container button[disabled]{opacity:.5!important;cursor:not-allowed!important}.account-container button.loading{color:transparent}.account-container button.loading:before{content:\"\\f110\";font-family:Icons;color:#fff;font-size:25px;position:absolute;margin-top:2px;margin-left:183px;display:flex;-webkit-animation:icon-loading 2s linear infinite;-moz-animation:icon-loading 2s linear infinite;-ms-animation:icon-loading 2s linear infinite;animation:icon-loading 2s linear infinite}.account-container .ui.checkbox{margin-left:1px;margin-bottom:10px}.account-container .ui.checkbox label{padding-left:25px}.account-container a{color:rgba(0,0,0,.6);transition:color .2s ease}.account-container a:hover{color:rgba(0,0,0,.8)}.account-container div.bottom-link{margin-top:15px;text-align:center}.countries-selector-select2{width:260px!important}@media only screen and (max-width:1600px){#search_tags{width:980px;margin:0 auto}}@media only screen and (max-width:2560px) and (min-width:1601px){#search_tags{width:1200px;margin:0 auto}}#search_tags{background:#fff;margin-top:35px;padding-top:40px;margin-bottom:100px}#search_tags .my_tag,#search_tags .selected_tag,#search_tags .tag,#search_tags .tag_model{font-size:16px;display:inline-block;padding:5px 10px 6px;color:#666;opacity:.8;border-radius:4px;margin:0 8px 8px 0;line-height:18px}#search_tags .tag{background:#f0f0f0}#search_tags .tag a{color:#666}#search_tags .my_tag{background:#d8d8d8}#search_tags .my_tag a{color:#666}#search_tags .selected_tag{background:rgba(50,190,119,.8)}#search_tags .selected_tag a{color:#fff}#search_tags .content{margin-left:40px;margin-right:40px;padding-bottom:30px}#search_tags .content .tag_content .header{font-size:18px;color:#333}#search_tags .content .tag_content .header .divider{margin-bottom:10px}#search_tags .content .right_tip{float:right;font-size:12px;margin-right:12px}#search_tags .content .result_content{margin-top:40px;margin-bottom:30px}#search_tags .content .result_content .header{display:inline-block}#search_tags .content .result_content .divider{margin-bottom:0}#search_tags .content .result_content .result_user{min-height:60px;border-bottom:1px solid;border-color:#f2f2f2;padding-bottom:20px;padding-top:20px}#search_tags .content .result_content .result_user .avatar{float:left}#search_tags .content .result_content .result_user .my_tag,#search_tags .content .result_content .result_user .selected_tag,#search_tags .content .result_content .result_user .tag{font-size:14px;padding:3px 10px 4px;line-height:16px;margin:0 4px 4px 0}#search_tags .content .result_content .result_user .info{font-size:14px;float:left;margin-left:14px;margin-top:6px}#search_tags .content .result_content .result_user .info .join-in-at{color:#999;font-size:12px}#search_tags .content .result_content .result_user .user_tag{margin-top:38px;margin-left:80px;max-width:750px}#search_tags .content .result_content .target_tag{font-size:18px;color:#32bc77}#project-create-form{max-width:800px;min-width:700px;-webkit-box-shadow:none;box-shadow:none;padding:1.5em;margin-bottom:30px}#project-create-form .senior-title{position:relative}#project-create-form .senior-title>i{position:absolute;top:4px;right:0}#project-create-form .cursor-pointer:hover{cursor:pointer}#project-create-form .description{color:#666}#project-create-form h1{font-size:20px}#project-create-form h2{font-size:18px}#project-create-form .field>p{font-size:14px;line-height:24px;margin-bottom:30px}#project-create-form .senior-form .fields:not(:last-child),#project-create-form .senior-form>.field:not(:last-child){margin-bottom:30px}#project-create-form ul.versions{padding:0;margin:25px 0}#project-create-form ul.versions li{float:left;margin-right:50px;list-style:none}#project-create-form ul.versions li input{display:none}#project-create-form ul.versions li input:checked~label{border-color:#32be77}#project-create-form ul.versions li label{display:inline-block;position:relative;width:180px;height:180px;text-align:center;background:#FFF;border-radius:3px;border:2px solid #DDD;padding:20px 10px 10px;box-sizing:border-box;cursor:pointer}#project-create-form ul.versions li input:checked~label a.corner.label{display:inline-block}#project-create-form ul.versions li label a.corner.label{display:none;font-size:20px;border-color:#32be77!important}#project-create-form ul.versions li label>i.icon{font-size:50px;background-color:#536B77;opacity:1;margin-right:0}#project-create-form ul.versions li label h2{margin:10px 0;font-weight:400;font-style:normal}#project-create-form .payment-period{margin-top:20px}#project-create-form .payment-period input~label{padding-left:1.6em}#project-create-form .payment-period input~label em{color:#32be77;font-style:normal;font-weight:500;font-size:20px}#project-create-form .payment-period input~label strong{background-color:#E88964;color:#fff;border-radius:3px;padding:1px 6px;font-size:14px}#project-create-form .voucher-form p>i.triangle.icon.right,#project-create-form .voucher-form p>span{font-size:16px}#project-create-form .money{margin-bottom:30px}#project-create-form .money span:last-child{font-size:2em;color:rgba(255,0,0,.6)}#project-create-form .select-member-form>.content{padding:0;border:1px solid #DDD;border-radius:4px;margin:30px 0 10px}#project-create-form .select-member-form .wrapper{position:relative}#project-create-form .select-member-form .search-region{width:220px;padding:20px 20px 0;border-right:1px solid #CCC}#project-create-form .select-member-form .select-region{padding:20px 0 0 20px;height:300px}#project-create-form .select-member-form table{border-collapse:collapse}#project-create-form .select-member-form tr.selected-region{border-top:1px solid #ccc}#project-create-form .select-member-form td.selected-region{padding:15px 10px 0 20px}#project-create-form .select-member-form td.selected-region .label i.remove.icon{cursor:pointer}#project-create-form .select-member-form .member-folder{margin:15px 0 0;height:220px;overflow-y:auto;overflow-x:hidden}#project-create-form .select-member-form .vertical.menu>.item{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;font-size:14px;height:36px!important;line-height:24px;display:block;padding:5px;margin-bottom:0}#project-create-form .select-member-form .vertical.menu>.item.active{background-color:rgba(0,0,0,.03)}#project-create-form .select-member-form .vertical.menu>.item i.icon{float:none;margin:0 .45em 0 .25em}#project-create-form .select-member-form .selected-region ul{list-style:none;margin:0;padding:0}#project-create-form .select-member-form .selected-region ul li{float:left;font-size:12px;margin-bottom:10px;text-transform:none}#project-create-form .select-member-form .selected-region ul li:first-child{font-size:14px;line-height:16px;margin-bottom:10px}#project-create-form .select-member-form .select-nothing{text-align:center}#project-create-form .select-member-form .select-nothing span.words{font-size:16px;color:#999}#project-create-form .select-member-form .select-nothing .invite-button{margin-top:20px}#project-create-form .select-member-form .select-users{height:300px;position:relative;overflow-y:auto;overflow-x:hidden}#project-create-form .select-member-form .select-users ul{list-style:none;margin:0;padding:0;position:relative}#project-create-form .select-member-form .select-users ul li{float:left;display:inline-block;width:140px;height:40px;border:1px dashed #CCC;padding:5px;position:relative;line-height:40px;font-size:14px;background:#FFF;margin:0 10px 10px 0;cursor:pointer}#project-create-form .select-member-form .select-users ul li.is-member{cursor:not-allowed}#project-create-form .select-member-form .select-users ul li img{position:absolute;left:10px;top:8px}#project-create-form .select-member-form .select-users ul li span{padding-left:50px}#project-create-form .select-member-form .select-users ul li .label{line-height:normal;font-size:12px}#project-create-form .select-member-form .actions .max-member{line-height:30px;color:#666;font-size:14px}#project-create-form .select-member-form .actions .max-member .max-member-warning{color:#A00;opacity:.8;display:block}#project-create-form .project-name{font-family:'微软雅黑','Helvetica Neue',sans-serif,SimHei;width:34.3rem;height:2.8rem;line-height:2.8rem;display:block;float:left}.team-select{float:left}.team-select .selected{font-family:'微软雅黑','Helvetica Neue',sans-serif,SimHei;width:11rem;height:2.7rem;line-height:2.7rem;border:1px solid rgba(0,0,0,.15);border-radius:.3125em;display:block;float:left;margin-right:1rem;padding-left:.5rem;cursor:pointer}.team-select .selected .selected-input{white-space:nowrap;line-height:2.8rem}.team-select .selected .dropdown-icon{position:absolute;line-height:2.8rem}.team-select .selected-avatar{display:block;float:left;margin-top:.35rem!important;margin-right:.35rem!important}.team-select .selected-text{display:block;width:7rem;overflow:hidden;text-overflow:ellipsis;float:left;margin-left:.2rem}.team-select ul{list-style:none;padding:0;margin:0}.team-select .options{border:1px solid rgba(0,0,0,.15);border-radius:.3125em!important;position:absolute!important;top:3.2rem!important;min-height:2.8rem;width:11.5rem;background:#fff}.team-select .options .option{line-height:2.8rem;display:block;height:2.8rem;width:100%;cursor:pointer}.team-select .options .option-text{display:block;width:8rem;overflow:hidden;text-overflow:ellipsis;float:left;margin-left:.2rem}.team-select .options .avatar-margin{margin-left:.5rem}.team-select .options .team-sign{color:#666;font-size:.5rem;padding-left:1rem;line-height:1rem;height:1rem}.team-select .options .option:hover{background:rgba(0,0,0,.03)}.team-select .options .option-selected{background:rgba(0,0,0,.1)}ul.project-group{padding:0;margin:0}ul.project-group,ul.project-group ul{list-style:none}ul.project-group .message-tip{right:2px}ul.project-group .item.loading{font-size:12px;height:144px;line-height:114px;text-align:center}ul.project-group .create-project{float:left;width:122px;height:122px;border:1px dashed #CCC;text-align:center;line-height:114px;display:inline-block;margin:0 0 20px;padding:0}ul.project-group .create-project .add.icon{margin:0;font-size:48px}ul.project-group a{outline:0!important}ul.project-group>li{width:122px;margin:0 15px 15px 0;padding:10px;display:inline-block;cursor:pointer;vertical-align:top;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;position:relative;z-index:1;outline:0!important}ul.project-group>li.focus,ul.project-group>li:focus,ul.project-group>li:hover{background:rgba(0,0,0,.03)}ul.project-group>li .corner.label,ul.project-group>li .triangle.icon{display:none}ul.project-group>li.group.open{z-index:2}ul.project-group>li.group.open:hover{background:#FFF}ul.project-group>li.group.open .items-wrapper{position:absolute;left:0;top:0;background:#FFF;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}ul.project-group>li.group.open .items-wrapper.left{left:0}ul.project-group>li.group.open .items-wrapper.right{left:auto;right:0}ul.project-group>li.group.open .items-wrapper.top{top:0}ul.project-group>li.group.open .items-wrapper.bottom{top:auto;bottom:0}ul.project-group>li.group.open .items-wrapper .message-tip{right:10px;top:-9px}ul.project-group>li.group.open .items-wrapper ul.items{width:345px;height:345px;padding:15px 0 0 15px;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}ul.project-group>li.group.open .items-wrapper ul.items li{text-align:center;width:100px;height:100px;margin:0 15px 15px 0;position:relative;cursor:pointer}ul.project-group>li.group.open .items-wrapper ul.items li img{width:64px;height:64px}ul.project-group>li.group.open .items-wrapper ul.items li .title{font-size:12px;color:#666;margin:5px 10px 0;-webkit-transform:scale(0.9);-moz-transform:scale(0.9);-ms-transform:scale(0.9);-o-transform:scale(0.9);transform:scale(0.9)}ul.project-group>li.group.open .items-wrapper ul.items li .corner.label{font-size:10px;right:18px;top:0}ul.project-group>li.group.open .items-wrapper>.title{margin:0 10px 15px;font-size:16px}ul.project-group>li.group.open .items-wrapper>.title span{display:inline-block;height:18px;width:100%;line-height:18px}ul.project-group>li.group.open .items-wrapper>.title .group-name-input{padding:5px;background:#FFF}ul.project-group>li.group.open .items-wrapper>.title .group-name-input.active,ul.project-group>li.group.open .items-wrapper>.title .group-name-input:hover{background:#EEE;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}ul.project-group>li.group.open .items-wrapper>.title input{border:none;font-size:16px;padding:0;margin:0;text-align:center;outline:0;line-height:18px;height:18px;width:100%;background:0 0}ul.project-group>li.group.open .items-wrapper>.title input~.loading.icon{position:absolute;bottom:1px;left:50%;margin:0 0 0 -10px}ul.project-group>li.group.open .placeholder{display:inline-block}ul.project-group>li.group.open .placeholder .items{width:114px;height:117px;padding:8px 0 0 8px}ul.project-group>li.group .placeholder{display:none}ul.project-group>li .title{text-align:center;font-size:12px;color:#666;margin:15px 10px 0;word-break:break-all;line-height:15px}ul.project-group>li .title.icon span.name:before{font-family:Icons;content:'\\f07b';margin-right:.3em}ul.project-group>li ul.items li>.title.icon span.name:before,ul.project-group>li.item .title.icon span.name:before{font-family:Icons;content:'\\f023'}ul.project-group>li ul.items li>.title.icon.public span.name:before,ul.project-group>li.item .title.icon.public span.name:before{display:none}ul.project-group>li ul.items{width:114px;height:114px;display:inline-block;overflow:hidden;padding:8px 0 0 8px;margin:0;background:#FFF;border:1px solid transparent;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}ul.project-group>li ul.items li{float:left;width:30px;height:30px;margin:0 8px 8px 0;display:inline-block;position:relative}ul.project-group>li ul.items li .triangle.icon{position:absolute;right:-8px;top:-6px;margin:0;padding:0;opacity:1;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg)}ul.project-group>li ul.items li img{-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}ul.project-group>li.item .corner.label{right:8px;top:10px}ul.project-group>li img.logo{width:122px;height:122px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}ul.project-group>li .logo-wrapper{width:122px;height:122px;position:relative;display:inline-block;border:1px solid transparent}ul.project-group>li .group-logo-wrapper{display:inline-block;position:relative;width:64px;height:64px}ul.project-group>li .pin-project-cover{position:absolute;width:100%;height:100%;left:0;top:0;border-radius:3px;background:-moz-linear-gradient(top,rgba(0,0,0,.3) 0,transparent 50%,transparent 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,rgba(0,0,0,.3)),color-stop(50%,transparent),color-stop(100%,transparent));background:-webkit-linear-gradient(top,rgba(0,0,0,.3) 0,transparent 50%,transparent 100%);background:-o-linear-gradient(top,rgba(0,0,0,.3) 0,transparent 50%,transparent 100%);background:-ms-linear-gradient(top,rgba(0,0,0,.3) 0,transparent 50%,transparent 100%);background:linear-gradient(to bottom,rgba(0,0,0,.3) 0,transparent 50%,transparent 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#4d000000', endColorstr='#00000000', GradientType=0)}ul.project-group>li .pin-project-cover.in-group .pin.icon{top:4px;right:-2px;font-size:12px}ul.project-group>li .pin-project-cover.open-group .pin.icon{top:10px;right:2px;font-size:14px}ul.project-group>li .pin-project-cover:hover .pin.icon{display:inline}ul.project-group>li .pin-project-cover.active .pin.icon{display:inline;color:#ef754c}ul.project-group>li .pin-project-cover .pin.icon{position:absolute;right:2px;top:10px;opacity:1;-webkit-transform:rotate(15deg);-moz-transform:rotate(15deg);-ms-transform:rotate(15deg);-o-transform:rotate(15deg);transform:rotate(15deg);font-size:16px;color:#FFF;display:none;cursor:pointer}ul.project-group>li .pin-project-cover .pin.icon:hover{-webkit-transform:scale(1.2) rotate(15deg);-moz-transform:scale(1.2) rotate(15deg);-ms-transform:scale(1.2) rotate(15deg);-o-transform:scale(1.2) rotate(15deg);transform:scale(1.2) rotate(15deg)}ul.project-group>li .pin-project-cover .pin.icon.static:hover{-webkit-transform:rotate(15deg);-moz-transform:rotate(15deg);-ms-transform:rotate(15deg);-o-transform:rotate(15deg);transform:rotate(15deg)}ul.project-group.editable>li .message-tip,ul.project-group.editable>li .pin-project-cover{display:none}ul.project-group.editable>li .triangle.icon{display:inline}ul.project-group.editable>li .corner.label{display:block}ul.project-group.editable>li.item .corner.label{right:8px;top:10px}ul.project-group.editable>li.item .corner.label.show-on-hover{display:none}ul.project-group.editable>li.item:hover .corner.label.show-on-hover{display:block}ul.project-group.editable>li ul.items{border:1px dashed #CCC}ul.project-group.editable>li ul.items li .corner.label{right:8px;top:10px}ul.project-group.editable>li ul.items li .corner.label.show-on-hover{display:none}ul.project-group.editable>li ul.items li:hover .corner.label.show-on-hover{display:block}ul.project-group.editable>li.group.open{cursor:default}ul.project-group.editable>li.group.open ul.items{border:1px solid transparent}ul.project-group.editable>li .logo-wrapper{border:1px dashed #CCC;border-radius:3px}.projects-item-archiver{position:absolute;top:0;left:0;cursor:pointer;width:100%;height:100%}.projects-item-archiver .icon{display:none;position:relative;top:15px;left:110px;color:#fff}.projects-item-archiver:hover .icon{display:inline}.projects-item-archiver.list{font-size:13px}.projects-item-archiver.list .icon{top:-5px;left:42px}.pagedown-fullscreen .fullscreen-title{position:fixed;top:0;left:0;width:100%;height:40px;z-index:1002;margin:0!important;border-bottom:1px solid #CCC}.pagedown-fullscreen .fullscreen-title input{border:none!important;height:40px;padding-right:200px!important;box-sizing:border-box}.pagedown-fullscreen .fullscreen-title label{display:none!important}.pagedown-fullscreen .fullscreen-title-right-buttons{position:fixed;top:0;right:0;border-left:1px solid #CCC;z-index:1003;margin:0!important;padding:5px!important}.pagedown-fullscreen .fullscreen-title-right-buttons a{margin-left:5px}.pagedown-fullscreen .pagedown.wmd-panel>[id*=wmd-button-bar]{top:40px}.draft-saving-hint{position:absolute;top:45px;right:5px;background:rgba(221,221,221,.9);padding:0 5px;height:24px;line-height:24px;color:#13b04f;font-size:12px;border-radius:3px}.no-title .pagedown.wmd-panel.full-screen>[id*=wmd-button-bar]{top:0}.no-title .pagedown.wmd-panel.full-screen .pagedown-editor{padding-top:40px}.pagedown.wmd-panel{position:relative}.pagedown.wmd-panel>[id*=wmd-button-bar]{padding:10px!important;border-bottom:1px solid #CCC;position:relative;width:100%;height:40px;box-sizing:border-box;z-index:3}.pagedown.wmd-panel .wmd-button{z-index:3}.pagedown.wmd-panel .extend-wmd-button{width:20px;height:20px;padding-left:2px;padding-right:3px;position:absolute;display:inline-block;z-index:4;cursor:pointer}.pagedown.wmd-panel>.pagedown-editor{position:relative;height:500px;overflow:hidden}.pagedown.wmd-panel>.pagedown-editor .pagedown-input{outline:0;width:100%;height:100%;border:none;margin:0;font-size:14px;resize:none;max-height:none;line-height:24px}.pagedown.wmd-panel>.pagedown-editor .pagedown-preview{height:100%;width:100%;overflow:auto;position:absolute;top:0;left:100%;border-left:1px solid transparent}.pagedown.wmd-panel>.pagedown-editor .pagedown-input,.pagedown.wmd-panel>.pagedown-editor .pagedown-preview{padding:10px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:width .4s ease,left .4s ease;-moz-transition:width .4s ease,left .4s ease;-ms-transition:width .4s ease,left .4s ease;-o-transition:width .4s ease,left .4s ease;transition:width .4s ease,left .4s ease;background:#FFF}.pagedown.wmd-panel>.pagedown-editor.preview .pagedown-preview{position:absolute;left:0;width:100%}.pagedown.wmd-panel .pagedown-resizer{position:absolute;width:120px;height:3px;left:50%;margin-left:-60px;margin-top:4px;border-top:1px solid #ccc;border-bottom:1px solid #ccc;cursor:row-resize;text-indent:110%;white-space:nowrap;overflow:hidden;text-transform:capitalize}.pagedown.wmd-panel.full-screen{position:fixed!important;top:0;left:0;z-index:1001;margin-top:0;border:none;width:100%;height:100vh;background:#FFF}.pagedown.wmd-panel.full-screen>.pagedown-editor{position:absolute;top:0;left:0;width:100%;height:100%!important;padding-top:80px;box-sizing:border-box}.pagedown.wmd-panel.full-screen>.pagedown-editor.preview .pagedown-input{width:50%}.pagedown.wmd-panel.full-screen>.pagedown-editor.preview .pagedown-preview{width:50%;left:50%}.pagedown.wmd-panel.full-screen .pagedown-input,.pagedown.wmd-panel.full-screen .pagedown-preview{padding:20px}.pagedown.wmd-panel.full-screen .pagedown-preview{border-left:1px solid #CCC}.pagedown.wmd-panel.full-screen .pagedown-resizer{display:none}.pagedown-help-modal{width:700px!important;top:50%!important;margin-top:-265px!important;left:50%!important;margin-left:-350px!important}.pagedown-help-modal .content{background:#FFF!important;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;padding:0!important}.pagedown-help-modal .content table{table-layout:fixed;border-collapse:collapse;font-size:14px}.pagedown-help-modal .content table tr td{line-height:18px;padding:10px;box-sizing:border-box;vertical-align:top}.pagedown-help-modal .content table tr td .wrapper{display:table;table-layout:fixed;width:100%;height:100%}.pagedown-help-modal .content table tr td .wrapper .left{border-right:1px solid rgba(0,0,0,.02)}.pagedown-help-modal .content table tr td .wrapper .left,.pagedown-help-modal .content table tr td .wrapper .right{display:table-cell;width:50%;height:100%;vertical-align:top;box-sizing:border-box}.pagedown-help-modal .content table tr td .wrapper .right{padding-left:10px}.pagedown-help-modal .content table tr td pre{margin:0}.pagedown-help-modal .content table tr td:nth-child(1){width:110px;border-bottom:1px solid #ddd;padding:10px 15px;color:#333}.pagedown-help-modal .content table tr td:nth-child(2){width:425px;font-size:12px;background:#F6F6F6;border:1px solid #ddd;color:#666;font-family:Consolas,Courier,微软雅黑,'Liberation Mono',monospace}.pagedown-help-modal .content table tr td:nth-child(3){width:165px;font-size:12px;border-bottom:1px solid #ddd;padding:10px 15px}.pagedown-help-modal .content table tr:last-child td{border-bottom:none}.pagedown-help-modal .content table tr:first-child td{border-top:none}.pagedown-toc-dropdown .menu{width:300px;min-height:50px;max-height:450px;overflow-x:hidden}.pagedown-toc-dropdown .menu .title{font-size:1.5em;padding:20px;border-bottom:1px solid #ececec}#top-menu .frequently-projects{margin:1px 1px 0 0}#top-menu .frequently-projects.menu{width:474px!important;height:400px!important}#top-menu .frequently-projects.menu:after{background:#F6F6F6!important}.frequently-used-projects{position:absolute;width:360px;height:100%;left:0;top:0;z-index:12;background:#FFF;border-right:1px solid #DDD}.frequently-used-projects>.projects-wrapper{margin:15px}.frequently-used-projects>.projects-wrapper .content .empty-list{font-size:14px;margin-top:100px}.frequently-used-projects>.projects-wrapper .content .message-tip{right:10px;top:-9px}.frequently-used-projects>.projects-wrapper .content ul.frequent-project-list{width:345px;height:100%;padding:20px 0 0;margin:0;list-style:none}.frequently-used-projects>.projects-wrapper .content ul.frequent-project-list li{float:left;text-align:center;width:100px;height:100px;margin:0 15px 15px 0;position:relative;cursor:pointer}.frequently-used-projects>.projects-wrapper .content ul.frequent-project-list li img{width:64px;height:64px}.frequently-used-projects>.projects-wrapper .content ul.frequent-project-list li .title{font-size:12px;height:15px;line-height:13px;color:#666;margin:5px 10px 0}.frequently-used-projects>.projects-wrapper .content ul.frequent-project-list li .title.icon:before{font-family:Icons;content:'\\f023';margin-right:3px}.frequently-used-projects>.projects-wrapper .content ul.frequent-project-list li .title.icon.public:before{display:none}.frequently-used-projects>.projects-wrapper .content ul.frequent-project-list li .pin-logo-wrapper{display:inline-block;position:relative;width:64px;height:64px}.frequently-used-projects>.projects-wrapper .content ul.frequent-project-list li .pin-project-cover{position:absolute;width:100%;height:100%;left:0;top:0}.frequently-used-projects>.projects-wrapper .content ul.frequent-project-list li .pin-project-cover:hover .remove.icon{display:inline}.frequently-used-projects>.projects-wrapper .content ul.frequent-project-list li .pin-project-cover .remove.icon{position:absolute;right:0;top:8px;opacity:1;font-size:16px;text-shadow:1px 1px 0 rgba(1,1,1,.15);display:none;cursor:pointer}.frequently-used-projects>.projects-wrapper .content ul.frequent-project-list li .pin-project-cover .remove.icon:hover{-webkit-transform:scale(1.2);-moz-transform:scale(1.2);-ms-transform:scale(1.2);-o-transform:scale(1.2);transform:scale(1.2)}.frequently-used-projects .rotate30.icon{-webkit-transform:rotate(30deg);-moz-transform:rotate(30deg);-ms-transform:rotate(30deg);-o-transform:rotate(30deg);transform:rotate(30deg)}.pickmeup{background:#fff;border:1px solid #DDD;border-radius:.3em;-moz-box-sizing:content-box;box-sizing:content-box;display:none;position:absolute}.pickmeup *{-moz-box-sizing:border-box;box-sizing:border-box}.pickmeup .pmu-instance{display:inline-block;height:288px;padding:10px;text-align:center;width:265px}.pickmeup .pmu-instance .pmu-button{color:#333;cursor:pointer;outline:0;text-decoration:none}.pickmeup .pmu-instance .pmu-today{background:#eee;color:#5191bd}.pickmeup .pmu-instance .pmu-button:hover{color:#88c5eb}.pickmeup .pmu-instance .pmu-not-in-month{color:#666}.pickmeup .pmu-instance .pmu-disabled,.pickmeup .pmu-instance .pmu-disabled:hover{color:#333;cursor:default}.pickmeup .pmu-instance .pmu-selected{background:#68afda;color:#FFF}.pickmeup .pmu-instance .pmu-not-in-month.pmu-selected{background:#628fac}.pickmeup .pmu-instance nav{color:#333;display:-ms-flexbox;display:-webkit-flex;display:flex;line-height:2em}.pickmeup .pmu-instance nav :first-child :hover{color:#88c5eb}.pickmeup .pmu-instance nav .pmu-next,.pickmeup .pmu-instance nav .pmu-prev{display:none;height:2em;width:1em}.pickmeup .pmu-instance nav .pmu-month{width:14em}.pickmeup .pmu-instance .pmu-months *,.pickmeup .pmu-instance .pmu-years *{display:inline-block;line-height:3.6em;width:3.5em}.pickmeup .pmu-instance .pmu-day-of-week{color:#000;cursor:default;font-weight:700}.pickmeup .pmu-instance .pmu-day-of-week *,.pickmeup .pmu-instance .pmu-days *{display:inline-block;line-height:30px;width:35px;height:30px;font-size:14px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.pickmeup .pmu-instance .pmu-quick-buttons{background:#F6F6F6;text-align:center;position:absolute;width:100%;left:0;border-bottom-left-radius:3px;border-bottom-right-radius:3px}.pickmeup .pmu-instance .pmu-quick-buttons .quick-button{font-weight:700;font-size:14px;color:#000;display:inline-block;padding:4px 5px;margin:5px 0;width:70px;cursor:pointer;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.pickmeup .pmu-instance .pmu-quick-buttons .quick-button:hover{background:#EEE}.pickmeup .pmu-instance:first-child .pmu-prev,.pickmeup .pmu-instance:last-child .pmu-next{display:block}.pickmeup .pmu-instance:first-child .pmu-month,.pickmeup .pmu-instance:last-child .pmu-month{width:13em}.pickmeup .pmu-instance:first-child:last-child .pmu-month{width:12em}.pickmeup:not(.pmu-view-days) .pmu-day-of-week,.pickmeup:not(.pmu-view-days) .pmu-days,.pickmeup:not(.pmu-view-months) .pmu-months,.pickmeup:not(.pmu-view-years) .pmu-years{display:none}#tags-all{font-size:14px;position:relative;padding-bottom:0;overflow:inherit;border-top:1px solid #DDD;margin-top:8px}#tags-all>.new-tag{padding:8px;top:40px;left:0;width:90%;margin:auto;font-size:12px;box-sizing:border-box}#tags-all>.new-tag .tag-color{position:relative;float:right}#tags-all>header{font-size:16px;font-weight:400;height:32px;line-height:32px;padding:10px 20px 5px;opacity:.8;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#tags-all>header>.icon.triangle{width:8px;margin:0 .4em 0 0!important}#tags-all>.icon.add{position:absolute;top:13px;right:1em;width:2em;height:2em;line-height:2em;display:inline-block;cursor:pointer}#tags-all>.tag-list{width:auto;padding:0;position:relative}#tags-all>.tag-list .tag-item{position:relative;margin-bottom:5px;padding:0 20px;display:block;height:28px;cursor:pointer;width:100%;box-sizing:border-box}#tags-all>.tag-list .tag-item:hover{background-color:rgba(0,0,0,.02)}#tags-all>.tag-list .tag-item.active{background:rgba(0,0,0,.08)}#tags-all>.tag-list .tag-item.no-highlight{background:0 0}#tags-all>.tag-list .tag-item>div{padding-right:30px;position:relative}#tags-all>.tag-list .tag-item>div>.tag{position:absolute;width:24px;height:24px;display:inline-block;line-height:27px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}#tags-all>.tag-list .tag-item>div>.tag i.icon{color:#FFF;opacity:1}#tags-all>.tag-list .tag-item>div>.tag.dark i.icon{color:#000}#tags-all>.tag-list .tag-item>div>.tag-description{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;min-height:24px;padding:5px 0 0 20px;font-size:12px;color:#333;line-height:18px;word-break:break-all;-webkit-user-select:none;user-select:none}#tags-all>.tag-list .tag-item>div>.icon{position:absolute;top:7px}#tags-all>.tag-list .tag-item>div>.icon.pencil{color:gray;right:0;display:none}#tags-all>.tag-list .tag-item>div>.icon.pencil:hover{color:#333}#tags-all>.tag-list .tag-item>div:hover>.icon{display:inline-block}#tags-all>.tag-list .tag-item>div>.ui.input{font-size:12px;display:inline-block;width:100%}#tags-all>.tag-list .tag-item>div>.ui.input>.icon.level.down{position:absolute;top:8px;right:2px;-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}#tags-all>.tag-list .tag-item>div>.icon.loading,#tags-all>.tag-list .tag-item>div>.icon.remove{right:-22px}.loading-label{display:block;padding:5px 20px;text-align:center;color:#999;font-size:.9em}#tag-search{padding-top:0;padding-bottom:5px;font-size:12px}#tag-search .input{padding-top:0;margin:0 11px;width:91%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#tag-search .input input{background-color:#FFF;border:1px solid rgba(0,0,0,.15);width:100%}#tag-search .ui.input.icon>.icon{padding-top:9px}.tag-color{position:absolute;top:0;right:0;width:28px;height:28px;display:inline-block;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;cursor:pointer;vertical-align:top}.tag-color-picker{position:absolute;top:35px;right:0;width:auto;height:auto;border:1px solid #EEE;background:#FFF;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;z-index:10;cursor:default}.tag-color-picker>.selected{position:relative;margin:5px;font-size:14px}.tag-color-picker>.selected input{width:60px;height:16px;border:1px solid #EEE;outline:0;padding:6px 1em 6px 36px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;font-size:14px}.tag-color-picker>.selected .selected-color{position:absolute;left:5px;top:4px;display:inline-block;width:22px;height:22px;background:#CCC;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.tag-color-picker>.pre-defined-color{width:192px;height:48px;line-height:0;margin:5px}.tag-color-picker>.pre-defined-color .color{cursor:pointer;width:24px;height:24px;display:inline-block;position:relative}.tag-color-picker>.pre-defined-color .color.selected,.tag-color-picker>.pre-defined-color .color:hover{outline:#fff solid 2px;box-shadow:0 0 5px 2px rgba(0,0,0,.25);z-index:11}.tag-color-picker:before{position:absolute;top:-5px;right:8px;content:\"\";width:.6em;height:.6em;-webkit-transform:rotate(135deg);-moz-transform:rotate(135deg);-ms-transform:rotate(135deg);-o-transform:rotate(135deg);transform:rotate(135deg);z-index:10;-webkit-transition:background .1s linear;-moz-transition:background .1s linear;transition:background .1s linear;background-color:#FFF;border-left:1px solid #EEE;border-bottom:1px solid #EEE}.tag-editor.mr-1 article ul li{margin-left:1px}.tag-editor .tag{font-size:12px;background:#000;margin-right:5px;padding:3px 8px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;color:#FFF;display:inline-block;line-height:12px;vertical-align:top}.tag-editor .tag .icon{margin-right:0;cursor:pointer}.tag-editor .tag span.add{cursor:pointer;vertical-align:middle}.tag-editor .tag.editable{position:relative;padding:3px 8px;-webkit-transition:padding .4s ease-in-out;-moz-transition:padding .4s ease-in-out;-ms-transition:padding .4s ease-in-out;-o-transition:padding .4s ease-in-out;transition:padding .4s ease-in-out;z-index:2}.tag-editor .tag.editable i.remove.icon{opacity:0;position:absolute;top:3px;right:0;-webkit-transition:right,opacity .4s ease-in-out;-moz-transition:right,opacity .4s ease-in-out;-ms-transition:righ,opacityt .4s ease-in-out;-o-transition:right,opacity .4s ease-in-out;transition:right,opacity .4s ease-in-out;z-index:1}.tag-editor .tag.editable:hover{padding:3px 18px 3px 8px}.tag-editor .tag.editable:hover i.remove.icon{opacity:1;right:3px;z-index:3}li.refer-resource-item{height:24px;line-height:24px;color:#000;font-size:12px}li.refer-resource-item.popup{max-width:400px}li.refer-resource-item:last-child{border-bottom-left-radius:3px;border-bottom-right-radius:3px}li.refer-resource-item.cur{background:#333}li.refer-resource-item.cur .number{color:#aaa}li.refer-resource-item.cur .title{color:#ddd}li.refer-resource-item.cur strong{color:#D33!important}li.refer-resource-item.more-resource{border-top:1px solid #EEE;text-align:right}li.refer-resource-item .number{color:#666}li.refer-resource-item .title{color:#333;font-weight:700}li.refer-resource-item span.icon{display:inline-block;width:16px;height:16px;border-radius:16px;border:1px solid #CCC;text-align:center;line-height:16px;margin-right:3px}li.refer-resource-item span.icon>i.icon{margin-right:0}li.refer-resource-item span.icon>i.icon.tasks{transform:scale(0.8) translate(0px,1px)}li.refer-resource-item span.icon>i.icon.merge-request{transform:translate(0px,1px)}li.refer-resource-item span.icon>i.icon.pull-request{padding-top:2px!important}.refer-resource-modal>.content{-webkit-border-radius:.325em;-moz-border-radius:.325em;border-radius:.325em;background-color:#FFF!important}.refer-resource-modal>.content .label.refer-resource-label{border-top-right-radius:0;border-bottom-right-radius:0;text-transform:none;padding:0 7px 0 3px;border:1px solid rgba(0,0,0,.15);border-right:0;background:#FFF}.refer-resource-modal>.content .label.refer-resource-label span{background:#EEE;display:inline-block;padding:0 5px;line-height:22px;text-align:center;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;color:#666;font-size:12px}.refer-resource-modal>.content input.refer-resource-input{border-top-left-radius:0;border-bottom-left-radius:0;border-left:0;padding-left:0}.refer-resource-modal>.content>.resource-list{border:1px solid #CCC;border-radius:3px;min-height:335px}.refer-resource-modal>.content>.resource-list>ul{padding:0;margin:0;list-style:none;min-height:264px}.refer-resource-modal>.content>.resource-list>ul>li{display:block;padding:4px 10px;border-bottom:1px solid #EEE;cursor:pointer}.refer-resource-modal>.content>.resource-list>ul>li:hover{background:#333}.refer-resource-modal>.content>.resource-list>ul>li:hover .number{color:#aaa}.refer-resource-modal>.content>.resource-list>ul>li:hover .title{color:#ddd}.refer-resource-modal>.content>.resource-list>ul>li.cur:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.refer-resource-modal>.content>.resource-list>ul>li.cur:last-child{border-bottom-left-radius:3px;border-bottom-right-radius:3px}.tag-dropdown .search .ui.input{border:5px solid #F0F0F0;border-left-width:10px;border-right-width:10px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.tag-dropdown .search .ui.input>.icon{padding-top:9px!important}.tag-dropdown .search .ui.input>input{width:220px;border:0;border-bottom:1px solid #EEE;border-radius:3px 3px 0 0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.tag-dropdown .items{max-height:177px;overflow-x:hidden;overflow-y:auto}.tag-dropdown.ui.dropdown .menu .item.active{background-color:rgba(0,0,0,.02)!important}.tag-dropdown.ui.dropdown .menu .item.active.cur{background-color:rgba(0,0,0,.01)!important}.tag-dropdown .items .item.ellipsis{width:240px;position:relative;font-size:14px;padding:10px 1em!important}.tag-dropdown .items .item.ellipsis i.icon{color:#333;margin-right:0;position:absolute;left:9px;display:none}.tag-dropdown .items .item.ellipsis.active i.icon{display:inline;color:#333!important}.tag-dropdown .items .item.ellipsis.cur i.icon,.tag-dropdown .items .item.ellipsis:hover i.icon{display:inline;color:#CCC}.tag-dropdown .items .item.ellipsis span.tag-color{position:relative;margin:0 5px 0 20px;width:16px;height:16px;float:left;display:inline-block;vertical-align:middle;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.markdown.content{font-size:14px;line-height:23px;overflow:hidden;word-wrap:break-word;color:#333}.markdown.content .three_wrapper img.emotion.monkey{width:31%;margin:1%}.markdown.content .two_wrapper img.emotion.monkey{width:46%;margin:2%}.markdown.content>:first-child{margin-top:0!important}.markdown.content>:last-child{margin-bottom:0!important}.markdown.content a.absent{color:#c00}.markdown.content a.anchor{display:block;padding-right:6px;padding-left:30px;margin-left:-30px;cursor:pointer;position:absolute;top:0;left:0;bottom:0}.markdown.content a.anchor:focus{outline:0}.markdown.content h1,.markdown.content h2,.markdown.content h3,.markdown.content h4,.markdown.content h5,.markdown.content h6{margin:1em 0 15px;padding:0;cursor:text;position:relative;font-weight:700;line-height:2}.markdown.content h1 .octicon-link,.markdown.content h2 .octicon-link,.markdown.content h3 .octicon-link,.markdown.content h4 .octicon-link,.markdown.content h5 .octicon-link,.markdown.content h6 .octicon-link{display:none;color:#000}.markdown.content h1:hover a.anchor,.markdown.content h2:hover a.anchor,.markdown.content h3:hover a.anchor,.markdown.content h4:hover a.anchor,.markdown.content h5:hover a.anchor,.markdown.content h6:hover a.anchor{text-decoration:none;line-height:1;padding-left:8px;margin-left:-30px;top:15%}.markdown.content h1:hover a.anchor .octicon-link,.markdown.content h2:hover a.anchor .octicon-link,.markdown.content h3:hover a.anchor .octicon-link,.markdown.content h4:hover a.anchor .octicon-link,.markdown.content h5:hover a.anchor .octicon-link,.markdown.content h6:hover a.anchor .octicon-link{display:inline-block}.markdown.content h1 code,.markdown.content h1 tt,.markdown.content h2 code,.markdown.content h2 tt,.markdown.content h3 code,.markdown.content h3 tt,.markdown.content h4 code,.markdown.content h4 tt,.markdown.content h5 code,.markdown.content h5 tt,.markdown.content h6 code,.markdown.content h6 tt{font-size:inherit}.markdown.content h1{font-size:28px;color:#000;font-weight:400;border-bottom:1px solid #ddd}.markdown.content.bubble h1,.markdown.content.bubble h2{border:none!important}.markdown.content h2{font-size:24px;border-bottom:1px solid #ddd;color:#000;font-weight:400}.markdown.content h3{font-size:20px}.markdown.content h4{font-size:16px}.markdown.content h5{font-size:14px;color:#666}.markdown.content h6{font-size:14px}.markdown.content blockquote,.markdown.content dl,.markdown.content ol,.markdown.content p,.markdown.content pre,.markdown.content table,.markdown.content ul{margin:15px 0}.markdown.content hr{border:none;border-top:1px dashed #ddd;height:1px;padding:0;margin:30px 0}.markdown.content ol,.markdown.content ul{padding-left:30px}.markdown.content ol.no-list,.markdown.content ul.no-list{list-style-type:none;padding:0}.markdown.content ol ol,.markdown.content ol ul,.markdown.content ul ol,.markdown.content ul ul{margin-top:0;margin-bottom:0}.markdown.content dl{padding:0}.markdown.content dl dt{font-size:14px;font-weight:700;font-style:italic;padding:0;margin-top:15px}.markdown.content dl dd{margin-bottom:15px;padding:0 15px}.markdown.content blockquote{border-left:4px solid #DDD;padding:10px 15px;color:#666;background:rgba(0,0,0,.03)}.markdown.content blockquote>:first-child{margin-top:0}.markdown.content blockquote>:last-child{margin-bottom:0}.markdown.content .markdown-table{width:100%;overflow:auto;margin:15px 0!important}.markdown.content .markdown-table table{margin:0}.markdown.content table{width:100%;overflow:auto;border-collapse:collapse;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.markdown.content table th{font-weight:700;background:#eee}.markdown.content table td,.markdown.content table th{border:1px solid #ddd;padding:6px 13px}.markdown.content table tr{border-top:1px solid #ccc;background-color:#fff}.markdown.content table tr:nth-child(2n){background-color:#f6f6f6}.markdown.content img{max-width:100%;-moz-box-sizing:border-box;box-sizing:border-box;background:#fff;padding:8px;border:1px solid #eee;border-radius:3px}.markdown.content img.emotion{padding:0;border-radius:0;border:none;background:0 0}.markdown.content span.frame{display:block;overflow:hidden}.markdown.content span.frame>span{border:1px solid #ddd;display:block;float:left;overflow:hidden;margin:13px 0 0;padding:7px;width:auto}.markdown.content span.frame span img{display:block;float:left}.markdown.content span.frame span span{clear:both;color:#333;display:block;padding:5px 0 0}.markdown.content span.align-center{display:block;overflow:hidden;clear:both}.markdown.content span.align-center>span{display:block;overflow:hidden;margin:13px auto 0;text-align:center}.markdown.content span.align-center span img{margin:0 auto;text-align:center}.markdown.content span.align-right{display:block;overflow:hidden;clear:both}.markdown.content span.align-right>span{display:block;overflow:hidden;margin:13px 0 0;text-align:right}.markdown.content span.align-right span img{margin:0;text-align:right}.markdown.content span.float-left{display:block;margin-right:13px;overflow:hidden;float:left}.markdown.content span.float-left span{margin:13px 0 0}.markdown.content span.float-right{display:block;margin-left:13px;overflow:hidden;float:right}.markdown.content span.float-right>span{display:block;overflow:hidden;margin:13px auto 0;text-align:right}.markdown.content code,.markdown.content tt{margin:0;border:1px solid #ddd;background-color:#f8f8f8;border-radius:3px;max-width:100%;display:inline-block;overflow:auto;vertical-align:middle;padding:0}.markdown.content code:after,.markdown.content code:before,.markdown.content tt:after,.markdown.content tt:before{content:\"\\00a0\";letter-spacing:-.2em}.markdown.content del code{text-decoration:inherit;vertical-align:text-top}.markdown.content code{white-space:nowrap}.markdown.content pre>code{margin:0;padding:0;white-space:pre;border:none;background:0 0;font-family:Consolas,\"Liberation Mono\",Menlo,Courier,monospace!important}.markdown.content .highlight pre,.markdown.content pre{background-color:#f8f8f8;border:1px solid #ddd;font-size:13px;line-height:19px;overflow:auto;padding:6px 10px;border-radius:3px}.markdown.content pre{word-wrap:normal}.markdown.content pre code,.markdown.content pre tt{margin:0;padding:0;background-color:transparent;border:none;word-wrap:normal;max-width:initial;display:inline;overflow:initial;line-height:inherit}.markdown.content pre code:after,.markdown.content pre code:before,.markdown.content pre tt:after,.markdown.content pre tt:before{content:normal}.markdown.content .task-list{list-style-type:none;padding-left:10px}.markdown.content .task-list-item{padding-left:20px}.markdown.content .task-list-item label{font-weight:400}.markdown.content .task-list-item+.task-list-item{margin-top:3px}.markdown.content .task-list-item-checkbox{float:left;margin-left:-20px;margin-top:4px;width:auto}.markdown-toc{margin:1em!important}.markdown-toc ul{list-style-type:none;margin:0;padding:0!important;line-height:1.5em}.markdown-toc>ul ul{padding-left:20px!important}.user-hover-card .menu{cursor:default}.user-hover-card .info{display:inline-block;vertical-align:top;margin-left:4px}.user-hover-card .info .user-name{color:#000;display:inline-block;height:24px;line-height:24px}.user-hover-card .info .user-slogan{font-size:14px;color:#666;margin:10px;display:block;white-space:pre-wrap;max-width:230px}.user-hover-card .info .actions{margin-left:10px}.user-hover-card .info .user-sex{position:absolute;font-size:14px;margin-left:4px}.user-hover-card .card-user-avatar{display:inline-block}.user-hover-card .info .user-sex.male{color:#5191bd!important}.user-hover-card .info .user-sex.female{color:#df5a5a!important}.user-hover-card .info .name-wrapper{margin-left:10px;font-size:18px}.user-hover-card .menu .menu-inner .content-wrapper .content{width:110px;display:inline-block}.user-hover-card .menu .menu-inner .content-wrapper{margin-top:20px;text-align:center;font-size:14px;color:#000}.user-hover-card .menu .menu-inner .content-wrapper .content a span{color:#000;padding-right:4px}.user-hover-card .menu .menu-inner .content-wrapper .content .num{color:#32be77}.user-hover-card .menu .menu-inner .content-wrapper .content.center{border-left:#ddd 1px solid;border-right:#ddd 1px solid}.user-hover-card .menu .loading-wrapper{font-size:14px;padding:10px}.user-hover-card.ui.left.pointing.dropdown .menu .menu-inner{width:380px;padding:15px 0 15px 15px}.user-hover-card.ui.top.left.pointing.dropdown.up .menu{top:auto;bottom:120%;z-index:1000}.user-hover-card.ui.top.left.pointing.dropdown.up .menu:after{top:auto;bottom:-.25em;-webkit-transform:rotate(-135deg);-moz-transform:rotate(-135deg);-ms-transform:rotate(-135deg);transform:rotate(-135deg)}.advance-search-box{position:relative;font-size:14px}.advance-search-box ul{list-style:none;padding:0;margin:0}.advance-search-box .search-input.prefix{-webkit-transition:all ease-in-out .3s;-moz-transition:all ease-in-out .3s;-ms-transition:all ease-in-out .3s;-o-transition:all ease-in-out .3s;transition:all ease-in-out .3s}.advance-search-box .search-input.prefix input,.advance-search-box .search-input.prefix textarea{text-indent:44px;padding-right:10px!important}.advance-search-box .search-input.prefix:before{content:'本项目';position:absolute;height:20px;line-height:20px;top:3px;left:3px;z-index:999;border-radius:3px;padding:0 5px;color:#777;background-color:#eee}.advance-search-box .search-input .searching input,.advance-search-box .search-input .searching textarea{border-bottom-left-radius:0;border-bottom-right-radius:0;border-bottom:1px solid rgba(0,0,0,.15)}.advance-search-box .search-dropdown{position:absolute;width:100%;max-height:400px;overflow-y:auto;z-index:900;background:#FFF;box-sizing:border-box;border:1px solid rgba(0,0,0,.15);border-top:0;border-bottom-left-radius:.3125em;border-bottom-right-radius:.3125em}.advance-search-box .search-dropdown .advance-search-group{position:relative;display:table;width:100%;table-layout:fixed}.advance-search-box .search-dropdown .advance-search-group:last-child{border-bottom:0}.advance-search-box .search-dropdown .advance-search-group.list .advance-search-items .advance-search-item:first-child{margin-top:5px}.advance-search-box .search-dropdown .advance-search-group .advance-search-type{display:table-cell;width:50px;text-align:right;padding:10px 10px 0 0;vertical-align:top;box-sizing:border-box}.advance-search-box .search-dropdown .advance-search-group .advance-search-items{display:table-cell;border-left:1px solid rgba(0,0,0,.15);border-bottom:1px solid rgba(0,0,0,.15)}.advance-search-box .search-dropdown .advance-search-group .advance-search-items .advance-search-item{padding:5px 10px;position:relative;cursor:pointer}.advance-search-box .search-dropdown .advance-search-group .advance-search-items .advance-search-item.active,.advance-search-box .search-dropdown .advance-search-group .advance-search-items .advance-search-item:hover{background:rgba(0,0,0,.08)}.advance-search-box .search-dropdown .advance-search-group .advance-search-items .advance-search-item .highlight-match-text{color:#D04D4D}.advance-search-box .search-dropdown .advance-search-group .advance-search-items .advance-search-item .subtitle,.advance-search-box .search-dropdown .advance-search-group .advance-search-items .advance-search-item .title{margin:0}.advance-search-box .search-dropdown .advance-search-group .advance-search-items .advance-search-item.task .title,.advance-search-box .search-dropdown .advance-search-group .advance-search-items .advance-search-item.topic .title{margin:0;font-size:15px}.advance-search-box .search-dropdown .advance-search-group .advance-search-items .advance-search-item.task .subtitle,.advance-search-box .search-dropdown .advance-search-group .advance-search-items .advance-search-item.topic .subtitle{margin:3px 0 0;color:#999;font-size:13px}.advance-search-box .search-dropdown .advance-search-group .advance-search-items .advance-search-item.file,.advance-search-box .search-dropdown .advance-search-group .advance-search-items .advance-search-item.friend,.advance-search-box .search-dropdown .advance-search-group .advance-search-items .advance-search-item.project{min-height:36px;padding-left:55px}.advance-search-box .search-dropdown .advance-search-group .advance-search-items .advance-search-item.file .icon,.advance-search-box .search-dropdown .advance-search-group .advance-search-items .advance-search-item.friend .icon,.advance-search-box .search-dropdown .advance-search-group .advance-search-items .advance-search-item.project .icon{position:absolute;left:10px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.advance-search-box .search-dropdown .advance-search-group .advance-search-items .advance-search-item.file .title,.advance-search-box .search-dropdown .advance-search-group .advance-search-items .advance-search-item.friend .title,.advance-search-box .search-dropdown .advance-search-group .advance-search-items .advance-search-item.project .title{margin:0;font-size:15px}.advance-search-box .search-dropdown .advance-search-group .advance-search-items .advance-search-item.file .subtitle,.advance-search-box .search-dropdown .advance-search-group .advance-search-items .advance-search-item.friend .subtitle,.advance-search-box .search-dropdown .advance-search-group .advance-search-items .advance-search-item.project .subtitle{margin:3px 0 0;color:#999;font-size:13px}.advance-search-box .search-dropdown .advance-search-group .advance-search-items .advance-search-item.file{padding-left:50px}.advance-search-box .search-dropdown .advance-search-group .advance-search-items .advance-search-item.file .icon{display:inline-block;width:32px;height:32px;top:7px}.advance-search-box .search-dropdown .advance-search-group .advance-search-items .advance-search-item.file .icon img{width:100%;height:100%;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.advance-search-box .search-dropdown .advance-search-group .advance-search-items .advance-search-item.file .icon .file-icon{width:100%;height:100%;line-height:32px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;font-style:normal;font-size:10px}.advance-search-box .search-dropdown .advance-search-group .advance-search-items .advance-search-item.file .title{margin:10px 0 0}.advance-search-box .search-dropdown .advance-search-group .advance-search-items .advance-search-item.more,.advance-search-box .search-dropdown .advance-search-group .advance-search-items .advance-search-item.simple{padding:10px}.advance-search-box .search-dropdown .advance-search-group .advance-search-items .advance-search-item.more{text-align:right}.advance-search-box .search-dropdown .advance-search-group:last-child .advance-search-items:last-child{border-bottom:0}.image-picker-dropdown-wrapper{position:absolute;z-index:1101}.image-picker-dropdown .picker-wrapper{width:400px;height:300px}.image-picker-dropdown .picker-wrapper article,.image-picker-dropdown .picker-wrapper footer,.image-picker-dropdown .picker-wrapper header{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.image-picker-dropdown .picker-wrapper header{font-size:14px;height:40px;line-height:40px;border-bottom:1px solid #EEE;-webkit-box-shadow:0 1px 3px #EEE;-moz-box-shadow:0 1px 3px #EEE;box-shadow:0 1px 3px #EEE}.image-picker-dropdown .picker-wrapper header>.center,.image-picker-dropdown .picker-wrapper header>.left,.image-picker-dropdown .picker-wrapper header>.right{height:100%;box-sizing:border-box}.image-picker-dropdown .picker-wrapper header>.center>.button,.image-picker-dropdown .picker-wrapper header>.left>.button,.image-picker-dropdown .picker-wrapper header>.right>.button{cursor:pointer;display:inline-block;width:100%;height:100%;padding:0}.image-picker-dropdown .picker-wrapper header>.center>.button:hover,.image-picker-dropdown .picker-wrapper header>.left>.button:hover,.image-picker-dropdown .picker-wrapper header>.right>.button:hover{background:#EEE}.image-picker-dropdown .picker-wrapper header>.left>.button{padding-left:10px;box-sizing:border-box}.image-picker-dropdown .picker-wrapper header>.right{line-height:36px}.image-picker-dropdown .picker-wrapper header>.right>.button{width:75px;height:25px;margin-right:10px}.image-picker-dropdown .picker-wrapper header>.center{text-align:center}.image-picker-dropdown .picker-wrapper header>.left,.image-picker-dropdown .picker-wrapper header>.right{width:100px}.image-picker-dropdown .picker-wrapper header>.left{text-align:left}.image-picker-dropdown .picker-wrapper header>.right{text-align:right}.image-picker-dropdown .picker-wrapper article{padding:5px;margin:0;overflow:hidden;position:relative}.image-picker-dropdown .picker-wrapper article ul.folder-list{list-style:none;padding:0;margin:0;width:100%;display:inline-block;float:none;height:auto}.image-picker-dropdown .picker-wrapper article ul.folder-list>li{width:130px;display:inline-block;float:left;cursor:pointer;position:relative;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.image-picker-dropdown .picker-wrapper article ul.folder-list>li.folder,.image-picker-dropdown .picker-wrapper article ul.folder-list>li.folder-list{height:48px;padding:15px 10px;line-height:18px}.image-picker-dropdown .picker-wrapper article ul.folder-list>li.folder.with-image,.image-picker-dropdown .picker-wrapper article ul.folder-list>li.image{height:138px;padding:10px 20px 0}.image-picker-dropdown .picker-wrapper article ul.folder-list>li.folder.with-image{padding:60px 15px;line-height:18px;text-align:center}.image-picker-dropdown .picker-wrapper article ul.folder-list>li.image{text-align:center;font-size:12px}.image-picker-dropdown .picker-wrapper article ul.folder-list>li.image img{width:90px;height:90px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.image-picker-dropdown .picker-wrapper article ul.folder-list>li.image p{margin:9px 0 0;padding:0;height:18px;line-height:18px}.image-picker-dropdown .picker-wrapper article ul.folder-list>li.image i.icon.ok.sign{position:absolute;z-index:inherit;top:15px;right:25px;font-size:14px;margin:0;opacity:0}.image-picker-dropdown .picker-wrapper article ul.folder-list>li.image.selected:before{content:\"\";display:inline-block;position:absolute;top:10px;left:20px;right:20px;height:90px;background:rgba(0,0,0,.5)}.image-picker-dropdown .picker-wrapper article ul.folder-list>li.image.selected i.icon.ok.sign{opacity:1}.image-picker-dropdown .picker-wrapper article ul.folder-list>li:hover{background:#EEE}.image-picker-dropdown .picker-wrapper footer{height:40px;border-top:1px solid #EEE;-webkit-box-shadow:0 -1px 3px #EEE;-moz-box-shadow:0 -1px 3px #EEE;box-shadow:0 -1px 3px #EEE}.image-picker-dropdown .picker-wrapper footer>.selected-count{float:left;line-height:40px;margin-left:10px;font-size:12px;color:#666}.image-picker-dropdown .picker-wrapper footer>.ui.button{float:right;height:24px;margin:8px 10px 8px 0}.image-picker-dropdown .menu{font-size:12px!important;color:#000;left:-100px!important}.image-picker-dropdown .menu:after{left:109px!important}.image-picker-dropdown.md-editor.up .menu{top:auto!important;bottom:160%}.image-picker-dropdown.md-editor.up .menu:after{top:auto!important;bottom:-.25em;-webkit-transform:rotate(-135deg)!important;-moz-transform:rotate(-135deg)!important;-ms-transform:rotate(-135deg)!important;-o-transform:rotate(-135deg)!important;transform:rotate(-135deg)!important}.image-picker-dropdown.md-editor .menu,.image-picker-dropdown.md-editor.down .menu{left:-315px!important}.image-picker-dropdown.md-editor .menu:after,.image-picker-dropdown.md-editor.down .menu:after{left:324px!important}.image-picker-dropdown .url-image-import{text-align:center;position:relative}.image-picker-dropdown .url-image-import .image-preview{position:absolute;left:0;bottom:100%;width:100%;height:180px;background:#FFF;display:inline-block;text-align:center;vertical-align:middle;padding:5px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border-bottom:1px solid #EEE}.image-picker-dropdown .url-image-import .image-preview img{max-width:100%;max-height:170px;border-radius:3px}.image-picker-dropdown .url-image-import .image-preview i.remove.icon{position:absolute;right:10px;top:10px}.image-picker-dropdown .url-image-import .image-preview .loading-wrapper{padding:70px 0}.image-picker-dropdown .url-image-import .ui.form{padding:20px 0 10px}.image-picker-dropdown .url-image-import .ui.form label{font-size:14px!important}.image-picker-dropdown .url-image-import .ui.form input{width:260px!important}.partners .wrapper{margin:10px 0 0 30px}.partner{display:inline-block;margin:10px 10px 0 0;padding:10px;width:160px;border:1px solid #eee;text-align:center}.partner img{-webkit-filter:grayscale(100%);filter:url(/static/e4cab1df58c957502ba1fdabb0bc528c.svg#grayscale);max-height:40px;max-width:100%}.partner:hover img{filter:none;-webkit-filter:none}#gitsla,#security_description{padding:0 40px;line-height:200%;background-color:#fff;width:70%;margin:0 auto}#gitsla hr,#security_description hr{border:none;border-top:1px solid #ccc}#gitsla h1,#security_description h1{text-align:center;margin:20px auto 0;padding:20px 0;font-size:24px;line-height:36px}#gitsla p,#security_description p{margin:12px 0;text-indent:35px;font-size:14px}#gitsla strong,#security_description strong{font-size:18px}#gitsla ol,#security_description ol{counter-reset:section;list-style-type:none}#gitsla ol>li>ol>li::before,#security_description ol>li>ol>li::before{content:counters(section,\".\") \" \"}#gitsla ol>li::before,#security_description ol>li::before{counter-increment:section;content:counters(section,\".\") \".\"}#gitsla article,#security_description article{background-color:#f8f6f2;padding:10px;margin:20px 40px}#gitsla article>ul,#security_description article>ul{padding-left:20px}#gitsla article>ul>li,#security_description article>ul>li{font-size:12px;list-style:none}#gitsla .bottom,#security_description .bottom{padding-bottom:20px}table.text-align-left-th th{text-align:left}.user-account-wrapper>section{background:#FFF;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;padding:20px;margin-bottom:30px}.user-account-wrapper>section>h3{font-size:20px;font-weight:400;margin:0 0 20px}.user-account-wrapper>section.summary{position:relative}.user-account-wrapper>section.summary>img{position:absolute;top:20px;left:20px}.user-account-wrapper>section.summary .detail .column{font-size:15px;color:#666}.user-account-wrapper>section.summary .detail .column .inner-item{margin-bottom:10px;min-height:20px}.user-account-wrapper>section.summary .detail .column .inner-item .none-color-link{color:#666}.user-account-wrapper>section.summary .detail .column .inner-item .icon{color:#1E4A5E;font-size:17px}.user-account-wrapper>section.summary .detail .column .inner-item em{color:#E98D4E;font-size:18px;font-style:normal}.user-account-wrapper>section.summary .detail .column .inner-item .button{margin-left:15px}.user-account-wrapper>section.summary .detail .column .inner-item:last-child{margin-bottom:0}.user-account-wrapper>section.summary .detail .column .inner-item strong{font-weight:500}.user-account-wrapper>section.summary .detail .column .inner-item .progress-bar{width:60px;height:5px;background:#EEE;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;position:relative;vertical-align:2px;display:inline-block;margin-right:5px}.user-account-wrapper>section.summary .detail .column .inner-item .progress-bar .progress{position:absolute;display:inline-block;height:100%;border-top-left-radius:2px;border-bottom-left-radius:2px;background-color:#A1CF64}.user-account-wrapper>section.summary article{min-height:98px;margin-left:120px}.user-account-wrapper>section.summary article h2{font-size:18px;font-weight:400;padding:8px 0 15px;margin:0}.top-up-wrapper header{margin-bottom:20px!important}.top-up-wrapper .description{margin:35px 0;color:#555}.top-up-wrapper .balance{font-size:14px}.top-up-wrapper .balance em{font-style:normal;font-size:20px;font-weight:400;color:#D95C5C}.top-up-wrapper .top-up-form{margin:35px 0}.top-up-form.ui.form .field{margin:0 0 35px}.top-up-form.ui.form .field label{font-size:14px;color:#000}.top-up-form.ui.form .field.balance{font-size:14px}.top-up-form.ui.form .field.balance em{font-style:normal;font-size:20px;font-weight:400;color:#D95C5C}.top-up-form.ui.form .field.message{color:#D95C5C}.top-up-form.ui.form .field img.top-up-method-img{background:#FFF;padding:3px;border:1px solid #CCC;border-radius:3px;margin-left:10px}.top-up-form.ui.form .tips{font-size:13px;color:#999;margin-left:10px}#account-top-up-modal,#account-top-up-result-modal,.ui.modal.account-charge-modal,.ui.modal.account-invoice-modal{-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;top:50%;left:50%;background-color:#F9F5F2}#account-top-up-modal .header,#account-top-up-result-modal .header,.ui.modal.account-charge-modal .header,.ui.modal.account-invoice-modal .header{padding:15px 20px;font-size:22px;font-weight:400;background-color:#FFF}#account-top-up-modal .content,#account-top-up-result-modal .content,.ui.modal.account-charge-modal .content,.ui.modal.account-invoice-modal .content{background-color:#F9F5F2;border-bottom-left-radius:5px;border-bottom-right-radius:5px}#account-top-up-modal .action-buttons,#account-top-up-modal .actions,#account-top-up-result-modal .action-buttons,#account-top-up-result-modal .actions,.ui.modal.account-charge-modal .action-buttons,.ui.modal.account-charge-modal .actions,.ui.modal.account-invoice-modal .action-buttons,.ui.modal.account-invoice-modal .actions{background-color:#FFF;border-bottom-left-radius:5px;border-bottom-right-radius:5px}.ui.modal.account-charge-modal{width:620px;height:400px;margin-top:-200px;margin-left:-310px}.ui.modal.account-charge-modal .content{height:285px}#account-top-up-modal{width:600px;height:300px;margin-top:-150px;margin-left:-300px}#account-top-up-modal .content{padding:60px 100px}#account-top-up-modal .content .loading{position:absolute;left:100px;top:60px;font-size:50px}#account-top-up-modal .content article{padding-left:80px}#account-top-up-modal .content article p{margin:0 0 20px;line-height:30px;font-size:14px;font-weight:400}#account-top-up-modal .content article .button:first-child{margin-right:10px}#account-top-up-result-modal,.ui.modal.account-result-modal{width:400px;height:200px;margin-top:-100px;margin-left:-200px}#account-top-up-result-modal .content,.ui.modal.account-result-modal .content{text-align:center}#account-top-up-result-modal h2.green,.ui.modal.account-result-modal h2.green{color:#32be77}.payment-history-wrapper .ui.tabular.menu .item{padding:10px 15px}.payment-history-wrapper .ui.tabular.menu .item.active{background:none!important;border-bottom:1px solid #F7F6F2!important}.payment-history-wrapper .ui.tabular.menu .item .label{padding:3px 9px!important;background-color:rgba(0,0,0,.15)!important;color:#666}.payment-history-wrapper article .ui.dropdown{padding-bottom:3px}.payment-history-wrapper article .ui.dropdown .ui.button{padding:0 2em 0 1.5em;background-color:#E98D4E!important;color:#FFF!important}.payment-history-wrapper article .ui.dropdown .dropdown.icon{position:absolute;right:10px;top:5px;margin:0;color:#FFF}.payment-history-wrapper article .ui.dropdown .item{padding:.7em!important}.payment-history-wrapper article .ui.dropdown .item .icon{margin-right:3px}.invoice-wrapper header{margin-bottom:30px!important}.invoice-wrapper .invoice-available{font-size:14px}.invoice-wrapper .invoice-available em{font-style:normal;font-weight:400;color:#D95C5C}.invoice-wrapper .invoice-form{margin:35px 0}.invoice-wrapper .invoice-form>.field{margin:0 0 35px}.invoice-wrapper .invoice-form>.field label{font-size:14px;color:#000}.invoice-wrapper .invoice-form .tips{font-size:13px;color:#999;margin-left:10px}.invoice-wrapper .invoice-list h2{font-size:17px;font-weight:400}#account-invoice-modal{width:720px;margin-left:-360px}#account-invoice-modal>.content{padding:0}#account-invoice-modal .ui.form{padding:1.3em 2em}#account-invoice-modal .ui.form>.field h4{font-size:19px;font-weight:400;padding:10px 0}#account-invoice-modal .ui.form>.field>label{width:70px;font-size:14px;color:#000}#account-invoice-modal .ui.form>.field>input[type=text]{width:85%}#account-invoice-modal .ui.form>.field em.invoice-price{font-size:18px;font-style:normal;color:#D95C5C;font-weight:500}#account-invoice-modal .ui.form>.field .tips{font-size:13px;color:#999;margin-left:10px}#account-invoice-modal .ui.form>.field .tips em{font-size:16px;font-style:normal;color:#D95C5C;font-weight:500}#account-exchange-coin-modal .content{text-align:center}#account-exchange-coin-modal .content .field.summary{margin:10px 0 30px}#account-exchange-coin-modal .content .field.summary .item{display:inline-block;margin-right:20px}#account-exchange-coin-modal .content .field.summary .item em{color:#E98D4E;font-style:normal}#account-exchange-coin-modal .content .field.exchange-rate{font-size:14px;color:#555}#account-exchange-coin-modal .content .field.exchange-rate .summary{width:300px;display:inline-block}#account-exchange-coin-modal .content form input{width:300px}#account-exchange-coin-modal .action-buttons span{float:left}#account-exchange-coin-modal .action-buttons span em{font-size:2rem;font-style:normal;color:orange}@media only screen and (max-width:1000px){#account-exchange-coin-modal .content .field.exchange-rate .summary,#account-exchange-coin-modal .content form input{width:200px}}#create_folder{margin:10px 25px;padding:0;border:1px dashed #CCC;background:#fff;text-align:center}#attachment{margin-left:210px!important}#attachment tbody .attachment{font-size:13px}#attachment tbody .attachment.white{background-color:#fff!important}#attachment tbody .attachment:hover{background:#FFF!important}#attachment tbody .attachment.canWhiteSelect{cursor:pointer}#attachment tbody .attachment.uploading .filename{cursor:not-allowed}#attachment tbody .attachment .icon:hover{color:#000}#attachment .attachment{position:relative}#attachment .attachment .filename{width:auto;line-height:45px}#attachment .attachment .filename img{float:left;margin-right:5px;border:2px solid #fff}#attachment .attachment .filename span{cursor:pointer}#attachment .attachment .size{color:#999;width:110px;padding-right:20px;text-align:left}#attachment .attachment .id{color:#999;width:80px;padding-right:20px;text-align:left}#attachment .attachment .uploader{position:relative;line-height:45px;padding-left:45px;width:150px}#attachment .attachment .uploader img{position:absolute;left:0;top:17px}#attachment .attachment .time{width:125px}#attachment .attachment .action,#attachment .attachment .process{width:167px;font-size:18px;position:relative}#attachment .attachment .action>a{float:right}#attachment .attachment .action .icon{font-size:14px;opacity:0;margin-right:5px;-webkit-transition:opacity .2s ease-in;-moz-transition:opacity .2s ease-in;-ms-transition:opacity .2s ease-in;-o-transition:opacity .2s ease-in;transition:opacity .2s ease-in;color:#666}#attachment .attachment:hover .action .icon{opacity:1;margin-right:5px}#attachment .attachment .remove-file.icon{position:absolute;top:26px;right:-13px}#upload-attachment{overflow:hidden}#attachment input[type=file],#upload-attachment input[type=file]{display:none;position:absolute;top:0;right:0;margin:0;opacity:0;-ms-filter:'alpha(opacity=0)';font-size:200px;direction:ltr;cursor:pointer;z-index:2}#shared_icon.green{opacity:1!important}.project-attachments thead{font-size:14px;color:#666}.project-attachments thead td{line-height:30px!important}.project-attachments .attachment>.checkbox{text-align:center;font-size:18px;width:30px;cursor:pointer}.project-attachments .attachment .filename .file-icon,.project-attachments .attachment .filename img{float:left;margin-right:5px;width:45px;height:45px;text-align:center;-webkit-background-size:contain;background-position:50% 50%;background-size:contain;box-sizing:border-box;line-height:45px;font-weight:bolder;cursor:pointer}.project-attachments .attachment.uploading .filename .file-icon{cursor:not-allowed}#move-folder i.folder.icon{margin-right:5px}#move-folder>.menu .item{border:none}#move-folder>.menu>.no-defaults>.item.sub_item span{display:inline-block;margin-left:10px}#move-folder .current{color:#999}#move-folder .current:hover{background:#fff;cursor:default}#edit_action{margin-top:0}#edit_action .icon{margin-right:0}.file-upload-zone{margin:20px 0;position:relative;height:auto;width:100%;cursor:pointer;overflow:hidden;font-size:14px;border-radius:5px}.file-upload-zone:hover{color:#A1CF64}#attachment-create textarea{font-size:14px;line-height:normal;min-height:400px!important}#attachment-create textarea.modal{max-height:580px;min-height:580px!important}#attachment-create .action{margin-top:20px}@media only screen and (max-width:1420px){#attachment-create textarea.modal{min-height:454px!important;max-height:454px}#attachment-create .action{margin-top:10px}}.pagedown-fullscreen .fullscreen-title a{display:none!important}#tweet-reward-modal .content{text-align:center}#tweet-reward-modal .content .field.summary{margin:10px 0 30px}#tweet-reward-modal .content .field.summary .item{display:inline-block;margin-right:20px}#tweet-reward-modal .content .field.summary .item em{color:#E98D4E;font-style:normal}#tweet-reward-modal .content .field.summary .item span{font-style:normal;font-weight:700;display:block;margin-top:16px}#tweet-reward-modal .content .error{text-align:left;font-size:14px}#tweet-reward-modal .content form input{width:300px}@media only screen and (max-width:1000px){#tweet-reward-modal .content .field.exchange-rate .summary,#tweet-reward-modal .content form input{width:200px}}.score-wrapper{width:100%}.score-wrapper section{margin-bottom:30px}.score-wrapper section.summary{background:#FFF;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;padding:20px}.score-wrapper section.summary .grid .column{vertical-align:middle!important;text-align:center!important;padding:1% 1.5%}.score-wrapper section.summary .grid .column h4{font-size:14px;font-weight:400;margin:0 0 20px}.score-wrapper section.summary .grid .column strong{font-size:26px;font-weight:500}.score-wrapper section.summary .grid .column strong.green{color:#32be77}.score-wrapper section.summary .grid .column strong .icon.loading,.score-wrapper section.summary .grid .column strong.gray{color:#999}.score-wrapper section.summary .grid .column.consume .button{background-color:#FB4F87;overflow:hidden}.score-wrapper section.detail .tips{text-align:center;color:#999}.score-wrapper section.detail article.markdown.content table{table-layout:fixed}.score-wrapper section.detail article.markdown.content table th{color:#666}.score-wrapper section.detail article.markdown.content table th.change,.score-wrapper section.detail article.markdown.content table th.source,.score-wrapper section.detail article.markdown.content table th.time{width:20%}.score-wrapper section.detail article.markdown.content table td{border:none!important}.score-wrapper section.detail article.markdown.content table td.source{color:#333;line-height:23px}.score-wrapper section.detail article.markdown.content table td.change,.score-wrapper section.detail article.markdown.content table td.left{color:#E98D4E;font-size:18px;text-align:center;font-weight:600}.score-wrapper section.detail article.markdown.content table td.time{color:#999;text-align:center}.score-wrapper section.detail article.markdown.content table td.comments{color:#999;line-height:20px}.score-wrapper section.detail article.markdown.content table td,.score-wrapper section.detail article.markdown.content table th{line-height:32px}.score-wrapper section.detail article.markdown.content table tbody{border:1px solid #CCC}.score-wrapper section.detail article.markdown.content table tr{border:1px solid #DDD}.gift-wrapper{background:#fff;min-width:840px;min-height:600px;padding:20px}.gift-wrapper .title{font-size:18px;padding-bottom:10px}.gift-wrapper .title .points-left{font-size:12px;color:#df5a5a}.gift-wrapper .gift-item{display:inline-block;text-align:center;border:1px solid #ddd;padding:10px;margin:0 32px 10px 0;border-radius:4px;vertical-align:top}.gift-wrapper .gift-item span{display:block}.gift-wrapper .gift-item .content img{width:220px}.gift-wrapper .gift-item .gift-name{font-size:14px;padding:8px}.gift-wrapper .gift-item .gift-cost{padding-bottom:10px;color:#EB935D;font-size:18px}.gift-wrapper .gift-item .action a{width:100%}.gift-wrapper .gift-item .action .ui.button.medium.exchange{color:#DF5A5A!important}.exchange-wrapper{background:#fff;width:840px;padding:40px}.exchange-wrapper .title{font-size:16px;color:#999;padding:20px 0}.exchange-wrapper span{display:block}.exchange-wrapper .header{border-bottom:1px solid #ddd;padding-bottom:10px;font-size:18px}.exchange-wrapper form{font-size:14px}.exchange-wrapper form .field{margin-bottom:10px}.exchange-wrapper form .ui.small.input input{border-radius:4px;width:350px;padding:6px;height:36px}.exchange-wrapper .exchange-info{padding-bottom:20px;border-top:1px #ddd dotted;border-bottom:1px #ddd dotted}.exchange-wrapper .confirm .ui.default.green.button{margin-right:10px}.exchange-wrapper .confirm .exchange-tip{font-size:12px;margin-top:20px;color:#df5a5a}.file-activities{width:320px;background:#fff;position:relative;height:600px;color:#323a45;border-bottom-right-radius:5px}.file-activities .file-activity-items{height:530px;overflow-y:auto;color:rgba(50,58,69,.5)}.file-activities .file-activity-items .action{font-size:12px}.file-activities .file-activity-items .action .icon{width:60px;color:rgba(50,58,69,.8)}.file-activities .file-activity-items .action .detail{width:280px;position:relative}.file-activities .file-activity-items .action .detail .username{color:rgba(50,58,69,.7);max-width:80px;display:inline-block;height:14px;vertical-align:top}.file-activities .file-activity-items .action .detail .file-name,.file-activities .file-activity-items .action .detail .file-version{position:absolute;left:0;top:24px;font-weight:700;color:rgba(50,58,69,.7)}.file-activities .file-activity-items .action .detail .time{float:right;margin-right:10px}.file-activities .file-activity-items .avatar{width:60px;text-align:center}.file-activities .file-activity-items .actions{display:none;padding:0;font-size:12px;float:right;margin-right:10px}.file-activities .file-activity-items .detail{width:280px}.file-activities .file-activity-items .detail .created-time{font-size:12px;float:right;margin-right:10px}.file-activities .file-activity-items .detail .markdown{width:240px;margin-top:4px;color:rgba(50,58,69,.7)}.file-activities .file-activity-items .detail .comment-username{color:rgba(50,58,69,.7);font-size:12px}.file-activities .file-activity-items .detail:hover .created-time{display:none}.file-activities .file-activity-items .detail:hover .actions{display:inline-block}.file-activities .file-comment-wrapper{padding:14px 10px;position:absolute;bottom:0;background:#fff;border-bottom-right-radius:5px;border-top:1px solid #ddd}.file-activities .file-comment-wrapper .file-comment-textarea{height:40px;width:300px;padding:0;border:0;resize:none;outline:0}.file-histories{width:320px;height:600px;background:#fff;color:#323a45;font-size:12px}.file-histories .file-history-wrapper{padding:10px}.file-histories .file-history-wrapper .file-history-item{position:relative;width:300px;padding:10px 0}.file-histories .file-history-wrapper .file-history-item .file-history-column{width:calc(100% - 50px);display:inline-block}.file-histories .file-history-wrapper .file-history-item .file-history-column .file-history-name{font-size:14px;margin-bottom:6px;display:inline-block;max-width:calc(100% - 50px);vertical-align:middle;word-wrap:break-word;word-break:keep-all}.file-histories .file-history-wrapper .file-history-item .file-history-column .file-history-action{display:inline-block;margin-bottom:6px}.file-histories .file-history-wrapper .file-history-item .file-history-column .actions .action-item{margin-right:10px}.file-histories .file-history-wrapper .file-history-item.current{background:#f4f4f4}.file-histories .file-history-wrapper .file-history-item:before{content:'';display:inline-block;width:10px;height:10px;background:#f4f4f4;border-radius:10px;margin:0 20px 44px}.file-histories .file-history-wrapper .file-history-item.current:before{background:#eb935d}.file-histories .file-history-wrapper .file-history-item.current:after{position:absolute;content:\"\";right:0;top:0;width:0;height:0;border-top:0 solid transparent;border-right:1em solid transparent;border-bottom:1em solid transparent;border-left:0 solid transparent;border-right-color:#eb935d}.project-file-viewer .next .icon,.project-file-viewer .prev .icon{position:absolute;font-size:72px;color:#FFF;cursor:pointer;opacity:.6;top:50%;margin-top:-36px}.project-file-viewer .next .icon:hover,.project-file-viewer .prev .icon:hover{opacity:1}.project-file-viewer .next .icon.right{right:-80px}.project-file-viewer .prev .icon.left{left:-80px}.project-file-viewer .attachment-modal-rename{padding:10px}.project-file-viewer .attachment-modal-rename input{height:30px;width:700px}.project-file-viewer .attachment-preview-modal-previewer{height:667px;overflow-y:auto;border-bottom-left-radius:4px;border-top:1px solid #DCDDDE;box-sizing:border-box;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;border-right:1px solid #DCDDDE}.project-file-viewer .attachment-preview-modal-previewer .preview-image-container{line-height:633.65px}.project-file-viewer .attachment-preview-modal-previewer.preview-image-background{background:#4c4d50}.project-file-viewer .current-file-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:21px;color:#323a45;height:50px;line-height:50px;padding-left:20px}.project-file-viewer .ui.tabular.menu{margin-top:0;border-top:1px solid #DCDDDE;border-bottom:0}.project-file-viewer .ui.tabular.menu .item.active{background-color:#fff;margin-top:-1px}.project-file-viewer .ui.tabular.menu .item{height:50px;border:0;font-size:14px;width:160px;text-align:center;border-radius:0;background-color:#f4f4f4;line-height:24px}.project-file-viewer .white-block{background:0 0}.project-file-viewer #text-preview{margin:0;padding:15px 40px}.project-file-viewer #text-preview .txt-preview-wrapper{min-height:600px;padding:10px;margin:0;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.project-file-viewer #text-preview .markdown.content{background-color:#fff;min-height:600px;padding:10px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.project-file-viewer #office_preview{margin-top:-90px}.project-file-viewer .attachment-preview-modal-editor .ui.form .ui.medium.action.input{margin:10px 20px}.project-file-viewer .attachment-preview-modal-editor .ui.form .ui.medium.action.input input{border:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;border-top-right-radius:.3125em!important;border-bottom-right-radius:.3125em!important;width:740px}.project-file-viewer .attachment-preview-modal-editor .ui.form .ui.medium.action.input input:focus{border-bottom-left-radius:.3125em!important;border-top-left-radius:.3125em!important}.project-file-viewer .attachment-preview-modal-editor .ui.form .ui.medium.action.input .ui.green.medium.button{display:none}.project-file-viewer .attachment-preview-modal-editor .editor,.project-file-viewer .attachment-preview-modal-editor .ui.form .editor-textarea{margin:0 20px}.project-file-viewer .attachment-preview-modal-editor .editor .grippie.pagedown-resizer{display:none}.project-file-viewer .attachment-preview-modal-editor .editor .pagedown.wmd-panel>.pagedown-editor{height:540px}.project-file-viewer .attachment-preview-modal-editor .editor #attachment-create.modal-editing textarea{height:580px!important}.project-file-viewer .attachment-preview-modal-editor .action{margin-right:20px}.project-file-viewer.editing{background-color:#393a3d;border-radius:5px}.project-file-viewer.editing .editor{background-color:#fff;border-radius:5px}.project-file-viewer.editing .tool-button{color:#fff}.project-file-viewer.editing .file-inner-pane{background-color:#fff;border-bottom-right-radius:5px}.project-file-viewer.editing .ui.form.loading:after{width:740px;left:20px;border-radius:5px}.project-file-tool-bar{text-align:right;font-size:24px;height:50px}.project-file-tool-bar .tool-button{color:#323a45;margin-right:10px;display:inline-block;vertical-align:middle;line-height:50px}.project-file-tool-bar .coding.coding-share.icon{opacity:inherit;color:rgba(0,0,0,.6)}.project-file-tool-bar #share-button{cursor:pointer;color:#444}.project-file-tool-bar #share-button:hover{color:#000}.project-file-tool-bar .share-popup{font-size:18px}.file-info-wrapper{display:table}.file-info-wrapper .file_info_word{height:32px;font-size:15px;display:table-row}.file-info-wrapper .file-info-left{display:table-cell;width:60px;font-weight:700;text-align:right;padding-right:10px}.file-info-wrapper .file-info-right{display:table-cell}.project-file-detail-activity{margin:0 5px 20px;position:relative}.project-file-detail-activity:before{width:1px;position:absolute;top:0;left:76px;height:100%;border-left:3px solid #EEE;content:'';z-index:-1}.project-file-detail-activity:after{content:'';height:20px;width:100%;display:block;border-bottom:3px solid #EEE}.project-file-detail-activity .project-file-activity{position:relative;margin-bottom:20px;border:2px solid #F7F6F2;border-bottom:none}.project-file-detail-activity .project-file-activity:last-child{margin-bottom:0}.project-file-detail-activity .project-file-activity.action{line-height:32px;color:#999;font-size:12px}.project-file-detail-activity .project-file-activity.action>.icon{width:30px;height:30px;position:absolute;left:59px;top:-2px;-webkit-border-radius:17px;-moz-border-radius:17px;border-radius:19px;background:#EEE;text-align:center;line-height:32px;color:#666;border:2px solid #F7F6F2}.project-file-detail-activity .project-file-activity.action>.icon.finish{background:#DF5A5A;color:#FFF}.project-file-detail-activity .project-file-activity.action>.icon.update_priority{background:#F75288;color:#FFF}.project-file-detail-activity .project-file-activity.action>.icon.restore{background:#A1CF64;color:#FFF}.project-file-detail-activity .project-file-activity.action>.icon.update_deadline{background:#eb935d;color:#FFF}.project-file-detail-activity .project-file-activity.action>.icon.commit_refer{background:#5191bd;color:#FFF}.project-file-detail-activity .project-file-activity.action>.icon i.icon{margin:0;font-size:14px;opacity:1}.project-file-detail-activity .project-file-activity.action>.detail{padding-left:100px}.project-file-detail-activity .project-file-activity.action>.detail .commits{margin:0;padding:0}.project-file-detail-activity .project-file-activity.action>.detail .commits .commit{line-height:23px}.project-file-detail-activity .project-file-activity.action>.detail .commits .all-message{line-height:1.2em;padding-left:20px;margin:0}.project-file-detail-activity .project-file-activity.comment>.avatar{position:absolute;left:3px;top:8px}.project-file-detail-activity .project-file-activity.comment>.avatar img{width:36px;height:36px}.project-file-detail-activity .project-file-activity.comment>.detail{position:relative;background:#FFF;padding:15px;margin-left:60px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;border:1px solid #EEE}.project-file-detail-activity .project-file-activity.comment>.detail .content{font-size:14px;color:#333;margin-bottom:10px}.project-file-detail-activity .project-file-activity.comment>.detail .created-time{color:#999;font-size:12px}.project-file-detail-activity .project-file-activity.comment>.detail .created-time .mr10{margin-right:10px}.project-file-detail-activity .project-file-activity.comment>.detail .created-time .mr10 a{color:#999}.project-file-detail-activity .project-file-activity.comment>.detail .created-time .mr10 a:hover{color:#666}.project-file-detail-activity .project-file-activity.comment>.detail .created-time i.icon{margin-right:0}.project-file-detail-activity .project-file-activity.comment>.detail:before{margin-top:-11px;bottom:auto;right:auto;top:30px;left:-6px;position:absolute;content:\"\";width:.6em;height:.6em;background-image:none;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);z-index:2;-webkit-transition:background .1s linear;-moz-transition:background .1s linear;transition:background .1s linear;background-color:#FFF;border-left:1px solid #EEE;border-bottom:1px solid #EEE}.project-file-detail-activity .project-file-activity.comment>.detail .created-time .comment,.project-file-detail-activity .project-file-activity.comment>.detail .created-time .remove{display:none}.project-file-detail-activity .project-file-activity.comment>.detail:hover .created-time .comment,.project-file-detail-activity .project-file-activity.comment>.detail:hover .created-time .remove{display:inline}.file-histories.detail{width:auto;height:auto;background:0 0}.file-histories.detail .file-history-wrapper{padding:0}.file-histories.detail .file-history-wrapper .file-history-item:before{background:#999;width:0}.file-histories.detail .file-history-wrapper .file-history-item.current:before{background:#eb935d!important}.file-histories.detail .file-history-wrapper .file-history-item{width:auto;border-bottom:1px solid #DCDDDE}.file-histories.detail .file-history-wrapper .file-history-item .file-history-confirm{position:absolute;top:14px;right:0}.file-histories.detail .file-history-wrapper .file-history-item .file-history-confirm .tips{color:#323a45;font-size:12px}.file-histories.detail .file-history-wrapper .file-history-item .file-history-confirm .actions{margin-top:20px;text-align:right}.file-histories.detail .file-history-wrapper .file-history-item .file-history-confirm .actions .button{margin-right:5px}.file-histories.detail .file-history-wrapper .file-history-column{vertical-align:top}.file-histories.detail .file-history-wrapper .file-history-column .file-history-version{vertical-align:top;background:#999;color:#fff;font-size:12px;display:inline-block;padding:2px 10px;border-radius:3px;margin-right:6px}.file-histories.detail .file-history-wrapper .file-history-column .file-history-name-wrapper{display:inline}.file-histories.detail .file-history-wrapper .file-history-column .file-history-name-wrapper .file-history-remark-editor{width:300px;outline:0;border:1px solid #ddd;padding:1px;height:19px}.file-histories.detail .file-history-wrapper .file-history-column .file-history-remark{opacity:.5}.file-histories.detail .file-history-wrapper .file-history-column .file-history-action{display:block;color:#323a45;opacity:.5}.file-histories.detail .file-history-wrapper .file-history-column .file-history-action .actions a{color:#2d59a2;font-size:12px}.file-histories.detail .file-history-wrapper .file-history-column .file-history-name{font-weight:800;font-size:14px;color:#323a45}.file-histories.detail .file-history-wrapper .file-history-item.current:after{border-top:0 solid transparent;border-right:0 solid transparent;border-bottom:1em solid transparent;border-left:1em solid transparent;border-left-color:#eb935d;right:auto;left:0}.file-histories.detail .file-history-wrapper .file-history-item.current .file-history-column .file-history-version{background:#eb935d}.file-histories.detail .upload-tip{font-weight:800;margin-top:20px;display:block;margin-bottom:-12px}.file-histories.detail .file-upload-zone{margin:20px 0;position:relative;border:2px dashed #CCC;height:auto;cursor:pointer;overflow:hidden;font-size:14px;border-radius:5px;padding:80px!important}.file-histories.detail .file-upload-zone:hover{border:2px dashed #A1CF64;color:#A1CF64}@media only screen and (max-width:1000px){.file-histories.detail .file-history-wrapper .file-history-remark{max-width:200px}}.file-histories.modal{background:0 0}.file-histories.modal .file-history-wrapper{padding:0 10px;height:530px;overflow-y:auto}.file-histories.modal .file-history-wrapper .file-history-item:before{background:#999;width:0}.file-histories.modal .file-history-wrapper .file-history-item.current:before{background:#eb935d!important}.file-histories.modal .file-history-wrapper .file-history-item{width:auto}.file-histories.modal .file-history-wrapper .file-history-item .file-history-confirm{position:absolute;top:14px;right:0}.file-histories.modal .file-history-wrapper .file-history-item .file-history-confirm .tips{color:#323a45;font-size:12px}.file-histories.modal .file-history-wrapper .file-history-item .file-history-confirm .actions{margin-top:20px;text-align:right}.file-histories.modal .file-history-wrapper .file-history-item .file-history-confirm .actions .button{margin-right:5px}.file-histories.modal .file-history-wrapper .file-history-column{vertical-align:top}.file-histories.modal .file-history-wrapper .file-history-column .file-history-version{vertical-align:top;background:#999;color:#fff;font-size:12px;display:inline-block;padding:2px 10px;border-radius:3px;margin-right:6px}.file-histories.modal .file-history-wrapper .file-history-column .file-history-name-wrapper{display:inline}.file-histories.modal .file-history-wrapper .file-history-column .file-history-name-wrapper .file-history-remark-editor{outline:0;border:1px solid #ddd;padding:1px;height:19px;width:150px}.file-histories.modal .file-history-wrapper .file-history-column .file-history-remark{opacity:.5}.file-histories.modal .file-history-wrapper .file-history-column .file-history-action{display:block;color:#323a45;opacity:.5}.file-histories.modal .file-history-wrapper .file-history-column .file-history-action .actions a{color:#2d59a2;font-size:12px}.file-histories.modal .file-history-wrapper .file-history-column .actions{padding:10px 0;text-align:left}.file-histories.modal .file-history-wrapper .file-history-column .file-history-name{font-weight:800;font-size:14px;color:#323a45;max-width:180px}.file-histories.modal .file-history-wrapper .file-history-item.current:after{border-top:0 solid transparent;border-right:0 solid transparent;border-bottom:1em solid transparent;border-left:1em solid transparent;border-left-color:#eb935d;right:auto;left:0}.file-histories.modal .file-history-wrapper .file-history-item.current .file-history-column .file-history-version{background:#eb935d}.file-histories.modal .file-history-confirm{background:#f4f4f4;height:70px;border-bottom-right-radius:5px}.file-histories.modal .file-history-confirm .tips{display:inline-block;padding:10px}.file-histories.modal .file-history-confirm .actions{padding:0 2rem}.file-histories.modal #file-modal-history-upload-zone{display:none}.file-histories.modal .upload-picker-wrapper{border-bottom-right-radius:4px;height:70px;text-align:center;background-color:#f4f4f4}.file-histories.modal .upload-picker-wrapper .upload-button{cursor:pointer;display:inline-block;border-radius:3px;width:280px;padding:14px 10px;margin-top:16px;color:rgba(50,58,69,.5)}.file-histories.modal .upload-picker-wrapper .upload-button:hover{color:#A1CF64}@media only screen and (max-width:1420px){.file-activities,.file-histories{height:453px}.file-activities .file-activity-items,.file-histories.modal .file-history-wrapper{height:383px}.project-file-viewer #text-preview .txt-preview-wrapper{min-height:460px}.project-file-viewer .attachment-preview-modal-previewer{height:520px}.project-file-viewer .attachment-preview-modal-previewer .preview-image-container{line-height:494px}.project-file-viewer .attachment-preview-modal-editor .editor .pagedown.wmd-panel>.pagedown-editor{height:411px}.project-file-viewer #text-preview .markdown.content{min-height:467px}}#preview-image{max-width:90%}#preview-icon{position:relative;width:200px;height:200px;cursor:pointer;margin:100px auto}#preview-icon:hover i.icon{color:rgba(255,255,255,1)}#preview-icon i.icon{font-size:60px;position:absolute;color:rgba(255,255,255,0);bottom:5px;right:5px;margin:0}#preview-icon .file-icon{width:200px;height:200px;font-size:30px;font-size:80px;line-height:170px}#image-preview,#pdf-preview{position:relative}#pdf-preview.loaded{display:inline-block}#pdf-preview .button:hover{background:rgba(0,0,0,.1);cursor:pointer}#pdf-preview .next,#pdf-preview .prev{position:absolute;width:50%;height:100%;z-index:2;font-size:50px}#pdf-preview .button i.icon{display:none;position:absolute;top:50%;margin-top:-25px;color:#FFF}#pdf-preview .button:hover i.icon{display:inline}#pdf-preview .prev{left:0}#pdf-preview .prev>i.icon{left:20px}#pdf-preview .next{right:0}#pdf-preview .next>i.icon{right:20px}#pdf-preview .count{border-radius:3px;position:absolute;bottom:5px;left:50%;margin-left:-40px;width:100px;font-size:16px;color:#FFF;background:rgba(0,0,0,.3);text-align:center}#pdf-preview>.resize{background:rgba(0,0,0,.1);display:none;position:absolute;top:5px;right:5px;width:50px;height:50px;z-index:3;color:#FFF;text-align:center;line-height:55px;cursor:pointer}#pdf-preview:hover>.resize{display:inline;border-radius:3px}#pdf-preview>.resize i.resize.icon{margin:0;font-size:25px}#preview-image-loading{position:absolute;z-index:3;width:140px;font-size:14px;top:50px;left:50%;background:rgba(0,0,0,.8);color:#FFF;padding:2px 3px;border-radius:3px;margin-left:-70px}.preview-button{margin-bottom:20px}.preview-button a{font-size:14px;background:#fff;color:#333;padding:4px 5px;border-radius:3px}.preview-button a:hover{background:#EEE;color:#000}.preview-button a:first-child{margin-right:20px}.preview-button a i{font-size:12px}.preview-button .prev{display:inline-block;float:left;margin-left:10px}.preview-button .next{display:inline-block;float:right;margin-right:10px}#text-preview .txt-preview-wrapper{padding:10px;background:#FFF;white-space:pre-wrap;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word}.file_info_word{margin-bottom:8px;font-size:14px}.white-block{padding:10px;border-radius:3px;background:#fff}#actions>.ui.default.button>i{margin-right:0}.project-upgrade-form .description{color:#666;font-size:15px;line-height:34px;margin-bottom:30px}.project-upgrade-form .ui.form .field>label{color:#000;font-size:16px}.project-upgrade-form .ui.form .field .tips{color:#999;font-size:15px}.project-upgrade-form .ui.form .field .tips.green{color:#32be77}.project-upgrade-form .ui.form .field .tips.red{color:#D95C5C}.project-upgrade-form .ui.form ul.versions{padding:0;margin:25px 0 0}.project-upgrade-form .ui.form ul.versions li{float:left;margin:0 30px 20px 0;list-style:none}.project-upgrade-form .ui.form ul.versions li input{display:none}.project-upgrade-form .ui.form ul.versions li input:checked~label{border-color:#32be77}.project-upgrade-form .ui.form ul.versions li input:checked~label a.corner.label{display:inline-block}.project-upgrade-form .ui.form ul.versions li label{display:inline-block;position:relative;width:220px;height:315px;text-align:center;background:#FFF;border-radius:3px;border:2px solid #DDD;padding:15px 10px 10px;box-sizing:border-box;cursor:pointer}.project-upgrade-form .ui.form ul.versions li label h2{margin:10px 0;font-weight:400;font-style:normal}.project-upgrade-form .ui.form ul.versions li label p{font-size:12px;line-height:20px;margin:0;color:#888}.project-upgrade-form .ui.form ul.versions li label>i.icon{font-size:50px;background-color:#536B77;opacity:1;margin-right:0}.project-upgrade-form .ui.form ul.versions li label a.corner.label{display:none;font-size:20px;border-color:#32be77!important}.project-upgrade-form .ui.form ul.versions li label a.corner.label i.icon{opacity:1}.project-upgrade-form .ui.form>.field.choose-field{margin-bottom:20px}.project-upgrade-form .ui.form .fields:not(:last-child),.project-upgrade-form .ui.form>.field:not(:last-child){margin-bottom:35px}.project-upgrade-form .ui.form .payment-period .field{margin-right:20px!important}.project-upgrade-form .ui.form .payment-period .field.voucher-form>p{display:block}.project-upgrade-form .ui.form .payment-period input~label,.project-upgrade-form .ui.form .payment-period label.just-show{padding-left:1.6em}.project-upgrade-form .ui.form .payment-period input~label em,.project-upgrade-form .ui.form .payment-period label.just-show em{color:#32be77;font-style:normal;font-weight:500;font-size:20px}.project-upgrade-form .ui.form .payment-period input~label strong,.project-upgrade-form .ui.form .payment-period label.just-show strong{background-color:#E88964;color:#fff;border-radius:3px;padding:1px 6px;font-size:14px}.project-upgrade-form .ui.form .payment-discount-info{display:inline-block;padding:3px 5px 7px 8px;border:1px dashed #999;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;line-height:22px}.public-project-view .project-upgrade-wrapper .project-upgraded>section.summary{border:1px solid #EEE}.project-upgrade-wrapper .project-upgraded .progress-bar{height:15px;background:#EEE;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;position:relative}.project-upgrade-wrapper .project-upgraded .progress-bar .progress{position:absolute;display:inline-block;height:100%;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;width:0;-webkit-transition:all cubic-bezier(0,0,.2,1) .6s;-moz-transition:all cubic-bezier(0,0,.2,1) .6s;-ms-transition:all cubic-bezier(0,0,.2,1) .6s;-o-transition:all cubic-bezier(0,0,.2,1) .6s;transition:all cubic-bezier(0,0,.2,1) .6s}.project-upgrade-wrapper .project-upgraded .progress-bar.red .progress{background-color:#D95C5C}.project-upgrade-wrapper .project-upgraded .progress-bar.green .progress{background-color:#A1CF64}.project-upgrade-wrapper .project-upgraded .progress-bar.blue .progress{background-color:#6ECFF5}.project-upgrade-wrapper .project-upgraded>section{background:#FFF;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;padding:20px;margin-bottom:30px}.project-upgrade-wrapper .project-upgraded>section>h1{margin:0 0 20px 6px;font-weight:400;font-size:20px}.project-upgrade-wrapper .project-upgraded>section>h1 em{background:#EEE;color:#444;font-size:12px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;padding:3px 5px;margin:0 5px;display:inline-block;font-style:normal;vertical-align:middle}.project-upgrade-wrapper .project-upgraded>section>h1 em i.icon{margin-right:2px}.project-upgrade-wrapper .project-upgraded>section>h1>a{font-size:12px;color:#333}.project-upgrade-wrapper .project-upgraded>section>.grid .column{overflow:hidden}.project-upgrade-wrapper .project-upgraded>section>.grid .column .inner{width:240px}.project-upgrade-wrapper .project-upgraded>section>.grid .column .inner .title{font-size:16px;font-weight:400;margin:1px 0 15px;height:28px}.project-upgrade-wrapper .project-upgraded>section>.grid .column .inner .title strong{font-weight:400}.project-upgrade-wrapper .project-upgraded>section>.grid .column .inner .title strong i.icon{font-weight:500;color:#1E4A5E;font-size:28px}.project-upgrade-wrapper .project-upgraded>section>.grid .column .inner .title .button{float:right}.project-upgrade-wrapper .project-upgraded>section>.grid .column .inner .title em{background:#EEE;color:#444;font-size:12px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;padding:3px 5px;margin:0 5px 3px;display:inline-block;font-style:normal;vertical-align:middle}.project-upgrade-wrapper .project-upgraded>section>.grid .column .inner>.progress{padding:0 0 0 8px}.project-upgrade-wrapper .project-upgraded>section>.grid .column .inner>.progress .progress-bar{margin-bottom:5px}.project-upgrade-wrapper .project-upgraded>section>.grid .column .inner>.progress .rate{font-size:13px;color:#333}.project-upgrade-wrapper .project-upgraded>section>.grid .column .inner>.progress .rate em{color:#000;font-weight:500;font-style:normal}.project-upgrade-wrapper .project-upgraded>section>.grid .column .inner>.progress .renewal-setting{font-size:13px;float:right;color:#999}.project-upgrade-wrapper .project-upgraded p.package{font-size:16px}.project-upgrade-wrapper .project-upgraded p.package a{margin-right:5px}.project-upgrade-wrapper .project-upgraded p.package .tips{font-size:13px;color:#999}.project-upgrade-wrapper .project-upgraded article{font-size:13px;color:#666;line-height:23px}.project-upgrade-wrapper .money span:first-child{font-weight:700;opacity:.6}.project-upgrade-wrapper .money span:last-child{font-size:2em;color:rgba(255,0,0,.6)}.voucher-form{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.voucher-form i{margin:0;width:20px}.voucher-form span{font-weight:700;opacity:.6;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.voucher-form>p>i:hover,.voucher-form>p>span:hover{cursor:pointer}.voucher-form .input{width:200px!important;float:left}.voucher-form .captcha-img{height:30px;margin-left:10px;float:left}.voucher-form .voucher-form-submit>a{margin-left:10px}.voucher-form .voucher-code-show{display:inline-block;border:1px dashed #ddd;line-height:30px;padding:3px 5px 7px 10px}.voucher-form .voucher-code-show>i{visibility:hidden}.voucher-form .voucher-code-show>i:hover{cursor:pointer}.voucher-form .voucher-code-show:hover>i{visibility:visible;vertical-align:middle;line-height:50px;height:50px;display:inline-block}.voucher-form .voucher-code-show>div{display:inline-block;float:left}.voucher-form .voucher-code-show>div>p{color:#999;margin:0;font-size:12px;line-height:18px}#project-upgrade-pro-modal{width:700px;height:auto;margin-top:-230px;margin-left:-350px}#project-upgrade-pro-modal>.content{height:auto}#project-upgrade-pro-modal>.content .ui.form .pl10{padding-left:10px}#project-upgrade-pro-modal .version-description,#renewal-manually-modal .version-description{position:relative;margin-bottom:50px}#project-upgrade-pro-modal .version-description i.icon,#renewal-manually-modal .version-description i.icon{position:absolute;font-size:50px;background-color:#1E4A5E}#project-upgrade-pro-modal .version-description article,#renewal-manually-modal .version-description article{margin-left:110px}#project-upgrade-pro-modal .version-description article h3,#renewal-manually-modal .version-description article h3{font-size:26px;font-weight:400;padding:13px 0;margin:0}#project-upgrade-pro-modal .version-description article h3 a,#renewal-manually-modal .version-description article h3 a{font-size:12px}#project-upgrade-pro-modal .version-description article p,#renewal-manually-modal .version-description article p{font-size:14px;color:#666;margin:0}#project-upgrade-pro-modal strong.red,#renewal-manually-modal strong.red{font-size:18px;color:#D95C5C}#renewal-manually-modal{width:auto;max-width:630px;height:auto}#renewal-manually-modal>.content{height:auto}#project-upgrade-just-renewal-modal,#project-upgrade-renewal-modal{width:600px;height:360px;margin-left:-300px;margin-top:-180px}#project-upgrade-just-renewal-modal>.content,#project-upgrade-renewal-modal>.content{height:245px}#project-renewal-result-modal{width:400px;height:200px;margin-left:-200px;margin-top:-100px}#project-renewal-result-modal>.content{-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;height:100%}#password-required-modal{width:500px;height:250px;margin-left:-250px;margin-top:-125px}#password-required-modal>.content{height:190px}.coding.help-popup.coupon-popup{z-index:1101}.project-support-wrapper>section{background:#FFF;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;padding:20px;margin-bottom:30px;border:1px solid #EEE}.project-support-wrapper>section h2{font-size:18px;font-weight:400;margin:0 0 25px}.project-support-wrapper>section h2 .button{float:right}.project-support-wrapper>section.qa ul{list-style:none;padding:0;margin-bottom:0}.project-support-wrapper>section.qa ul li{float:left;display:inline-block;width:50%;box-sizing:border-box;padding:0 20px 0 0;margin-bottom:10px;font-size:14px}.project-support-wrapper>section.qa ul li a{color:#333}.project-support-create-wrapper .ui.form .field label{margin-bottom:10px}.project-support-create-wrapper .ui.form .field .pagedown.wmd-panel>.pagedown-editor{height:200px}@media only screen and (max-width:1600px){#project-upgrade-wrapper{width:980px;margin:0 auto}}@media only screen and (max-width:2560px) and (min-width:1601px){#project-upgrade-wrapper{width:980px;margin:0 auto}}#project-upgrade-wrapper{padding:50px 0}#project-upgrade-wrapper h1{font-size:40px;font-weight:300;color:#32be77;text-align:center;margin:0;letter-spacing:6px}#project-upgrade-wrapper h1 span{letter-spacing:10px}#project-upgrade-wrapper h2{font-weight:300;color:#888;text-align:center;margin-top:0}#project-upgrade-wrapper h3{color:#586975;font-size:18px;font-weight:400;text-align:center}#project-upgrade-wrapper ul.features{list-style:none;padding:0;margin:50px 0}#project-upgrade-wrapper ul.features li{float:left;display:inline-block;width:50%;box-sizing:border-box;text-align:right;padding:10px 0}#project-upgrade-wrapper ul.features li:nth-child(2n){text-align:left;padding-left:30px}#project-upgrade-wrapper ul.features li>div{display:inline-block;width:320px;height:60px;text-align:left}#project-upgrade-wrapper ul.features li i.icon{font-size:55px;color:#F7F6F2;text-shadow:-1px -1px 0 #32be77,1px -1px 0 #32be77,-1px 1px 0 #32be77,1px 1px 0 #32be77;margin-right:0;position:absolute}#project-upgrade-wrapper ul.features li p{padding-left:75px;margin:3px 0 0;color:#838C94;font-size:14px;line-height:25px}#project-upgrade-wrapper ul.features li p strong{color:#586975;font-size:18px;font-weight:400;display:block}#project-upgrade-wrapper article.tips{font-size:12px;color:#999;margin-bottom:50px}#project-upgrade-wrapper article.tips p{margin-left:2em;position:relative;line-height:20px}#project-upgrade-wrapper article.tips p span{position:absolute;left:-2em}#project-upgrade-wrapper form.ui.form{text-align:center}#project-upgrade-wrapper form.ui.form>.field{margin-bottom:30px}#project-upgrade-wrapper form.ui.form>.field [cg-ui-dropdown]{width:172px;height:24px;line-height:1.8}#project-upgrade-wrapper form.ui.form>.field .ui.dropdown>.text{float:left;width:140px}#project-upgrade-wrapper form.ui.form>.field .ui.dropdown>.dropdown.icon{float:right}#project-upgrade-wrapper form.ui.form>.field .ui.dropdown .menu .item{border-top:0;padding:.65em 1em!important;max-width:200px}#project-upgrade-wrapper .markdown.content table{border:1px solid #CCC}#project-upgrade-wrapper .markdown.content table thead{border-bottom:1px solid #CCC}#project-upgrade-wrapper .markdown.content table td,#project-upgrade-wrapper .markdown.content table th{background:#FFF;border:none!important;height:50px}#project-upgrade-wrapper .markdown.content table td:nth-child(1),#project-upgrade-wrapper .markdown.content table th:nth-child(1){color:#838C94}#project-upgrade-wrapper .markdown.content table td:nth-child(2),#project-upgrade-wrapper .markdown.content table th:nth-child(2){color:#586975}#project-upgrade-wrapper .markdown.content table td:nth-child(3),#project-upgrade-wrapper .markdown.content table th:nth-child(3){color:#5191bd}#project-upgrade-wrapper .markdown.content table td:nth-child(4),#project-upgrade-wrapper .markdown.content table th:nth-child(4){color:#32be77}#project-upgrade-wrapper .markdown.content table tr{border:none!important}#project-upgrade-wrapper .markdown.content table tr td{text-align:right}#project-upgrade-wrapper .markdown.content table tr td:not(:first-child){text-align:center}#project-upgrade-wrapper .markdown.content table tr th{font-size:20px}.project-expired-label{background:#CCC;color:#444;font-size:12px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;padding:2px 5px;margin:0 5px;font-style:normal;vertical-align:middle}.col-enterprise{width:200px;color:#F75288;box-sizing:border-box}@font-face{font-family:project-member-font;src:url(data:application/octet-stream;base64,d09GRgABAAAAAAsUAA4AAAAAE1wAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABPUy8yAAABRAAAAEQAAABWPipKBmNtYXAAAAGIAAAAOAAAAUrQERm3Y3Z0IAAAAcAAAAAKAAAACgAAAABmcGdtAAABzAAABZQAAAtwiJCQWWdhc3AAAAdgAAAACAAAAAgAAAAQZ2x5ZgAAB2gAAAEHAAABHq2nHUdoZWFkAAAIcAAAADUAAAA2COM/+WhoZWEAAAioAAAAIAAAACQItgRyaG10eAAACMgAAAAIAAAACAjuAABsb2NhAAAI0AAAAAYAAAAGAI8AAG1heHAAAAjYAAAAIAAAACAAngvSbmFtZQAACPgAAAF3AAACzcydGx1wb3N0AAAKcAAAADoAAABNjgajv3ByZXAAAAqsAAAAZQAAAHvdawOFeJxjYGQpZ5zAwMrAwVTFtIeBgaEHQjM+YDBkZGJgYGJgZWbACgLSXFMYHF4wvGBgDvqfxRDFHMQwAyjMCJIDAOiJC694nGNgYGBmgGAZBkYGEHAB8hjBfBYGDSDNBqQZGZgYGF4w/P8PUgChJRih6oGAkY1hxAMAY8cGrgAAAAAAAAAAAAAAAHicrVZpcxNHEJ3VYcs2PoIPEjaBWcZyjHZWmMsIEMbsShbgHPKV7EKOXUt27otP/Ab9ml6RVJFv/LS8Hh3YYCdVVChK/ab37Uz3655ek9CSxF5Yj6TcfCmmtjZpZOdJSDdsWo7iQ9nZCylTTP4uiIJotdS+7TgkIhKBqnWFJYLY98jSJONDjzJatiW9alJu6Ul32RoP6q369tPQUY7dCSU1m6FD65EtqcKoEkUy7ZGSNi3D1V9JWuHnK8x81QwlgugkksabYQyP5GfjjFYZrcZ2HEWRTZYbRYpEMzyIIo+yWmKfXDFBQPmgGVJe+TSifIQfkRV7lNMKccl2mt/3JT/pHc6/JOJ6i7IlB/5AdmQHe6cr+SLS2grjpp1sR6GK8HR9J8Qjm5Pqn+xRXtNo4HZFpifNCJbKV5BY+Qll9g/JauF8ypc8GtWSg5wIWi9zYl/yDrQeR0yJaybIgu6OToig7pecodhj+rj4471dLBchBMg4lvWOSrgQRilhs5okbQQ5iJKyRZXUekdMnPI6LeItYb9O7ehLZ7RJqDsxnq2Hjq2cqOR4NKnTTKZO7aTm0ZQGUUo6Ezzm1wGUH9Ekr7axmsTKo2lsM2MkkVCghXNpKohlJ5Y0BdE8mtGbu2Gaa9eiRZo8UM89ek9vboWbOz2n7cA/a/xndSqmg70wnZ4OyEp8mna5SdG6fnqGfybxQ9YCKpEtNsOUxUO2fgfl5WNLjsJrA2z3nvMr6H32RMikgfgb8B4v1SkFTIWYVVAL3bTWtSzL1GpWi1Rk6rshTStf1mkCTTkOfWNfxjj+r5kZS0wJ3+/E6dkRl5659iXINIfcZl2P5nVqsV2AzmzP6TTL9n2d5th+oNM82/M6HWFr63SU7Yc6LbD9SKdjbC9oQZPuOwRyEYFcwAYSgbB1EAjbSwiErUIgbBcRCNsiAmG7hEDYfoxA2C4jELaXtayafippHDsTywBFiAOjOe7IZW4qV1PJpRKui0anNuQpcqukonhW/SsD/eKRN6yBtUC6RNb8ikmufFSV44+uaHnTxLkCjlV/e3NcnxMPZb9Y+FPwv9qaqqRXrHlkchV5I9CT40TXJhWPrunyuapH1/+Lig5rgX4DpRALRVmWDb6ZkPBRp9NQDVzlEDMbMw/X9bplzc/h/JsYIQvofvw3FBoL3INOWUlZ7WCv1dePZbm3B+WwJ1iSYr7M61vhi4zMSvtFZil7PvJ5wBUwKpVhqw1creDNexLzkOlN8kwQtxVlg6SNx5kgsYFjHjBvvpMgJExdtYHaKZywgbxgzCnY74RDVG+U5XB7oX0ejZR/a1fsyBkVTRD4bfZG2OuzUPJbrIGEJ7/U10BVIU3FuKmASyPlhmrwYVyt20YyTqCvqNgNy7KKDx9H3HdKjmUg+UgRq0dHP629Qp3Uuf3KKG7fO/0IgkFpYv72vpnioJR3tZJlVm0DU7calVPXmsPFqw7dzaPue8fZJ3LWNN10T9z0vqZVt4ODuVkQ7dsclKVMLqjrww4bqMvNpdDqZVyS3nYPMCwwoN+hFRv/V/dx+DxXqgqj40i9nagfo89iDPIPOH9H9QXo5zFMuYaU53uXE59u3MPZMl3FXayf4t/ArLXmZukacEPTDZiHrFodusoNfKcGOj3S3I70EPCx7grxAGATwGLwie5axvMpgPF8xhwf4HPmMGgyh8EWcxhsM2cNYIc5DHaZw2CPOQy+YM46wJfMYRAyh0HEHAZPmBMAPGUOg6+Yw+Br5jD4hjn3Ab5lDoOYOQwS5jDY13RrKHOLF3QXqG1QFejA9BMW97A41FQZsr/jhWF/bxCzfzCIqT9quj2k/sQLQ/3ZIKb+YhBTf9V0Z0j9jReG+rtBTP3DIKY+0y/GcpnBX0a+S4UDyi42n/P3xPsHwhpAtgABAAH//wAPeJwlTbtOw0AQvN3o7uB8OIIgW76CWEE+R0LhESJboiBIWIAEEhJl0iQVtChlGpf8Ah2fQn1pabHEH/gHwCyh2NnZGe0ME03TPHHRemBtFrNTNmbX7J5tX/i3N1eXZ6NBL9pRKAYHkFohWyLoQpDlnczy1LZB7NI5huwI8iyxPRK6IGmCIYmjtOOD3IPwHPJD4IRBKG1oU9o+4F0sNb6DkLFY75+PSOua81rryPOc8+CFb3GjlHNKGaLkLWclYjlbY8NwUpyklXk77lcR4AT3N1HI70eK3SCCr9JbUFL996oUhbuVTjgnsnLUQU3k4BLL+X/qvPwqpgim6j+D+UyGxZT9AhPSN48AeJxjYGRgYADiyznfv8fz23xl4GZ+ARRhuBQ/2RVCZ4r+//8/g5WNOQjI5WBgAokCAIumDUwAAAB4nGNgZGBgDvqfxRDFysbA8P8/KzsDUAQFMAEAauAEMgPoAAAFBgAAAAAAAACPAAAAAQAAAAIAUAAGAAAAAAACAAAAEABzAAAAIgtwAAAAAHicdZHNSsNAFEa/aWvVFlQU3HpXUhHTH+hGEAqVutFNkW4ljWmSkmbKZFroa/gOPowv4bP4NZ2KtJiQzLln7ty5mQA4xzcUNleXz4YVjhhtuIRDPDgu0z86rpCfHR+gjlfHVfo3xzXcInJcxwU+WEFVjhlN8elY4UydOi7hRF05LtPfOa6QHxwf4FK9OK7SB45rGKnccR3X6quv5yuTRLGVRv9GOq12V8Yr0VRJ5qfiL2ysTS49mejMhmmqvUDPtjwMo0Xqm224HUehyROdSdtrbdVTmIXGt+H7unq+jDrWTmRi9EwGLkPmRk/DwHqxtfP7ZvPvfuhDY44VDBIeVQwLQYP2hmMHLbT5IwRjZggzN1kJMvhIaXwsuCIuZnLGPT4TRhltyIyU7CHge7bnh6SI61NWMXuzu/GItN4jKbywL4/d7WY9kbIi0y/s+2/vOZbcrUNruWrdpSm6Egx2agjPYz03pQnoveJULO09mrz/+b4f4GSETQB4nGNgYoAALgbsACjPyKSSnJ+SmZeuW1CUn5WaXKKbm5qblFqkm5mcn6cLlErVTUnNq2RgAAAlkQ3uAAB4nGPw3sFwIihiIyNjX+QGxp0cDBwMyQUbGVidNjIwaEFoDhR6JwMDAycyi5nBZaMKY0dgxAaHjoiNzCkuG9VAvF0cDQyMLA4dySERICWRQLCRgUdrB+P/1g0svRuZGFwAB9MiuAAAAA==) format(\"woff\"),url(data:application/octet-stream;base64,AAEAAAAOAIAAAwBgT1MvMj4qSgYAAADsAAAAVmNtYXDQERm3AAABRAAAAUpjdnQgAAAAAAAAB2QAAAAKZnBnbYiQkFkAAAdwAAALcGdhc3AAAAAQAAAHXAAAAAhnbHlmracdRwAAApAAAAEeaGVhZAjjP/kAAAOwAAAANmhoZWEItgRyAAAD6AAAACRobXR4CO4AAAAABAwAAAAIbG9jYQCPAAAAAAQUAAAABm1heHAAngvSAAAEHAAAACBuYW1lzJ0bHQAABDwAAALNcG9zdI4Go78AAAcMAAAATXByZXDdawOFAAAS4AAAAHsAAQR3AZAABQAIAnoCvAAAAIwCegK8AAAB4AAxAQIAAAIABQMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUGZFZABA6ADoAANS/2oAWgNSAJgAAAABAAAAAAAAAAAAAwAAAAMAAAAcAAEAAAAAAEQAAwABAAAAHAAEACgAAAAGAAQAAQACAADoAP//AAAAAOgA//8AABgBAAEAAAAAAAAAAAEGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABv///2gFBgNSAA8AIAAzAD8ARwBPABFADktIRkM6NC0iGRIKAgYtKwEnJgYHAwYWHwEWNjcTNiYFJyYPAQYUHwEWPwE2LwE3NiUmIg8BBh8BBwYfARYyPwE2NCcTDgEHHgEXPgE3LgEFPgE3FhcHJhcmJzcWFw4BAkwgBwwCwAEGByAGDALAAQb+1BkMDPAFBfAMDBkLC8rKCwGIBQ0FGgoKysoKChoFDQXwBQV7YIACAoBgYIACAoD/AAJaRDEn3hqgMCjeGQECWgIjCQIGB/1nBwwCCAIGBwKZBwtzGQsL8AUNBfAKChkMDMrLDCUFBRkMDMvKDAwZBQXwBQ0FAnsCgGFggAICgGBhgOFEWwIBGt4ocQEa3SUyRFsAAAAAAQAAAAEAANNs9/dfDzz1AAsD6AAAAADSX5NFAAAAANJfaRX///9oBQYDUgAAAAgAAgAAAAAAAAABAAADUv9qAFoFBgAA//8FBwABAAAAAAAAAAAAAAAAAAAAAgPoAAAFBgAAAAAAAACPAAAAAQAAAAIAUAAGAAAAAAACAAAAEABzAAAAIgtwAAAAAAAAABIA3gABAAAAAAAAADUAAAABAAAAAAABAAgANQABAAAAAAACAAcAPQABAAAAAAADAAgARAABAAAAAAAEAAgATAABAAAAAAAFAAsAVAABAAAAAAAGAAgAXwABAAAAAAAKACsAZwABAAAAAAALABMAkgADAAEECQAAAGoApQADAAEECQABABABDwADAAEECQACAA4BHwADAAEECQADABABLQADAAEECQAEABABPQADAAEECQAFABYBTQADAAEECQAGABABYwADAAEECQAKAFYBcwADAAEECQALACYByUNvcHlyaWdodCAoQykgMjAxNSBieSBvcmlnaW5hbCBhdXRob3JzIEAgZm9udGVsbG8uY29tZm9udGVsbG9SZWd1bGFyZm9udGVsbG9mb250ZWxsb1ZlcnNpb24gMS4wZm9udGVsbG9HZW5lcmF0ZWQgYnkgc3ZnMnR0ZiBmcm9tIEZvbnRlbGxvIHByb2plY3QuaHR0cDovL2ZvbnRlbGxvLmNvbQBDAG8AcAB5AHIAaQBnAGgAdAAgACgAQwApACAAMgAwADEANQAgAGIAeQAgAG8AcgBpAGcAaQBuAGEAbAAgAGEAdQB0AGgAbwByAHMAIABAACAAZgBvAG4AdABlAGwAbABvAC4AYwBvAG0AZgBvAG4AdABlAGwAbABvAFIAZQBnAHUAbABhAHIAZgBvAG4AdABlAGwAbABvAGYAbwBuAHQAZQBsAGwAbwBWAGUAcgBzAGkAbwBuACAAMQAuADAAZgBvAG4AdABlAGwAbABvAEcAZQBuAGUAcgBhAHQAZQBkACAAYgB5ACAAcwB2AGcAMgB0AHQAZgAgAGYAcgBvAG0AIABGAG8AbgB0AGUAbABsAG8AIABwAHIAbwBqAGUAYwB0AC4AaAB0AHQAcAA6AC8ALwBmAG8AbgB0AGUAbABsAG8ALgBjAG8AbQAAAAACAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAECJGNvZGluZy1wcm9qZWN0LW1lbWJlci1pY29uLWNvZGUtZGVueQAAAAAAAAEAAf//AA8AAAAAAAAAAAAAAACwACwgsABVWEVZICBLuAAOUUuwBlNaWLA0G7AoWWBmIIpVWLACJWG5CAAIAGNjI2IbISGwAFmwAEMjRLIAAQBDYEItsAEssCBgZi2wAiwgZCCwwFCwBCZasigBCkNFY0VSW1ghIyEbilggsFBQWCGwQFkbILA4UFghsDhZWSCxAQpDRWNFYWSwKFBYIbEBCkNFY0UgsDBQWCGwMFkbILDAUFggZiCKimEgsApQWGAbILAgUFghsApgGyCwNlBYIbA2YBtgWVlZG7ABK1lZI7AAUFhlWVktsAMsIEUgsAQlYWQgsAVDUFiwBSNCsAYjQhshIVmwAWAtsAQsIyEjISBksQViQiCwBiNCsQEKQ0VjsQEKQ7AAYEVjsAMqISCwBkMgiiCKsAErsTAFJbAEJlFYYFAbYVJZWCNZISCwQFNYsAErGyGwQFkjsABQWGVZLbAFLLAHQyuyAAIAQ2BCLbAGLLAHI0IjILAAI0JhsAJiZrABY7ABYLAFKi2wBywgIEUgsAtDY7gEAGIgsABQWLBAYFlmsAFjYESwAWAtsAgssgcLAENFQiohsgABAENgQi2wCSywAEMjRLIAAQBDYEItsAosICBFILABKyOwAEOwBCVgIEWKI2EgZCCwIFBYIbAAG7AwUFiwIBuwQFlZI7AAUFhlWbADJSNhRESwAWAtsAssICBFILABKyOwAEOwBCVgIEWKI2EgZLAkUFiwABuwQFkjsABQWGVZsAMlI2FERLABYC2wDCwgsAAjQrILCgNFWCEbIyFZKiEtsA0ssQICRbBkYUQtsA4ssAFgICCwDENKsABQWCCwDCNCWbANQ0qwAFJYILANI0JZLbAPLCCwEGJmsAFjILgEAGOKI2GwDkNgIIpgILAOI0IjLbAQLEtUWLEEZERZJLANZSN4LbARLEtRWEtTWLEEZERZGyFZJLATZSN4LbASLLEAD0NVWLEPD0OwAWFCsA8rWbAAQ7ACJUKxDAIlQrENAiVCsAEWIyCwAyVQWLEBAENgsAQlQoqKIIojYbAOKiEjsAFhIIojYbAOKiEbsQEAQ2CwAiVCsAIlYbAOKiFZsAxDR7ANQ0dgsAJiILAAUFiwQGBZZrABYyCwC0NjuAQAYiCwAFBYsEBgWWawAWNgsQAAEyNEsAFDsAA+sgEBAUNgQi2wEywAsQACRVRYsA8jQiBFsAsjQrAKI7AAYEIgYLABYbUQEAEADgBCQopgsRIGK7ByKxsiWS2wFCyxABMrLbAVLLEBEystsBYssQITKy2wFyyxAxMrLbAYLLEEEystsBkssQUTKy2wGiyxBhMrLbAbLLEHEystsBwssQgTKy2wHSyxCRMrLbAeLACwDSuxAAJFVFiwDyNCIEWwCyNCsAojsABgQiBgsAFhtRAQAQAOAEJCimCxEgYrsHIrGyJZLbAfLLEAHistsCAssQEeKy2wISyxAh4rLbAiLLEDHistsCMssQQeKy2wJCyxBR4rLbAlLLEGHistsCYssQceKy2wJyyxCB4rLbAoLLEJHistsCksIDywAWAtsCosIGCwEGAgQyOwAWBDsAIlYbABYLApKiEtsCsssCorsCoqLbAsLCAgRyAgsAtDY7gEAGIgsABQWLBAYFlmsAFjYCNhOCMgilVYIEcgILALQ2O4BABiILAAUFiwQGBZZrABY2AjYTgbIVktsC0sALEAAkVUWLABFrAsKrABFTAbIlktsC4sALANK7EAAkVUWLABFrAsKrABFTAbIlktsC8sIDWwAWAtsDAsALABRWO4BABiILAAUFiwQGBZZrABY7ABK7ALQ2O4BABiILAAUFiwQGBZZrABY7ABK7AAFrQAAAAAAEQ+IzixLwEVKi2wMSwgPCBHILALQ2O4BABiILAAUFiwQGBZZrABY2CwAENhOC2wMiwuFzwtsDMsIDwgRyCwC0NjuAQAYiCwAFBYsEBgWWawAWNgsABDYbABQ2M4LbA0LLECABYlIC4gR7AAI0KwAiVJiopHI0cjYSBYYhshWbABI0KyMwEBFRQqLbA1LLAAFrAEJbAEJUcjRyNhsAlDK2WKLiMgIDyKOC2wNiywABawBCWwBCUgLkcjRyNhILAEI0KwCUMrILBgUFggsEBRWLMCIAMgG7MCJgMaWUJCIyCwCEMgiiNHI0cjYSNGYLAEQ7ACYiCwAFBYsEBgWWawAWNgILABKyCKimEgsAJDYGQjsANDYWRQWLACQ2EbsANDYFmwAyWwAmIgsABQWLBAYFlmsAFjYSMgILAEJiNGYTgbI7AIQ0awAiWwCENHI0cjYWAgsARDsAJiILAAUFiwQGBZZrABY2AjILABKyOwBENgsAErsAUlYbAFJbACYiCwAFBYsEBgWWawAWOwBCZhILAEJWBkI7ADJWBkUFghGyMhWSMgILAEJiNGYThZLbA3LLAAFiAgILAFJiAuRyNHI2EjPDgtsDgssAAWILAII0IgICBGI0ewASsjYTgtsDkssAAWsAMlsAIlRyNHI2GwAFRYLiA8IyEbsAIlsAIlRyNHI2EgsAUlsAQlRyNHI2GwBiWwBSVJsAIlYbkIAAgAY2MjIFhiGyFZY7gEAGIgsABQWLBAYFlmsAFjYCMuIyAgPIo4IyFZLbA6LLAAFiCwCEMgLkcjRyNhIGCwIGBmsAJiILAAUFiwQGBZZrABYyMgIDyKOC2wOywjIC5GsAIlRlJYIDxZLrErARQrLbA8LCMgLkawAiVGUFggPFkusSsBFCstsD0sIyAuRrACJUZSWCA8WSMgLkawAiVGUFggPFkusSsBFCstsD4ssDUrIyAuRrACJUZSWCA8WS6xKwEUKy2wPyywNiuKICA8sAQjQoo4IyAuRrACJUZSWCA8WS6xKwEUK7AEQy6wKystsEAssAAWsAQlsAQmIC5HI0cjYbAJQysjIDwgLiM4sSsBFCstsEEssQgEJUKwABawBCWwBCUgLkcjRyNhILAEI0KwCUMrILBgUFggsEBRWLMCIAMgG7MCJgMaWUJCIyBHsARDsAJiILAAUFiwQGBZZrABY2AgsAErIIqKYSCwAkNgZCOwA0NhZFBYsAJDYRuwA0NgWbADJbACYiCwAFBYsEBgWWawAWNhsAIlRmE4IyA8IzgbISAgRiNHsAErI2E4IVmxKwEUKy2wQiywNSsusSsBFCstsEMssDYrISMgIDywBCNCIzixKwEUK7AEQy6wKystsEQssAAVIEewACNCsgABARUUEy6wMSotsEUssAAVIEewACNCsgABARUUEy6wMSotsEYssQABFBOwMiotsEcssDQqLbBILLAAFkUjIC4gRoojYTixKwEUKy2wSSywCCNCsEgrLbBKLLIAAEErLbBLLLIAAUErLbBMLLIBAEErLbBNLLIBAUErLbBOLLIAAEIrLbBPLLIAAUIrLbBQLLIBAEIrLbBRLLIBAUIrLbBSLLIAAD4rLbBTLLIAAT4rLbBULLIBAD4rLbBVLLIBAT4rLbBWLLIAAEArLbBXLLIAAUArLbBYLLIBAEArLbBZLLIBAUArLbBaLLIAAEMrLbBbLLIAAUMrLbBcLLIBAEMrLbBdLLIBAUMrLbBeLLIAAD8rLbBfLLIAAT8rLbBgLLIBAD8rLbBhLLIBAT8rLbBiLLA3Ky6xKwEUKy2wYyywNyuwOystsGQssDcrsDwrLbBlLLAAFrA3K7A9Ky2wZiywOCsusSsBFCstsGcssDgrsDsrLbBoLLA4K7A8Ky2waSywOCuwPSstsGossDkrLrErARQrLbBrLLA5K7A7Ky2wbCywOSuwPCstsG0ssDkrsD0rLbBuLLA6Ky6xKwEUKy2wbyywOiuwOystsHAssDorsDwrLbBxLLA6K7A9Ky2wciyzCQQCA0VYIRsjIVlCK7AIZbADJFB4sAEVMC0AS7gAyFJYsQEBjlmwAbkIAAgAY3CxAAVCsQAAKrEABUKxAAgqsQAFQrEACCqxAAVCuQAAAAkqsQAFQrkAAAAJKrEDAESxJAGIUViwQIhYsQNkRLEmAYhRWLoIgAABBECIY1RYsQMARFlZWVmxAAwquAH/hbAEjbECAEQA) format(\"truetype\")}[class*=\" project-member-icon-\"]:before,[class^=project-member-icon-]:before{font-family:project-member-font;font-style:normal;font-weight:400;speak:none;display:inline-block;text-decoration:inherit;width:1em;margin-right:.2em;text-align:center;font-variant:normal;text-transform:none;line-height:1em;margin-left:.2em}.project-member-icon-code-deny:before{content:'\\e800'}.project-member-page #inner-menu{width:240px}.project-member-page #inner-menu a.item img.avatar32{margin-right:10px}.project-member-page #inner-menu a.item{line-height:32px}.project-member-page #inner-menu .search.item{padding:10px 25px}.project-member-page .project-members .member-item{cursor:pointer;padding:6px 15px 6px 20px;border-radius:0!important}.project-member-page .project-members .member-item-wrapper .avatar{float:left}.project-member-page .project-members .member-item-wrapper .wrapper{font-size:14px;color:#333;padding-left:40px;padding-right:15px;line-height:1.2}.project-member-page .project-members .member-item-wrapper .wrapper .alias,.project-member-page .project-members .member-item-wrapper .wrapper .title{font-size:14px;margin-bottom:3px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:110px}.project-member-page .project-members .member-item-wrapper{position:relative;display:table;border-collapse:separate;width:100%}.project-member-page .project-members .member-item-wrapper .info{float:left;width:100%;position:relative}.project-member-page .project-members .member-item-wrapper .right{display:table-cell;width:1%;white-space:nowrap;vertical-align:middle}.project-member-page .project-members .item .member-item-wrapper .right i.remove{visibility:hidden}.project-member-page .project-members .item .member-item-wrapper .right i.remove.unvisible{visibility:hidden!important}.project-member-page .project-members .item:hover .member-item-wrapper .right i.remove{visibility:visible}.project-member-page .project-members .item .member-item-wrapper .action i{font-size:14px;padding:0;margin:0}.project-member-page .project-members a.item{padding:5px 15px!important}.project-member-page .project-members a.item i.icon{margin-left:6px}.project-member-page .project-members .item i.icon.owner{color:#eeac82}.project-member-page .project-members .item i.icon.admin{color:#63cc96}.project-member-page .project-members .item i.project-member-icon-code-deny.visitor{color:#999}.project-member-page #inner-menu .member-item .alias{padding-top:3px;font-size:12px;color:#999}.project-member-page #inner-menu input.search-member{border:1px solid rgba(0,0,0,.15);font-size:10px}.project-member-page #inner-menu input.search-member~i.search{padding-top:8px}.project-member-page #project-member{margin-left:240px!important}.project-member-page #project-member .member.info{padding-bottom:30px;border-bottom:1px solid #CCC}.project-member-page #project-member .member.info .avatar{float:left}.project-member-page #project-member .member.info .wrapper{padding-left:120px;height:100px;font-size:14px}.project-member-page #project-member .member.info .wrapper>div{height:33%;line-height:30px}.project-member-page #project-member .member.info .title{font-size:18px;color:#000}.project-member-page #project-member .member.info i.icon.info{color:#444;cursor:pointer;font-size:14px;margin-left:10px}.project-member-page #project-member .member.info .time{font-size:14px;color:#999;line-height:24px}.project-member-page #project-member .member.info .action{font-size:12px}.project-member-page #project-member .member.info .alias-setting{font-size:14px}.project-member-page #project-member .member.info .divider{margin-left:20px;margin-right:20px;height:16px;width:0;border-right:1px solid #DDD;display:inline-block;vertical-align:middle;line-height:20px}.project-member-page #project-member .member.info .role-setting{font-size:14px;color:#444}.project-member-page #project-member .member.info .alias-setting .alias-edit{cursor:pointer}.project-member-page #project-member .member.info .alias-input{outline:0;padding:6px;border:1px solid #EEE;font-size:14px;color:#333;max-width:100px;vertical-align:middle}.project-member-page #project-member .member.info .action>div{margin-right:10px}.project-member-page #project-member .no-margin{margin:0}.project-member-page #project-member .button>i.icon{margin-right:0}.public-project-view #inner-menu{float:left;border:0!important;margin:0;position:absolute;z-index:0}.public-project-view #project-member{border-left:1px solid #DDD;min-height:400px}.project-member-page #add-project-members{position:absolute;right:20px;top:32px}.ide-container{position:relative;min-width:900px;max-width:900px;margin:0 auto}.web-ide-button{display:table;margin:30px auto 0}.small-image{position:absolute;top:145px;list-style:none;right:30px}.small-image>li{display:inline-block;cursor:zoom-in}.screenshot.background{z-index:999;position:fixed;width:100%;height:100%;background:rgba(0,0,0,.7);display:none;top:0;left:0;min-width:1100px}.screenshot.background .prev-preview{position:absolute;top:50%;width:50px;height:100px;font-size:50px;line-height:100px;color:#939393;display:none;left:9rem;z-index:999}.screenshot.background .prev-preview:hover{color:#fff;cursor:pointer}.screenshot.background .next-preview{position:absolute;top:50%;width:50px;height:100px;font-size:50px;line-height:100px;color:#939393;right:9rem;display:none;z-index:999}.screenshot.background .next-preview:hover{color:#fff;cursor:pointer}.screenshot.background .hidden{display:none}.screenshot.background .show{display:block}.screenshot.preview{background:rgba(0,0,0,.7);position:absolute;width:100%;height:100%;top:0;left:0;z-index:999;cursor:zoom-out}.screenshot.preview>img{margin:90px auto 0;display:table}.screenshot.preview .preview-title{position:relative;top:100px;margin:0 auto;display:table;font-size:20px;font-weight:700;color:#fff}.screenshot.preview .close-pane{position:absolute;top:120px;right:210px;background:rgba(0,0,0,.3);width:30px;height:30px;border-radius:15px}.screenshot.preview .close-pane:hover{cursor:pointer}.screenshot.preview .close-pane>i{line-height:30px;height:30px;margin:0 0 0 5px;color:#979797}.screenshot.preview .close-pane>i:hover{color:#fff}.screenshot.background.show,.screenshot.preview.show{display:block}.web-ide-workspace{margin:10px auto 0;display:table}#create-task-modal,#task-detail-menu{font-size:14px}#create-task-modal .layout-content,#task-detail-menu .layout-content{padding-right:30px}#create-task-modal .layout-menu,#task-detail-menu .layout-menu{width:170px}#create-task-modal .task-create-menu,#task-detail-menu .task-create-menu{width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding-right:10px;overflow-x:visible!important}#create-task-modal i.asterisk.red,#task-detail-menu i.asterisk.red{float:none!important;-webkit-transform:translateY(-2px) scale(0.4);-moz-transform:translateY(-2px) scale(0.4);-ms-transform:translateY(-2px) scale(0.4);-o-transform:translateY(-2px) scale(0.4);transform:translateY(-2px) scale(0.4)}#create-task-modal .task-menu-item,#task-detail-menu .task-menu-item{position:relative;color:#555;font-size:12px;margin-bottom:6px}#create-task-modal .task-menu-item.with-top-separator,#task-detail-menu .task-menu-item.with-top-separator{margin-top:8px;padding-top:8px;border-top:1px solid #DDD}#create-task-modal .task-menu-item.with-top-separator header,#task-detail-menu .task-menu-item.with-top-separator header{padding:0 0 2px}#create-task-modal .task-menu-item .dropdown,#create-task-modal .task-menu-item .dropdown .text,#task-detail-menu .task-menu-item .dropdown,#task-detail-menu .task-menu-item .dropdown .text{width:100%}#create-task-modal .task-menu-item .dropdown .dropdown-target,#task-detail-menu .task-menu-item .dropdown .dropdown-target{font-size:12px}#create-task-modal .task-menu-item header,#task-detail-menu .task-menu-item header{padding:5px 0 8px}#create-task-modal .task-menu-item header i.icon,#task-detail-menu .task-menu-item header i.icon{float:right}#create-task-modal .task-menu-item .selected-content,#task-detail-menu .task-menu-item .selected-content{color:#333;font-size:14px}#create-task-modal .task-menu-item .task-urgency-wrapper,#task-detail-menu .task-menu-item .task-urgency-wrapper{position:relative!important;display:inline-block;width:1.5em}#create-task-modal .task-menu-item .task-urgency-wrapper .icon,#task-detail-menu .task-menu-item .task-urgency-wrapper .icon{margin:0}#create-task-modal .task-menu-item .task-detail-tags header,#task-detail-menu .task-menu-item .task-detail-tags header{padding-bottom:0}#create-task-modal .task-menu-item .task-detail-watchlist,#task-detail-menu .task-menu-item .task-detail-watchlist{padding-top:7px!important}#task-detail-menu .task-detail-tags header{font-size:12px}#task-detail-menu .task-deadline .date{padding:3px 4px}#create-task-modal{font-size:14px;width:70%;margin-left:-35%}#create-task-modal>.content{padding-right:10px;height:430px}#create-task-modal>.action-buttons{padding:10px 20px}#create-task-modal .task-create-menu{height:290px}#create-task-modal .light-md-editor .editor>.preview.active,#create-task-modal .light-md-editor .editor>textarea{height:260px;max-height:260px}#create-task-modal .select-label-dropdown .task-detail-tags.tag-editor .tag{padding:2px 4px}#create-task-modal .select-label-dropdown .task-detail-tags.tag-editor .tag i.remove.icon{top:2px}#create-task-modal .select-label-dropdown .task-detail-tags.tag-editor .tag.editable:hover{padding:2px 18px 2px 4px!important}.task-creating-select-deadline,.task-detail-select-deadline{z-index:1101}.select-member-dropdown .task-select-member,.select-member-dropdown .task-select-project,.select-project-dropdown .task-select-member,.select-project-dropdown .task-select-project{position:relative;max-width:200px}.select-member-dropdown .task-select-member img,.select-member-dropdown .task-select-project img,.select-project-dropdown .task-select-member img,.select-project-dropdown .task-select-project img{position:absolute;width:24px;height:24px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.select-member-dropdown .task-select-member span,.select-member-dropdown .task-select-project span,.select-project-dropdown .task-select-member span,.select-project-dropdown .task-select-project span{padding-left:30px;display:inline-block;height:24px;line-height:24px;width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.select-member-dropdown .task-select-member img,.select-project-dropdown .task-select-member img{-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}.task-select-urgency .task-urgency-wrapper{margin-right:3px!important}#shareSection{width:850px;margin:auto;padding-top:10px}#shareSection .file-header{height:50px;line-height:50px;font-size:20px;border-bottom:1px solid #ebeae7}#shareSection .file-content{position:relative;margin-top:20px;margin-bottom:20px;padding:15px;min-height:200px;background-color:#fff;border:1px solid #ebeae7;border-radius:3px}#shareSection .file-content .file-buttons{position:absolute;top:-1px;right:-42px;border:1px solid #ebeae7;background-color:#f5f5f5}#shareSection .file-content .file-buttons>.button{display:block;width:40px;height:40px;cursor:pointer}#shareSection .file-content .file-buttons>.button>.icon{margin-top:12px;width:40px;color:#666}#shareSection .file-content .file-buttons>.button:hover{background-color:#fff}#shareSection .file-content .binary-content{position:relative;margin:100px auto;display:block;width:200px;height:200px}#shareSection .file-content .binary-content:hover .icon{color:#fff}#shareSection .file-content .binary-content .icon{position:absolute;bottom:5px;right:5px;margin:0;font-size:60px;color:rgba(255,255,255,0)}#shareSection .file-content .binary-content .file-icon{width:200px;height:200px;font-size:80px;line-height:170px}#shareSection .file-content .file-detail{position:absolute;top:40px;left:890px;width:150px;padding:15px;border:1px solid #ebeae7;background-color:#f5f5f5}#shareSection .file-content .file-detail .title{margin-top:10px;font-weight:700;line-height:1.5em}#shareSection .file-content .file-detail .content{margin-left:15px}[cg-member-selector]{display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column}.cg-ms-selected{list-style:none;padding-left:0;margin:0}.cg-ms-selected .cg-ms-selected-item{display:flex;display:-webkit-flex;align-items:center;-webkit-align-items:center;padding-bottom:5px}.cg-ms-selected .cg-ms-selected-item>img.ui.image{margin:0 5px 0 0;padding:0;height:24px;width:24px}.cg-ms-selected .cg-ms-selected-item>span{font-size:14px;height:18px;line-height:18px;margin-right:auto;overflow:hidden;text-overflow:ellipsis}.cg-ms-selected .cg-ms-selected-item>i.icon.remove{cursor:pointer;margin:0;padding:0}.hover-remove.cg-ms-selected .cg-ms-selected-item:hover>i.icon.remove{display:inline}.hover-remove.cg-ms-selected .cg-ms-selected-item>i.icon.remove{display:none}.no-remove .cg-ms-selected .cg-ms-selected-item>i.icon.remove{display:none}.avatar-mode .cg-ms-selected .cg-ms-selected-item{display:inline-flex;display:-webkit-inline-flex}.avatar-mode .cg-ms-selected .cg-ms-selected-item>img.ui.image{height:30px;width:30px}.avatar-mode .cg-ms-selected .cg-ms-selected-item>span{display:none}.cg-ms-unselected{display:-webkit-flex;display:flex;align-items:center;-webkit-align-items:center;color:#333!important;height:26px;line-height:26px}.cg-ms-unselected>i.checkmark.icon{display:none}.cg-ms-unselected>img.ui.image{height:20px;width:20px;margin-right:5px}.cg-ms-unselected>span{display:inline-block}.check-mode.select2-drop{border:0;border-radius:0 0 .2em .2em;box-shadow:0 0 1px 1px rgba(0,0,0,.1);color:#333!important;min-width:175px}.check-mode.select2-drop>.select2-search{padding:4px;margin-top:0;background-color:#eee}.check-mode.select2-drop>.select2-search input{margin-top:0!important;padding:5px 25px 5px 10px;border:1px solid #ddd;border-radius:2px;font-size:12px;color:#333;background:url(/static/2ca61b76e22053571dd8611e5aac4900.png) 100% -22px no-repeat #fff}.check-mode.select2-drop>.select2-results{padding:0;margin:0;min-height:165px;max-height:205px}.check-mode.select2-drop>.select2-results .select2-result{height:40px;color:#333;border-top:1px solid rgba(0,0,0,.05)}.check-mode.select2-drop>.select2-results .select2-highlighted{background:rgba(0,0,0,.02)}.check-mode.select2-drop>.select2-results .select2-no-results,.check-mode.select2-drop>.select2-results .select2-result-label{padding:0 5px;height:40px;line-height:40px}.check-mode.select2-drop>.select2-results .cg-ms-unselected{height:40px}.check-mode.select2-drop>.select2-results .cg-ms-unselected>i.checkmark.icon{display:inline}.check-mode.select2-drop>.select2-results .cg-ms-unselected>img.ui.image{height:32px;width:32px}.check-mode.select2-drop>.select2-results .cg-ms-chosen i.checkmark.icon{color:#333}.check-mode.select2-drop>.select2-results .cg-ms-notchosen i.checkmark.icon{color:#fff}.no-dropdown .select2-container{width:0!important;height:0!important;overflow:hidden}.no-selected .cg-ms-selected{display:none}.no-tips .cg-ms-selected .cg-ms-selected-tips{display:none}.inline-mode{display:inline-flex;display:-webkit-inline-flex;vertical-align:middle}.small-avatar .cg-ms-selected .cg-ms-selected-item>img.ui.image{height:24px;width:24px}.small-avatar .cg-ms-selected .cg-ms-selected-item>i.icon.remove{text-align:left}.topic-container .ui.dropdown{font-size:14px;padding-bottom:5px}.topic-container .ui.dropdown i.icon.dropdown{display:inline-block;margin-left:5px}.topic-container .ui.dropdown div.menu{border-radius:.325em;left:-48px}.topic-container .ui.dropdown div.menu .item{padding:8px!important}.topic-container .ui.dropdown div.menu .item .checkmark{opacity:0;margin:0}.topic-container .ui.dropdown div.menu .item.active .checkmark{opacity:1}#topic-create textarea[id*=wmd-input-]{min-height:500px!important;font-size:14px}#project-topic-detail-wrapper{min-width:800px}#project-topic-detail-wrapper i.icon.coding.coding-share{cursor:pointer;color:#bebebe;opacity:1;vertical-align:middle;margin-bottom:1px}#comment-form{border-top:1px solid #ddd;padding-top:20px;margin:0}#project-topic-detail{position:relative;background:#FFF;padding:30px}#project-topic-detail .topic-title{position:relative;padding-bottom:20px;margin-bottom:20px;border-bottom:1px solid #ddd}#project-topic-detail .topic-title .avatar{position:absolute;display:inline-block;width:42px;height:42px;left:0;top:0}#project-topic-detail .topic-title h2{font-size:24px;font-weight:400;color:#000;margin:0 0 3px}#project-topic-detail .topic-title .title{margin-left:52px}#project-topic-detail .topic-title .toolbar{margin-left:52px;font-size:12px;color:#999;line-height:20px}#project-topic-detail .topic-title .toolbar a{color:#999}#project-topic-detail .topic-title .toolbar .mr10{margin-right:20px}#project-topic-detail .topic-title .topic-labels{margin-bottom:20px;line-height:4px}#project-topic-detail .topic-title .tags-show span.tag{font-size:12px;font-weight:400;color:#FFF;border-radius:3px;padding:2px 3px;margin-right:5px;word-break:break-all;vertical-align:top}#project-topic-detail .mr10 i.icon{margin-right:0}#project-topic-detail .topic-follow-header{margin-top:20px;padding-top:10px;border-top:1px solid #ddd;font-size:16px;color:#333}#project-topic-detail-bottom{padding:30px;background:#FFF;margin-top:20px;margin-bottom:30px}#project-topic-detail-bottom .topic-comments-header{margin:20px 0 10px;padding-bottom:10px;border-bottom:1px solid #ddd;font-size:16px;color:#333}#project-topic-detail-bottom .topic-follow-header{margin:0 0 15px;padding-bottom:10px;border-bottom:1px solid #ddd;font-size:16px;color:#333}#topic-member-selector-down,#topic-member-selector-up{display:inline-flex;flex-direction:column}#topic-comments div.comment{position:relative;margin-top:20px}#topic-comments div.comment .content-wrapper{margin-left:58px;padding:0;position:relative;border:1px solid #ddd;background:#FFF;border-radius:3px}#topic-comments div.comment .content-wrapper:before{margin-top:-11px;bottom:auto;right:auto;top:27px;left:-6px;position:absolute;content:\"\";width:.6em;height:.6em;transform:rotate(45deg);z-index:2;transition:background .1s linear;background-color:#FFF;border-left:1px solid #ddd;border-bottom:1px solid #ddd}#topic-comments div.comment .content{line-height:23px;font-size:14px;margin:10px 15px}#topic-comments div.comment .content img.monkey.emotion{width:64px}#topic-comments div.comment div.time{font-size:12px;color:#999;margin:0 15px 10px}#topic-comments div.comment div.time a{color:#999}#topic-comments div.comment div.time .share,#topic-comments div.comment div.time a.recommend,#topic-comments div.comment div.time a.remove,#topic-comments div.comment div.time a.reply{display:none}#topic-comments div.comment div.time .mr10{margin-right:20px}#topic-comments div.comment div.time .mr11{padding:4px;background:#F5F5F5;border:1px solid #EBEBEB;border-radius:3px;color:#999;font-size:12px;margin-right:20px}#topic-comments div.comment div.time .mr10 a.arrow{position:relative}#topic-comments div.comment div.time .mr10 a.arrow:before{position:absolute;top:21px;left:30px;z-index:1;content:'';width:0;height:0;border-width:5px;border-style:solid;border-color:#fff transparent transparent #fff;box-shadow:-1px -1px 0 #ddd;transform:rotate(45deg)}#topic-comments div.comment img.avatar{position:absolute;width:42px;height:42px;top:0;left:0}#topic-comments div.comment:hover .time .share,#topic-comments div.comment:hover .time a.recommend,#topic-comments div.comment:hover .time a.remove,#topic-comments div.comment:hover .time a.reply{display:inline}#topic-detail .dividing.header>a.button{margin-top:10px}#topic-detail .dividing.header img.avatar{margin-right:15px}#topic-comment-editor.light-md-editor .editor>textarea{min-height:0;max-height:none}.public-project-view #project-topic-detail-wrapper{width:818px}.public-project-view #project-topic-detail,.public-project-view #project-topic-detail-bottom{padding:0}@media only screen and (min-width:1340px){#project-topic-detail-wrapper{width:70%;max-width:1280px}}#topic-comments .comment.recommended .recommend-label{top:7px;left:-5px}#topic-comments .comment.recommended .content-wrapper .content{margin-top:49px}#topic-comments .comment.recommended .content-wrapper:before{top:66px}#topic-comments .comment.recommended img.ui.avatar.image{top:40px}.recommend-label{position:absolute;height:30px;line-height:30px;padding-right:12px;font-size:14px;background:#5BA8FF;color:#FFF}.recommend-label i.trophy{font-size:16px;margin-left:10px;opacity:1}.recommend-label:before{content:'';position:absolute;bottom:-7px;border:solid;border-width:7px 0 0 4px;border-color:#2579D8 transparent transparent}.recommend-label:after{content:'';position:absolute;top:0;right:-15px;border:solid;border-width:15px 15px 15px 0;border-color:#5BA8FF transparent}.comment .vote-button{position:absolute;color:#666;font-size:12px;display:inline-block;height:24px;width:42px;border:1px solid #ddd;border-radius:3px;line-height:24px;text-align:center;top:46px}.comment .vote-button.voted{background:#5BA8FF;border-color:#5BA8FF;color:#fff}.comment .vote-button:hover{background:#2579D8;border-color:#2579D8;color:#fff}.comment.recommended .vote-button{top:86px}.recommend-stat{position:absolute;top:12px;right:10px;color:#999;font-size:12px}div.votes{height:20px;line-height:20px;font-size:12px;color:#999;margin:0 15px 7px}div.votes>a{display:inline-block;height:19px;line-height:19px;vertical-align:middle;margin-bottom:2px;margin-right:5px}div.votes>a>img{height:18px;width:18px;border-radius:9px}.child-comments .child-comments-container{max-height:383px;overflow:scroll;border-top:1px solid #ddd}.child-comments .child-comment{border-bottom:1px solid #ddd;font-size:12px;padding:10px}.child-comments .child-comment:last-child{border-bottom:none}.child-comments .child-comment img{float:left;height:32px;width:32px;border-radius:16px;margin-top:3px}.child-comments .child-comment .content{margin:0 0 0 42px!important}.child-comments .child-comment .comment-time{margin-left:42px;margin-top:10px}.child-comments .child-comment .comment-time>a,.child-comments .child-comment .comment-time>span{color:#999;margin-right:20px;line-height:14px;height:14px;vertical-align:middle}.child-comments .child-comment .remove,.child-comments .child-comment .reply{display:none}.child-comments .child-comment:hover .remove,.child-comments .child-comment:hover .reply{display:inline-block}.child-comments input{height:40px;width:100%;box-sizing:border-box;border:none;padding-left:7px;font-size:14px;outline:0;border-top:1px solid #ddd}.child-comments .comment-show-more{color:#666;font-size:12px;text-align:center;height:38px;line-height:38px;cursor:pointer}.child-comments .comment-show-more:hover{background:#eee}.child-comments .child-comment-input-container{position:relative;color:#999;font-size:14px}.child-comments .child-comment-input-container i{position:absolute;top:13px;right:11px;cursor:pointer}.child-comments .child-comment-input-container i.smile{right:35px}.child-comments .child-comment-input-container i:hover{color:#666}.top-user-name{display:inline-block}@media only screen and (max-width:920px){.top-user-name{max-width:100px}}@media only screen and (min-width:920px) and (max-width:1360px){.top-user-name{max-width:200px}}@media only screen and (min-width:1361px) and (max-width:1500px){.top-user-name{max-width:300px}}@media only screen and (min-width:1500px){.top-user-name{max-width:none}}.layout-team-page{padding-bottom:50px}.layout-team-page .ui.form input[type=text],.layout-team-page .ui.form textarea{font-size:16px}.team-container{min-width:800px}.team-container .team-create-form{--webkit-box-shadow:none;box-shadow:none;padding:1.5rem}.team-container .team-create-form input{height:2.8rem;line-height:2.8rem;font-size:1rem}.layout-blank-team .no-team-bg{padding:30px}.layout-blank-team .no-team-bg img{width:100%;max-width:750px}.layout-team-create .ui.form input[type=text],.layout-team-create .ui.form textarea{padding:.65em 1em;font-family:'微软雅黑','Helvetica Neue',sans-serif,SimHei}.layout-team-create .ui.form label{margin-bottom:10px}.layout-team-create .field.bottom-dividing{padding-bottom:20px;border-bottom:1px solid rgba(0,0,0,.1)}.layout-team-create i.member-icon{float:right;padding-top:10px;cursor:pointer}.layout-team-create .member-desc{color:#777;font-size:15px;cursor:pointer;margin-bottom:2em}.team-inner-menu .pointer{cursor:pointer}.team-inner-menu .team-item .avatar{float:left}.team-inner-menu .team-item .avatar img{width:48px;height:48px}.team-inner-menu .team-item .content{margin-left:56px;height:48px}.team-inner-menu .team-item .content .title{font-size:16px;color:#333;line-height:28px;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.team-inner-menu .team-item .content .stat{font-size:12px;color:#666;line-height:20px}.team-inner-menu .team-item .content .stat em{font-weight:400;font-style:normal}.team-inner-menu .team-item .content .sep{height:100%;width:0;border-right:1px solid #DDD;margin:0 10px}.layout-team-page .team-inner-menu{width:240px!important}.layout-team-page .container{margin-left:240px!important}.team-info-header{padding:15px;background:#FFF;border-radius:3px;margin-bottom:22px}.team-info-header .avatar{float:left}.team-info-header .avatar img{width:64px;height:64px;-webkit-border-radius:64px;-moz-border-radius:64px;-ms-border-radius:64px;-o-border-radius:64px;border-radius:64px}.team-info-header .info{margin-left:80px;line-height:18px}.team-info-header .info div{font-size:18px;line-height:24px;font-weight:400;color:#333}.team-info-header .info p{font-size:12px;line-height:18px;color:#666}.layout-team-tab-box{padding:15px;background:#FFF;border-radius:3px;margin-bottom:22px}.team-line-header{font-size:14px;color:#666;padding:10px;position:relative;overflow:hidden;margin:5px 0}.team-line-header:after{content:\"\";width:100%;height:0;border-top:1px solid #CCC;position:absolute;top:50%}.team-line-header span{padding-right:20px}.team-line-header span em{padding:0 2px;font-style:normal}.team-project-box .project-header{font-size:16px;padding:10px}.team-project-move-in .ui.message{font-size:14px}.team-project-move-in .ui.message strong{color:#DF5A5A}.team-project-move-in .header-notice{padding:10px}.team-project-move-in .move-in-members{margin-left:10px;margin-top:15px}.team-project-move-in .move-in-buttons{margin:15px 0}.team-project-move-in .move-in-buttons .ui.button{border:none;-webkit-box-shadow:none;box-shadow:none}.team-member-box .project-header{font-size:16px;padding:10px}.team-member-box .project-header .tab-option{margin-right:50px;cursor:pointer}.team-member-box .font-bold{font-weight:700}.team-member-box .other-member-top{margin-top:20px}.team-member-box .ui.basic.table{margin-top:10px}.team-member-box .ui.basic.table a{cursor:pointer}.team-member-box .ui.basic.table a span{color:#000}.team-member-box .ui.basic.table td,.team-member-box .ui.basic.table th{border-bottom:1px solid #DDD}.team-member-box .ui.basic.table th{color:#999;font-size:12px}.team-member-box .ui.basic.table tr,.team-member-box .ui.basic.table tr:last-child td{border-bottom:none}.team-member-box .ui.basic.table tr:hover td .role-action .button.remove{visibility:visible}.team-member-box .ui.basic.table td{font-size:12px;color:#484744}.team-member-box .ui.basic.table td.avatar{border-bottom:none;width:40px}.team-member-box .ui.basic.table td .email,.team-member-box .ui.basic.table td .name{width:120px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:inline-block}.team-member-box .ui.basic.table td .role-action .button{display:inline-block;background:#FFF;border-radius:30px;padding:6px 12px;font-size:12px;color:#666;border:1px solid #DDD;margin-left:12px;cursor:pointer}.team-member-box .ui.basic.table td .role-action .button:hover{background:#EFEFEF}.team-member-box .ui.basic.table td .role-action .button.remove{border:none;visibility:hidden;margin-left:0;color:#DF5A5A}.team-member-box .ui.basic.table td .role-action .button.remove:hover{background:#FFF}.team-member-box .ui.basic.table td .role-action .role-label{padding:5px 10px;border-radius:3px;font-weight:700;border:1px solid #DDD;color:#666;display:inline-block;text-align:center}.team-member-box .ui.basic.table td .role-action .role-label.owner{background:#EB935D;color:#FFF;border:1px solid #EB935D}.team-member-box .ui.basic.table td .role-action .role-label.admin{background:#32BE77;color:#FFF;border:1px solid #32BE77}.team-member-box .ui.basic.table td .role-action .role-label.member{background:#999;color:#FFF;border:1px solid #999}.team-role.ui-floating-dropdown.ui.selection.dropdown{padding:5px 10px;color:#333;width:60px;text-align:center}.team-role.ui-floating-dropdown.ui.selection.dropdown .menu .item{padding:8px 12px!important;font-size:12px;color:#333}.team-role.ui-floating-dropdown.ui.selection.dropdown>.dropdown.icon{float:right}.ui.modal .modal-content .header{font-size:1.3em;padding:.8rem 1.2rem}.ui.modal .modal-content .content{display:table;width:100%;position:relative;padding:1.2em;background-color:#F4F4F4;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.ui.modal .modal-content .actions{padding:.8rem 1.2rem}.ui.modal.add-team-member-modal{max-width:65%;margin-left:-32.5%}.ui.modal.add-team-member-modal .select-member-directive{margin:0}.ui.modal.add-team-member-modal .header{font-size:1.3em;padding:.8rem 1.2rem}.ui.modal.add-team-member-modal .content{display:table;width:100%;position:relative;padding:0;background-color:#F4F4F4;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.ui.modal.add-team-member-modal .actions{padding:.8rem 1.2rem}.team-edit-form{position:relative;margin:20px 0}.team-edit-form .ui.form{margin-left:150px}.team-edit-form .ui.form input[type=textarea]{height:8em}.team-edit-form .team-avatar{position:absolute;left:0;top:0;cursor:pointer}.team-edit-form .team-avatar .loading{font-size:40px;margin:0;position:absolute;width:128px;height:128px;background:rgba(0,0,0,.7);webkit-border-radius:128px;-moz-border-radius:128px;-ms-border-radius:128px;-o-border-radius:128px;border-radius:128px;display:table;z-index:99;color:#fff;-webkit-transition:all .5s ease-out;-moz-transition:all .5s ease-out;-o-transition:all .5s ease-out;-ms-transition:all .5s ease-out;transition:all .5s ease-out;line-height:128px}.team-edit-form .team-avatar input[type=file]{display:block;position:absolute;margin:0;opacity:0;-ms-filter:'alpha(opacity=0)';direction:ltr;cursor:pointer;z-index:999;width:128px;height:128px}.team-edit-form .team-avatar .team-icon{position:relative}.team-edit-form .team-avatar .team-icon .image .edit.icon{float:right;position:absolute;width:128px;height:128px;background:rgba(0,0,0,.7);webkit-border-radius:128px;-moz-border-radius:128px;-ms-border-radius:128px;-o-border-radius:128px;border-radius:128px;display:table;z-index:99;color:#fff;opacity:0;-webkit-transition:all .5s ease-out;-moz-transition:all .5s ease-out;-o-transition:all .5s ease-out;-ms-transition:all .5s ease-out;transition:all .5s ease-out;line-height:128px}.team-edit-form .team-avatar .team-icon .image img{-webkit-border-radius:128px;-moz-border-radius:128px;-ms-border-radius:128px;-o-border-radius:128px;border-radius:128px}.team-edit-form .team-avatar .team-icon:hover .image .edit.icon{opacity:1}.team-setting-box .upline{border-top:1px solid #DDD;padding-top:30px}.team-setting-box .upline:first-child{border-top:none;padding-top:0}.team-dismiss,.team-quit,.team-transfer{margin:30px 0;padding-top:30px}.team-dismiss .ui.header,.team-quit .ui.header,.team-transfer .ui.header{font-size:16px;color:#32BE77}.team-dismiss .ui.message,.team-quit .ui.message,.team-transfer .ui.message{font-size:14px}.team-dismiss .ui.message strong,.team-quit .ui.message strong,.team-transfer .ui.message strong{color:#DF5A5A}.team-dismiss .member-select,.team-quit .member-select,.team-transfer .member-select{display:inline-block}.team-dismiss .do-transfer.field label,.team-quit .do-transfer.field label,.team-transfer .do-transfer.field label{font-size:14px;color:#666}.team-dismiss .do-transfer.field .select-member,.team-dismiss .do-transfer.field label,.team-quit .do-transfer.field .select-member,.team-quit .do-transfer.field label,.team-transfer .do-transfer.field .select-member,.team-transfer .do-transfer.field label{display:inline-block}.team-dismiss .do-transfer.field .ui-floating-dropdown.ui.selection.dropdown,.team-quit .do-transfer.field .ui-floating-dropdown.ui.selection.dropdown,.team-transfer .do-transfer.field .ui-floating-dropdown.ui.selection.dropdown{padding:6px 12px;color:#333;font-size:14px}.team-dismiss .do-transfer.field .ui-floating-dropdown.ui.selection.dropdown .menu .item,.team-quit .do-transfer.field .ui-floating-dropdown.ui.selection.dropdown .menu .item,.team-transfer .do-transfer.field .ui-floating-dropdown.ui.selection.dropdown .menu .item{padding:.4em .8em!important;font-size:12px;color:#333}.ui.modal.team{max-width:700px;margin-left:-350px}.ui.modal.team .header{font-size:1.3em;color:#666;padding:.8rem 1.2rem}.ui.modal.team .content{display:table;width:100%;position:relative;padding:0 1em;background-color:#F4F4F4;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;color:#000}.ui.modal.team .actions{padding:.8rem 1.2rem}.ui.modal.team-member-permission-modal .ui.basic.table{margin-top:20px}.ui.modal.team-member-permission-modal .ui.basic.table td,.ui.modal.team-member-permission-modal .ui.basic.table th{border-bottom:1px solid #DDD;padding:.5em .6em}.ui.modal.team-member-permission-modal .ui.basic.table th{color:#999;font-size:14px}.ui.modal.team-member-permission-modal .ui.basic.table tr,.ui.modal.team-member-permission-modal .ui.basic.table tr:last-child td{border-bottom:none}.ui.modal.team-member-permission-modal .ui.basic.table .selecter{width:120px}.ui.modal.team-member-permission-modal .ui.basic.table td{font-size:14px;color:#484744}.ui.modal.team-member-permission-modal .ui.basic.table td .email,.ui.modal.team-member-permission-modal .ui.basic.table td .name{width:120px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:inline-block}.ui.modal.team-member-permission-modal .ui.basic.table td.avatar{border-bottom:none;width:40px}.ui.modal.team-member-permission-modal .ui.basic.table td .role-action .button{display:inline-block;background:#FFF;border-radius:30px;padding:6px 12px;font-size:12px;color:#666;border:1px solid #DDD;margin-left:12px;cursor:pointer}.ui.modal.team-member-permission-modal .ui.basic.table td .role-action .button:hover{background:#EFEFEF}.ui.modal.team-member-permission-modal .ui.basic.table td .role-action .button.remove{border:none;margin-left:0;color:#DF5A5A}.ui.modal.team-member-permission-modal .ui.basic.table td .role-action .button.remove:hover{background:#FFF}.ui.modal.team-member-permission-modal .ui.basic.table td .role-action .role-label{padding:5px 12px;background:#EB935D;color:#FFF;border-radius:3px;font-weight:700}.ui.modal.team-member-permission-modal .team-role.ui-floating-dropdown.ui.selection.dropdown{padding:5px 10px;color:#333;width:84px;text-align:center}.ui.modal.team-member-permission-modal .team-role.ui-floating-dropdown.ui.selection.dropdown .menu .item{padding:8px 12px!important;font-size:12px;color:#333}.ui.modal.team-member-permission-modal .team-role.ui-floating-dropdown.ui.selection.dropdown>.dropdown.icon{float:right}.ui.modal.team-project-export-modal .ui.form .do-export .select-member,.ui.modal.team-project-export-modal .ui.form .do-export label{display:inline-block}.ui.modal.team-project-export-modal .ui.form .do-export .select-member div.menu{max-height:200px}.project-labels{padding:0;margin:0}.project-labels li{display:inline-block;cursor:pointer;vertical-align:top;position:relative;z-index:1;outline:0!important}.project-label{width:122px;margin:0 15px 15px 0;padding:10px;display:inline-block;cursor:pointer;vertical-align:top;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;position:relative;z-index:1;outline:0!important}.project-label.selection .logo-wrapper{border:1px dashed #CCC}.project-label:hover{background:rgba(0,0,0,.03)}.project-label .logo-wrapper{width:122px;height:122px;position:relative;display:inline-block;border:1px solid transparent}.project-label .logo-wrapper img{width:122px;height:122px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.project-label .logo-wrapper .team-admin-operation{position:absolute;width:100%;height:100%;left:0;top:0;border-radius:3px;background:linear-gradient(to bottom,rgba(0,0,0,.3) 0,transparent 50%,transparent 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#4d000000', endColorstr='#00000000', GradientType=0)}.project-label .logo-wrapper .team-admin-operation i{position:absolute;right:2px;top:10px;opacity:1;font-size:16px;color:#FFF;display:none;cursor:pointer}.project-label .logo-wrapper .team-admin-operation .buttons-wrapper{display:none;position:absolute;right:2px;top:10px;padding-top:20px}.project-label .logo-wrapper .team-admin-operation .buttons-wrapper:hover{display:block}.project-label .logo-wrapper .team-admin-operation .buttons-wrapper .buttons{background:#fff}.project-label .logo-wrapper .team-admin-operation .buttons-wrapper .buttons .button{border-top:1px solid rgba(0,0,0,.05);box-shadow:none;border-radius:0;padding:0 1em;font-weight:200;font-family:'微软雅黑','Helvetica Neue',sans-serif,SimHei}.project-label .logo-wrapper .team-admin-operation .buttons-wrapper .buttons .button:hover{background:rgba(0,0,0,.05)!important}.project-label .logo-wrapper .team-admin-operation:hover i,.project-label .logo-wrapper .team-admin-operation:hover i:hover+.buttons-wrapper{display:block}.project-label .title{text-align:center;font-size:12px;color:#666;margin:15px 10px 0;word-break:break-all;line-height:15px}.project-label .title.icon.private span.name:before{font-family:Icons;content:'\\f023';margin-right:3px}.project-label .corner.label{right:8px;top:10px}.project-label .message-tip{right:2px!important;position:absolute;padding:2px;top:0;width:auto;min-width:12px;height:12px;line-height:12px;background:#f75288;border-radius:12px;color:#FFF;font-size:10px;font-style:normal;border:2px solid #FFF;text-align:center}.project-selection .selected-box{padding:0 10px}.project-selection .selected-box .selected-label{font-size:14px;color:#666;margin-right:10px}.project-selection .selected-box .selected-label em{font-style:normal}.project-selection .selected-box .selected-item{padding:2px 12px;font-size:12px;border-radius:30px;line-height:18px;background:#A1CF64;color:#FFF;margin:0 8px 8px 0;display:inline-block}.project-selection .selected-box .selected-item .icon.remove{margin-left:10px;cursor:pointer}.select-member-directive{padding:0;border:1px solid #DDD;border-radius:4px;margin:30px 0 10px}.select-member-directive>.content{padding:0}.select-member-directive .add-members .wrapper{position:relative}.select-member-directive .add-members .search-region{width:220px;padding:20px 20px 0;border-right:1px solid #CCC}.select-member-directive .add-members .select-region{padding:20px 0 0 20px}.select-member-directive .add-members .selected-region{padding:15px 10px 0 20px;border-top:1px solid #CCC}.select-member-directive .add-members .selected-region .label i.remove.icon{cursor:pointer}.select-member-directive .add-members .search-region input[type=text]{font-size:14px}.select-member-directive .add-members .member-folder{margin:15px 0 0;height:220px;overflow-y:auto;overflow-x:hidden}.select-member-directive .add-members .vertical.menu>.item{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;font-size:14px;height:36px!important;line-height:24px;display:block;padding:5px;margin-bottom:0}.select-member-directive .add-members .vertical.menu>.item.active{background-color:rgba(0,0,0,.03)}.select-member-directive .add-members .vertical.menu>.item i.icon{float:none;margin:0 .45em 0 .25em}.select-member-directive .add-members .selected-region ul{list-style:none;margin:0;padding:0}.select-member-directive .add-members .selected-region ul li:first-child{font-size:14px;line-height:16px;margin-bottom:10px}.select-member-directive .add-members .selected-region ul li{float:left;font-size:12px;margin-bottom:10px;text-transform:none}.select-member-directive .add-members .select-nothing{text-align:center}.select-member-directive .add-members .select-nothing span.words{font-size:16px;color:#999}.select-member-directive .add-members .select-nothing .invite-button{margin-top:20px}.select-member-directive .add-members .select-users{height:250px;position:relative;overflow-y:auto;overflow-x:hidden}.select-member-directive .add-members .select-users ul{list-style:none;margin:0;padding:0;position:relative}.select-member-directive .add-members .select-users ul li{float:left;display:inline-block;width:140px;height:40px;border:1px dashed #CCC;padding:5px;position:relative;line-height:40px;font-size:14px;background:#FFF;margin:0 10px 10px 0;cursor:pointer}.select-member-directive .add-members .select-users ul li.is-member{cursor:not-allowed}.select-member-directive .add-members .select-users ul li img{position:absolute;left:10px;top:8px}.select-member-directive .add-members .select-users ul li span{padding-left:50px}.select-member-directive .add-members .select-users ul li .label{line-height:normal;font-size:12px}.select-member-directive .actions .max-member{float:left;height:30px;line-height:30px;color:#666;font-size:14px}.select-member-directive .actions{padding:15px 10px 15px 20px}.experiment-switchers{position:fixed;top:50%;left:50%;width:300px;height:230px;margin-left:-150px;margin-top:-115px;background:#EEE;border:1px solid #DDD;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;padding:10px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;z-index:2000}.experiment-switchers ul{list-style:none;padding:0 0 0 20px}.experiment-switchers ul li{margin-bottom:10px}.experiment-switchers h3{font-size:20px;text-align:center;font-weight:400;padding:0 0 10px;margin:0;border-bottom:1px solid #DDD}.experiment-switchers i.close{position:absolute;right:0;top:5px;color:#948D8D;cursor:pointer}.experiment-switchers .exp-wrapper{display:inline-block;width:100%;height:145px;overflow-x:hidden;overflow-y:auto;margin-top:5px}.experiment-switchers .exp-password{text-align:center}.labels,.project-member-role-select{display:inline-block}.project-member-role-select .dropdown.ui .menu{border-radius:3px;max-width:140px;font-size:14px;border:none;background:#FFF;box-shadow:1px 0 1px 1px #ddd;left:3px}.project-member-role-select .dropdown.ui .menu .item{padding:8px 12px!important;font-size:14px;border-top:none!important}.project-member-role-select .dropdown.ui .menu .item:hover{background:#F4F4F4}.project-member-role-select .dropdown.ui .menu .item.active{color:#63cc96;background:#FCFCFC!important}.project-member-role-select .dropdown.ui .menu .item label{margin-right:24px}.project-member-role-select .ui.label.small.owner{background:#eeac82;color:#FFF}.project-member-role-select .ui.label.small.admin{background:#63cc96;color:#FFF}.project-member-role-select .ui.label.small.member-no-code{background:#999;color:#FFF}#gitcafe-migration{font-family:\"PingFang SC\",\"Helvetica Neue\",Helvetica,\"Hiragino Sans GB\",Arial,\"Microsoft YaHei\",\"微软雅黑\",sans-serif;display:block;width:995px;margin:50px auto}#gitcafe-migration .migration-platform{text-align:center;margin:0;padding:0}#gitcafe-migration .migration-platform .platform{float:left;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;width:calc(50% - 37.5px);margin-right:75px;height:230px;padding:30px;color:#FFF}#gitcafe-migration .migration-platform .platform:last-child{margin-right:0}#gitcafe-migration .migration-platform .platform .logo{height:40px}#gitcafe-migration .migration-platform .platform .logo img{height:30px;vertical-align:bottom}#gitcafe-migration .migration-platform .platform.gitcafe{background:rgba(50,180,84,.9)}#gitcafe-migration .migration-platform .platform.coding{background:#333}#gitcafe-migration .migration-platform .platform.coding .logo img{height:40px}#gitcafe-migration .migration-platform .platform .account{position:relative;text-align:left;margin:20px 0 20px 80px}#gitcafe-migration .migration-platform .platform .account img{float:left;width:96px;height:96px;-webkit-border-radius:100px;-moz-border-radius:100px;border-radius:100px;-webkit-box-shadow:0 2px 4px rgba(0,0,0,.5);-moz-box-shadow:0 2px 4px rgba(0,0,0,.5);box-shadow:0 2px 4px rgba(0,0,0,.5)}#gitcafe-migration .migration-platform .platform .account .info{margin:15px 0 0 116px;line-height:2em}#gitcafe-migration .migration-platform .platform .account .info .name{font-size:18px}#gitcafe-migration .migration-platform .platform .account .info .points{font-size:14px}#gitcafe-migration h2{font-size:32px;color:#333;margin:30px 0 20px;text-align:center;font-weight:200}#gitcafe-migration h2.no-projects{margin:80px 0 30px;font-size:24px;color:#999}#gitcafe-migration .migration-titles{margin-bottom:1em}#gitcafe-migration .migration-titles .title{float:left;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;width:calc(50% - 37.5px);margin-right:75px;font-size:18px;color:#666}#gitcafe-migration .migration-titles .title:last-child{margin-right:0}#gitcafe-migration .migration-projects{position:relative}#gitcafe-migration .migration-projects .list{float:left;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;width:calc(50% - 37.5px);margin-right:75px;position:relative;height:500px;border:1px solid #D8D8D8;overflow-y:auto;padding:20px 20px 5px}#gitcafe-migration .migration-projects .list:last-child{margin-right:0}#gitcafe-migration .migration-projects .list .project{width:100%;height:64px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;position:relative;margin-bottom:15px;text-align:left}#gitcafe-migration .migration-projects .list .project img{float:left;width:64px;height:64px}#gitcafe-migration .migration-projects .list .project .info{margin:10px 0 0 74px;line-height:1.5em}#gitcafe-migration .migration-projects .list .project .info .name{font-size:14px;color:#323A45}#gitcafe-migration .migration-projects .list .project .info .description{font-size:12px;color:#666}#gitcafe-migration .migration-projects .list.migration .project{border:2px solid #DDD;cursor:pointer}#gitcafe-migration .migration-projects .list.migration .project .info .description,#gitcafe-migration .migration-projects .list.migration .project .info .name{margin-right:20px}#gitcafe-migration .migration-projects .list.migration .project:before{content:'\\f058';font-family:Icons;position:absolute;right:5px;top:5px;color:#D8D8D8;font-size:18px}#gitcafe-migration .migration-projects .list.migration .project.selected{border:2px solid #25A321}#gitcafe-migration .migration-projects .list.migration .project.selected:before{color:#25A321}#gitcafe-migration .migration-projects .list.migration .project:hover{border:2px solid rgba(37,163,33,.5)}#gitcafe-migration .migration-projects .list.migration .project:hover:before{color:rgba(37,163,33,.5)}#gitcafe-migration .migration-projects .arrow-right{display:inline-block;width:50px;height:20px;position:absolute;left:50%;top:20px;margin-left:-25px}#gitcafe-migration .migration-projects .arrow-right:before{content:'';width:0;height:0;position:absolute;right:0;border-top:10px solid transparent;border-bottom:10px solid transparent;border-left:15px solid #DDD}#gitcafe-migration .migration-projects .arrow-right:after{content:'';width:35px;height:10px;display:inline-block;background:#DDD;margin-top:5px;position:absolute}#gitcafe-migration .migration-form .controls{text-align:center}#gitcafe-migration .migration-form .controls .checkbox{font-size:16px;margin:20px 0;cursor:pointer}#gitcafe-migration .migration-form .controls .checkbox input[type=checkbox]{width:16px;height:16px;vertical-align:middle}#gitcafe-migration .migration-form .controls .checkbox a{color:#629CC4}#gitcafe-migration .migration-form .controls .checkbox label{color:#999}#gitcafe-migration .migration-form .controls a.button,#gitcafe-migration .migration-form .controls button{border:none;font-size:18px;line-height:24px;color:#FFF;background:#25A321;cursor:pointer;-webkit-border-radius:100px;-moz-border-radius:100px;border-radius:100px;padding:10px 36px;margin:0;outline:0}#gitcafe-migration .migrating-projects{margin:66px 0;text-align:center}#gitcafe-migration .migrating-projects h3{color:#333;font-size:18px;line-height:1em;font-weight:400;margin:13px 0 19px}#gitcafe-migration .migrating-projects .migrating-list{float:left;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin-right:75px;position:relative;border:1px solid #D8D8D8;overflow-y:auto;padding:20px 20px 5px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;width:100%;height:auto;margin-bottom:30px}#gitcafe-migration .migrating-projects .migrating-list:last-child{margin-right:0}#gitcafe-migration .migrating-projects .migrating-list .project{height:64px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;position:relative;margin-bottom:15px;text-align:left}#gitcafe-migration .migrating-projects .migrating-list .project img{float:left;width:64px;height:64px}#gitcafe-migration .migrating-projects .migrating-list .project .info{margin:10px 0 0 74px;line-height:1.5em}#gitcafe-migration .migrating-projects .migrating-list .project .info .name{font-size:14px;color:#323A45}#gitcafe-migration .migrating-projects .migrating-list .project .info .description{font-size:12px;color:#666}#gitcafe-migration .migrating-projects .migrating-list .project{float:left;width:calc(50% - 37.5px)}#gitcafe-migration .migrating-projects .migrating-list .project:nth-child(2n-1){margin-right:75px}#gitcafe-migration .migrating-projects .migrating-list .project .info.error .description,#gitcafe-migration .migrating-projects .migrating-list .project .info.error .name{color:#A00}#gitcafe-migration .migrating-projects .migration-titles img{width:64px;height:64px;margin-bottom:10px}#gitcafe-migration .migrating-projects .migration-projects .list{height:auto;padding-bottom:20px}#gitcafe-migration .migrating-projects .migration-projects .list a{margin:20px 10px 5px;color:#5191BD;font-size:14px}#gitcafe-migration .migrating-projects .migration-projects .list h3.tips{margin:20px 10px 5px;line-height:1em;font-size:14px;color:#DF5A5A}#gitcafe-migration .migrating-projects .migration-projects .list .empty{font-size:14px;color:#999}#gitcafe-migration .migrating-projects .migration-projects .list .green-button{border:none;line-height:24px;color:#FFF;background:#47BC65;outline:0;cursor:pointer;-webkit-border-radius:100px;-moz-border-radius:100px;border-radius:100px;font-size:14px;padding:5px 25px;margin:10px 0}.resource-reference{margin:0 5px 30px;position:relative}.resource-reference>.icon{width:36px;height:36px;position:absolute;top:5px;left:3px;border:1px solid #EEE;background:#EEE;-webkit-border-radius:36px;-moz-border-radius:36px;border-radius:36px;line-height:36px;text-align:center}.resource-reference>.icon i.icon{margin-right:0;-webkit-transform-origin:6px 7px;-moz-transform-origin:6px 7px;-ms-transform-origin:6px 7px;-o-transform-origin:6px 7px;transform-origin:6px 7px}.resource-reference>.detail{margin-left:60px;background:#FFF;position:relative;top:12px;border:1px solid #e4e4e4;max-height:315px;overflow:hidden;box-sizing:border-box}.resource-reference>.detail .load-more{position:absolute;left:0;right:0;bottom:0;height:40px;line-height:40px;background:#FFF;color:#4E95E9;font-size:12px;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;cursor:pointer}.resource-reference>.detail .load-more:hover{background:#F2F4F6}.resource-reference>.detail.show-all{max-height:inherit}.resource-reference>.detail.show-all .load-more{display:none}.resource-reference>.detail.folded{padding-bottom:40px}.resource-reference>.detail .title{background-color:#eee;height:25px;line-height:25px;padding-left:10px;font-size:14px;color:#333}.resource-reference>.detail .title i.attention.icon:hover{cursor:help}.resource-reference>.detail>.item-group{border-bottom:1px solid #eee}.resource-reference>.detail>.item-group:last-child{border:none}.resource-reference>.detail .item{height:25px;line-height:25px;padding-left:10px;display:-webkit-flex;display:flex}.resource-reference>.detail .item>a{color:#4f4f4f!important;display:block;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;font-size:14px}.resource-reference>.detail .item>a.task-finished{text-decoration:line-through}.resource-reference>.detail .item>.left{-webkit-flex-grow:1;flex-grow:1}.resource-reference>.detail .item>.left>i.icon.remove{float:left;margin-top:5px;margin-left:10px;display:none}.resource-reference>.detail .item>.left>i.icon.remove:hover{cursor:pointer}.resource-reference>.detail .item:hover{background:#F2F4F6}.resource-reference>.detail .item:hover>.left>i.icon.remove{display:inline-block}.resource-reference>.detail .item.no-item{font-size:14px;color:#333}.resource-reference>.detail:before{margin-top:-11px;bottom:auto;right:auto;top:19px;left:-4px;position:absolute;content:\"\";width:.6em;height:.6em;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);z-index:2;-webkit-transition:background .1s linear;-moz-transition:background .1s linear;transition:background .1s linear;background-color:#EEE;border-left:1px solid #e4e4e4;border-bottom:1px solid #e4e4e4}.resource-reference .add-refer{float:right;position:relative}.resource-reference .add-refer:hover{cursor:pointer}.resource-reference .add-refer .select2-container{position:absolute;right:0;visibility:hidden}.select-refer.select2-drop{border:0;border-radius:0 0 .2em .2em;box-shadow:0 0 1px 1px rgba(0,0,0,.1);color:#333!important;min-width:175px}.select-refer.select2-drop>.select2-search{padding:4px;margin-top:0;background-color:#eee}.select-refer.select2-drop>.select2-search input{margin-top:0!important;padding:5px 25px 5px 10px;border:1px solid #ddd;border-radius:2px;font-size:12px;color:#333;background:url(/static/2ca61b76e22053571dd8611e5aac4900.png) 100% -22px no-repeat #fff}.select-refer.select2-drop>.select2-results{padding:0;margin:0;min-height:165px;max-height:205px}.select-refer.select2-drop>.select2-results .select2-result{height:30px;color:#333;border-top:1px solid rgba(0,0,0,.05)}.select-refer.select2-drop>.select2-results .select2-highlighted{background:rgba(0,0,0,.02)}.select-refer.select2-drop>.select2-results .select2-no-results,.select-refer.select2-drop>.select2-results .select2-result-label{padding:0 5px;height:30px;line-height:30px}.select-refer.select2-drop>.select2-results .select2-no-results>div,.select-refer.select2-drop>.select2-results .select2-result-label>div{display:flex;display:-webkit-flex;align-items:center;-webkit-align-items:center}.coding-cli{position:fixed;bottom:0;left:0;width:100%;display:flex;display:-wekbit-flex;flex-direction:column;-webkit-flex-direction:column;z-index:1000}.coding-cli .coding-cli-bar{position:relative;flex-basis:28px;-webkit-flex-basis:28px;top:0;left:0;width:100%;background:#e4e4e4;line-height:28px;border-bottom:1px solid #e0e0e0;border-top:1px solid #ececec;box-sizing:border-box}.coding-cli .coding-cli-bar:hover{cursor:default}.coding-cli .coding-cli-bar i.coding.icon.monkey{margin-left:5px;margin-right:0}.coding-cli .coding-cli-bar i.add.icon,.coding-cli .coding-cli-bar i.minus.icon,.coding-cli .coding-cli-bar i.remove.icon,.coding-cli .coding-cli-bar i.setting.icon{float:right;height:28px;line-height:28px}.coding-cli .coding-cli-bar i.add.icon:hover,.coding-cli .coding-cli-bar i.minus.icon:hover,.coding-cli .coding-cli-bar i.remove.icon:hover,.coding-cli .coding-cli-bar i.setting.icon:hover{cursor:pointer}.coding-cli .coding-cli-bar.min:hover{cursor:pointer!important}.coding-cli .coding-cli-side{flex-basis:5px;-webkit-flex-basis:5px;position:relative}.coding-cli .coding-cli-side:hover{cursor:row-resize}.coding-cli .coding-cli-mask{position:relative;bottom:0;width:100%;height:100%;background:#ccc;z-index:1001}.coding-cli .coding-cli-mask:hover{cursor:default}.coding-cli .coding-cli-mask .box{display:flex;display:-webkit-flex;justify-content:space-between;-webkit-justify-content:space-between;margin:10% auto;width:280px}.coding-cli .coding-cli-mask .column{display:inline-block;text-align:center;vertical-align:top;flex-grow:1;-webkit-flex-grow:1;width:120px}.coding-cli .coding-cli-mask .column>i{display:block;font-size:90px}.coding-cli .coding-cli-mask .column>i:hover{cursor:pointer}#coding-cli-terminal{width:100%;flex-grow:1;-webkit-flex-grow:1;display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column}#coding-cli-terminal:hover{cursor:text}#coding-cli-terminal .terminal-container{position:relative;width:100%;height:100%;font-family:Menlo,Monaco,\"DejaVu Sans Mono\",Consolas,\"Andale Mono\",monospace;-webkit-font-smoothing:auto;flex-grow:1;-webkit-flex-grow:1}#coding-cli-terminal .terminal-container div{margin:0;padding:0;user-select:initial;-webkit-user-select:initial}#coding-cli-terminal .terminal-container .terminal{width:100%;height:100%;font-size:13px;white-space:pre;background-color:rgba(0,0,0,.8)!important;position:absolute}#coding-cli-terminal .terminal-container .terminal-row{white-space:pre;overflow:hidden}#coding-cli-terminal .terminal-container .terminal-input{position:absolute;z-index:0;height:1em;opacity:0;background:0 0;-moz-appearance:none;-webkit-appearance:none;appearance:none;outline:0;overflow:hidden;font:inherit;margin:0 -1px;text-indent:-1em;-ms-user-select:text;-moz-user-select:text;-webkit-user-select:text;user-select:text;color:#9c9c9c;border:2px solid #2b2b2b;padding:5px 2px;resize:none;left:-1000%}#coding-cli-terminal .terminal-container .terminal-screen-keys{position:absolute;top:0;right:0}#coding-cli-terminal .terminal-container .terminal-screen-keys button{background:-webkit-linear-gradient(top,#eeeef0,#d3d3d9);box-shadow:0 2px 2px rgba(0,0,0,.25),inset 0 -2px 0 rgba(0,0,0,.25),inset 0 1px 0 #fff;border:1px solid #000;border-radius:2px;padding:8px;font-size:14px;text-shadow:0 1px 0 #fff}#coding-cli-terminal .terminal-container .terminal-screen-keys button.active,#coding-cli-terminal .terminal-container .terminal-screen-keys button:focus{outline:0;background:-webkit-linear-gradient(top,#ccccd0,#a3a3a9)}#coding-cli-terminal .terminal-container .terminal-size-indicator{position:absolute;bottom:0;left:0;background-color:rgba(255,255,255,.75);color:#000;padding:0 3px}#coding-cli-terminal i.terminal_cjk{display:inline-block;font-style:normal;text-align:center}.draging{cursor:row-resize!important;user-select:none!important;-moz-user-select:none!important;-webkit-user-select:none!important;-ms-user-select:none!important;overflow:hidden!important}.user-activeness{margin:30px 0}.user-activeness .header{margin-bottom:13px;font-size:1rem;line-height:22px}.user-activeness .header .title{color:#000;font-weight:700}.user-activeness .header .show-private{float:right;cursor:pointer;font-size:12px;line-height:22px;color:#666}.user-activeness .header .show-private i.icon{margin:0}.user-activeness .statistic-table{width:100%;table-layout:fixed;border-collapse:collapse;border:1px solid #ddd}.user-activeness .statistic-table tr td{border:1px solid #ddd;padding:0}.user-activeness .statistic-table tr td .calendar .graph{padding:8px}.user-activeness .statistic-table tr td .calendar .graph .daily-activeness-graph rect.day{shape-rendering:crispedges}.user-activeness .statistic-table tr td .calendar .graph .daily-activeness-graph rect.day:hover{stroke:#555;stroke-width:1px}.user-activeness .statistic-table tr td .calendar .graph .daily-activeness-graph text.month,.user-activeness .statistic-table tr td .calendar .graph .daily-activeness-graph text.wday{font-size:10px;fill:#999}.user-activeness .statistic-table tr td .calendar .graph .ui.popup{max-width:inherit;white-space:nowrap;background-color:#000;padding-top:5px;padding-bottom:5px}.user-activeness .statistic-table tr td .calendar .graph .ui.popup:before{background-color:#000!important}.user-activeness .statistic-table tr td .calendar .graph .ui.popup .content{color:#fff!important}.user-activeness .statistic-table tr td .calendar .notes{padding:0 8px 14px;line-height:17px;font-size:12px}.user-activeness .statistic-table tr td .calendar .notes .graph-legend{float:right}.user-activeness .statistic-table tr td .calendar .notes .graph-legend ul.legend{position:relative;bottom:-1px;display:inline-block;margin:0 5px;list-style:none;padding:0}.user-activeness .statistic-table tr td .calendar .notes .graph-legend ul.legend li{display:inline-block;width:10px;height:10px}.user-activeness .statistic-table tr td .summary{padding:16px;text-align:center}.user-activeness .statistic-table tr td .summary .duration,.user-activeness .statistic-table tr td .summary .item{padding:0;font-size:12px;line-height:17px;color:#666}.user-activeness .statistic-table tr td .summary .count{padding:2px 0;font-size:24px;line-height:33px;color:#000}"
  },
  {
    "path": "automatic/static/css/login-vendor.css",
    "content": "@charset \"UTF-8\";.ui.breadcrumb{margin:1em 0;display:inline-block;vertical-align:middle}.ui.breadcrumb:first-child{margin-top:0}.ui.breadcrumb:last-child{margin-bottom:0}.ui.breadcrumb .divider{display:inline-block;opacity:.5;margin:0 .15em;font-size:1em;color:rgba(0,0,0,.3)}.ui.breadcrumb a.section{cursor:pointer}.ui.breadcrumb .section{display:inline-block;margin:0;padding:0}.ui.breadcrumb.segment{display:inline-block;padding:.5em 1em}.ui.breadcrumb .active.section{font-weight:700}.ui.small.breadcrumb{font-size:.75em}.ui.large.breadcrumb{font-size:1.1em}.ui.huge.breadcrumb{font-size:1.3em}.ui.form{position:relative;max-width:100%}.ui.form :first-child{margin-top:0}.ui.form :last-child{margin-bottom:0}.ui.form>p{margin:1em 0}.ui.form .field{clear:both;margin:0 0 1em}.ui.form .field>label{margin:0 0 .3em;display:block;color:#555;font-size:.875em}.ui.form .ui.input,.ui.form input[type=color],.ui.form input[type=date],.ui.form input[type=datetime-local],.ui.form input[type=datetime],.ui.form input[type=email],.ui.form input[type=month],.ui.form input[type=number],.ui.form input[type=password],.ui.form input[type=range],.ui.form input[type=search],.ui.form input[type=tel],.ui.form input[type=text],.ui.form input[type=time],.ui.form input[type=url],.ui.form input[type=week],.ui.form textarea{width:100%}.ui.form input[type=color],.ui.form input[type=date],.ui.form input[type=datetime-local],.ui.form input[type=datetime],.ui.form input[type=email],.ui.form input[type=month],.ui.form input[type=number],.ui.form input[type=password],.ui.form input[type=search],.ui.form input[type=tel],.ui.form input[type=text],.ui.form input[type=time],.ui.form input[type=url],.ui.form input[type=week],.ui.form textarea{margin:0;padding:.65em 1em;font-size:1em;background-color:#FFF;border:1px solid rgba(0,0,0,.15);outline:0;color:rgba(0,0,0,.7);border-radius:.3125em;-webkit-transition:background-color .3s ease-out,-webkit-box-shadow .2s ease,border-color .2s ease;-moz-transition:background-color .3s ease-out,box-shadow .2s ease,border-color .2s ease;transition:background-color .3s ease-out,box-shadow .2s ease,border-color .2s ease;-webkit-box-shadow:0 0 rgba(0,0,0,.3) inset;box-shadow:0 0 rgba(0,0,0,.3) inset;-webkit-appearance:none;-webkit-tap-highlight-color:rgba(255,255,255,0);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.ui.form textarea,.ui.textarea{line-height:1.33;min-height:8em;height:12em;max-height:24em;resize:vertical}.ui.form input[type=checkbox],.ui.form textarea{vertical-align:top}.ui.form .divider{clear:both;margin:1em 0}.ui.form .error.message,.ui.form .info.message,.ui.form .warning.message{display:none}.ui.form .message:first-child{margin-top:0}.ui.form .field .prompt.label{white-space:nowrap}.ui.form .inline.field .prompt{margin-top:0;margin-left:1em}.ui.form .inline.field .prompt:before{margin-top:-.3em;bottom:auto;right:auto;top:50%;left:0}.ui.form input[type=color]:focus,.ui.form input[type=date]:focus,.ui.form input[type=datetime-local]:focus,.ui.form input[type=datetime]:focus,.ui.form input[type=email]:focus,.ui.form input[type=month]:focus,.ui.form input[type=number]:focus,.ui.form input[type=password]:focus,.ui.form input[type=search]:focus,.ui.form input[type=tel]:focus,.ui.form input[type=text]:focus,.ui.form input[type=time]:focus,.ui.form input[type=url]:focus,.ui.form input[type=week]:focus .ui.form textarea:focus{color:rgba(0,0,0,.85);border-color:rgba(0,0,0,.2);border-bottom-left-radius:0;border-top-left-radius:0;-webkit-appearance:none;-webkit-box-shadow:.3em 0 0 0 rgba(0,0,0,.2) inset;box-shadow:.3em 0 0 0 rgba(0,0,0,.2) inset}.ui.form.error .error.message,.ui.form.warning .warning.message{display:block}.ui.form .field.error .input,.ui.form .field.error label,.ui.form .fields.error .field .input,.ui.form .fields.error .field label{color:#D95C5C}.ui.form .field.error .corner.label,.ui.form .fields.error .field .corner.label{border-color:#D95C5C;color:#FFF}.ui.form .field.error input[type=color],.ui.form .field.error input[type=date],.ui.form .field.error input[type=datetime-local],.ui.form .field.error input[type=datetime],.ui.form .field.error input[type=email],.ui.form .field.error input[type=month],.ui.form .field.error input[type=number],.ui.form .field.error input[type=password],.ui.form .field.error input[type=search],.ui.form .field.error input[type=tel],.ui.form .field.error input[type=text],.ui.form .field.error input[type=time],.ui.form .field.error input[type=url],.ui.form .field.error input[type=week],.ui.form .field.error textarea,.ui.form .fields.error .field input[type=color],.ui.form .fields.error .field input[type=date],.ui.form .fields.error .field input[type=datetime-local],.ui.form .fields.error .field input[type=datetime],.ui.form .fields.error .field input[type=email],.ui.form .fields.error .field input[type=month],.ui.form .fields.error .field input[type=number],.ui.form .fields.error .field input[type=password],.ui.form .fields.error .field input[type=search],.ui.form .fields.error .field input[type=tel],.ui.form .fields.error .field input[type=text],.ui.form .fields.error .field input[type=time],.ui.form .fields.error .field input[type=url],.ui.form .fields.error .field input[type=week],.ui.form .fields.error .field textarea{background-color:snow;border-color:#E7BEBE;border-left:none;color:#D95C5C;padding-left:1.2em;border-bottom-left-radius:0;border-top-left-radius:0;-webkit-box-shadow:.3em 0 0 0 #D95C5C inset;box-shadow:.3em 0 0 0 #D95C5C inset}.ui.form .field.error input[type=color]:focus,.ui.form .field.error input[type=date]:focus,.ui.form .field.error input[type=datetime-local]:focus,.ui.form .field.error input[type=datetime]:focus,.ui.form .field.error input[type=email]:focus,.ui.form .field.error input[type=month]:focus,.ui.form .field.error input[type=number]:focus,.ui.form .field.error input[type=password]:focus,.ui.form .field.error input[type=search]:focus,.ui.form .field.error input[type=tel]:focus,.ui.form .field.error input[type=text]:focus,.ui.form .field.error input[type=time]:focus,.ui.form .field.error input[type=url]:focus,.ui.form .field.error input[type=week]:focus,.ui.form .field.error textarea:focus{border-color:#ff5050;color:#ff5050;-webkit-appearance:none;-webkit-box-shadow:.3em 0 0 0 #FF5050 inset;box-shadow:.3em 0 0 0 #FF5050 inset}.ui.form .field.error .ui.dropdown,.ui.form .field.error .ui.dropdown .item,.ui.form .fields.error .field .ui.dropdown,.ui.form .fields.error .field .ui.dropdown .item{background-color:snow;color:#D95C5C}.ui.form .field.error .ui.dropdown,.ui.form .field.error .ui.dropdown:hover,.ui.form .fields.error .field .ui.dropdown,.ui.form .fields.error .field .ui.dropdown:hover{-webkit-box-shadow:0 0 0 1px #E7BEBE!important;box-shadow:0 0 0 1px #E7BEBE!important}.ui.form .field.error .ui.dropdown:hover .menu,.ui.form .fields.error .field .ui.dropdown:hover .menu{-webkit-box-shadow:0 1px 0 1px #E7BEBE;box-shadow:0 1px 0 1px #E7BEBE}.ui.form .field.error .ui.selection.dropdown .menu .item:hover,.ui.form .fields.error .field .ui.selection.dropdown .menu .item:hover{background-color:#FFF2F2}.ui.form .field.error .ui.dropdown .menu .active.item,.ui.form .fields.error .field .ui.dropdown .menu .active.item{background-color:#FDCFCF!important}.ui.form ::-webkit-input-placeholder{color:#AAA}.ui.form ::-moz-placeholder{color:#AAA}.ui.form :focus::-webkit-input-placeholder{color:#999}.ui.form :focus::-moz-placeholder{color:#999}.ui.form .error ::-webkit-input-placeholder{color:rgba(255,80,80,.4)}.ui.form .error ::-moz-placeholder{color:rgba(255,80,80,.4)}.ui.form .error :focus::-webkit-input-placeholder{color:rgba(255,80,80,.7)}.ui.form .error :focus::-moz-placeholder{color:rgba(255,80,80,.7)}.ui.form .field :disabled,.ui.form .field.disabled,.ui.form .field.disabled label{opacity:.5}.ui.form .field.disabled :disabled{opacity:1}.ui.form.loading{position:relative}.ui.form.loading:after{position:absolute;top:0;left:0;content:'';width:100%;height:100%;background:url(/static/9af25aaeb6ca6d08d213b04841813eb5.gif) 50% 50% no-repeat rgba(255,255,255,.8);visibility:visible}.ui.form.fluid{width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.ui.form input.attached{width:auto}.ui.form .date.field>label{position:relative}.ui.form .date.field>label:after{position:absolute;top:2em;right:.5em;font-family:Icons;content:'\\f133';font-size:1.2em;font-weight:400;color:#CCC}.ui.inverted.form label{color:#FFF}.ui.inverted.form .field.error input[type=color],.ui.inverted.form .field.error input[type=date],.ui.inverted.form .field.error input[type=datetime-local],.ui.inverted.form .field.error input[type=datetime],.ui.inverted.form .field.error input[type=email],.ui.inverted.form .field.error input[type=month],.ui.inverted.form .field.error input[type=number],.ui.inverted.form .field.error input[type=password],.ui.inverted.form .field.error input[type=search],.ui.inverted.form .field.error input[type=tel],.ui.inverted.form .field.error input[type=text],.ui.inverted.form .field.error input[type=time],.ui.inverted.form .field.error input[type=url],.ui.inverted.form .field.error input[type=week],.ui.inverted.form .field.error textarea{background-color:#FCC}.ui.inverted.form .ui.checkbox label{color:rgba(255,255,255,.8)}.ui.inverted.form .ui.checkbox .box:hover,.ui.inverted.form .ui.checkbox label:hover{color:#FFF}.ui.form .grouped.fields{margin:0 0 1em}.ui.form .grouped.fields .field{display:block;float:none;margin:.5em 0;padding:0}.ui.form .fields{clear:both}.ui.form .fields:after{content:' ';display:block;clear:both;visibility:hidden;line-height:0;height:0}.ui.form .fields>.field{clear:none;float:left;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.ui.form .fields>.field:first-child{border-left:none;-webkit-box-shadow:none;box-shadow:none}.ui.form .two.fields>.field,.ui.form .two.fields>.fields{width:50%;padding-left:1%;padding-right:1%}.ui.form .three.fields>.field,.ui.form .three.fields>.fields{width:33.333%;padding-left:1%;padding-right:1%}.ui.form .four.fields>.field,.ui.form .four.fields>.fields{width:25%;padding-left:1%;padding-right:1%}.ui.form .five.fields>.field,.ui.form .five.fields>.fields{width:20%;padding-left:1%;padding-right:1%}.ui.form .fields .field:first-child{padding-left:0}.ui.form .fields .field:last-child{padding-right:0}.ui.form .fields .wide.field{width:6.25%;padding-left:1%;padding-right:1%}.ui.form .fields .wide.field:first-child{padding-left:0}.ui.form .fields .wide.field:last-child{padding-right:0}.ui.form .fields>.one.wide.field{width:6.25%}.ui.form .fields>.two.wide.field{width:12.5%}.ui.form .fields>.three.wide.field{width:18.75%}.ui.form .fields>.four.wide.field{width:25%}.ui.form .fields>.five.wide.field{width:31.25%}.ui.form .fields>.six.wide.field{width:37.5%}.ui.form .fields>.seven.wide.field{width:43.75%}.ui.form .fields>.eight.wide.field{width:50%}.ui.form .fields>.nine.wide.field{width:56.25%}.ui.form .fields>.ten.wide.field{width:62.5%}.ui.form .fields>.eleven.wide.field{width:68.75%}.ui.form .fields>.twelve.wide.field{width:75%}.ui.form .fields>.thirteen.wide.field{width:81.25%}.ui.form .fields>.fourteen.wide.field{width:87.5%}.ui.form .fields>.fifteen.wide.field{width:93.75%}.ui.form .fields>.sixteen.wide.field{width:100%}@media only screen and (max-width:767px){.ui.form .fields>.eight.wide.field,.ui.form .fields>.eleven.wide.field,.ui.form .fields>.fifteen.wide.field,.ui.form .fields>.five.wide.field,.ui.form .fields>.four.wide.field,.ui.form .fields>.fourteen.wide.field,.ui.form .fields>.nine.wide.field,.ui.form .fields>.seven.wide.field,.ui.form .fields>.six.wide.field,.ui.form .fields>.sixteen.wide.field,.ui.form .fields>.ten.wide.field,.ui.form .fields>.thirteen.wide.field,.ui.form .fields>.three.wide.field,.ui.form .fields>.twelve.wide.field,.ui.form .fields>.two.wide.field,.ui.form .five.fields>.field,.ui.form .five.fields>.fields,.ui.form .four.fields>.field,.ui.form .four.fields>.fields,.ui.form .three.fields>.field,.ui.form .three.fields>.fields,.ui.form .two.fields>.field,.ui.form .two.fields>.fields{width:100%;padding-left:0;padding-right:0}}.ui.form .inline.fields .field{min-height:1.3em;margin-right:.5em}.ui.form .inline.field>.ui.input,.ui.form .inline.field>input,.ui.form .inline.field>label,.ui.form .inline.field>p,.ui.form .inline.fields .field>.ui.input,.ui.form .inline.fields .field>input,.ui.form .inline.fields .field>label,.ui.form .inline.fields .field>p{display:inline-block;width:auto;margin-top:0;margin-bottom:0;vertical-align:middle}.ui.form .inline.field>:first-child,.ui.form .inline.fields .field>:first-child{margin:0 .5em 0 0}.ui.form .inline.field>:only-child,.ui.form .inline.fields .field>:only-child{margin:0}.ui.small.form{font-size:.875em}.ui.small.form input[type=color],.ui.small.form input[type=date],.ui.small.form input[type=datetime-local],.ui.small.form input[type=datetime],.ui.small.form input[type=email],.ui.small.form input[type=month],.ui.small.form input[type=number],.ui.small.form input[type=password],.ui.small.form input[type=search],.ui.small.form input[type=tel],.ui.small.form input[type=text],.ui.small.form input[type=time],.ui.small.form input[type=url],.ui.small.form input[type=week],.ui.small.form label,.ui.small.form textarea{font-size:1em}.ui.large.form{font-size:1.125em}.ui.grid{display:block;text-align:left;font-size:0;margin:0 -1.5%;padding:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}body>.ui.grid{margin-left:0!important;margin-right:0!important}.ui.grid:after,.ui.row:after{content:\".\";display:block;height:0;clear:both;visibility:hidden}.ui.grid>.column,.ui.grid>.row>.column{display:inline-block;text-align:left;font-size:1rem;width:6.25%;padding-left:1.5%;padding-right:1.5%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;vertical-align:top}.ui.grid>.column{margin-top:1rem;margin-bottom:1rem}.ui.grid>.row{display:block;width:100%!important;margin-top:1.5%;padding:1rem 0 0;font-size:0}.ui.grid>.row:first-child{padding-top:0;margin-top:0}.ui.grid>.row>.column>img,.ui.grid>.row>img{max-width:100%}.ui.grid .column>.ui.segment:only-child{margin:0}.ui.page.grid{min-width:320px;margin-left:0;margin-right:0}@media only screen and (max-width:991px){.ui.page.grid{padding:0 4%}}@media only screen and (min-width:992px){.ui.page.grid{padding:0 8%}}@media only screen and (min-width:1500px){.ui.page.grid{padding:0 13%}}@media only screen and (min-width:1750px){.ui.page.grid{padding:0 18%}}@media only screen and (min-width:2000px){.ui.page.grid{padding:0 23%}}.ui.column.grid>.one.wide.column,.ui.grid>.column.row>.one.wide.column,.ui.grid>.one.wide.column,.ui.grid>.row>.one.wide.column{width:6.25%}.ui.column.grid>.two.wide.column,.ui.grid>.column.row>.two.wide.column,.ui.grid>.row>.two.wide.column,.ui.grid>.two.wide.column{width:12.5%}.ui.column.grid>.three.wide.column,.ui.grid>.column.row>.three.wide.column,.ui.grid>.row>.three.wide.column,.ui.grid>.three.wide.column{width:18.75%}.ui.column.grid>.four.wide.column,.ui.grid>.column.row>.four.wide.column,.ui.grid>.four.wide.column,.ui.grid>.row>.four.wide.column{width:25%}.ui.column.grid>.five.wide.column,.ui.grid>.column.row>.five.wide.column,.ui.grid>.five.wide.column,.ui.grid>.row>.five.wide.column{width:31.25%}.ui.column.grid>.six.wide.column,.ui.grid>.column.row>.six.wide.column,.ui.grid>.row>.six.wide.column,.ui.grid>.six.wide.column{width:37.5%}.ui.column.grid>.seven.wide.column,.ui.grid>.column.row>.seven.wide.column,.ui.grid>.row>.seven.wide.column,.ui.grid>.seven.wide.column{width:43.75%}.ui.column.grid>.eight.wide.column,.ui.grid>.column.row>.eight.wide.column,.ui.grid>.eight.wide.column,.ui.grid>.row>.eight.wide.column{width:50%}.ui.column.grid>.nine.wide.column,.ui.grid>.column.row>.nine.wide.column,.ui.grid>.nine.wide.column,.ui.grid>.row>.nine.wide.column{width:56.25%}.ui.column.grid>.ten.wide.column,.ui.grid>.column.row>.ten.wide.column,.ui.grid>.row>.ten.wide.column,.ui.grid>.ten.wide.column{width:62.5%}.ui.column.grid>.eleven.wide.column,.ui.grid>.column.row>.eleven.wide.column,.ui.grid>.eleven.wide.column,.ui.grid>.row>.eleven.wide.column{width:68.75%}.ui.column.grid>.twelve.wide.column,.ui.grid>.column.row>.twelve.wide.column,.ui.grid>.row>.twelve.wide.column,.ui.grid>.twelve.wide.column{width:75%}.ui.column.grid>.thirteen.wide.column,.ui.grid>.column.row>.thirteen.wide.column,.ui.grid>.row>.thirteen.wide.column,.ui.grid>.thirteen.wide.column{width:81.25%}.ui.column.grid>.fourteen.wide.column,.ui.grid>.column.row>.fourteen.wide.column,.ui.grid>.fourteen.wide.column,.ui.grid>.row>.fourteen.wide.column{width:87.5%}.ui.column.grid>.fifteen.wide.column,.ui.grid>.column.row>.fifteen.wide.column,.ui.grid>.fifteen.wide.column,.ui.grid>.row>.fifteen.wide.column{width:93.75%}.ui.column.grid>.sixteen.wide.column,.ui.grid>.column.row>.sixteen.wide.column,.ui.grid>.one.column.row>.column,.ui.grid>.row>.sixteen.wide.column,.ui.grid>.sixteen.wide.column,.ui.one.column.grid>.column,.ui.one.column.grid>.row>.column{width:100%}.ui.grid>.two.column.row>.column,.ui.two.column.grid>.column,.ui.two.column.grid>.row>.column{width:50%}.ui.grid>.three.column.row>.column,.ui.three.column.grid>.column,.ui.three.column.grid>.row>.column{width:33.3333%}.ui.four.column.grid>.column,.ui.four.column.grid>.row>.column,.ui.grid>.four.column.row>.column{width:25%}.ui.five.column.grid>.column,.ui.five.column.grid>.row>.column,.ui.grid>.five.column.row>.column{width:20%}.ui.grid>.six.column.row>.column,.ui.six.column.grid>.column,.ui.six.column.grid>.row>.column{width:16.66667%}.ui.grid>.seven.column.row>.column,.ui.seven.column.grid>.column,.ui.seven.column.grid>.row>.column{width:14.2857%}.ui.eight.column.grid>.column,.ui.eight.column.grid>.row>.column,.ui.grid>.eight.column.row>.column{width:12.5%}.ui.grid>.nine.column.row>.column,.ui.nine.column.grid>.column,.ui.nine.column.grid>.row>.column{width:11.1111%}.ui.grid>.ten.column.row>.column,.ui.ten.column.grid>.column,.ui.ten.column.grid>.row>.column{width:10%}.ui.eleven.column.grid>.column,.ui.eleven.column.grid>.row>.column,.ui.grid>.eleven.column.row>.column{width:9.0909%}.ui.grid>.twelve.column.row>.column,.ui.twelve.column.grid>.column,.ui.twelve.column.grid>.row>.column{width:8.3333%}.ui.grid>.thirteen.column.row>.column,.ui.thirteen.column.grid>.column,.ui.thirteen.column.grid>.row>.column{width:7.6923%}.ui.fourteen.column.grid>.column,.ui.fourteen.column.grid>.row>.column,.ui.grid>.fourteen.column.row>.column{width:7.1428%}.ui.fifteen.column.grid>.column,.ui.fifteen.column.grid>.row>.column,.ui.grid>.fifteen.column.row>.column{width:6.6666%}.ui.grid>.sixteen.column.row>.column,.ui.sixteen.column.grid>.column,.ui.sixteen.column.grid>.row>.column{width:6.25%}.ui.grid>.column:only-child,.ui.grid>.row>.column:only-child{width:100%}.ui.relaxed.grid{margin:0 -2.5%}.ui.relaxed.grid>.column,.ui.relaxed.grid>.row>.column{padding-left:2.5%;padding-right:2.5%}.ui.grid .left.floated.column{float:left}.ui.grid .right.floated.column{float:right}.ui.divided.grid,.ui.divided.grid>.row{display:table;width:100%;margin-left:0!important;margin-right:0!important}.ui.divided.grid>.column:not(.row),.ui.divided.grid>.row>.column{display:table-cell;-webkit-box-shadow:-1px 0 0 0 rgba(0,0,0,.1),-2px 0 0 0 rgba(255,255,255,.8);box-shadow:-1px 0 0 0 rgba(0,0,0,.1),-2px 0 0 0 rgba(255,255,255,.8)}.ui.divided.grid>.column.row{display:table}.ui.divided.grid>.column:first-child,.ui.divided.grid>.row>.column:first-child{-webkit-box-shadow:none;box-shadow:none}.ui.vertically.divided.grid>.row{-webkit-box-shadow:0 -1px 0 0 rgba(0,0,0,.1),0 -2px 0 0 rgba(255,255,255,.8)!important;box-shadow:0 -1px 0 0 rgba(0,0,0,.1),0 -2px 0 0 rgba(255,255,255,.8)!important}.ui.vertically.divided.grid>.column:not(.row),.ui.vertically.divided.grid>.row:first-child,.ui.vertically.divided.grid>.row>.column{-webkit-box-shadow:none!important;box-shadow:none!important}.ui.celled.grid{display:table;width:100%;margin-left:0!important;margin-right:0!important;-webkit-box-shadow:0 0 0 1px #DFDFDF;box-shadow:0 0 0 1px #DFDFDF}.ui.celled.grid>.column.row,.ui.celled.grid>.column.row:first-child,.ui.celled.grid>.row{display:table;width:100%;margin-top:0;padding-top:0;-webkit-box-shadow:0 -1px 0 0 #dfdfdf;box-shadow:0 -1px 0 0 #dfdfdf}.ui.celled.grid>.column:not(.row),.ui.celled.grid>.row>.column{display:table-cell;padding:.75em;-webkit-box-shadow:-1px 0 0 0 #dfdfdf;box-shadow:-1px 0 0 0 #dfdfdf}.ui.celled.grid>.column:first-child,.ui.celled.grid>.row>.column:first-child,.ui.celled.page.grid{-webkit-box-shadow:none;box-shadow:none}.ui.grid .left.aligned.column,.ui.grid>.left.aligned.row>.column,.ui.left.aligned.grid,.ui.left.aligned.grid>.column,.ui.left.aligned.grid>.row>.column{text-align:left}.ui.center.aligned.grid,.ui.center.aligned.grid>.column,.ui.center.aligned.grid>.row>.column,.ui.grid .center.aligned.column,.ui.grid>.center.aligned.row>.column{text-align:center}.ui.grid .right.aligned.column,.ui.grid>.right.aligned.row>.column,.ui.right.aligned.grid,.ui.right.aligned.grid>.column,.ui.right.aligned.grid>.row>.column{text-align:right}.ui.grid .justified.column,.ui.grid>.justified.row>.column,.ui.justified.grid,.ui.justified.grid>.column,.ui.justified.grid>.row>.column{text-align:justify;-webkit-hyphens:auto;-moz-hyphens:auto;-ms-hyphens:auto;hyphens:auto}.ui.grid .top.aligned.column,.ui.grid>.top.aligned.row>.column,.ui.top.aligned.grid,.ui.top.aligned.grid>.column,.ui.top.aligned.grid>.row>.column{vertical-align:top}.ui.grid .middle.aligned.column,.ui.grid>.middle.aligned.row>.column,.ui.middle.aligned.grid,.ui.middle.aligned.grid>.column,.ui.middle.aligned.grid>.row>.column{vertical-align:middle}.ui.bottom.aligned.grid,.ui.bottom.aligned.grid>.column,.ui.bottom.aligned.grid>.row>.column,.ui.grid .bottom.aligned.column,.ui.grid>.bottom.aligned.row>.column{vertical-align:bottom}.ui.grid>.equal.height.row{display:table;width:100%}.ui.grid>.equal.height.row>.column{display:table-cell}@media only screen and (max-width:767px){.ui.computer:not(.mobile).only.grid,.ui.grid>.computer:not(.mobile).only.column,.ui.grid>.computer:not(.mobile).only.row,.ui.grid>.row>.computer:not(.mobile).only.column,.ui.grid>.row>.tablet:not(.mobile).only.column,.ui.grid>.tablet:not(.mobile).only.column,.ui.grid>.tablet:not(.mobile).only.row,.ui.tablet:not(.mobile).only.grid{display:none!important}}@media only screen and (min-width:768px) and (max-width:991px){.ui.computer:not(.tablet).only.grid,.ui.grid>.computer:not(.tablet).only.column,.ui.grid>.computer:not(.tablet).only.row,.ui.grid>.mobile:not(.tablet).only.column,.ui.grid>.mobile:not(.tablet).only.row,.ui.grid>.row>.computer:not(.tablet).only.column,.ui.grid>.row>.mobile:not(.tablet).only.column,.ui.mobile:not(.tablet).only.grid{display:none!important}}@media only screen and (min-width:992px){.ui.grid>.mobile:not(.computer).only.column,.ui.grid>.mobile:not(.computer).only.row,.ui.grid>.row>.mobile:not(.computer).only.column,.ui.grid>.row>.tablet:not(.computer).only.column,.ui.grid>.tablet:not(.computer).only.column,.ui.grid>.tablet:not(.computer).only.row,.ui.mobile:not(.computer).only.grid,.ui.tablet:not(.computer).only.grid{display:none!important}}@media only screen and (max-width:767px){.ui.five.column.doubling.grid>.column,.ui.five.column.doubling.grid>.row>.column,.ui.four.column.doubling.grid>.column,.ui.four.column.doubling.grid>.row>.column,.ui.grid>.five.column.doubling.row>.column,.ui.grid>.four.column.doubling.row>.column,.ui.grid>.three.column.doubling.row>.column,.ui.grid>.two.column.doubling.row>.column,.ui.three.column.doubling.grid>.column,.ui.three.column.doubling.grid>.row>.column,.ui.two.column.doubling.grid>.column,.ui.two.column.doubling.grid>.row>.column{width:100%}.ui.eight.column.doubling.grid>.column,.ui.eight.column.doubling.grid>.row>.column,.ui.grid>.eight.column.doubling.row>.column,.ui.grid>.nine.column.doubling.row>.column,.ui.grid>.seven.column.doubling.row>.column,.ui.grid>.six.column.doubling.row>.column,.ui.grid>.ten.column.doubling.row>.column,.ui.nine.column.doubling.grid>.column,.ui.nine.column.doubling.grid>.row>.column,.ui.seven.column.doubling.grid>.column,.ui.seven.column.doubling.grid>.row>.column,.ui.six.column.doubling.grid>.column,.ui.six.column.doubling.grid>.row>.column,.ui.ten.column.doubling.grid>.column,.ui.ten.column.doubling.grid>.row>.column{width:50%}.ui.fourteen.column.doubling.grid>.column,.ui.fourteen.column.doubling.grid>.row>.column,.ui.grid>.fourteen.column.doubling.row>.column,.ui.grid>.twelve.column.doubling.row>.column,.ui.twelve.column.doubling.grid>.column,.ui.twelve.column.doubling.grid>.row>.column{width:33.3333333333333%}.ui.grid>.sixteen.column.doubling.row>.column,.ui.sixteen.column.doubling.grid>.column,.ui.sixteen.column.doubling.grid>.row>.column{width:25%}}@media only screen and (min-width:768px) and (max-width:991px){.ui.grid>.two.column.doubling.row>.column,.ui.two.column.doubling.grid>.column,.ui.two.column.doubling.grid>.row>.column{width:100%}.ui.four.column.doubling.grid>.column,.ui.four.column.doubling.grid>.row>.column,.ui.grid>.four.column.doubling.row>.column,.ui.grid>.three.column.doubling.row>.column,.ui.three.column.doubling.grid>.column,.ui.three.column.doubling.grid>.row>.column{width:50%}.ui.eight.column.doubling.grid>.column,.ui.eight.column.doubling.grid>.row>.column,.ui.five.column.doubling.grid>.column,.ui.five.column.doubling.grid>.row>.column,.ui.grid>.eight.column.doubling.row>.column,.ui.grid>.five.column.doubling.row>.column,.ui.grid>.six.column.doubling.row>.column,.ui.six.column.doubling.grid>.column,.ui.six.column.doubling.grid>.row>.column{width:33.3333333%}.ui.eight.column.doubling.grid>.column,.ui.eight.column.doubling.grid>.row>.column,.ui.grid>.eight.column.doubling.row>.column,.ui.grid>.nine.column.doubling.row>.column,.ui.nine.column.doubling.grid>.column,.ui.nine.column.doubling.grid>.row>.column{width:25%}.ui.grid>.ten.column.doubling.row>.column,.ui.ten.column.doubling.grid>.column,.ui.ten.column.doubling.grid>.row>.column{width:20%}.ui.grid>.twelve.column.doubling.row>.column,.ui.twelve.column.doubling.grid>.column,.ui.twelve.column.doubling.grid>.row>.column{width:16.6666666%}.ui.fourteen.column.doubling.grid>.column,.ui.fourteen.column.doubling.grid>.row>.column,.ui.grid>.fourteen.column.doubling.row>.column{width:14.28571428571429%}.ui.grid>.sixteen.column.doubling.row>.column,.ui.sixteen.column.doubling.grid>.column,.ui.sixteen.column.doubling.grid>.row>.column{width:12.5%}}@media only screen and (max-width:767px){.ui.stackable.grid{display:block!important;padding:0;margin:0}.ui.stackable.grid>.column,.ui.stackable.grid>.row>.column{display:block!important;width:auto!important;margin:1em 0 0!important;padding:1em 0 0!important;-webkit-box-shadow:none!important;box-shadow:none!important}.ui.stackable.celled.grid .column,.ui.stackable.divided.grid .column{border-top:1px dotted rgba(0,0,0,.1)}.ui.stackable.grid>.column:first-child,.ui.stackable.grid>.row:first-child>.column:first-child{margin-top:0!important;padding-top:0!important}.ui.stackable.celled.grid>.column:first-child,.ui.stackable.celled.grid>.row:first-child>.column:first-child,.ui.stackable.divided.grid>.column:first-child,.ui.stackable.divided.grid>.row:first-child>.column:first-child{border-top:none!important}.ui.stackable.page.grid>.column,.ui.stackable.page.grid>.row>.column{padding-left:1em!important;padding-right:1em!important}.ui.stackable.grid .vertical.pointing.menu .item:after{display:none}}.ui.menu{margin:1rem 0;background-color:#FFF;font-size:0;font-weight:400;-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.1);box-shadow:0 0 0 1px rgba(0,0,0,.1);border-radius:.1875rem}.ui.menu:first-child{margin-top:0}.ui.menu:last-child{margin-bottom:0}.ui.menu:after{content:\".\";display:block;height:0;clear:both;visibility:hidden}.ui.menu>.item:first-child{border-radius:.1875em 0 0 .1875em}.ui.menu>.item:last-child{border-radius:0 .1875em .1875em 0}.ui.menu .item{vertical-align:middle;line-height:1;text-decoration:none;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;-webkit-transition:opacity .2s ease,background .2s ease,-webkit-box-shadow .2s ease;-moz-transition:opacity .2s ease,background .2s ease,box-shadow .2s ease;transition:opacity .2s ease,background .2s ease,box-shadow .2s ease}.ui.menu .item,.ui.menu .item>a:not(.button){color:rgba(0,0,0,.75)}.ui.menu .item .item,.ui.menu .item .item>a:not(.button){color:rgba(30,30,30,.7)}.ui.menu .item .item .item,.ui.menu .item .item .item>a:not(.button){color:rgba(30,30,30,.6)}.ui.menu .dropdown .menu .item,.ui.menu .dropdown .menu .item a:not(.button){color:rgba(0,0,0,.75)}.ui.menu .dropdown .menu .item a:not(.button):hover,.ui.menu .item .menu .link.item:hover,.ui.menu .item .menu a.item:hover{color:rgba(0,0,0,.85)}.ui.menu .active.item,.ui.menu .active.item a:not(.button){color:rgba(0,0,0,.85);border-radius:0}.ui.menu .item{position:relative;display:inline-block;padding:.83em .95em;border-top:0 solid transparent;-webkit-tap-highlight-color:transparent;-moz-user-select:-moz-none;-khtml-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.ui.menu .menu{margin:0}.ui.menu .item.left,.ui.menu .menu.left{float:left}.ui.menu .item.right,.ui.menu .menu.right{float:right}.ui.menu .item:before{position:absolute;content:'';top:0;left:0;width:1px;height:100%;background-image:-webkit-gradient(linear,left top,left bottom,from(rgba(0,0,0,.05)),color-stop(50%,rgba(0,0,0,.1)),to(rgba(0,0,0,.05)));background-image:-webkit-linear-gradient(rgba(0,0,0,.05) 0,rgba(0,0,0,.1) 50%,rgba(0,0,0,.05) 100%);background-image:-moz-linear-gradient(rgba(0,0,0,.05) 0,rgba(0,0,0,.1) 50%,rgba(0,0,0,.05) 100%);background-image:linear-gradient(rgba(0,0,0,.05) 0,rgba(0,0,0,.1) 50%,rgba(0,0,0,.05) 100%)}.ui.menu .item:first-child:before,.ui.menu>.menu:not(.right):first-child>.item:first-child:before{display:none}.ui.menu .item.right:before,.ui.menu .menu.right .item:before{right:auto;left:0}.ui.menu .item>p:only-child,.ui.menu .text.item>*{-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text;line-height:1.3;color:rgba(0,0,0,.6)}.ui.menu .item>p:first-child{margin-top:0}.ui.menu .item>p:last-child{margin-bottom:0}.ui.menu:not(.vertical) .item>.button{position:relative;top:-.05em;margin:-.55em 0;padding-bottom:.55em;padding-top:.55em;font-size:.875em}.ui.menu:not(.vertical) .item>.input{margin-top:-.85em;margin-bottom:-.85em;padding-top:.3em;padding-bottom:.3em;width:100%;vertical-align:top}.ui.menu .item>.input input{padding-top:.35em;padding-bottom:.35em}.ui.vertical.menu .item>.input input{margin:0;padding-top:.63em;padding-bottom:.63em}.ui.menu:not(.vertical) .item>.button.labeled>.icon{padding-top:.6em}.ui.menu:not(.vertical) .item .action.input>.button{font-size:.8em;padding:.55em .8em}.ui.small.menu:not(.vertical) .item>.input input{padding-top:.4em;padding-bottom:.4em}.ui.large.menu:not(.vertical) .item>.input input{top:-.125em;padding-bottom:.6em;padding-top:.6em}.ui.large.menu:not(.vertical) .item .action.input>.button{font-size:.8em;padding:.9em}.ui.large.menu:not(.vertical) .item .action.input>.button>.icon{padding-top:.8em}.ui.menu .header.item{background-color:rgba(0,0,0,.04);margin:0}.ui.vertical.menu .header.item{font-weight:700}.ui.menu .dropdown .menu .item .icon{float:none;margin:0 .75em 0 0}.ui.menu .dropdown.item .menu{left:1px;margin:0;min-width:-webkit-calc(99%);min-width:-moz-calc(99%);min-width:calc(99%);-webkit-box-shadow:0 1px 1px 1px rgba(0,0,0,.1);box-shadow:0 1px 1px 1px rgba(0,0,0,.1)}.ui.secondary.menu .dropdown.item .menu{left:0;min-width:100%}.ui.menu .pointing.dropdown.item .menu{margin-top:.75em}.ui.menu .simple.dropdown.item .menu{margin:0!important}.ui.menu .dropdown.item .menu .item{width:100%;color:rgba(0,0,0,.75)}.ui.menu .dropdown.item .menu .active.item{-webkit-box-shadow:none!important;box-shadow:none!important}.ui.menu .ui.dropdown .menu .item:before{display:none}.ui.menu .item>.label{background-color:rgba(0,0,0,.35);color:#FFF;margin:-.15em 0 -.15em .5em;padding:.3em .8em;vertical-align:baseline}.ui.menu .item>.floating.label{padding:.3em .8em}.ui.menu .item>img:only-child{display:block;max-width:100%;margin:0 auto}.ui.link.menu .item:hover,.ui.menu .link.item:hover,.ui.menu .ui.dropdown .menu .item:hover,.ui.menu a.item:hover{cursor:pointer;background-color:rgba(0,0,0,.02)}.ui.menu .ui.dropdown.item.active{background-color:rgba(0,0,0,.02);-webkit-box-shadow:none;box-shadow:none;-moz-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-bottom-left-radius:0;border-bottom-left-radius:0}.ui.link.menu .item:active,.ui.menu .link.item:active,.ui.menu .ui.dropdown .menu .item:active,.ui.menu a.item:active{background-color:rgba(0,0,0,.05)}.ui.menu .active.item{background-color:rgba(0,0,0,.01);color:rgba(0,0,0,.95);-webkit-box-shadow:0 .2em 0 inset;box-shadow:0 .2em 0 inset}.ui.vertical.menu .active.item{border-radius:0;-webkit-box-shadow:.2em 0 0 inset;box-shadow:.2em 0 0 inset}.ui.vertical.menu>.active.item:first-child{border-radius:0 .1875em 0 0}.ui.vertical.menu>.active.item:last-child{border-radius:0 0 .1875em}.ui.vertical.menu>.active.item:only-child{border-radius:0 .1875em .1875em 0}.ui.vertical.menu .active.item .menu .active.item{border-left:none;padding-left:1.5rem}.ui.vertical.menu .item .menu .active.item{background-color:rgba(0,0,0,.03);-webkit-box-shadow:none;box-shadow:none}.ui.menu .item.disabled,.ui.menu .item.disabled:hover{cursor:default;color:rgba(0,0,0,.2);background-color:transparent!important}.ui.menu.loading{position:relative}.ui.menu.loading:after{position:absolute;top:0;left:0;content:'';width:100%;height:100%;background:url(/static/9af25aaeb6ca6d08d213b04841813eb5.gif) 50% 50% no-repeat rgba(255,255,255,.8);visibility:visible}.ui.vertical.menu .item{display:block;height:auto!important;border-top:none;border-left:0 solid transparent;border-right:none}.ui.vertical.menu>.item:first-child{border-radius:.1875em .1875em 0 0}.ui.vertical.menu>.item:last-child{border-radius:0 0 .1875em .1875em}.ui.vertical.menu .item>.label{float:right;text-align:center}.ui.vertical.menu .item>i.icon{float:right;width:1.22em;margin:0 0 0 .5em}.ui.vertical.menu .item>.label+i.icon{float:none;margin:0 .25em 0 0}.ui.vertical.menu .item:before{position:absolute;content:'';top:0;left:0;width:100%;height:1px;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.03) 0,rgba(0,0,0,.1) 1.5em,rgba(0,0,0,.03) 100%);background-image:-moz-linear-gradient(left,rgba(0,0,0,.03) 0,rgba(0,0,0,.1) 1.5em,rgba(0,0,0,.03) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.03)),color-stop(1.5em,rgba(0,0,0,.1)),to(rgba(0,0,0,.03)));background-image:linear-gradient(to right,rgba(0,0,0,.03) 0,rgba(0,0,0,.1) 1.5em,rgba(0,0,0,.03) 100%)}.ui.vertical.menu .item:first-child:before{background-image:none!important}.ui.vertical.menu .dropdown.item>i{float:right;content:\"\\f0da\"}.ui.vertical.menu .dropdown.item .menu{top:0!important;left:100%;margin:0 0 0 1px;-webkit-box-shadow:0 0 1px 1px #DDD;box-shadow:0 0 1px 1px #DDD}.ui.vertical.menu .dropdown.item.active{border-top-right-radius:0;border-bottom-right-radius:0}.ui.vertical.menu .dropdown.item .menu .item{font-size:1rem}.ui.vertical.menu .dropdown.item .menu .item i.icon{margin-right:0}.ui.vertical.menu .dropdown.item.active{-webkit-box-shadow:none;box-shadow:none}.ui.vertical.menu .item>.menu{margin:.5em -.95em 0}.ui.vertical.menu .item>.menu>.item{padding:.5rem 1.5rem;font-size:.875em}.ui.vertical.menu .item>.menu>.item:before{display:none}.ui.tiered.menu>.sub.menu>.item{color:rgba(0,0,0,.4)}.ui.tiered.menu .item.active,.ui.tiered.menu>.menu>.item:hover{color:rgba(0,0,0,.8)}.ui.tiered.menu>.menu .item.active:after{position:absolute;content:'';margin-top:-1px;top:100%;left:0;width:100%;height:2px;background-color:#FBFBFB}.ui.tiered.menu .sub.menu{background-color:rgba(0,0,0,.01);border-radius:0;border-top:1px solid rgba(0,0,0,.1);-webkit-box-shadow:none;box-shadow:none;color:#FFF}.ui.tiered.menu .sub.menu .item{font-size:.875rem}.ui.tiered.menu .sub.menu .item:before{background-image:none}.ui.tiered.menu .sub.menu .active.item{padding-top:.83em;background-color:transparent;border-radius:0;border-top:medium none;-webkit-box-shadow:none;box-shadow:none;color:rgba(0,0,0,.7)!important}.ui.tiered.menu .sub.menu .active.item:after{display:none}.ui.inverted.tiered.menu>.menu>.item{color:rgba(255,255,255,.5)}.ui.inverted.tiered.menu .sub.menu{background-color:rgba(0,0,0,.2)}.ui.inverted.tiered.menu .sub.menu .item{color:rgba(255,255,255,.6)}.ui.inverted.tiered.menu>.menu>.item:hover{color:rgba(255,255,255,.9)}.ui.inverted.tiered.menu .active.item:after{display:none}.ui.inverted.tiered.menu>.menu>.active.item,.ui.inverted.tiered.menu>.sub.menu>.active.item{color:#fff!important;-webkit-box-shadow:none;box-shadow:none}.ui.pointing.tiered.menu>.menu>.item:after{display:none}.ui.pointing.tiered.menu>.sub.menu>.item:after{display:block}.ui.tabular.menu{background-color:transparent;border-bottom:1px solid #DCDDDE;border-radius:0;-webkit-box-shadow:none!important;box-shadow:none!important}.ui.tabular.menu .item{background-color:transparent;border-left:1px solid transparent;border-right:1px solid transparent;border-top:1px solid transparent;padding-left:1.4em;padding-right:1.4em;color:rgba(0,0,0,.6)}.ui.tabular.menu .item:before{display:none}.ui.tabular.menu .item:hover{background-color:transparent;color:rgba(0,0,0,.8)}.ui.tabular.menu .active.item{position:relative;background-color:#FFF;color:rgba(0,0,0,.8);border-color:#DCDDDE;font-weight:700;margin-bottom:-1px;border-bottom:1px solid #FFF;-webkit-box-shadow:none;box-shadow:none;border-radius:5px 5px 0 0}.ui.attached.tabular.menu{position:relative;z-index:2}.ui.tabular.menu~.bottom.attached.segment{margin:1px 0 0 1px}.ui.pagination.menu{margin:0;display:inline-block;vertical-align:middle}.ui.pagination.menu .item{min-width:3em;text-align:center}.ui.pagination.menu .icon.item i.icon{vertical-align:top}.ui.pagination.menu.floated{display:block}.ui.pagination.menu .active.item{border-top:none;padding-top:.83em;background-color:rgba(0,0,0,.05);-webkit-box-shadow:none;box-shadow:none}.ui.secondary.menu{background-color:transparent;border-radius:0;-webkit-box-shadow:none;box-shadow:none}.ui.secondary.menu>.item,.ui.secondary.menu>.menu>.item{-webkit-box-shadow:none;box-shadow:none;border:none;height:auto!important;margin:0 .25em;padding:.5em 1em;border-radius:.3125em}.ui.secondary.menu>.item:before,.ui.secondary.menu>.menu>.item:before{display:none!important}.ui.secondary.menu .item>.input input{background-color:transparent;border:none}.ui.secondary.menu .link.item,.ui.secondary.menu a.item{opacity:.8;-webkit-transition:none;-moz-transition:none;transition:none}.ui.secondary.menu .header.item{border-right:.1em solid rgba(0,0,0,.1);background-color:transparent;border-radius:0}.ui.secondary.menu .link.item:hover,.ui.secondary.menu a.item:hover{opacity:1}.ui.secondary.menu>.active.item,.ui.secondary.menu>.menu>.active.item{background-color:rgba(0,0,0,.08);opacity:1;-webkit-box-shadow:none;box-shadow:none}.ui.secondary.vertical.menu>.active.item{border-radius:.3125em}.ui.secondary.inverted.menu .link.item,.ui.secondary.inverted.menu a.item{color:rgba(255,255,255,.5)}.ui.secondary.inverted.menu .link.item:hover,.ui.secondary.inverted.menu a.item:hover{color:rgba(255,255,255,.9)}.ui.secondary.inverted.menu .active.item{background-color:rgba(255,255,255,.1)}.ui.secondary.item.menu>.item{margin:0}.ui.secondary.attached.menu{-webkit-box-shadow:none;box-shadow:none}.ui.secondary.pointing.menu{border-bottom:3px solid rgba(0,0,0,.1)}.ui.secondary.pointing.menu>.item,.ui.secondary.pointing.menu>.menu>.item{margin:0 0 -3px;padding:.6em .95em;border-bottom:3px solid transparent;border-radius:0;-webkit-transition:color .2s;-moz-transition:color .2s;transition:color .2s}.ui.secondary.pointing.menu .header.item{margin-bottom:-3px;background-color:transparent!important;border-right-width:0!important;font-weight:700!important;color:rgba(0,0,0,.8)!important}.ui.secondary.pointing.menu .text.item{-webkit-box-shadow:none!important;box-shadow:none!important}.ui.secondary.pointing.menu>.item:after,.ui.secondary.pointing.menu>.menu>.item:after{display:none}.ui.secondary.pointing.menu>.link.item:hover,.ui.secondary.pointing.menu>.menu>.link.item:hover,.ui.secondary.pointing.menu>.menu>a.item:hover,.ui.secondary.pointing.menu>a.item:hover{background-color:transparent;color:rgba(0,0,0,.7)}.ui.secondary.pointing.menu>.link.item:active,.ui.secondary.pointing.menu>.menu>.link.item:active,.ui.secondary.pointing.menu>.menu>a.item:active,.ui.secondary.pointing.menu>a.item:active{background-color:transparent;border-color:rgba(0,0,0,.2)}.ui.secondary.pointing.menu>.item.active,.ui.secondary.pointing.menu>.menu>.item.active{background-color:transparent;border-color:rgba(0,0,0,.4);-webkit-box-shadow:none;box-shadow:none}.ui.secondary.vertical.pointing.menu{border:none;border-right:3px solid rgba(0,0,0,.1)}.ui.secondary.vertical.menu>.item{border:none;margin:0 0 .3em;padding:.6em .8em;border-radius:.1875em}.ui.secondary.vertical.menu>.header.item{border-radius:0}.ui.secondary.vertical.pointing.menu>.item{margin:0 -3px 0 0;border-bottom:none;border-right:3px solid transparent;border-radius:0}.ui.secondary.vertical.pointing.menu>.item:hover{background-color:transparent;color:rgba(0,0,0,.7)}.ui.secondary.vertical.pointing.menu>.item:active{background-color:transparent;border-color:rgba(0,0,0,.2)}.ui.secondary.vertical.pointing.menu>.item.active{background-color:transparent;border-color:rgba(0,0,0,.4);color:rgba(0,0,0,.85)}.ui.secondary.inverted.menu{background-color:transparent}.ui.secondary.inverted.pointing.menu{border-bottom:3px solid rgba(255,255,255,.1)}.ui.secondary.inverted.pointing.menu>.item{color:rgba(255,255,255,.7)}.ui.secondary.inverted.pointing.menu>.header.item{color:#FFF!important}.ui.secondary.inverted.pointing.menu>.item:hover,.ui.secondary.inverted.pointing.menu>.menu>.item:hover{color:rgba(255,255,255,.85)}.ui.secondary.inverted.pointing.menu>.item:active,.ui.secondary.inverted.pointing.menu>.menu>.item:active{border-color:rgba(255,255,255,.4)}.ui.secondary.inverted.pointing.menu>.item.active,.ui.secondary.inverted.pointing.menu>.menu>.item.active{border-color:rgba(255,255,255,.8);color:#fff}.ui.secondary.inverted.vertical.pointing.menu{border-right:3px solid rgba(255,255,255,.1);border-bottom:none}.ui.text.menu{background-color:transparent;margin:1rem -1rem;border-radius:0;-webkit-box-shadow:none;box-shadow:none}.ui.text.menu>.item{opacity:.8;margin:0 1em;padding:0;height:auto!important;border-radius:0;-webkit-box-shadow:none;box-shadow:none;-webkit-transition:opacity .2s ease;-moz-transition:opacity .2s ease;transition:opacity .2s ease}.ui.text.menu>.item:before{display:none!important}.ui.text.menu .header.item{background-color:transparent;opacity:1;color:rgba(50,50,50,.8);font-size:.875rem;padding:0;text-transform:uppercase;font-weight:700}.ui.text.item.menu .item{margin:0}.ui.vertical.text.menu{margin:1rem 0}.ui.vertical.text.menu:first-child{margin-top:0}.ui.vertical.text.menu:last-child{margin-bottom:0}.ui.vertical.text.menu .item{float:left;clear:left;margin:.5em 0}.ui.vertical.text.menu .item>i.icon{float:none;margin:0 .83em 0 0}.ui.vertical.text.menu .header.item{margin:.8em 0}.ui.text.menu .item:hover{opacity:1;background-color:transparent}.ui.text.menu .active.item{background-color:transparent;padding:0;border:none;opacity:1;font-weight:700;-webkit-box-shadow:none;box-shadow:none}.ui.text.attached.menu,.ui.text.pointing.menu .active.item:after{-webkit-box-shadow:none;box-shadow:none}.ui.inverted.text.menu,.ui.inverted.text.menu .item,.ui.inverted.text.menu .item.active,.ui.inverted.text.menu .item:hover{background-color:transparent}.ui.icon.menu,.ui.vertical.icon.menu{width:auto;display:inline-block;height:auto}.ui.icon.menu>.item{height:auto;text-align:center;color:rgba(60,60,60,.7)}.ui.icon.menu>.item>.icon{display:block;float:none!important;opacity:1;margin:0 auto!important}.ui.icon.menu .icon:before{opacity:1}.ui.menu .icon.item .icon{margin:0}.ui.vertical.icon.menu{float:none}.ui.inverted.icon.menu .item{color:rgba(255,255,255,.8)}.ui.inverted.icon.menu .icon{color:#fff}.ui.labeled.icon.menu{text-align:center}.ui.labeled.icon.menu>.item>.icon{display:block;font-size:1.5em!important;margin:0 auto .3em!important}.ui.green.menu .active.item,.ui.menu .green.active.item{border-color:#A1CF64!important;color:#A1CF64!important}.ui.menu .red.active.item,.ui.red.menu .active.item{border-color:#D95C5C!important;color:#D95C5C!important}.ui.blue.menu .active.item,.ui.menu .blue.active.item{border-color:#6ECFF5!important;color:#6ECFF5!important}.ui.menu .purple.active.item,.ui.purple.menu .active.item{border-color:#564F8A!important;color:#564F8A!important}.ui.menu .orange.active.item,.ui.orange.menu .active.item{border-color:#F05940!important;color:#F05940!important}.ui.menu .teal.active.item,.ui.teal.menu .active.item{border-color:#00B5AD!important;color:#00B5AD!important}.ui.inverted.menu{background-color:#333;-webkit-box-shadow:none;box-shadow:none}.ui.inverted.menu .header.item{margin:0;background-color:rgba(0,0,0,.3);-webkit-box-shadow:none;box-shadow:none}.ui.inverted.menu .item,.ui.inverted.menu .item>a{color:#FFF}.ui.inverted.menu .item .item,.ui.inverted.menu .item .item>a{color:rgba(255,255,255,.8)}.ui.inverted.menu .dropdown .menu .item,.ui.inverted.menu .dropdown .menu .item a{color:rgba(0,0,0,.75)!important}.ui.inverted.menu .item.disabled,.ui.inverted.menu .item.disabled:hover{color:rgba(255,255,255,.2)}.ui.inverted.menu .item:before{background-image:-webkit-linear-gradient(rgba(255,255,255,.03) 0,rgba(255,255,255,.1) 50%,rgba(255,255,255,.03) 100%);background-image:-moz-linear-gradient(rgba(255,255,255,.03) 0,rgba(255,255,255,.1) 50%,rgba(255,255,255,.03) 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(rgba(255,255,255,.03)),color-stop(50%,rgba(255,255,255,.1)),to(rgba(255,255,255,.03)));background-image:linear-gradient(rgba(255,255,255,.03) 0,rgba(255,255,255,.1) 50%,rgba(255,255,255,.03) 100%)}.ui.vertical.inverted.menu .item:before{background-image:-webkit-linear-gradient(left,rgba(255,255,255,.03) 0,rgba(255,255,255,.1) 50%,rgba(255,255,255,.03) 100%);background-image:-moz-linear-gradient(left,rgba(255,255,255,.03) 0,rgba(255,255,255,.1) 50%,rgba(255,255,255,.03) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(255,255,255,.03)),color-stop(50%,rgba(255,255,255,.1)),to(rgba(255,255,255,.03)));background-image:linear-gradient(to right,rgba(255,255,255,.03) 0,rgba(255,255,255,.1) 50%,rgba(255,255,255,.03) 100%)}.ui.inverted.menu .dropdown.item:hover,.ui.inverted.menu .link.item:hover,.ui.inverted.menu a.item:hover,.ui.link.inverted.menu .item:hover{background-color:rgba(255,255,255,.1)}.ui.inverted.menu .item .menu .link.item:hover,.ui.inverted.menu .item .menu a.item:hover,.ui.inverted.menu .item>a:hover,.ui.inverted.menu a.item:hover{color:#fff}.ui.inverted.menu .dropdown.item:active,.ui.inverted.menu .link.item:active,.ui.inverted.menu a.item:active{background-color:rgba(255,255,255,.15)}.ui.inverted.menu .active.item{-webkit-box-shadow:none!important;box-shadow:none!important;background-color:rgba(255,255,255,.2)}.ui.inverted.menu .active.item,.ui.inverted.menu .active.item a{color:#fff!important}.ui.inverted.vertical.menu .item .menu .active.item{background-color:rgba(255,255,255,.2);color:#fff}.ui.inverted.pointing.menu .active.item:after{background-color:#5B5B5B;-webkit-box-shadow:none;box-shadow:none}.ui.inverted.pointing.menu .active.item:hover:after{background-color:#4A4A4A}.ui.selection.menu>.item{color:rgba(0,0,0,.4)}.ui.selection.menu>.item:hover{color:rgba(0,0,0,.6)}.ui.selection.menu>.item.active{color:rgba(0,0,0,.85)}.ui.inverted.selection.menu>.item{color:rgba(255,255,255,.4)}.ui.inverted.selection.menu>.item:hover{color:rgba(255,255,255,.9)}.ui.inverted.selection.menu>.item.active{color:#FFF}.ui.floated.menu{float:left;margin:0 .5rem 0 0}.ui.right.floated.menu{float:right;margin:0 0 0 .5rem}.ui.grey.menu{background-color:#F0F0F0}.ui.inverted.green.menu{background-color:#A1CF64}.ui.inverted.green.pointing.menu .active.item:after{background-color:#B3D782}.ui.inverted.red.menu{background-color:#D95C5C}.ui.inverted.red.pointing.menu .active.item:after{background-color:#DF7C7C}.ui.inverted.blue.menu{background-color:#6ECFF5}.ui.inverted.blue.pointing.menu .active.item:after{background-color:#8AD7F6}.ui.inverted.purple.menu{background-color:#564F8A}.ui.inverted.purple.pointing.menu .active.item:after{background-color:#7771A0}.ui.inverted.orange.menu{background-color:#F05940}.ui.inverted.orange.pointing.menu .active.item:after{background-color:#F27966}.ui.inverted.teal.menu{background-color:#00B5AD}.ui.inverted.teal.pointing.menu .active.item:after{background-color:#33C3BC}.ui.fitted.menu .item,.ui.fitted.menu .item .menu .item,.ui.menu .fitted.item{padding:0}.ui.horizontally.fitted.menu .item,.ui.horizontally.fitted.menu .item .menu .item,.ui.menu .horizontally.fitted.item{padding-top:.83em;padding-bottom:.83em}.ui.menu .vertically.fitted.item,.ui.vertically.fitted.menu .item,.ui.vertically.fitted.menu .item .menu .item{padding-left:.95em;padding-right:.95em}.ui.borderless.menu .item .menu .item:before,.ui.borderless.menu .item:before,.ui.menu .borderless.item:before{background-image:none}.ui.compact.menu{display:inline-block;margin:0;vertical-align:middle}.ui.compact.vertical.menu{width:auto!important}.ui.compact.vertical.menu .item:last-child::before{display:block}.ui.menu.fluid,.ui.vertical.menu.fluid{display:block;width:100%!important}.ui.item.menu,.ui.item.menu .item{width:100%;padding-left:0!important;padding-right:0!important;text-align:center}.ui.menu.two.item .item{width:50%}.ui.menu.three.item .item{width:33.333%}.ui.menu.four.item .item{width:25%}.ui.menu.five.item .item{width:20%}.ui.menu.six.item .item{width:16.666%}.ui.menu.seven.item .item{width:14.285%}.ui.menu.eight.item .item{width:12.5%}.ui.menu.nine.item .item{width:11.11%}.ui.menu.ten.item .item{width:10%}.ui.menu.eleven.item .item{width:9.09%}.ui.menu.twelve.item .item{width:8.333%}.ui.menu.fixed{position:fixed;z-index:999;margin:0;border:none;width:100%}.ui.menu.fixed,.ui.menu.fixed .item:first-child,.ui.menu.fixed .item:last-child{border-radius:0!important}.ui.menu.fixed.top{top:0;left:0;right:auto;bottom:auto}.ui.menu.fixed.right{top:0;right:0;left:auto;bottom:auto;width:auto;height:100%}.ui.menu.fixed.bottom{bottom:0;left:0;top:auto;right:auto}.ui.menu.fixed.left{top:0;left:0;right:auto;bottom:auto;width:auto;height:100%}.ui.fixed.menu+.ui.grid{padding-top:2.75rem}.ui.pointing.menu .active.item:after{position:absolute;bottom:-.3em;left:50%;content:\"\";margin-left:-.3em;width:.6em;height:.6em;border:none;border-bottom:1px solid rgba(0,0,0,.1);border-right:1px solid rgba(0,0,0,.1);background-image:none;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);z-index:2;-webkit-transition:background .2s ease;-moz-transition:background .2s ease;transition:background .2s ease}.ui.pointing.menu .active.item .menu .active.item:after{display:none}.ui.vertical.pointing.menu .active.item:after{position:absolute;top:50%;margin-top:-.3em;right:-.4em;bottom:auto;left:auto;border:none;border-top:1px solid rgba(0,0,0,.1);border-right:1px solid rgba(0,0,0,.1)}.ui.pointing.menu .active.item:after{background-color:#FCFCFC}.ui.pointing.menu .active.item:hover:after{background-color:#FAFAFA}.ui.vertical.pointing.menu .menu .active.item:after{background-color:#F4F4F4}.ui.pointing.menu a.active.item:active:after{background-color:#F0F0F0}.ui.menu.attached{margin:0;border-radius:0;-webkit-box-shadow:0 0 0 1px #DDD;box-shadow:0 0 0 1px #DDD}.ui.top.attached.menu{border-radius:.1875em .1875em 0 0}.ui.menu.bottom.attached{border-radius:0 0 .1875em .1875em}.ui.small.menu .item{font-size:.875rem}.ui.small.vertical.menu{width:13rem}.ui.menu .item{font-size:1rem}.ui.vertical.menu{width:15rem}.ui.large.menu .item{font-size:1.125rem}.ui.large.menu .item .item{font-size:.875rem}.ui.large.menu .dropdown .item{font-size:1rem}.ui.large.vertical.menu{width:18rem}.ui.message{position:relative;min-height:18px;margin:1em 0;height:auto;background-color:#EFEFEF;padding:1em;line-height:1.33;color:rgba(0,0,0,.6);-webkit-transition:opacity .1s ease,color .1s ease,background .1s ease,-webkit-box-shadow .1s ease;-moz-transition:opacity .1s ease,color .1s ease,background .1s ease,box-shadow .1s ease;transition:opacity .1s ease,color .1s ease,background .1s ease,box-shadow .1s ease;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;border-radius:.325em}.ui.message:first-child{margin-top:0}.ui.message:last-child{margin-bottom:0}.ui.message .header{margin:0;font-size:1.33em;font-weight:700}.ui.message p{opacity:.85;margin:1em 0}.ui.message p:first-child{margin-top:0}.ui.message p:last-child{margin-bottom:0}.ui.message .header+p{margin-top:.3em}.ui.message>:first-child{margin-top:0}.ui.message>:last-child{margin-bottom:0}.ui.message ul.list{opacity:.85;list-style-position:inside;margin:.2em 0;padding:0}.ui.message ul.list li{position:relative;list-style-type:none;margin:0 0 .3em 1em;padding:0}.ui.message ul.list li:before{position:absolute;content:'\\2022';top:-.05em;left:-.8em;height:100%;vertical-align:baseline;opacity:.5}.ui.message ul.list li:first-child{margin-top:0}.ui.message>.close.icon{cursor:pointer;position:absolute;right:0;top:0;width:2.5em;height:2.5em;opacity:.7;padding:.75em 0 0 .75em;-webkit-transition:opacity .1s linear;-moz-transition:opacity .1s linear;transition:opacity .1s linear;z-index:10}.ui.message>.close.icon:hover{opacity:1}.ui.message.visible{display:block!important}.ui.icon.message.animating,.ui.icon.message.visible{display:table!important}.ui.message.hidden{display:none!important}.ui.compact.message{display:inline-block}.ui.attached.message{margin-left:-1px;margin-right:-1px;margin-bottom:-1px;border-radius:.325em .325em 0 0;-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.1) inset;box-shadow:0 0 0 1px rgba(0,0,0,.1) inset}.ui.attached+.ui.attached.message:not(.top):not(.bottom){margin-top:-1px;border-radius:0}.ui.bottom.attached.message{margin-top:-1px;border-radius:0 0 .325em .325em}.ui.bottom.attached.message:not(:last-child){margin-bottom:1em}.ui.attached.icon.message{display:block;width:auto}.ui.icon.message{display:table;width:100%}.ui.icon.message>.icon:not(.close){display:table-cell;vertical-align:middle;font-size:3.8em;opacity:.5}.ui.icon.message>.icon+.content{padding-left:1em}.ui.icon.message>.content{display:table-cell;vertical-align:middle}.ui.inverted.message{background-color:rgba(255,255,255,.05);color:rgba(255,255,255,.95)}.ui.floating.message{-webkit-box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 0 0 1px rgba(0,0,0,.05) inset;box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 0 0 1px rgba(0,0,0,.05) inset}.ui.black.message{background-color:#333;color:rgba(255,255,255,.95)}.ui.blue.message,.ui.info.message{background-color:#E6F4F9;color:#4D8796}.ui.green.message{background-color:#DEFCD5;color:#52A954}.ui.warning.message,.ui.yellow.message{background-color:#F6F3D5;color:#96904D}.ui.red.message{background-color:#F1D7D7;color:#A95252}.ui.positive.message,.ui.success.message{background-color:#DEFCD5;color:#52A954}.ui.error.message,.ui.negative.message{background-color:#F1D7D7;color:#A95252}.ui.small.message{font-size:.875em}.ui.message{font-size:1em}.ui.large.message{font-size:1.125em}.ui.huge.message{font-size:1.5em}.ui.massive.message{font-size:2em}.ui.table{width:100%;border-collapse:collapse}.ui.table td,.ui.table th,.ui.table tr{border-collapse:collapse;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;-webkit-transition:all .1s ease-out;-moz-transition:all .1s ease-out;transition:all .1s ease-out}.ui.table thead{border-bottom:1px solid rgba(0,0,0,.03)}.ui.table tfoot th{background-color:rgba(0,0,0,.03)}.ui.table th{cursor:auto;background-color:rgba(0,0,0,.05);text-align:left;color:rgba(0,0,0,.8);padding:.5em .7em;vertical-align:middle}.ui.table thead th:first-child{border-radius:5px 0 0}.ui.table thead th:last-child{border-radius:0 5px 0 0}.ui.table tfoot th:first-child{border-radius:0 0 0 5px}.ui.table tfoot th:last-child{border-radius:0 0 5px}.ui.table tfoot th:only-child{border-radius:0 0 5px 5px}.ui.table td{padding:.4em .7em;vertical-align:middle}.ui.table tfoot{border-top:1px solid rgba(0,0,0,.03)}.ui.table tfoot th{font-weight:400;font-style:italic}.ui.table tbody tr:nth-child(2n){background-color:rgba(0,0,50,.02)}.ui.table>.icon{vertical-align:baseline}.ui.table>.icon:only-child{margin:0}.ui.table.segment:after{display:none}.ui.table.segment.stacked:after{display:block}@media only screen and (max-width:768px){.ui.table{display:block;padding:0}.ui.table tfoot,.ui.table thead{display:none}.ui.table tbody,.ui.table tr{display:block}.ui.table tr>td{width:100%!important;display:block;border:none!important;padding:.25em .75em;-webkit-box-shadow:0 1px 0 0 rgba(0,0,0,.05)!important;box-shadow:0 1px 0 0 rgba(0,0,0,.05)!important}.ui.table td:first-child{font-weight:700;padding-top:1em}.ui.table td:last-child{-webkit-box-shadow:0 -1px 0 0 rgba(0,0,0,.1) inset!important;box-shadow:0 -1px 0 0 rgba(0,0,0,.1) inset!important;padding-bottom:1em}.ui.table tr>td.active,.ui.table tr>td.error,.ui.table tr>td.negative,.ui.table tr>td.positive,.ui.table tr>td.warning{background-color:transparent!important}}.ui.sortable.table th.disabled:hover{cursor:auto;text-align:left;font-weight:700;color:#333;color:rgba(0,0,0,.8)}.ui.sortable.table thead th:hover{background-color:rgba(0,0,0,.13);color:rgba(0,0,0,.8)}.ui.inverted.sortable.table thead th:hover{background-color:rgba(255,255,255,.13);color:#fff}.ui.table td.positive,.ui.table tr.positive{-webkit-box-shadow:2px 0 0 #119000 inset;box-shadow:2px 0 0 #119000 inset}.ui.table td.positive,.ui.table tr.positive td{background-color:#F2F8F0!important;color:#119000!important}.ui.celled.table tr.positive:hover td,.ui.celled.table tr:hover td.positive,.ui.table td:hover.positive,.ui.table th:hover.positive,.ui.table tr.positive:hover td{background-color:#ECF5E9!important;color:#119000!important}.ui.table td.negative,.ui.table tr.negative{-webkit-box-shadow:2px 0 0 #CD2929 inset;box-shadow:2px 0 0 #CD2929 inset}.ui.table td.negative,.ui.table tr.negative td{background-color:#F9F4F4;color:#CD2929!important}.ui.celled.table tr.negative:hover td,.ui.celled.table tr:hover td.negative,.ui.table td:hover.negative,.ui.table th:hover.negative,.ui.table tr.negative:hover td{background-color:#F2E8E8;color:#CD2929}.ui.table td.error,.ui.table tr.error{-webkit-box-shadow:2px 0 0 #CD2929 inset;box-shadow:2px 0 0 #CD2929 inset}.ui.table td.error,.ui.table th.error,.ui.table tr.error td{background-color:#F9F4F4;color:#CD2929}.ui.celled.table tr.error:hover td,.ui.celled.table tr:hover td.error,.ui.table td:hover.error,.ui.table th:hover.error,.ui.table tr.error:hover td{background-color:#F2E8E8;color:#CD2929}.ui.table td.warning,.ui.table tr.warning{-webkit-box-shadow:2px 0 0 #7D6C00 inset;box-shadow:2px 0 0 #7D6C00 inset}.ui.table td.warning,.ui.table th.warning,.ui.table tr.warning td{background-color:#FBF6E9;color:#7D6C00}.ui.celled.table tr.warning:hover td,.ui.celled.table tr:hover td.warning,.ui.table td:hover.warning,.ui.table th:hover.warning,.ui.table tr.warning:hover td{background-color:#F3EDDC;color:#7D6C00}.ui.table td.active,.ui.table tr.active{-webkit-box-shadow:2px 0 0 rgba(50,50,50,.9) inset;box-shadow:2px 0 0 rgba(50,50,50,.9) inset}.ui.table tr td.active,.ui.table tr.active td{background-color:#E0E0E0;color:rgba(50,50,50,.9)}.ui.table tr td.disabled,.ui.table tr.disabled td,.ui.table tr.disabled:hover td,.ui.table tr:hover td.disabled{color:rgba(150,150,150,.3)}.ui.column.table{table-layout:fixed}.ui.two.column.table td{width:50%}.ui.three.column.table td{width:33.3333%}.ui.four.column.table td{width:25%}.ui.five.column.table td{width:20%}.ui.six.column.table td{width:16.66667%}.ui.seven.column.table td{width:14.2857%}.ui.eight.column.table td{width:12.5%}.ui.nine.column.table td{width:11.1111%}.ui.ten.column.table td{width:10%}.ui.eleven.column.table td{width:9.0909%}.ui.twelve.column.table td{width:8.3333%}.ui.thirteen.column.table td{width:7.6923%}.ui.fourteen.column.table td{width:7.1428%}.ui.fifteen.column.table td{width:6.6666%}.ui.sixteen.column.table td,.ui.table td.one.wide,.ui.table th.one.wide{width:6.25%}.ui.table td.two.wide,.ui.table th.two.wide{width:12.5%}.ui.table td.three.wide,.ui.table th.three.wide{width:18.75%}.ui.table td.four.wide,.ui.table th.four.wide{width:25%}.ui.table td.five.wide,.ui.table th.five.wide{width:31.25%}.ui.table td.six.wide,.ui.table th.six.wide{width:37.5%}.ui.table td.seven.wide,.ui.table th.seven.wide{width:43.75%}.ui.table td.eight.wide,.ui.table th.eight.wide{width:50%}.ui.table td.nine.wide,.ui.table th.nine.wide{width:56.25%}.ui.table td.ten.wide,.ui.table th.ten.wide{width:62.5%}.ui.table td.eleven.wide,.ui.table th.eleven.wide{width:68.75%}.ui.table td.twelve.wide,.ui.table th.twelve.wide{width:75%}.ui.table td.thirteen.wide,.ui.table th.thirteen.wide{width:81.25%}.ui.table td.fourteen.wide,.ui.table th.fourteen.wide{width:87.5%}.ui.table td.fifteen.wide,.ui.table th.fifteen.wide{width:93.75%}.ui.table td.sixteen.wide,.ui.table th.sixteen.wide{width:100%}.ui.celled.table{color:rgba(0,0,0,.8)}.ui.celled.table tbody tr,.ui.celled.table tfoot tr{border:none}.ui.celled.table td,.ui.celled.table th{border:1px solid rgba(0,0,0,.1)}.ui.celled.table.segment td:first-child,.ui.celled.table.segment th:first-child{border-left:none}.ui.celled.table.segment td:last-child,.ui.celled.table.segment th:last-child{border-right:none}.ui.sortable.table thead th{cursor:pointer;white-space:nowrap}.ui.sortable.table thead th.sorted,.ui.sortable.table thead th.sorted:hover{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ui.sortable.table thead th:after{display:inline-block;content:'';width:1em;opacity:.8;margin:0 0 0 .5em;font-family:Icons;font-style:normal;font-weight:400;text-decoration:inherit}.ui.sortable.table thead th.ascending:after{content:'\\25b4'}.ui.sortable.table thead th.descending:after{content:'\\25be'}.ui.inverted.table td{color:rgba(255,255,255,.9)}.ui.inverted.table th{background-color:rgba(0,0,0,.15);color:rgba(255,255,255,.9)}.ui.inverted.table tbody tr:nth-child(2n){background-color:rgba(255,255,255,.06)}.ui.definition.table td:first-child{font-weight:700}.ui.collapsing.table{width:auto}.ui.basic.table th{background-color:transparent;padding:.5em}.ui.basic.table tbody tr{border-bottom:1px solid rgba(0,0,0,.03)}.ui.basic.table td{padding:.8em .5em}.ui.basic.table tbody tr:nth-child(2n){background-color:transparent!important}.ui.padded.table td,.ui.padded.table th{padding:.8em 1em}.ui.compact.table th{padding:.3em .5em}.ui.compact.table td{padding:.2em .5em}.ui.small.table{font-size:.875em}.ui.table{font-size:1em}.ui.large.table{font-size:1.1em}@font-face{font-family:'Basic Icons';src:url(/static/3e9816417b11485d454f9b3662b06e7b.eot);src:url(/static/3e9816417b11485d454f9b3662b06e7b.eot?#iefix) format('embedded-opentype'),url(/static/60c2a8500e63bf211b7df9608f7613ea.svg#basic.icons) format('svg'),url(/static/c9dec22105ad9330c811599b8b6464f8.woff) format('woff'),url(/static/71ab514d1cedda303417ad7a06472fea.ttf) format('truetype');font-style:normal;font-weight:400;font-variant:normal;text-decoration:inherit;text-transform:none}i.basic.icon{display:inline-block;opacity:.75;margin:0 .25em 0 0;width:1.23em;height:1em;font-family:'Basic Icons';font-style:normal;line-height:1;font-weight:400;text-decoration:inherit;text-align:center;speak:none;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;-webkit-font-smoothing:antialiased;-moz-font-smoothing:antialiased;font-smoothing:antialiased}i.basic.icon.circle.attention:before{content:'\\2757'}i.basic.icon.circle.help:before{content:'\\e704'}i.basic.icon.circle.info:before{content:'\\e705'}i.basic.icon.add:before{content:'\\2795'}i.basic.icon.chart:before{content:'📈'}i.basic.icon.chart.bar:before{content:'📊'}i.basic.icon.chart.pie:before{content:'\\e7a2'}i.basic.icon.resize.full:before{content:'\\e744'}i.basic.icon.resize.horizontal:before{content:'\\2b0d'}i.basic.icon.resize.small:before{content:'\\e746'}i.basic.icon.resize.vertical:before{content:'\\2b0c'}i.basic.icon.down:before{content:'\\2193'}i.basic.icon.down.triangle:before{content:'\\25be'}i.basic.icon.down.arrow:before{content:'\\e75c'}i.basic.icon.left:before{content:'\\2190'}i.basic.icon.left.triangle:before{content:'\\25c2'}i.basic.icon.left.arrow:before{content:'\\e75d'}i.basic.icon.right:before{content:'\\2192'}i.basic.icon.right.triangle:before{content:'\\25b8'}i.basic.icon.right.arrow:before{content:'\\e75e'}i.basic.icon.up:before{content:'\\2191'}i.basic.icon.up.triangle:before{content:'\\25b4'}i.basic.icon.up.arrow:before{content:'\\e75f'}i.basic.icon.folder:before{content:'\\e810'}i.basic.icon.open.folder:before{content:'📂'}i.basic.icon.desk.globe:before{content:'🌐'}i.basic.icon.star:before{content:'\\e801'}i.basic.icon.star.empty:before{content:'\\e800'}i.basic.icon.star.half:before{content:'\\e701'}i.basic.icon.lock:before{content:'🔒'}i.basic.icon.unlock:before{content:'🔓'}i.basic.icon.layout.grid:before{content:'\\e80c'}i.basic.icon.layout.block:before{content:'\\e708'}i.basic.icon.layout.list:before{content:'\\e80b'}i.basic.icon.heart.empty:before{content:'\\2661'}i.basic.icon.heart:before{content:'\\2665'}i.basic.icon.asterisk:before{content:'\\2731'}i.basic.icon.attachment:before{content:'📎'}i.basic.icon.attention:before{content:'\\26a0'}i.basic.icon.trophy:before{content:'🏉'}i.basic.icon.barcode:before{content:'\\e792'}i.basic.icon.cart:before{content:'\\e813'}i.basic.icon.block:before{content:'🚫'}i.basic.icon.book:before{content:'📖'}i.basic.icon.bookmark:before{content:'🔖'}i.basic.icon.calendar:before{content:'📅'}i.basic.icon.cancel:before{content:'\\2716'}i.basic.icon.close:before{content:'\\e80d'}i.basic.icon.color:before{content:'\\e794'}i.basic.icon.chat:before{content:'\\e720'}i.basic.icon.check:before{content:'\\2611'}i.basic.icon.time:before{content:'🕔'}i.basic.icon.cloud:before{content:'\\2601'}i.basic.icon.code:before{content:'\\e714'}i.basic.icon.email:before{content:'\\40'}i.basic.icon.settings:before{content:'\\26ef'}i.basic.icon.setting:before{content:'\\2699'}i.basic.icon.comment:before{content:'\\e802'}i.basic.icon.clockwise.counter:before{content:'\\27f2'}i.basic.icon.clockwise:before{content:'\\27f3'}i.basic.icon.cube:before{content:'\\e807'}i.basic.icon.direction:before{content:'\\27a2'}i.basic.icon.doc:before{content:'📄'}i.basic.icon.docs:before{content:'\\e736'}i.basic.icon.dollar:before{content:'💵'}i.basic.icon.paint:before{content:'\\e7b5'}i.basic.icon.edit:before{content:'\\270d'}i.basic.icon.eject:before{content:'\\2ecf'}i.basic.icon.export:before{content:'\\e715'}i.basic.icon.hide:before{content:'\\e70b'}i.basic.icon.unhide:before{content:'\\e80f'}i.basic.icon.facebook:before{content:'\\f301'}i.basic.icon.fast-forward:before{content:'\\e804'}i.basic.icon.fire:before{content:'🔥'}i.basic.icon.flag:before{content:'\\2691'}i.basic.icon.lightning:before{content:'\\26a1'}i.basic.icon.lab:before{content:'\\68'}i.basic.icon.flight:before{content:'\\2708'}i.basic.icon.forward:before{content:'\\27a6'}i.basic.icon.gift:before{content:'🎁'}i.basic.icon.github:before{content:'\\f308'}i.basic.icon.globe:before{content:'\\e817'}i.basic.icon.headphones:before{content:'🎧'}i.basic.icon.question:before{content:'\\2753'}i.basic.icon.home:before{content:'\\2302'}i.basic.icon.i:before{content:'\\2139'}i.basic.icon.idea:before{content:'💡'}i.basic.icon.open:before{content:'🔗'}i.basic.icon.content:before{content:'\\e782'}i.basic.icon.location:before{content:'\\e724'}i.basic.icon.mail:before{content:'\\2709'}i.basic.icon.mic:before{content:'🎤'}i.basic.icon.minus:before{content:'\\2d'}i.basic.icon.money:before{content:'💰'}i.basic.icon.off:before{content:'\\e78e'}i.basic.icon.pause:before{content:'\\e808'}i.basic.icon.photos:before{content:'\\e812'}i.basic.icon.photo:before{content:'🌄'}i.basic.icon.pin:before{content:'📌'}i.basic.icon.play:before{content:'\\e809'}i.basic.icon.plus:before{content:'\\2b'}i.basic.icon.print:before{content:'\\e716'}i.basic.icon.rss:before{content:'\\e73a'}i.basic.icon.search:before{content:'🔍'}i.basic.icon.shuffle:before{content:'\\e803'}i.basic.icon.tag:before{content:'\\e80a'}i.basic.icon.tags:before{content:'\\e70d'}i.basic.icon.terminal:before{content:'\\e7ac'}i.basic.icon.thumbs.down:before{content:'👎'}i.basic.icon.thumbs.up:before{content:'👍'}i.basic.icon.to-end:before{content:'\\e806'}i.basic.icon.to-start:before{content:'\\e805'}i.basic.icon.top.list:before{content:'🏆'}i.basic.icon.trash:before{content:'\\e729'}i.basic.icon.twitter:before{content:'\\f303'}i.basic.icon.upload:before{content:'\\e711'}i.basic.icon.user.add:before{content:'\\e700'}i.basic.icon.user:before{content:'👤'}i.basic.icon.community:before{content:'\\e814'}i.basic.icon.users:before{content:'👥'}i.basic.icon.id:before{content:'\\e722'}i.basic.icon.url:before{content:'🔗'}i.basic.icon.zoom.in:before{content:'\\e750'}i.basic.icon.zoom.out:before{content:'\\e751'}i.dropdown.basic.icon{margin:0 0 0 .5em}i.basic.icon.star{width:auto;margin:0}i.basic.icon.left{width:auto;margin:0 .5em 0 0}i.basic.icon.down,i.basic.icon.right,i.basic.icon.search,i.basic.icon.up{width:auto;margin:0 0 0 .5em}i.basic.icon.delete:before{content:'\\e80d'}i.basic.icon.dropdown:before{content:'\\25be'}i.basic.icon.help:before{content:'\\e704'}i.basic.icon.info:before{content:'\\e705'}i.basic.icon.error:before{content:'\\e80d'}i.basic.icon.dislike:before{content:'\\2661'}i.basic.icon.like:before{content:'\\2665'}i.basic.icon.eye:before{content:'\\e80f'}i.basic.icon.eye.hidden:before{content:'\\e70b'}i.basic.icon.date:before{content:'📅'}i.basic.icon.active,i.basic.icon.hover,i.emphasized.basic.icon{opacity:1}i.basic.icon.disabled{opacity:.3}i.link.basic.icon{cursor:pointer;opacity:.7;-webkit-transition:opacity .3s ease-out;-moz-transition:opacity .3s ease-out;transition:opacity .3s ease-out}.link.basic.icon:hover{opacity:1!important}i.circular.basic.icon{border-radius:500px!important;padding:.5em 0!important;-webkit-box-shadow:0 0 0 .1em rgba(0,0,0,.1) inset;box-shadow:0 0 0 .1em rgba(0,0,0,.1) inset;line-height:1!important;width:2em!important;height:2em!important}i.circular.inverted.basic.icon{border:none;-webkit-box-shadow:none;box-shadow:none}i.vertically.flipped.basic.icon{-webkit-transform:scale(1,-1);-moz-transform:scale(1,-1);-ms-transform:scale(1,-1);transform:scale(1,-1)}i.horizontally.flipped.basic.icon{-webkit-transform:scale(-1,1);-moz-transform:scale(-1,1);-ms-transform:scale(-1,1);transform:scale(-1,1)}i.left.rotated.basic.icon{-webkit-transform:rotate(-90deg);-moz-transform:rotate(-90deg);-ms-transform:rotate(-90deg);transform:rotate(-90deg)}i.right.rotated.basic.icon{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}i.square.basic.icon{width:2em;height:2em;padding:.5em .35em!important;-webkit-box-shadow:0 0 0 .1em rgba(0,0,0,.1) inset;box-shadow:0 0 0 .1em rgba(0,0,0,.1) inset;vertical-align:baseline}i.square.basic.icon:before{vertical-align:middle}i.square.inverted.basic.icon{border:none;-webkit-box-shadow:none;box-shadow:none}i.inverted.basic.icon{background-color:#222;color:#FFF}i.blue.basic.icon{color:#6ECFF5!important}i.black.basic.icon{color:#5C6166!important}i.green.basic.icon{color:#A1CF64!important}i.red.basic.icon{color:#D95C5C!important}i.purple.basic.icon{color:#564F8A!important}i.teal.basic.icon{color:#00B5AD!important}i.inverted.black.basic.icon{background-color:#5C6166!important;color:#FFF!important}i.inverted.blue.basic.icon{background-color:#6ECFF5!important;color:#FFF!important}i.inverted.green.basic.icon{background-color:#A1CF64!important;color:#FFF!important}i.inverted.red.basic.icon{background-color:#D95C5C!important;color:#FFF!important}i.inverted.purple.basic.icon{background-color:#564F8A!important;color:#FFF!important}i.inverted.teal.basic.icon{background-color:#00B5AD!important;color:#FFF!important}i.small.basic.icon{font-size:.875em}i.basic.icon{font-size:1em}i.large.basic.icon{font-size:1.5em;margin-right:.2em;vertical-align:middle}i.big.basic.icon{font-size:2em;margin-right:.5em;vertical-align:middle}i.huge.basic.icon{font-size:4em;margin-right:.75em;vertical-align:middle}i.massive.basic.icon{font-size:8em;margin-right:1em;vertical-align:middle}.ui.button{cursor:pointer;display:inline-block;vertical-align:middle;min-height:1em;outline:0;border:none;background-color:#FAFAFA;color:gray;margin:0;padding:.8em 1.5em;text-transform:uppercase;line-height:1;font-weight:700;font-style:normal;text-align:center;text-decoration:none;background-image:-webkit-gradient(linear,left top,left bottom,from(rgba(0,0,0,0)),to(rgba(0,0,0,.05)));background-image:-webkit-linear-gradient(rgba(0,0,0,0),rgba(0,0,0,.05));background-image:-moz-linear-gradient(rgba(0,0,0,0),rgba(0,0,0,.05));background-image:linear-gradient(rgba(0,0,0,0),rgba(0,0,0,.05));border-radius:.25em;-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.08) inset;box-shadow:0 0 0 1px rgba(0,0,0,.08) inset;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;-webkit-tap-highlight-color:transparent;-webkit-transition:opacity .25s ease,background-color .25s ease,color .25s ease,background .25s ease,-webkit-box-shadow .25s ease;-moz-transition:opacity .25s ease,background-color .25s ease,color .25s ease,background .25s ease,box-shadow .25s ease;transition:opacity .25s ease,background-color .25s ease,color .25s ease,background .25s ease,box-shadow .25s ease}.ui.active.button,.ui.buttons .active.button{background-color:#EAEAEA;background-image:none;-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.05) inset!important;box-shadow:0 0 0 1px rgba(0,0,0,.05) inset!important;color:rgba(0,0,0,.7)}.ui.button:hover{background-image:-webkit-gradient(linear,left top,left bottom,from(rgba(0,0,0,0)),to(rgba(0,0,0,.08)));background-image:-webkit-linear-gradient(rgba(0,0,0,0),rgba(0,0,0,.08));background-image:-moz-linear-gradient(rgba(0,0,0,0),rgba(0,0,0,.08));background-image:linear-gradient(rgba(0,0,0,0),rgba(0,0,0,.08));color:rgba(0,0,0,.7)}.ui.button.active:hover{background-image:none}.ui.button.hover .icon,.ui.button:hover .icon{opacity:.85}.ui.active.button:active,.ui.button:active{background-color:#F1F1F1;color:rgba(0,0,0,.7);-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.05) inset!important;box-shadow:0 0 0 1px rgba(0,0,0,.05) inset!important}.ui.loading.button{position:relative;cursor:default;background-color:#FFF!important;color:transparent!important;-webkit-transition:all 0s linear;-moz-transition:all 0s linear;transition:all 0s linear}.ui.loading.button:after{position:absolute;top:0;left:0;width:100%;height:100%;content:'';background:url(/static/ca279c55a51ab2641c4712a333633581.gif) 50% 50% no-repeat}.ui.labeled.icon.loading.button .icon{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.ui.disabled.button,.ui.disabled.button.active,.ui.disabled.button:hover{background-color:#DDD!important;cursor:default;color:rgba(0,0,0,.5)!important;opacity:.3!important;background-image:none!important;-webkit-box-shadow:none!important;box-shadow:none!important}.ui.animated.button{position:relative;overflow:hidden}.ui.animated.button .visible.content{position:relative}.ui.animated.button .hidden.content{position:absolute;width:100%}.ui.animated.button .hidden.content,.ui.animated.button .visible.content{-webkit-transition:right .3s ease 0s;-moz-transition:right .3s ease 0s;transition:right .3s ease 0s}.ui.animated.button .visible.content{left:auto;right:0}.ui.animated.button .hidden.content{top:50%;left:auto;right:-100%;margin-top:-.55em}.ui.animated.button:hover .visible.content{left:auto;right:200%}.ui.animated.button:hover .hidden.content{left:auto;right:0}.ui.vertical.animated.button .hidden.content,.ui.vertical.animated.button .visible.content{-webkit-transition:top .3s ease 0s,-webkit-transform .3s ease 0s;-moz-transition:top .3s ease 0s,-moz-transform .3s ease 0s;transition:top .3s ease 0s,transform .3s ease 0s}.ui.vertical.animated.button .visible.content{-webkit-transform:translateY(0%);-moz-transform:translateY(0%);-ms-transform:translateY(0%);transform:translateY(0%);right:auto}.ui.vertical.animated.button .hidden.content{top:-100%;left:0;right:auto}.ui.vertical.animated.button:hover .visible.content{-webkit-transform:translateY(200%);-moz-transform:translateY(200%);-ms-transform:translateY(200%);transform:translateY(200%);right:auto}.ui.vertical.animated.button:hover .hidden.content{top:50%;right:auto}.ui.fade.animated.button .hidden.content,.ui.fade.animated.button .visible.content{-webkit-transition:opacity .3s ease 0s,-webkit-transform .3s ease 0s;-moz-transition:opacity .3s ease 0s,-moz-transform .3s ease 0s;transition:opacity .3s ease 0s,transform .3s ease 0s}.ui.fade.animated.button .visible.content{left:auto;right:auto;opacity:1;-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}.ui.fade.animated.button .hidden.content{opacity:0;left:0;right:auto;-webkit-transform:scale(1.2);-moz-transform:scale(1.2);-ms-transform:scale(1.2);transform:scale(1.2)}.ui.fade.animated.button:hover .visible.content{left:auto;right:auto;opacity:0;-webkit-transform:scale(0.7);-moz-transform:scale(0.7);-ms-transform:scale(0.7);transform:scale(0.7)}.ui.fade.animated.button:hover .hidden.content{left:0;right:auto;opacity:1;-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}.ui.primary.button,.ui.primary.buttons .button{background-color:#D95C5C;color:#FFF}.ui.primary.button.active,.ui.primary.button:hover,.ui.primary.buttons .active.button,.ui.primary.buttons .button:hover{background-color:#E75859;color:#FFF}.ui.primary.button:active,.ui.primary.buttons .button:active{background-color:#D24B4C;color:#FFF}.ui.secondary.button,.ui.secondary.buttons .button{background-color:#00B5AD;color:#FFF}.ui.secondary.button.active,.ui.secondary.button:hover,.ui.secondary.buttons .active.button,.ui.secondary.buttons .button:hover{background-color:#009A93;color:#FFF}.ui.secondary.button:active,.ui.secondary.buttons .button:active{background-color:#00847E;color:#FFF}.ui.facebook.button{background-color:#3B579D;color:#FFF}.ui.facebook.button:hover{background-color:#3A59A9;color:#FFF}.ui.facebook.button:active{background-color:#334F95;color:#FFF}.ui.twitter.button{background-color:#4092CC;color:#FFF}.ui.twitter.button:hover{background-color:#399ADE;color:#FFF}.ui.twitter.button:active{background-color:#3283BC;color:#FFF}.ui.google.plus.button{background-color:#D34836;color:#FFF}.ui.google.plus.button:hover{background-color:#E3432E;color:#FFF}.ui.google.plus.button:active{background-color:#CA3A27;color:#FFF}.ui.linkedin.button{background-color:#1F88BE;color:#FFF}.ui.linkedin.button:hover{background-color:#1394D6;color:#FFF}.ui.linkedin.button:active{background-color:#1179AE;color:#FFF}.ui.youtube.button{background-color:#CC181E;color:#FFF}.ui.youtube.button:hover{background-color:#DF0209;color:#FFF}.ui.youtube.button:active{background-color:#A50006;color:#FFF}.ui.instagram.button{background-color:#49769C;color:#FFF}.ui.instagram.button:hover{background-color:#4781B1;color:#FFF}.ui.instagram.button:active{background-color:#38658A;color:#FFF}.ui.pinterest.button{background-color:#00ACED;color:#FFF}.ui.pinterest.button:hover{background-color:#00B9FF;color:#FFF}.ui.pinterest.button:active{background-color:#009EDA;color:#FFF}.ui.vk.button{background-color:#4D7198;color:#FFF}.ui.vk.button:hover{background-color:#537AA5;color:#FFF}.ui.vk.button:active{background-color:#405E7E;color:#FFF}.ui.button>.icon{margin-right:.6em;line-height:1;-webkit-transition:opacity .1s ease;-moz-transition:opacity .1s ease;transition:opacity .1s ease}.ui.left.floated.button,.ui.left.floated.buttons{float:left;margin-right:.25em}.ui.right.floated.button,.ui.right.floated.buttons{float:right;margin-left:.25em}.ui.button,.ui.buttons .button{font-size:1rem}.ui.mini.button,.ui.mini.buttons .button,.ui.mini.buttons .or{font-size:.8rem}.ui.mini.button,.ui.mini.buttons .button{padding:.6em .8em}.ui.mini.buttons .icon.button,.ui.mini.icon.buttons .button{padding:.6em}.ui.tiny.button,.ui.tiny.buttons .button,.ui.tiny.buttons .or{font-size:.875em}.ui.tiny.button,.ui.tiny.buttons .button{padding:.6em .8em}.ui.tiny.buttons .icon.button,.ui.tiny.icon.buttons .button{padding:.6em}.ui.small.button,.ui.small.buttons .button,.ui.small.buttons .or{font-size:.875rem}.ui.large.button,.ui.large.buttons .button,.ui.large.buttons .or{font-size:1.125rem}.ui.big.button,.ui.big.buttons .button,.ui.big.buttons .or{font-size:1.25rem}.ui.huge.button,.ui.huge.buttons .button,.ui.huge.buttons .or{font-size:1.375rem}.ui.massive.button,.ui.massive.buttons .button,.ui.massive.buttons .or{font-size:1.5rem;font-weight:700}.ui.mini.buttons .or:before,.ui.tiny.buttons .or:before{width:1.45em;height:1.55em;line-height:1.4;margin-left:-.725em;margin-top:-.25em}.ui.mini.buttons .or:after,.ui.tiny.buttons .or:after{height:1.45em}.ui.huge.loading.button.active:after,.ui.huge.loading.button:after{background-image:url(/static/645f50ba6c1e56f078fa018855d97eb0.gif)}.ui.gigantic.buttons .loading.button.active:after,.ui.gigantic.buttons .loading.button:after,.ui.gigantic.loading.button.active:after,.ui.gigantic.loading.button:after,.ui.massive.buttons .loading.button.active:after,.ui.massive.buttons .loading.button:after,.ui.massive.loading.button.active:after,.ui.massive.loading.button:after{background-image:url(/static/939cf252f0eb4efbd2d170c974411c49.gif)}.ui.icon.button,.ui.icon.buttons .button{padding:.8em}.ui.icon.button>.icon,.ui.icon.buttons .button>.icon{opacity:.9;margin:0;vertical-align:top}.ui.basic.button,.ui.basic.buttons .button{background-color:transparent!important;background-image:none;color:gray!important;font-weight:400;text-transform:none;-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.1) inset;box-shadow:0 0 0 1px rgba(0,0,0,.1) inset}.ui.basic.buttons{-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.1) inset;box-shadow:0 0 0 1px rgba(0,0,0,.1) inset;border-radius:.25em}.ui.basic.button:hover,.ui.basic.buttons .button:hover{background-image:none;color:#7F7F7F!important;-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.18) inset;box-shadow:0 0 0 1px rgba(0,0,0,.18) inset}.ui.basic.button:active,.ui.basic.buttons .button:active{background-color:rgba(0,0,0,.02)!important;color:#7F7F7F!important;-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.1) inset;box-shadow:0 0 0 1px rgba(0,0,0,.1) inset}.ui.basic.button.active,.ui.basic.buttons .button.active{background-color:rgba(0,0,0,.05);color:#7F7F7F;-webkit-box-shadow:0 0 0 1px #BDBDBD inset;box-shadow:0 0 0 1px #BDBDBD inset}.ui.basic.button.active:hover,.ui.basic.buttons .button.active:hover{background-color:rgba(0,0,0,.1)}.ui.basic.inverted.button,.ui.basic.inverted.buttons .button{color:#FAFAFA!important;-webkit-box-shadow:0 0 0 1px rgba(255,255,255,.3) inset;box-shadow:0 0 0 1px rgba(255,255,255,.3) inset}.ui.basic.inverted.button:hover,.ui.basic.inverted.buttons .button:hover{background-image:none;color:#FFF!important;-webkit-box-shadow:0 0 0 1px rgba(255,255,255,.5) inset;box-shadow:0 0 0 1px rgba(255,255,255,.5) inset}.ui.basic.inverted.button:active,.ui.basic.inverted.buttons .button:active{background-color:rgba(255,255,255,.05)!important;color:#FFF!important;-webkit-box-shadow:0 0 0 1px rgba(255,255,255,.8) inset!important;box-shadow:0 0 0 1px rgba(255,255,255,.8) inset!important}.ui.basic.inverted.button.active,.ui.basic.inverted.buttons .button.active{background-color:rgba(255,255,255,.5);color:#FFF;-webkit-box-shadow:none;box-shadow:none}.ui.basic.inverted.button.active:hover,.ui.basic.inverted.buttons .button.active:hover{background-color:rgba(0,0,0,.1)}.ui.basic.buttons .button{border-left:1px solid rgba(0,0,0,.1);-webkit-box-shadow:none;box-shadow:none}.ui.basic.buttons .button:active,.ui.basic.buttons .button:hover{-webkit-box-shadow:none;box-shadow:none}.ui.basic.buttons .button.active,.ui.basic.buttons .button.active:hover{-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.2) inset;box-shadow:0 0 0 1px rgba(0,0,0,.2) inset}.ui.labeled.icon.button,.ui.labeled.icon.buttons .button{position:relative;padding-left:4em!important;padding-right:1.4em!important}.ui.labeled.icon.button>.icon,.ui.labeled.icon.buttons>.button>.icon{position:absolute;top:0;left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;width:2.75em;height:100%;padding-top:.8em;background-color:rgba(0,0,0,.05);text-align:center;border-radius:.25em 0 0 .25em;line-height:1;-webkit-box-shadow:-1px 0 0 0 rgba(0,0,0,.05) inset;box-shadow:-1px 0 0 0 rgba(0,0,0,.05) inset}.ui.labeled.icon.buttons .button>.icon{border-radius:0}.ui.labeled.icon.buttons .button:first-child>.icon{border-top-left-radius:.25em;border-bottom-left-radius:.25em}.ui.labeled.icon.buttons .button:last-child>.icon{border-top-right-radius:.25em;border-bottom-right-radius:.25em}.ui.vertical.labeled.icon.buttons .button:first-child>.icon{border-radius:.25em 0 0}.ui.vertical.labeled.icon.buttons .button:last-child>.icon{border-radius:0 0 0 .25em}.ui.right.labeled.icon.button{padding-left:1.4em!important;padding-right:4em!important}.ui.left.fluid.labeled.icon.button,.ui.right.fluid.labeled.icon.button{padding-left:1.4em!important;padding-right:1.4em!important}.ui.right.labeled.icon.button .icon{left:auto;right:0;border-radius:0 .25em .25em 0;-webkit-box-shadow:1px 0 0 0 rgba(0,0,0,.05) inset;box-shadow:1px 0 0 0 rgba(0,0,0,.05) inset}.ui.button.toggle.active,.ui.buttons .button.toggle.active,.ui.toggle.buttons .active.button{background-color:#5BBD72!important;color:#FFF!important;-webkit-box-shadow:none!important;box-shadow:none!important}.ui.button.toggle.active:hover{background-color:#58CB73!important;color:#FFF!important;-webkit-box-shadow:none!important;box-shadow:none!important}.ui.circular.button{border-radius:10em}.ui.attached.button{display:block;-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.1)!important;box-shadow:0 0 0 1px rgba(0,0,0,.1)!important}.ui.attached.top.button{border-radius:.25em .25em 0 0}.ui.attached.bottom.button{border-radius:0 0 .25em .25em}.ui.attached.left.button{display:inline-block;border-left:none;padding-right:.75em;text-align:right;border-radius:.25em 0 0 .25em}.ui.attached.right.button{display:inline-block;padding-left:.75em;text-align:left;border-radius:0 .25em .25em 0}.ui.buttons .or{position:relative;float:left;width:.3em;height:1.1em;z-index:3}.ui.buttons .or:before{position:absolute;top:50%;left:50%;content:'or';background-color:#FFF;margin-top:-.1em;margin-left:-.9em;width:1.8em;height:1.8em;line-height:1.55;color:#AAA;font-style:normal;font-weight:400;text-align:center;border-radius:500px;-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.1);box-shadow:0 0 0 1px rgba(0,0,0,.1);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.ui.buttons .or[data-text]:before{content:attr(data-text)}.ui.buttons .or:after{position:absolute;top:0;left:0;content:' ';width:.3em;height:1.7em;background-color:transparent;border-top:.5em solid #FFF;border-bottom:.5em solid #FFF}.ui.fluid.buttons .or{width:0!important}.ui.fluid.buttons .or:after{display:none}.attached.ui.buttons{margin:0;border-radius:4px 4px 0 0}.attached.ui.buttons .button:first-child{border-radius:4px 0 0}.attached.ui.buttons .button:last-child{border-radius:0 4px 0 0}.bottom.attached.ui.buttons{margin-top:-1px;border-radius:0 0 4px 4px}.bottom.attached.ui.buttons .button:first-child{border-radius:0 0 0 4px}.bottom.attached.ui.buttons .button:last-child{border-radius:0 0 4px}.left.attached.ui.buttons{margin-left:-1px;border-radius:0 4px 4px 0}.left.attached.ui.buttons .button:first-child{margin-left:-1px;border-radius:0 4px 0 0}.left.attached.ui.buttons .button:last-child{margin-left:-1px;border-radius:0 0 4px}.right.attached.ui.buttons,.right.attached.ui.buttons .button{margin-right:-1px;border-radius:4px 0 0 4px}.right.attached.ui.buttons .button:first-child{margin-left:-1px;border-radius:4px 0 0}.right.attached.ui.buttons .button:last-child{margin-left:-1px;border-radius:0 0 0 4px}.ui.button.fluid,.ui.fluid.buttons,.ui.fluid.buttons>.button{display:block;width:100%}.ui.\\32.buttons>.button,.ui.two.buttons>.button{width:50%}.ui.\\33.buttons>.button,.ui.three.buttons>.button{width:33.333%}.ui.\\34.buttons>.button,.ui.four.buttons>.button{width:25%}.ui.\\35.buttons>.button,.ui.five.buttons>.button{width:20%}.ui.\\36.buttons>.button,.ui.six.buttons>.button{width:16.666%}.ui.\\37.buttons>.button,.ui.seven.buttons>.button{width:14.285%}.ui.\\38.buttons>.button,.ui.eight.buttons>.button{width:12.5%}.ui.\\39.buttons>.button,.ui.nine.buttons>.button{width:11.11%}.ui.\\31\\30.buttons>.button,.ui.ten.buttons>.button{width:10%}.ui.\\31\\31.buttons>.button,.ui.eleven.buttons>.button{width:9.09%}.ui.\\31\\32.buttons>.button,.ui.twelve.buttons>.button{width:8.3333%}.ui.fluid.vertical.buttons,.ui.fluid.vertical.buttons>.button{display:block;width:auto;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.ui.\\32.vertical.buttons>.button,.ui.two.vertical.buttons>.button{height:50%}.ui.\\33.vertical.buttons>.button,.ui.three.vertical.buttons>.button{height:33.333%}.ui.\\34.vertical.buttons>.button,.ui.four.vertical.buttons>.button{height:25%}.ui.\\35.vertical.buttons>.button,.ui.five.vertical.buttons>.button{height:20%}.ui.\\36.vertical.buttons>.button,.ui.six.vertical.buttons>.button{height:16.666%}.ui.\\37.vertical.buttons>.button,.ui.seven.vertical.buttons>.button{height:14.285%}.ui.\\38.vertical.buttons>.button,.ui.eight.vertical.buttons>.button{height:12.5%}.ui.\\39.vertical.buttons>.button,.ui.nine.vertical.buttons>.button{height:11.11%}.ui.\\31\\30.vertical.buttons>.button,.ui.ten.vertical.buttons>.button{height:10%}.ui.\\31\\31.vertical.buttons>.button,.ui.eleven.vertical.buttons>.button{height:9.09%}.ui.\\31\\32.vertical.buttons>.button,.ui.twelve.vertical.buttons>.button{height:8.3333%}.ui.black.button,.ui.black.buttons .button{background-color:#5C6166;color:#FFF}.ui.black.button:hover,.ui.black.buttons .button:hover{background-color:#4C4C4C;color:#FFF}.ui.black.button:active,.ui.black.buttons .button:active{background-color:#333;color:#FFF}.ui.green.button,.ui.green.buttons .button{background-color:#5BBD72;color:#FFF}.ui.green.button.active,.ui.green.button:hover,.ui.green.buttons .active.button,.ui.green.buttons .button:hover{background-color:#58cb73;color:#FFF}.ui.green.button:active,.ui.green.buttons .button:active{background-color:#4CB164;color:#FFF}.ui.red.button,.ui.red.buttons .button{background-color:#D95C5C;color:#FFF}.ui.red.button.active,.ui.red.button:hover,.ui.red.buttons .active.button,.ui.red.buttons .button:hover{background-color:#E75859;color:#FFF}.ui.red.button:active,.ui.red.buttons .button:active{background-color:#D24B4C;color:#FFF}.ui.orange.button,.ui.orange.buttons .button{background-color:#E96633;color:#FFF}.ui.orange.button.active,.ui.orange.button:hover,.ui.orange.buttons .active.button,.ui.orange.buttons .button:hover{background-color:#FF7038;color:#FFF}.ui.orange.button:active,.ui.orange.buttons .button:active{background-color:#DA683B;color:#FFF}.ui.blue.button,.ui.blue.buttons .button{background-color:#6ECFF5;color:#FFF}.ui.blue.button.active,.ui.blue.button:hover,.ui.blue.buttons .active.button,.ui.blue.buttons .button:hover{background-color:#1AB8F3;color:#FFF}.ui.blue.button:active,.ui.blue.buttons .button:active{background-color:#0AA5DF;color:#FFF}.ui.purple.button,.ui.purple.buttons .button{background-color:#564F8A;color:#FFF}.ui.purple.button.active,.ui.purple.button:hover,.ui.purple.buttons .active.button,.ui.purple.buttons .button:hover{background-color:#3E3773;color:#FFF}.ui.purple.button:active,.ui.purple.buttons .button:active{background-color:#2E2860;color:#FFF}.ui.teal.button,.ui.teal.buttons .button{background-color:#00B5AD;color:#FFF}.ui.teal.button.active,.ui.teal.button:hover,.ui.teal.buttons .active.button,.ui.teal.buttons .button:hover{background-color:#009A93;color:#FFF}.ui.teal.button:active,.ui.teal.buttons .button:active{background-color:#00847E;color:#FFF}.ui.positive.button,.ui.positive.buttons .button{background-color:#5BBD72!important;color:#FFF}.ui.positive.button.active,.ui.positive.button:hover,.ui.positive.buttons .active.button,.ui.positive.buttons .button:hover{background-color:#58CB73!important;color:#FFF}.ui.positive.button:active,.ui.positive.buttons .button:active{background-color:#4CB164!important;color:#FFF}.ui.negative.button,.ui.negative.buttons .button{background-color:#D95C5C!important;color:#FFF}.ui.negative.button.active,.ui.negative.button:hover,.ui.negative.buttons .active.button,.ui.negative.buttons .button:hover{background-color:#E75859!important;color:#FFF}.ui.negative.button:active,.ui.negative.buttons .button:active{background-color:#D24B4C!important;color:#FFF}.ui.buttons{display:inline-block;vertical-align:middle}.ui.buttons:after{content:\".\";display:block;height:0;clear:both;visibility:hidden}.ui.buttons .button:first-child{border-left:none}.ui.buttons .button{float:left;border-radius:0}.ui.buttons .button:first-child{margin-left:0;border-top-left-radius:.25em;border-bottom-left-radius:.25em}.ui.buttons .button:last-child{border-top-right-radius:.25em;border-bottom-right-radius:.25em}.ui.vertical.buttons{display:inline-block}.ui.vertical.buttons .button{display:block;float:none;-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.1) inset;box-shadow:0 0 0 1px rgba(0,0,0,.1) inset}.ui.vertical.buttons .button:first-child,.ui.vertical.buttons .huge.button:first-child,.ui.vertical.buttons .massive.button:first-child,.ui.vertical.buttons .mini.button:first-child,.ui.vertical.buttons .small.button:first-child,.ui.vertical.buttons .tiny.button:first-child{margin-top:0;border-radius:.25em .25em 0 0}.ui.vertical.buttons .button:last-child,.ui.vertical.buttons .gigantic.button:last-child,.ui.vertical.buttons .huge.button:last-child,.ui.vertical.buttons .massive.button:last-child,.ui.vertical.buttons .mini.button:last-child,.ui.vertical.buttons .small.button:last-child,.ui.vertical.buttons .tiny.button:last-child{border-radius:0 0 .25em .25em}.ui.divider{margin:1rem 0;border-top:1px solid rgba(0,0,0,.1);border-bottom:1px solid rgba(255,255,255,.8);line-height:1;height:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent}.ui.horizontal.divider,.ui.vertical.divider{border:none;background-color:transparent;font-size:.875rem;font-weight:700;text-align:center;text-transform:uppercase;color:rgba(0,0,0,.8)}.ui.vertical.divider{position:absolute;z-index:2;top:50%;left:50%;margin:0 0 0 -3%;width:6%;height:50%;line-height:0;padding:0}.ui.vertical.divider:after,.ui.vertical.divider:before{position:absolute;left:50%;content:\" \";z-index:3;border-left:1px solid rgba(0,0,0,.1);border-right:1px solid rgba(255,255,255,.8);width:0;height:80%}.ui.vertical.divider:before{top:-100%}.ui.vertical.divider:after{top:auto;bottom:0}.ui.horizontal.divider{position:relative;top:0;left:0;margin:1rem 1.5rem;height:auto;padding:0;line-height:1}.ui.horizontal.divider:after,.ui.horizontal.divider:before{position:absolute;content:\" \";z-index:3;width:50%;top:50%;height:0;border-top:1px solid rgba(0,0,0,.1);border-bottom:1px solid rgba(255,255,255,.8)}.ui.horizontal.divider:before{left:0;margin-left:-1.5rem}.ui.horizontal.divider:after{left:auto;right:0;margin-right:-1.5rem}.ui.divider>.icon{margin:0;font-size:1rem;vertical-align:middle}.ui.divider.inverted{color:#fff}.ui.horizontal.inverted.divider,.ui.vertical.inverted.divider{color:rgba(255,255,255,.9)}.ui.divider.inverted,.ui.divider.inverted:after,.ui.divider.inverted:before{border-top-color:rgba(0,0,0,.15);border-bottom-color:rgba(255,255,255,.15);border-left-color:rgba(0,0,0,.15);border-right-color:rgba(255,255,255,.15)}.ui.fitted.divider{margin:0}.ui.clearing.divider{clear:both}.ui.section.divider{margin-top:2rem;margin-bottom:2rem}.ui.header{border:none;margin:1em 0 1rem;padding:0;font-size:1.33em;font-weight:700;line-height:1.33}.ui.header .sub.header{font-size:1rem;font-weight:400;margin:0;padding:0;line-height:1.2;color:rgba(0,0,0,.5)}.ui.header .icon{display:table-cell;vertical-align:middle;padding-right:.5em}.ui.header .icon:only-child{display:inline-block;vertical-align:baseline}.ui.header .content{display:inline-block;vertical-align:top}.ui.header .icon+.content{padding-left:.5em;display:table-cell}.ui.header:first-child{margin-top:0}.ui.header:last-child{margin-bottom:0}.ui.header+p{margin-top:0}h1.ui.header{min-height:1rem;line-height:1.33;font-size:2rem}h2.ui.header{line-height:1.33;font-size:1.75rem}h3.ui.header{line-height:1.33;font-size:1.33rem}h4.ui.header{line-height:1.33;font-size:1.1rem}h5.ui.header{line-height:1.2;font-size:1rem}.ui.huge.header{min-height:1em;font-size:2em}.ui.large.header{font-size:1.75em}.ui.medium.header{font-size:1.33em}.ui.small.header{font-size:1.1em}.ui.tiny.header{font-size:1em}.ui.icon.header{display:inline-block;text-align:center}.ui.icon.header .icon{float:none;display:block;font-size:3em;margin:0 auto .2em;padding:0}.ui.icon.header .content{display:block}.ui.icon.header .circular.icon,.ui.icon.header .square.icon{font-size:2em}.ui.block.icon.header .icon{margin-bottom:0}.ui.icon.header.aligned{margin-left:auto;margin-right:auto;display:block}.ui.disabled.header{opacity:.5}.ui.blue.header{color:#6ECFF5!important}.ui.black.header{color:#5C6166!important}.ui.green.header{color:#A1CF64!important}.ui.red.header{color:#D95C5C!important}.ui.purple.header{color:#564F8A!important}.ui.teal.header{color:#00B5AD!important}.ui.blue.dividing.header{border-bottom:3px solid #6ECFF5}.ui.black.dividing.header{border-bottom:3px solid #5C6166}.ui.green.dividing.header{border-bottom:3px solid #A1CF64}.ui.red.dividing.header{border-bottom:3px solid #D95C5C}.ui.purple.dividing.header{border-bottom:3px solid #564F8A}.ui.teal.dividing.header{border-bottom:3px solid #00B5AD}.ui.inverted.header{color:#FFF}.ui.inverted.header .sub.header{color:rgba(255,255,255,.85)}.ui.inverted.black.header{background-color:#5C6166!important;color:#FFF!important}.ui.inverted.blue.header{background-color:#6ECFF5!important;color:#FFF!important}.ui.inverted.green.header{background-color:#A1CF64!important;color:#FFF!important}.ui.inverted.red.header{background-color:#D95C5C!important;color:#FFF!important}.ui.inverted.purple.header{background-color:#564F8A!important;color:#FFF!important}.ui.inverted.teal.header{background-color:#00B5AD!important;color:#FFF!important}.ui.inverted.block.header{border-bottom:none}.ui.left.aligned.header{text-align:left}.ui.right.aligned.header{text-align:right}.ui.center.aligned.header{text-align:center}.ui.justified.header{text-align:justify}.ui.justified.header:after{display:inline-block;content:'';width:100%}.ui.floated.header,.ui.left.floated.header{float:left;margin-top:0;margin-right:.5em}.ui.right.floated.header{float:right;margin-top:0;margin-left:.5em}.ui.fitted.header{padding:0}.ui.dividing.header{padding-bottom:.2rem;border-bottom:1px solid rgba(0,0,0,.1)}.ui.dividing.header .sub.header{padding-bottom:.5em}.ui.dividing.header .icon{margin-bottom:.2em}.ui.block.header{background-color:rgba(0,0,0,.05);padding:.5em 1em}.ui.attached.header{background-color:#E0E0E0;padding:.5em 1rem;-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.1);box-shadow:0 0 0 1px rgba(0,0,0,.1)}.ui.top.attached.header{margin-bottom:0;border-radius:.3125em .3125em 0 0}.ui.bottom.attached.header{margin-top:0;border-radius:0 0 .3125em .3125em}/*!\n *  Font Awesome 3.2.1\n *  the iconic font designed for Bootstrap\n *  ------------------------------------------------------------------------------\n *  The full suite of pictographic icons, examples, and documentation can be\n *  found at http://fon.io.  Stay up to date on Twitter at\n *  http://twitter.com/fon.\n *\n *  License\n *  ------------------------------------------------------------------------------\n *  - The Font Awesome font is licensed under SIL OFL 1.1 -\n *    http://scripts.sil.org/OFL\n\n/*******************************\n             Icon\n*******************************/@font-face{font-family:Icons;src:url(/static/5ae23ad29b67289a1375d2043e289c52.eot);src:url(/static/5ae23ad29b67289a1375d2043e289c52.eot?#iefix) format('embedded-opentype'),url(/static/f99a231ed57ee113b50b1c3e9f9fcdc3.svg#icons) format('svg'),url(/static/b683029bafe0305ac2234038a03e1541.woff) format('woff'),url(/static/8cca2f02b0af2da365ff4d1755f29146.ttf) format('truetype');font-style:normal;font-weight:400;font-variant:normal;text-decoration:inherit;text-transform:none}i.icon{display:inline-block;opacity:.75;margin:0 .25em 0 0;width:1.23em;height:1em;font-family:Icons;font-style:normal;line-height:1;font-weight:400;text-decoration:inherit;text-align:center;speak:none;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}i.icon.left:before{content:\"\\f060\"}i.icon.right:before{content:\"\\f061\"}i.icon.add.sign.box:before{content:\"\\f0fe\"}i.icon.add.sign:before{content:\"\\f055\"}i.icon.add:before{content:\"\\f067\"}i.icon.adjust:before{content:\"\\f042\"}i.icon.adn:before{content:\"\\f170\"}i.icon.align.center:before{content:\"\\f037\"}i.icon.align.justify:before{content:\"\\f039\"}i.icon.align.left:before{content:\"\\f036\"}i.icon.align.right:before{content:\"\\f038\"}i.icon.ambulance:before{content:\"\\f0f9\"}i.icon.anchor:before{content:\"\\f13d\"}i.icon.android:before{content:\"\\f17b\"}i.icon.angle.down:before{content:\"\\f107\"}i.icon.angle.left:before{content:\"\\f104\"}i.icon.angle.right:before{content:\"\\f105\"}i.icon.angle.up:before{content:\"\\f106\"}i.icon.apple:before{content:\"\\f179\"}i.icon.archive:before{content:\"\\f187\"}i.icon.arrow.down:before{content:\"\\f078\"}i.icon.arrow.left:before{content:\"\\f053\"}i.icon.arrow.right:before{content:\"\\f054\"}i.icon.arrow.sign.down:before{content:\"\\f13a\"}i.icon.arrow.sign.left:before{content:\"\\f137\"}i.icon.arrow.sign.right:before{content:\"\\f138\"}i.icon.arrow.sign.up:before{content:\"\\f139\"}i.icon.arrow.up:before{content:\"\\f077\"}i.icon.asterisk:before{content:\"\\f069\"}i.icon.attachment:before{content:\"\\f0c6\"}i.icon.attention:before{content:\"\\f06a\"}i.icon.backward:before{content:\"\\f04a\"}i.icon.ban.circle:before{content:\"\\f05e\"}i.icon.bar.chart:before{content:\"\\f080\"}i.icon.barcode:before{content:\"\\f02a\"}i.icon.beer:before{content:\"\\f0fc\"}i.icon.bell.outline:before{content:\"\\f0a2\"}i.icon.bell:before{content:\"\\f0f3\"}i.icon.bitbucket.sign:before{content:\"\\f172\"}i.icon.bitbucket:before{content:\"\\f171\"}i.icon.bitcoin:before{content:\"\\f15a\"}i.icon.bold:before{content:\"\\f032\"}i.icon.bolt:before{content:\"\\f0e7\"}i.icon.book:before{content:\"\\f02d\"}i.icon.bookmark.empty:before{content:\"\\f097\"}i.icon.bookmark:before{content:\"\\f02e\"}i.icon.box.arrow.down:before{content:\"\\f150\"}i.icon.box.arrow.right:before{content:\"\\f152\"}i.icon.box.arrow.up:before{content:\"\\f151\"}i.icon.briefcase:before{content:\"\\f0b1\"}i.icon.browser:before{content:\"\\f022\"}i.icon.bug:before{content:\"\\f188\"}i.icon.building:before{content:\"\\f0f7\"}i.icon.bullhorn:before{content:\"\\f0a1\"}i.icon.bullseye:before{content:\"\\f140\"}i.icon.calendar.empty:before{content:\"\\f133\"}i.icon.calendar:before{content:\"\\f073\"}i.icon.camera.retro:before{content:\"\\f083\"}i.icon.camera:before{content:\"\\f030\"}i.icon.triangle.down:before{content:\"\\f0d7\"}i.icon.triangle.left:before{content:\"\\f0d9\"}i.icon.triangle.right:before{content:\"\\f0da\"}i.icon.triangle.up:before{content:\"\\f0d8\"}i.icon.cart:before{content:\"\\f07a\"}i.icon.certificate:before{content:\"\\f0a3\"}i.icon.chat.outline:before{content:\"\\f0e6\"}i.icon.chat:before{content:\"\\f086\"}i.icon.checkbox.empty:before{content:\"\\f096\"}i.icon.checkbox.minus:before{content:\"\\f147\"}i.icon.checked.checkbox:before{content:\"\\f046\"}i.icon.checkmark.sign:before{content:\"\\f14a\"}i.icon.checkmark:before{content:\"\\f00c\"}i.icon.circle.blank:before{content:\"\\f10c\"}i.icon.circle.down:before{content:\"\\f0ab\"}i.icon.circle.left:before{content:\"\\f0a8\"}i.icon.circle.right:before{content:\"\\f0a9\"}i.icon.circle.up:before{content:\"\\f0aa\"}i.icon.circle:before{content:\"\\f111\"}i.icon.cloud.download:before{content:\"\\f0ed\"}i.icon.cloud.upload:before{content:\"\\f0ee\"}i.icon.cloud:before{content:\"\\f0c2\"}i.icon.code.fork:before{content:\"\\f126\"}i.icon.code:before{content:\"\\f121\"}i.icon.coffee:before{content:\"\\f0f4\"}i.icon.collapse:before{content:\"\\f117\"}i.icon.comment.outline:before{content:\"\\f0e5\"}i.icon.comment:before{content:\"\\f075\"}i.icon.copy:before{content:\"\\f0c5\"}i.icon.crop:before{content:\"\\f125\"}i.icon.css3:before{content:\"\\f13c\"}i.icon.cut:before{content:\"\\f0c4\"}i.icon.dashboard:before{content:\"\\f0e4\"}i.icon.desktop:before{content:\"\\f108\"}i.icon.doctor:before{content:\"\\f0f0\"}i.icon.dollar:before{content:\"\\f155\"}i.icon.double.angle.down:before{content:\"\\f103\"}i.icon.double.angle.left:before{content:\"\\f100\"}i.icon.double.angle.right:before{content:\"\\f101\"}i.icon.double.angle.up:before{content:\"\\f102\"}i.icon.down:before{content:\"\\f063\"}i.icon.download.disk:before{content:\"\\f019\"}i.icon.download:before{content:\"\\f01a\"}i.icon.dribbble:before{content:\"\\f17d\"}i.icon.dropbox:before{content:\"\\f16b\"}i.icon.edit.sign:before{content:\"\\f14b\"}i.icon.edit:before{content:\"\\f044\"}i.icon.eject:before{content:\"\\f052\"}i.icon.ellipsis.horizontal:before{content:\"\\f141\"}i.icon.ellipsis.vertical:before{content:\"\\f142\"}i.icon.eraser:before{content:\"\\f12d\"}i.icon.euro:before{content:\"\\f153\"}i.icon.exchange:before{content:\"\\f0ec\"}i.icon.exclamation:before{content:\"\\f12a\"}i.icon.expand:before{content:\"\\f116\"}i.icon.external.url.sign:before{content:\"\\f14c\"}i.icon.external.url:before{content:\"\\f08e\"}i.icon.facebook.sign:before{content:\"\\f082\"}i.icon.facebook:before{content:\"\\f09a\"}i.icon.facetime.video:before{content:\"\\f03d\"}i.icon.fast.backward:before{content:\"\\f049\"}i.icon.fast.forward:before{content:\"\\f050\"}i.icon.female:before{content:\"\\f182\"}i.icon.fighter.jet:before{content:\"\\f0fb\"}i.icon.file.outline:before{content:\"\\f016\"}i.icon.file.text.outline:before{content:\"\\f0f6\"}i.icon.file.text:before{content:\"\\f15c\"}i.icon.file:before{content:\"\\f15b\"}i.icon.filter:before{content:\"\\f0b0\"}i.icon.fire.extinguisher:before{content:\"\\f134\"}i.icon.fire:before{content:\"\\f06d\"}i.icon.flag.checkered:before{content:\"\\f11e\"}i.icon.flag.empty:before{content:\"\\f11d\"}i.icon.flag:before{content:\"\\f024\"}i.icon.flickr:before{content:\"\\f16e\"}i.icon.folder.open.outline:before{content:\"\\f115\"}i.icon.folder.open:before{content:\"\\f07c\"}i.icon.folder.outline:before{content:\"\\f114\"}i.icon.folder:before{content:\"\\f07b\"}i.icon.font:before{content:\"\\f031\"}i.icon.food:before{content:\"\\f0f5\"}i.icon.forward.mail:before{content:\"\\f064\"}i.icon.forward:before{content:\"\\f04e\"}i.icon.foursquare:before{content:\"\\f180\"}i.icon.frown:before{content:\"\\f119\"}i.icon.fullscreen:before{content:\"\\f0b2\"}i.icon.gamepad:before{content:\"\\f11b\"}i.icon.gift:before{content:\"\\f06b\"}i.icon.github.alternate:before{content:\"\\f09b\"}i.icon.github.sign:before{content:\"\\f092\"}i.icon.github:before{content:\"\\f113\"}i.icon.gittip:before{content:\"\\f184\"}i.icon.glass:before{content:\"\\f000\"}i.icon.globe:before{content:\"\\f0ac\"}i.icon.google.plus.sign:before{content:\"\\f0d4\"}i.icon.google.plus:before{content:\"\\f0d5\"}i.icon.h.sign:before{content:\"\\f0fd\"}i.icon.hand.down:before{content:\"\\f0a7\"}i.icon.hand.left:before{content:\"\\f0a5\"}i.icon.hand.right:before{content:\"\\f0a4\"}i.icon.hand.up:before{content:\"\\f0a6\"}i.icon.hdd:before{content:\"\\f0a0\"}i.icon.headphones:before{content:\"\\f025\"}i.icon.heart.empty:before{content:\"\\f08a\"}i.icon.heart:before{content:\"\\f004\"}i.icon.help:before{content:\"\\f059\"}i.icon.hide:before{content:\"\\f070\"}i.icon.home:before{content:\"\\f015\"}i.icon.hospital:before{content:\"\\f0f8\"}i.icon.html5:before{content:\"\\f13b\"}i.icon.inbox:before{content:\"\\f01c\"}i.icon.indent.left:before{content:\"\\f03b\"}i.icon.indent.right:before{content:\"\\f03c\"}i.icon.info.letter:before{content:\"\\f129\"}i.icon.info:before{content:\"\\f05a\"}i.icon.instagram:before{content:\"\\f16d\"}i.icon.italic:before{content:\"\\f033\"}i.icon.key:before{content:\"\\f084\"}i.icon.keyboard:before{content:\"\\f11c\"}i.icon.lab:before{content:\"\\f0c3\"}i.icon.laptop:before{content:\"\\f109\"}i.icon.layout.block:before{content:\"\\f009\"}i.icon.layout.column:before{content:\"\\f0db\"}i.icon.layout.grid:before{content:\"\\f00a\"}i.icon.layout.list:before{content:\"\\f00b\"}i.icon.leaf:before{content:\"\\f06c\"}i.icon.legal:before{content:\"\\f0e3\"}i.icon.lemon:before{content:\"\\f094\"}i.icon.level.down:before{content:\"\\f149\"}i.icon.level.up:before{content:\"\\f148\"}i.icon.lightbulb:before{content:\"\\f0eb\"}i.icon.linkedin.sign:before{content:\"\\f08c\"}i.icon.linkedin:before{content:\"\\f0e1\"}i.icon.linux:before{content:\"\\f17c\"}i.icon.list.ordered:before{content:\"\\f0cb\"}i.icon.list.unordered:before{content:\"\\f0ca\"}i.icon.list:before{content:\"\\f03a\"}i.icon.loading:before{content:\"\\f110\"}i.icon.location:before{content:\"\\f124\"}i.icon.lock:before{content:\"\\f023\"}i.icon.long.arrow.down:before{content:\"\\f175\"}i.icon.long.arrow.left:before{content:\"\\f177\"}i.icon.long.arrow.right:before{content:\"\\f178\"}i.icon.long.arrow.up:before{content:\"\\f176\"}i.icon.magic:before{content:\"\\f0d0\"}i.icon.magnet:before{content:\"\\f076\"}i.icon.mail.outline:before{content:\"\\f003\"}i.icon.mail.reply:before{content:\"\\f112\"}i.icon.mail:before{content:\"\\f0e0\"}i.icon.male:before{content:\"\\f183\"}i.icon.map.marker:before{content:\"\\f041\"}i.icon.map:before{content:\"\\f14e\"}i.icon.maxcdn:before{content:\"\\f136\"}i.icon.medkit:before{content:\"\\f0fa\"}i.icon.meh:before{content:\"\\f11a\"}i.icon.minus.sign.alternate:before{content:\"\\f146\"}i.icon.minus.sign:before{content:\"\\f056\"}i.icon.minus:before{content:\"\\f068\"}i.icon.mobile:before{content:\"\\f10b\"}i.icon.money:before{content:\"\\f0d6\"}i.icon.moon:before{content:\"\\f186\"}i.icon.move:before{content:\"\\f047\"}i.icon.music:before{content:\"\\f001\"}i.icon.mute:before{content:\"\\f131\"}i.icon.off:before{content:\"\\f011\"}i.icon.ok.circle:before{content:\"\\f05d\"}i.icon.ok.sign:before{content:\"\\f058\"}i.icon.paste:before{content:\"\\f0ea\"}i.icon.pause:before{content:\"\\f04c\"}i.icon.payment:before{content:\"\\f09d\"}i.icon.pencil:before{content:\"\\f040\"}i.icon.phone.sign:before{content:\"\\f098\"}i.icon.phone:before{content:\"\\f095\"}i.icon.photo:before{content:\"\\f03e\"}i.icon.pin:before{content:\"\\f08d\"}i.icon.pinterest.sign:before{content:\"\\f0d3\"}i.icon.pinterest:before{content:\"\\f0d2\"}i.icon.plane:before{content:\"\\f072\"}i.icon.play.circle:before{content:\"\\f01d\"}i.icon.play.sign:before{content:\"\\f144\"}i.icon.play:before{content:\"\\f04b\"}i.icon.pound:before{content:\"\\f154\"}i.icon.print:before{content:\"\\f02f\"}i.icon.puzzle.piece:before{content:\"\\f12e\"}i.icon.qr.code:before{content:\"\\f029\"}i.icon.question:before{content:\"\\f128\"}i.icon.quote.left:before{content:\"\\f10d\"}i.icon.quote.right:before{content:\"\\f10e\"}i.icon.refresh:before{content:\"\\f021\"}i.icon.remove.circle:before{content:\"\\f05c\"}i.icon.remove.sign:before{content:\"\\f057\"}i.icon.remove:before{content:\"\\f00d\"}i.icon.renren:before{content:\"\\f18b\"}i.icon.reorder:before{content:\"\\f0c9\"}i.icon.repeat:before{content:\"\\f01e\"}i.icon.reply.all.mail:before{content:\"\\f122\"}i.icon.resize.full:before{content:\"\\f065\"}i.icon.resize.horizontal:before{content:\"\\f07e\"}i.icon.resize.small:before{content:\"\\f066\"}i.icon.resize.vertical:before{content:\"\\f07d\"}i.icon.retweet:before{content:\"\\f079\"}i.icon.road:before{content:\"\\f018\"}i.icon.rocket:before{content:\"\\f135\"}i.icon.rss.sign:before{content:\"\\f143\"}i.icon.rss:before{content:\"\\f09e\"}i.icon.rupee:before{content:\"\\f156\"}i.icon.save:before{content:\"\\f0c7\"}i.icon.screenshot:before{content:\"\\f05b\"}i.icon.search:before{content:\"\\f002\"}i.icon.setting:before{content:\"\\f013\"}i.icon.settings:before{content:\"\\f085\"}i.icon.share.sign:before{content:\"\\f14d\"}i.icon.share:before{content:\"\\f045\"}i.icon.shield:before{content:\"\\f132\"}i.icon.shuffle:before{content:\"\\f074\"}i.icon.sign.in:before{content:\"\\f090\"}i.icon.sign.out:before{content:\"\\f08b\"}i.icon.sign:before{content:\"\\f0c8\"}i.icon.signal:before{content:\"\\f012\"}i.icon.sitemap:before{content:\"\\f0e8\"}i.icon.skype:before{content:\"\\f17e\"}i.icon.smile:before{content:\"\\f118\"}i.icon.sort.ascending:before{content:\"\\f0de\"}i.icon.sort.descending:before{content:\"\\f0dd\"}i.icon.sort.alphabet.descending:before{content:\"\\f15e\"}i.icon.sort.alphabet:before{content:\"\\f15d\"}i.icon.sort.attributes.descending:before{content:\"\\f161\"}i.icon.sort.attributes:before{content:\"\\f160\"}i.icon.sort.order.descending:before{content:\"\\f163\"}i.icon.sort.order:before{content:\"\\f162\"}i.icon.sort:before{content:\"\\f0dc\"}i.icon.stackexchange:before{content:\"\\f16c\"}i.icon.star.empty:before{content:\"\\f006\"}i.icon.star.half.empty:before{content:\"\\f123\"}i.icon.star.half.full:before,i.icon.star.half:before{content:\"\\f089\"}i.icon.star:before{content:\"\\f005\"}i.icon.step.backward:before{content:\"\\f048\"}i.icon.step.forward:before{content:\"\\f051\"}i.icon.stethoscope:before{content:\"\\f0f1\"}i.icon.stop:before{content:\"\\f04d\"}i.icon.strikethrough:before{content:\"\\f0cc\"}i.icon.subscript:before{content:\"\\f12c\"}i.icon.suitcase:before{content:\"\\f0f2\"}i.icon.sun:before{content:\"\\f185\"}i.icon.superscript:before{content:\"\\f12b\"}i.icon.table:before{content:\"\\f0ce\"}i.icon.tablet:before{content:\"\\f10a\"}i.icon.tag:before{content:\"\\f02b\"}i.icon.tags:before{content:\"\\f02c\"}i.icon.tasks:before{content:\"\\f0ae\"}i.icon.terminal:before{content:\"\\f120\"}i.icon.text.height:before{content:\"\\f034\"}i.icon.text.width:before{content:\"\\f035\"}i.icon.thumbs.down.outline:before{content:\"\\f088\"}i.icon.thumbs.down:before{content:\"\\f165\"}i.icon.thumbs.up.outline:before{content:\"\\f087\"}i.icon.thumbs.up:before{content:\"\\f164\"}i.icon.ticket:before{content:\"\\f145\"}i.icon.time:before{content:\"\\f017\"}i.icon.tint:before{content:\"\\f043\"}i.icon.trash:before{content:\"\\f014\"}i.icon.trello:before{content:\"\\f181\"}i.icon.trophy:before{content:\"\\f091\"}i.icon.truck:before{content:\"\\f0d1\"}i.icon.tumblr.sign:before{content:\"\\f174\"}i.icon.tumblr:before{content:\"\\f173\"}i.icon.twitter.sign:before{content:\"\\f081\"}i.icon.twitter:before{content:\"\\f099\"}i.icon.umbrella:before{content:\"\\f0e9\"}i.icon.underline:before{content:\"\\f0cd\"}i.icon.undo:before{content:\"\\f0e2\"}i.icon.unhide:before{content:\"\\f06e\"}i.icon.unlink:before{content:\"\\f127\"}i.icon.unlock.alternate:before{content:\"\\f13e\"}i.icon.unlock:before{content:\"\\f09c\"}i.icon.unmute:before{content:\"\\f130\"}i.icon.up:before{content:\"\\f062\"}i.icon.upload.disk:before{content:\"\\f093\"}i.icon.upload:before{content:\"\\f01b\"}i.icon.url:before{content:\"\\f0c1\"}i.icon.user:before{content:\"\\f007\"}i.icon.users:before{content:\"\\f0c0\"}i.icon.video:before{content:\"\\f008\"}i.icon.vk:before{content:\"\\f189\"}i.icon.volume.down:before{content:\"\\f027\"}i.icon.volume.off:before{content:\"\\f026\"}i.icon.volume.up:before{content:\"\\f028\"}i.icon.warning:before{content:\"\\f071\"}i.icon.weibo:before{content:\"\\f18a\"}i.icon.windows:before{content:\"\\f17a\"}i.icon.won:before{content:\"\\f159\"}i.icon.wrench:before{content:\"\\f0ad\"}i.icon.xing.sign:before{content:\"\\f169\"}i.icon.xing:before{content:\"\\f168\"}i.icon.yen:before{content:\"\\f157\"}i.icon.youtube.play:before{content:\"\\f16a\"}i.icon.youtube.sign:before{content:\"\\f166\"}i.icon.youtube:before{content:\"\\f167\"}i.icon.yuan:before{content:\"\\f158\"}i.icon.zoom.in:before{content:\"\\f00e\"}i.icon.zoom.out:before{content:\"\\f010\"}i.icon.check:before{content:\"\\f00c\"}i.icon.close:before,i.icon.delete:before{content:\"\\f00d\"}i.icon.like:before{content:\"\\f004\"}i.icon.plus:before{content:\"\\f067\"}i.icon.signup:before{content:\"\\f044\"}i.icon.star{width:auto;margin:0}i.icon.left{width:auto;margin:0 .5em 0 0}i.icon.right,i.icon.search{width:auto;margin:0 0 0 .5em}i.icon.loading{-webkit-animation:icon-loading 2s linear infinite;-moz-animation:icon-loading 2s linear infinite;-ms-animation:icon-loading 2s linear infinite;animation:icon-loading 2s linear infinite}@keyframes icon-loading{from{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg)}}@-moz-keyframes icon-loading{from{-moz-transform:rotate(0deg);transform:rotate(0deg)}to{-moz-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes icon-loading{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-ms-keyframes icon-loading{from{-ms-transform:rotate(0deg);transform:rotate(0deg)}to{-ms-transform:rotate(360deg);transform:rotate(360deg)}}i.emphasized.icon,i.icon.active,i.icon.hover{opacity:1}i.icon.disabled{opacity:.3}i.link.icon{cursor:pointer;opacity:.7;-webkit-transition:opacity .3s ease-out;-moz-transition:opacity .3s ease-out;transition:opacity .3s ease-out}i.link.icon:hover{opacity:1!important}i.circular.icon{border-radius:500em!important;padding:.5em .35em!important;-webkit-box-shadow:0 0 0 .1em rgba(0,0,0,.1) inset;box-shadow:0 0 0 .1em rgba(0,0,0,.1) inset;line-height:1!important;width:2em!important;height:2em!important}i.circular.inverted.icon{border:none;-webkit-box-shadow:none;box-shadow:none}i.flipped.icon,i.horizontally.flipped.icon{-webkit-transform:scale(-1,1);-moz-transform:scale(-1,1);-ms-transform:scale(-1,1);transform:scale(-1,1)}i.vertically.flipped.icon{-webkit-transform:scale(1,-1);-moz-transform:scale(1,-1);-ms-transform:scale(1,-1);transform:scale(1,-1)}i.clockwise.rotated.icon,i.right.rotated.icon,i.rotated.icon{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}i.counterclockwise.rotated.icon,i.left.rotated.icon{-webkit-transform:rotate(-90deg);-moz-transform:rotate(-90deg);-ms-transform:rotate(-90deg);transform:rotate(-90deg)}i.square.icon{width:2em;height:2em;padding:.5em .35em!important;-webkit-box-shadow:0 0 0 .1em rgba(0,0,0,.1) inset;box-shadow:0 0 0 .1em rgba(0,0,0,.1) inset;vertical-align:baseline}i.square.inverted.icon{border:none;-webkit-box-shadow:none;box-shadow:none}i.inverted.icon{background-color:#222;color:#FFF;-moz-osx-font-smoothing:grayscale}i.blue.icon{color:#6ECFF5!important}i.black.icon{color:#5C6166!important}i.green.icon{color:#A1CF64!important}i.red.icon{color:#D95C5C!important}i.purple.icon{color:#564F8A!important}i.orange.icon{color:#F05940!important}i.teal.icon{color:#00B5AD!important}i.inverted.black.icon{background-color:#5C6166!important;color:#FFF!important}i.inverted.blue.icon{background-color:#6ECFF5!important;color:#FFF!important}i.inverted.green.icon{background-color:#A1CF64!important;color:#FFF!important}i.inverted.red.icon{background-color:#D95C5C!important;color:#FFF!important}i.inverted.purple.icon{background-color:#564F8A!important;color:#FFF!important}i.inverted.orange.icon{background-color:#F05940!important;color:#FFF!important}i.inverted.teal.icon{background-color:#00B5AD!important;color:#FFF!important}i.small.icon{font-size:.875em}i.icon{font-size:1em}i.large.icon{font-size:1.5em;vertical-align:middle}i.big.icon{font-size:2em;vertical-align:middle}i.huge.icon{font-size:4em;vertical-align:middle}i.massive.icon{font-size:8em;vertical-align:middle}.ui.image{position:relative;display:inline-block;vertical-align:middle;max-width:100%;background-color:rgba(0,0,0,.05)}img.ui.image{display:block;background:0 0}.ui.image img{display:block;max-width:100%;height:auto}.ui.disabled.image{cursor:default;opacity:.3}.ui.rounded.image,.ui.rounded.image img,.ui.rounded.images .image,.ui.rounded.images img{border-radius:.3125em}.ui.circular.image,.ui.circular.image img,.ui.circular.images .image,.ui.circular.images img{border-radius:500rem}.ui.fluid.image,.ui.fluid.image img,.ui.fluid.images,.ui.fluid.images img{display:block;width:100%}.ui.avatar.image,.ui.avatar.image img,.ui.avatar.images .image,.ui.avatar.images img{margin-right:.5em;display:inline-block;width:2em;height:2em;border-radius:500rem}.ui.floated.image,.ui.floated.images{float:left;margin-right:1em;margin-bottom:1em}.ui.right.floated.image,.ui.right.floated.images{float:right;margin-bottom:1em;margin-left:1em}.ui.tiny.image,.ui.tiny.images .image,.ui.tiny.images img{width:20px;font-size:.7rem}.ui.mini.image,.ui.mini.images .image,.ui.mini.images img{width:35px;font-size:.8rem}.ui.small.image,.ui.small.images .image,.ui.small.images img{width:80px;font-size:.9rem}.ui.medium.image,.ui.medium.images .image,.ui.medium.images img{width:300px;font-size:1rem}.ui.large.image,.ui.large.images .image,.ui.large.images img{width:450px;font-size:1.1rem}.ui.huge.image,.ui.huge.images .image,.ui.huge.images img{width:600px;font-size:1.2rem}.ui.images{font-size:0;margin:0 -.25rem}.ui.images .image,.ui.images img{display:inline-block;margin:0 .25em .5em}.ui.input{display:inline-block;position:relative;color:rgba(0,0,0,.7)}.ui.input input{width:100%;font-family:\"Helvetica Neue\",Helvetica,Arial;margin:0;padding:.65em 1em;font-size:1em;background-color:#FFF;border:1px solid rgba(0,0,0,.15);outline:0;color:rgba(0,0,0,.7);border-radius:.3125em;-webkit-transition:background-color .3s ease-out,-webkit-box-shadow .2s ease,border-color .2s ease;-moz-transition:background-color .3s ease-out,box-shadow .2s ease,border-color .2s ease;transition:background-color .3s ease-out,box-shadow .2s ease,border-color .2s ease;-webkit-tap-highlight-color:rgba(255,255,255,0);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.ui.input::-webkit-input-placeholder{color:#BBB}.ui.input::-moz-placeholder{color:#BBB}.ui.input input:active,.ui.input.down input{border-color:rgba(0,0,0,.3);background-color:#FAFAFA}.ui.loading.input>.icon{background:url(/static/ca279c55a51ab2641c4712a333633581.gif) 50% 50% no-repeat}.ui.loading.input>.icon:after,.ui.loading.input>.icon:before{display:none}.ui.input input:focus,.ui.input.focus input{border-color:rgba(0,0,0,.2);color:rgba(0,0,0,.85)}.ui.input input:focus input::-webkit-input-placeholder,.ui.input.focus input input::-webkit-input-placeholder{color:#AAA}.ui.input input:focus input::-moz-placeholder,.ui.input.focus input input::-moz-placeholder{color:#AAA}.ui.input.error input{background-color:snow;border-color:#E7BEBE;color:#D95C5C}.ui.input.error input ::-webkit-input-placeholder{color:rgba(255,80,80,.4)}.ui.input.error input ::-moz-placeholder{color:rgba(255,80,80,.4)}.ui.input.error input :focus::-webkit-input-placeholder{color:rgba(255,80,80,.7)}.ui.input.error input :focus::-moz-placeholder{color:rgba(255,80,80,.7)}.ui.transparent.input input{border:none;background-color:transparent}.ui.icon.input>.icon{cursor:default;position:absolute;opacity:.5;top:0;right:0;margin:0;width:2.6em;height:100%;padding-top:.82em;text-align:center;border-radius:0 .3125em .3125em 0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;-webkit-transition:opacity .3s ease-out;-moz-transition:opacity .3s ease-out;transition:opacity .3s ease-out}.ui.icon.input>.link.icon{cursor:pointer}.ui.icon.input input{padding-right:3em!important}.ui.icon.input>.circular.icon{top:.35em;right:.5em}.ui.left.icon.input>.icon{right:auto;left:1px;border-radius:.3125em 0 0 .3125em}.ui.left.icon.input>.circular.icon{right:auto;left:.5em}.ui.left.icon.input>input{padding-left:3em!important;padding-right:1.2em!important}.ui.icon.input>input:focus~.icon{opacity:1}.ui.labeled.input .corner.label{font-size:.7em;border-radius:0 .3125em}.ui.labeled.input .left.corner.label{border-radius:.3125em 0}.ui.labeled.input input{padding-right:2.5em!important}.ui.labeled.icon.input:not(.left)>input{padding-right:3.25em!important}.ui.labeled.icon.input:not(.left)>.icon{margin-right:1.25em}.ui.action.input{display:table}.ui.action.input>input{display:table-cell;border-top-right-radius:0!important;border-bottom-right-radius:0!important;border-right:none}.ui.action.input>.button,.ui.action.input>.buttons{display:table-cell;border-top-left-radius:0;border-bottom-left-radius:0;white-space:nowrap}.ui.action.input>.button>.icon,.ui.action.input>.buttons>.button>.icon{display:inline;vertical-align:top}.ui.fluid.action.input{display:table;width:100%}.ui.fluid.action.input>.button{width:.01%}.ui.fluid.input{display:block}.ui.mini.input{font-size:.8125em}.ui.small.input{font-size:.875em}.ui.input{font-size:1em}.ui.large.input{font-size:1.125em}.ui.big.input{font-size:1.25em}.ui.huge.input{font-size:1.375em}.ui.massive.input{font-size:1.5em}.ui.label{display:inline-block;vertical-align:middle;margin:-.25em .25em 0;background-color:#E8E8E8;border-color:#E8E8E8;padding:.5em .8em;color:rgba(0,0,0,.65);text-transform:uppercase;font-weight:400;border-radius:.325em;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;-webkit-transition:background .1s linear;-moz-transition:background .1s linear;transition:background .1s linear}.ui.label:first-child{margin-left:0}.ui.label:last-child{margin-right:0}a.ui.label{cursor:pointer}.ui.label a{cursor:pointer;color:inherit;opacity:.8;-webkit-transition:.2s opacity ease;-moz-transition:.2s opacity ease;transition:.2s opacity ease}.ui.label a:hover{opacity:1}.ui.label .detail{display:inline-block;margin-left:.5em;font-weight:700;opacity:.8}.ui.label .icon{width:auto}.ui.label .delete.icon{cursor:pointer;margin:0 0 0 .5em;opacity:.7;-webkit-transition:background .1s linear;-moz-transition:background .1s linear;transition:background .1s linear}.ui.label .delete.icon:hover{opacity:.99}.ui.segment>.attached.label:first-child+*{margin-top:2.5em}.ui.segment>.bottom.attached.label:first-child~:last-child{margin-top:0;margin-bottom:2.5em}.ui.image.label{width:auto!important;margin-top:0;margin-bottom:0;padding-top:.4em;padding-bottom:.4em;line-height:1.5em;vertical-align:baseline;text-transform:none;-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.1) inset;box-shadow:0 0 0 1px rgba(0,0,0,.1) inset}.ui.image.label img{display:inline-block;height:2.25em;margin:-.4em .8em -.4em -.8em;vertical-align:top;border-radius:.325em 0 0 .325em}.ui.label.disabled{opacity:.5}a.ui.label:hover,a.ui.labels .label:hover{background-color:#E0E0E0;border-color:#E0E0E0;color:rgba(0,0,0,.7)}.ui.labels a.label:hover:before,a.ui.label:hover:before{background-color:#E0E0E0;color:rgba(0,0,0,.7)}.ui.label.visible,.ui.labels.visible .label{display:inline-block!important}.ui.label.hidden,.ui.labels.hidden .label{display:none!important}.ui.tag.label,.ui.tag.labels .label{margin-left:1em;position:relative;padding:.33em 1.3em .33em 1.4em;border-radius:0 3px 3px 0}.ui.tag.label:before,.ui.tag.labels .label:before{position:absolute;top:.3em;left:.3em;content:'';margin-left:-1em;background-image:none;width:1.5em;height:1.5em;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);-webkit-transition:background .1s linear;-moz-transition:background .1s linear;transition:background .1s linear}.ui.tag.label:after,.ui.tag.labels .label:after{position:absolute;content:'';top:50%;left:-.25em;margin-top:-.3em;background-color:#FFF;width:.55em;height:.55em;-webkit-box-shadow:0 -1px 1px 0 rgba(0,0,0,.3);box-shadow:0 -1px 1px 0 rgba(0,0,0,.3);border-radius:100px}.ui.ribbon.label{position:relative;margin:0 .2em;left:-2rem;padding-left:2rem;border-radius:0 4px 4px 0;border-color:rgba(0,0,0,.15)}.ui.ribbon.label:after{position:absolute;content:\"\";top:100%;left:0;border-top:0 solid transparent;border-right-width:1em;border-right-color:inherit;border-right-style:solid;border-bottom:1em solid transparent;border-left:0 solid transparent;width:0;height:0}.ui.attached.label,.ui.top.attached.label{width:100%;position:absolute;margin:0;top:0;left:0;padding:.75em 1em;border-radius:4px 4px 0 0}.ui.bottom.attached.label{top:auto;bottom:0;border-radius:0 0 4px 4px}.ui.top.left.attached.label{width:auto;margin-top:0!important;border-radius:4px 0}.ui.top.right.attached.label{width:auto;left:auto;right:0;border-radius:0 4px}.ui.bottom.left.attached.label{width:auto;top:auto;bottom:0;border-radius:4px 0 0 4px}.ui.bottom.right.attached.label{top:auto;bottom:0;left:auto;right:0;width:auto;border-radius:0 4px}.ui.corner.label{background-color:transparent;position:absolute;top:0;right:0;z-index:10;margin:0;width:3em;height:3em;padding:0;text-align:center;-webkit-transition:color .2s ease;-moz-transition:color .2s ease;transition:color .2s ease}.ui.corner.label:after{position:absolute;content:\"\";right:0;top:0;z-index:-1;width:0;height:0;border-top:0 solid transparent;border-right:3em solid transparent;border-bottom:3em solid transparent;border-left:0 solid transparent;border-right-color:inherit;-webkit-transition:border-color .2s ease;-moz-transition:border-color .2s ease;transition:border-color .2s ease}.ui.corner.label .icon{font-size:.875em;margin:.5em 0 0 1.25em}.ui.corner.label .text{display:inline-block;font-weight:700;margin:.5em 0 0 1em;width:2.5em;font-size:.875em;text-align:center;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg)}.ui.input>.ui.corner.label,.ui.rounded.image>.ui.corner.label,.ui.segment>.ui.corner.label{overflow:hidden}.ui.segment>.ui.corner.label{top:-1px;right:-1px}.ui.segment>.ui.left.corner.label{right:auto;left:-1px}.ui.input>.ui.corner.label{top:1px;right:1px}.ui.input>.ui.right.corner.label{right:auto;left:1px}.ui.left.corner.label,.ui.left.corner.label:after{right:auto;left:0}.ui.left.corner.label:after{border-top:3em solid transparent;border-right:3em solid transparent;border-bottom:0 solid transparent;border-left:0 solid transparent;border-top-color:inherit}.ui.left.corner.label .icon{margin:.5em 0 0 -1em}.ui.left.corner.label .text{margin:.5em 0 0 -1em;-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);-ms-transform:rotate(-45deg);transform:rotate(-45deg)}.ui.corner.label:hover{background-color:transparent}.ui.fluid.labels>.label,.ui.label.fluid{width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.ui.inverted.label,.ui.inverted.labels .label{color:#FFF!important}.ui.black.label,.ui.black.labels .label{background-color:#5C6166!important;border-color:#5C6166!important;color:#FFF!important}.ui.black.label:before,.ui.black.labels .label:before,.ui.labels .black.label:before{background-color:#5C6166!important}a.ui.black.label:hover,a.ui.black.labels .label:hover{background-color:#333!important;border-color:#333!important}.ui.black.labels a.label:hover:before,.ui.labels a.black.label:hover:before,a.ui.black.label:hover:before{background-color:#333!important}.ui.black.corner.label,.ui.black.corner.label:hover{background-color:transparent!important}.ui.black.ribbon.label{border-color:#333!important}.ui.green.label,.ui.green.labels .label{background-color:#A1CF64!important;border-color:#A1CF64!important;color:#FFF!important}.ui.green.label:before,.ui.green.labels .label:before,.ui.labels .green.label:before{background-color:#A1CF64!important}a.ui.green.label:hover,a.ui.green.labels .label:hover{background-color:#89B84C!important;border-color:#89B84C!important}.ui.green.labels a.label:hover:before,.ui.labels a.green.label:hover:before,a.ui.green.label:hover:before{background-color:#89B84C!important}.ui.green.corner.label,.ui.green.corner.label:hover{background-color:transparent!important}.ui.green.ribbon.label{border-color:#89B84C!important}.ui.red.label,.ui.red.labels .label{background-color:#D95C5C!important;border-color:#D95C5C!important;color:#FFF!important}.ui.labels .red.label:before,.ui.red.label:before,.ui.red.labels .label:before{background-color:#D95C5C!important}.ui.red.corner.label,.ui.red.corner.label:hover{background-color:transparent!important}a.ui.red.label:hover,a.ui.red.labels .label:hover{background-color:#DE3859!important;border-color:#DE3859!important;color:#FFF!important}.ui.labels a.red.label:hover:before,.ui.red.labels a.label:hover:before,a.ui.red.label:hover:before{background-color:#DE3859!important}.ui.red.ribbon.label{border-color:#DE3859!important}.ui.blue.label,.ui.blue.labels .label{background-color:#6ECFF5!important;border-color:#6ECFF5!important;color:#FFF!important}.ui.blue.label:before,.ui.blue.labels .label:before,.ui.labels .blue.label:before{background-color:#6ECFF5!important}.ui.blue.labels a.label:hover,a.ui.blue.label:hover,a.ui.blue.labels .label:hover{background-color:#1AB8F3!important;border-color:#1AB8F3!important;color:#FFF!important}.ui.blue.labels a.label:hover:before,.ui.labels a.blue.label:hover:before,a.ui.blue.label:hover:before{background-color:#1AB8F3!important}.ui.blue.corner.label,.ui.blue.corner.label:hover{background-color:transparent!important}.ui.blue.ribbon.label{border-color:#1AB8F3!important}.ui.purple.label,.ui.purple.labels .label{background-color:#564F8A!important;border-color:#564F8A!important;color:#FFF!important}.ui.labels .purple.label:before,.ui.purple.label:before,.ui.purple.labels .label:before{background-color:#564F8A!important}.ui.purple.labels a.label:hover,a.ui.purple.label:hover,a.ui.purple.labels .label:hover{background-color:#3E3773!important;border-color:#3E3773!important;color:#FFF!important}.ui.labels a.purple.label:hover:before,.ui.purple.labels a.label:hover:before,a.ui.purple.label:hover:before{background-color:#3E3773!important}.ui.purple.corner.label,.ui.purple.corner.label:hover{background-color:transparent!important}.ui.purple.ribbon.label{border-color:#3E3773!important}.ui.orange.label,.ui.orange.labels .label{background-color:#F05940!important;border-color:#F05940!important;color:#FFF!important}.ui.labels .orange.label:before,.ui.orange.label:before,.ui.orange.labels .label:before{background-color:#F05940!important}.ui.orange.labels a.label:hover,a.ui.orange.label:hover,a.ui.orange.labels .label:hover{background-color:#FF4121!important;border-color:#FF4121!important;color:#FFF!important}.ui.labels a.orange.label:hover:before,.ui.orange.labels a.label:hover:before,a.ui.orange.label:hover:before{background-color:#FF4121!important}.ui.orange.corner.label,.ui.orange.corner.label:hover{background-color:transparent!important}.ui.orange.ribbon.label{border-color:#FF4121!important}.ui.teal.label,.ui.teal.labels .label{background-color:#00B5AD!important;border-color:#00B5AD!important;color:#FFF!important}.ui.labels .teal.label:before,.ui.teal.label:before,.ui.teal.labels .label:before{background-color:#00B5AD!important}.ui.teal.labels a.label:hover,a.ui.teal.label:hover,a.ui.teal.labels .label:hover{background-color:#009A93!important;border-color:#009A93!important;color:#FFF!important}.ui.labels a.teal.label:hover:before,.ui.teal.labels a.label:hover:before,a.ui.teal.label:hover:before{background-color:#009A93!important}.ui.teal.corner.label,.ui.teal.corner.label:hover{background-color:transparent!important}.ui.teal.ribbon.label{border-color:#009A93!important}.ui.horizontal.label,.ui.horizontal.labels .label{margin:-.125em .5em -.125em 0;padding:.35em 1em;min-width:6em;text-align:center}.ui.circular.label,.ui.circular.labels .label{min-height:1em;max-height:2em;padding:.5em!important;line-height:1em;text-align:center;border-radius:500rem}.ui.pointing.label{position:relative}.ui.attached.pointing.label{position:absolute}.ui.pointing.label:before{position:absolute;content:\"\";width:.6em;height:.6em;background-image:none;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);z-index:2;-webkit-transition:background .1s linear;-moz-transition:background .1s linear;transition:background .1s linear;background-color:#E8E8E8}.ui.pointing.above.label,.ui.pointing.label{margin-top:1em}.ui.pointing.above.label:before,.ui.pointing.label:before{margin-left:-.3em;top:-.3em;left:50%}.ui.pointing.below.label{margin-top:0;margin-bottom:1em}.ui.pointing.below.label:before{margin-left:-.3em;top:auto;right:auto;bottom:-.3em;left:50%}.ui.pointing.left.label{margin-top:0;margin-left:1em}.ui.pointing.left.label:before{margin-top:-.3em;bottom:auto;right:auto;top:50%;left:0}.ui.pointing.right.label{margin-top:0;margin-right:1em}.ui.pointing.right.label:before{margin-top:-.3em;right:-.3em;top:50%;bottom:auto;left:auto}.ui.floating.label{position:absolute;z-index:100;top:-1em;left:100%;margin:0 0 0 -1.5em!important}.ui.small.label,.ui.small.labels .label{font-size:.75rem}.ui.label{font-size:.8125rem}.ui.large.label,.ui.large.labels .label{font-size:.875rem}.ui.huge.label,.ui.huge.labels .label{font-size:1rem}.ui.loader{display:none;position:absolute;top:50%;left:50%;margin:0;z-index:1000;-webkit-transform:translateX(-50%) translateY(-50%);-moz-transform:translateX(-50%) translateY(-50%);-ms-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)}.ui.dimmer .loader{display:block}.ui.text.loader{width:auto!important;height:auto!important;text-align:center;font-style:normal}.ui.mini.text.loader{min-width:16px;padding-top:2em;font-size:.875em}.ui.small.text.loader{min-width:24px;padding-top:2.5em;font-size:.875em}.ui.text.loader{min-width:32px;font-size:1em;padding-top:3em}.ui.large.text.loader{min-width:64px;padding-top:5em;font-size:1.2em}.ui.loader.active,.ui.loader.visible{display:block}.ui.loader.disabled,.ui.loader.hidden{display:none}.ui.dimmer .ui.text.loader,.ui.inverted.text.loader{color:rgba(255,255,255,.8)}.ui.inverted.dimmer .ui.text.loader{color:rgba(0,0,0,.8)}.ui.dimmer .mini.ui.loader,.ui.inverted .mini.ui.loader{background-image:url(/static/47de617fd1d745ad120ccb9e2924b98c.gif)}.ui.dimmer .small.ui.loader,.ui.inverted .small.ui.loader{background-image:url(/static/f5b27137d3f5e9b1d91b16b37386dd03.gif)}.ui.dimmer .ui.loader,.ui.inverted.loader{background-image:url(/static/08d606864d3ad3f0b98660d391f5a1c2.gif)}.ui.dimmer .large.ui.loader,.ui.inverted .large.ui.loader{background-image:url(/static/2d66bcdc27cd89f71068e98a7a929712.gif)}.ui.inverted.dimmer .ui.mini.loader,.ui.mini.loader{width:16px;height:16px;background-image:url(/static/ca279c55a51ab2641c4712a333633581.gif)}.ui.inverted.dimmer .ui.small.loader,.ui.small.loader{width:24px;height:24px;background-image:url(/static/645f50ba6c1e56f078fa018855d97eb0.gif)}.ui.inverted.dimmer .ui.loader,.ui.loader{width:32px;height:32px;background:url(/static/939cf252f0eb4efbd2d170c974411c49.gif) 48% 0 no-repeat}.ui.inverted.dimmer .ui.loader.large,.ui.loader.large{width:64px;height:64px;background-image:url(/static/9af25aaeb6ca6d08d213b04841813eb5.gif)}.ui.inline.loader{position:static;vertical-align:middle;margin:0;-webkit-transform:none;-moz-transform:none;-ms-transform:none;transform:none}.ui.inline.loader.active,.ui.inline.loader.visible{display:inline-block}.ui.progress{border:1px solid rgba(0,0,0,.1);width:100%;height:35px;background-color:#FAFAFA;padding:5px;border-radius:.3125em;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.ui.progress .bar{display:inline-block;height:100%;background-color:#CCC;border-radius:3px;-webkit-transition:width 1s ease-in-out,background-color 1s ease-out;-moz-transition:width 1s ease-in-out,background-color 1s ease-out;transition:width 1s ease-in-out,background-color 1s ease-out}.ui.successful.progress .bar{background-color:#73E064!important}.ui.successful.progress .bar,.ui.successful.progress .bar::after{-webkit-animation:none!important;-moz-animation:none!important;animation:none!important}.ui.warning.progress .bar{background-color:#E96633!important}.ui.warning.progress .bar,.ui.warning.progress .bar::after{-webkit-animation:none!important;-moz-animation:none!important;animation:none!important}.ui.failed.progress .bar{background-color:#DF9BA4!important}.ui.failed.progress .bar,.ui.failed.progress .bar::after{-webkit-animation:none!important;-moz-animation:none!important;animation:none!important}.ui.active.progress .bar{position:relative}.ui.active.progress .bar::after{content:'';opacity:0;position:absolute;top:0;left:0;right:0;bottom:0;background:#FFF;border-radius:3px;-webkit-animation:progress-active 2s ease-out infinite;-moz-animation:progress-active 2s ease-out infinite;animation:progress-active 2s ease-out infinite}@-webkit-keyframes progress-active{0%{opacity:0;width:0}50%{opacity:.3}100%{opacity:0;width:95%}}@-moz-keyframes progress-active{0%{opacity:0;width:0}50%{opacity:.3}100%{opacity:0;width:100%}}@keyframes progress-active{0%{opacity:0;width:0}50%{opacity:.3}100%{opacity:0;width:100%}}.ui.disabled.progress{opacity:.35}.ui.disabled.progress .bar,.ui.disabled.progress .bar::after{-webkit-animation:none!important;-moz-animation:none!important;animation:none!important}.ui.progress.attached{position:relative;border:none}.ui.progress.attached,.ui.progress.attached .bar{display:block;height:3px;padding:0;overflow:hidden;border-radius:0 0 .3125em .3125em}.ui.progress.attached .bar{border-radius:0}.ui.progress.top.attached,.ui.progress.top.attached .bar{top:-2px;border-radius:.3125em .3125em 0 0}.ui.progress.top.attached .bar{border-radius:0}.ui.blue.progress .bar{background-color:#6ECFF5}.ui.black.progress .bar{background-color:#5C6166}.ui.green.progress .bar{background-color:#A1CF64}.ui.red.progress .bar{background-color:#EF4D6D}.ui.purple.progress .bar{background-color:#564F8A}.ui.teal.progress .bar{background-color:#00B5AD}.ui.progress.striped .bar{background-size:30px 30px;background-image:-webkit-gradient(linear,left top,right bottom,color-stop(0.25,rgba(255,255,255,.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,.15)),color-stop(0.75,rgba(255,255,255,.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(315deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(315deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(135deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.ui.progress.active.striped .bar:after{-webkit-animation:none;-moz-animation:none;-ms-animation:none;animation:none}.ui.progress.active.striped .bar{-webkit-animation:progress-striped 3s linear infinite;-moz-animation:progress-striped 3s linear infinite;animation:progress-striped 3s linear infinite}@-webkit-keyframes progress-striped{0%{background-position:0 0}100%{background-position:60px 0}}@-moz-keyframes progress-striped{0%{background-position:0 0}100%{background-position:60px 0}}@keyframes progress-striped{0%{background-position:0 0}100%{background-position:60px 0}}.ui.small.progress .bar{height:14px}.ui.reveal{display:inline-block;position:relative!important;z-index:2!important;font-size:0!important}.ui.reveal>.content{font-size:1rem!important}.ui.reveal>.visible.content{position:absolute!important;top:0!important;left:0!important;z-index:4!important;-webkit-transition:all .8s cubic-bezier(0.175,.885,.32,1) .15s;-moz-transition:all .8s cubic-bezier(0.175,.885,.32,1) .15s;transition:all .8s cubic-bezier(0.175,.885,.32,1) .15s}.ui.reveal>.hidden.content{position:relative!important;z-index:3!important}.ui.reveal.button{overflow:hidden}.ui.slide.reveal{position:relative!important;display:block;overflow:hidden!important;white-space:nowrap}.ui.slide.reveal>.content{display:block;float:left;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;margin:0;-webkit-transition:top .8s cubic-bezier(0.175,.885,.32,1) .15s,left .8s cubic-bezier(0.175,.885,.32,1) .15s,right .8s cubic-bezier(0.175,.885,.32,1) .15s,bottom .8s cubic-bezier(0.175,.885,.32,1) .15s;-moz-transition:top .8s cubic-bezier(0.175,.885,.32,1) .15s,left .8s cubic-bezier(0.175,.885,.32,1) .15s,right .8s cubic-bezier(0.175,.885,.32,1) .15s,bottom .8s cubic-bezier(0.175,.885,.32,1) .15s;transition:top .8s cubic-bezier(0.175,.885,.32,1) .15s,left .8s cubic-bezier(0.175,.885,.32,1) .15s,right .8s cubic-bezier(0.175,.885,.32,1) .15s,bottom .8s cubic-bezier(0.175,.885,.32,1) .15s}.ui.slide.reveal>.visible.content{position:relative!important}.ui.slide.reveal>.hidden.content{position:absolute!important;left:100%!important;width:100%!important}.ui.slide.reveal:focus>.visible.content,.ui.slide.reveal:hover>.visible.content{left:-100%!important}.ui.slide.reveal:focus>.hidden.content,.ui.slide.reveal:hover>.hidden.content{left:0!important}.ui.right.slide.reveal>.visible.content{left:0}.ui.right.slide.reveal>.hidden.content{left:auto!important;right:100%!important}.ui.right.slide.reveal:focus>.visible.content,.ui.right.slide.reveal:hover>.visible.content{left:100%!important;right:auto!important}.ui.right.slide.reveal:focus>.hidden.content,.ui.right.slide.reveal:hover>.hidden.content{left:auto!important;right:0!important}.ui.up.slide.reveal>.visible.content{top:0!important;left:0!important;right:auto!important;bottom:auto!important}.ui.up.slide.reveal>.hidden.content{top:100%!important;left:0!important;right:auto!important;bottom:auto!important}.ui.slide.up.reveal:focus>.visible.content,.ui.slide.up.reveal:hover>.visible.content{top:-100%!important;left:0!important}.ui.slide.up.reveal:focus>.hidden.content,.ui.slide.up.reveal:hover>.hidden.content{top:0!important;left:0!important}.ui.down.slide.reveal>.visible.content{top:auto!important;right:auto!important;bottom:auto!important;bottom:0!important}.ui.down.slide.reveal>.hidden.content{top:auto!important;right:auto!important;bottom:100%!important;left:0!important}.ui.slide.down.reveal:focus>.visible.content,.ui.slide.down.reveal:hover>.visible.content{left:0!important;bottom:-100%!important}.ui.slide.down.reveal:focus>.hidden.content,.ui.slide.down.reveal:hover>.hidden.content{left:0!important;bottom:0!important}.ui.fade.reveal>.hidden.content{-webkit-transition:opacity .8s cubic-bezier(0.175,.885,.32,1) .15s;-moz-transition:opacity .8s cubic-bezier(0.175,.885,.32,1) .15s;transition:opacity .8s cubic-bezier(0.175,.885,.32,1) .15s;z-index:5!important;opacity:0}.ui.fade.reveal:hover>.hidden.content{opacity:1}.ui.move.left.reveal>.visible.content,.ui.move.reveal>.visible.content{left:auto!important;top:auto!important;bottom:auto!important;right:0!important}.ui.move.left.reveal:focus>.visible.content,.ui.move.left.reveal:hover>.visible.content,.ui.move.reveal:focus>.visible.content,.ui.move.reveal:hover>.visible.content{right:100%!important}.ui.move.right.reveal>.visible.content{right:auto!important;top:auto!important;bottom:auto!important;left:0!important}.ui.move.right.reveal:focus>.visible.content,.ui.move.right.reveal:hover>.visible.content{left:100%!important}.ui.move.up.reveal>.visible.content{right:auto!important;left:auto!important;top:auto!important;bottom:0!important}.ui.move.up.reveal:focus>.visible.content,.ui.move.up.reveal:hover>.visible.content{bottom:100%!important}.ui.move.down.reveal>.visible.content{right:auto!important;left:auto!important;top:0!important;bottom:auto!important}.ui.move.down.reveal:focus>.visible.content,.ui.move.down.reveal:hover>.visible.content{top:100%!important}.ui.rotate.reveal>.visible.content{-webkit-transition-duration:.8s;-moz-transition-duration:.8s;transition-duration:.8s;-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg)}.ui.rotate.reveal>.visible.content,.ui.rotate.right.reveal>.visible.content{-webkit-transform-origin:bottom right;-moz-transform-origin:bottom right;-ms-transform-origin:bottom right;transform-origin:bottom right}.ui.rotate.reveal:focus>.visible.content,.ui.rotate.reveal:hover>.visible.content,.ui.rotate.right.reveal:focus>.visible.content,.ui.rotate.right.reveal:hover>.visible.content{-webkit-transform:rotate(110deg);-moz-transform:rotate(110deg);-ms-transform:rotate(110deg);transform:rotate(110deg)}.ui.rotate.left.reveal>.visible.content{-webkit-transform-origin:bottom left;-moz-transform-origin:bottom left;-ms-transform-origin:bottom left;transform-origin:bottom left}.ui.rotate.left.reveal:focus>.visible.content,.ui.rotate.left.reveal:hover>.visible.content{-webkit-transform:rotate(-110deg);-moz-transform:rotate(-110deg);-ms-transform:rotate(-110deg);transform:rotate(-110deg)}.ui.disabled.reveal{opacity:1!important}.ui.disabled.reveal>.content{-webkit-transition:none!important;-moz-transition:none!important;transition:none!important}.ui.disabled.reveal:focus>.visible.content,.ui.disabled.reveal:hover>.visible.content{position:static!important;display:block!important;opacity:1!important;top:0!important;left:0!important;right:auto!important;bottom:auto!important;-webkit-transform:none!important;-moz-transform:none!important;-ms-transform:none!important;transform:none!important}.ui.disabled.reveal:focus>.hidden.content,.ui.disabled.reveal:hover>.hidden.content{display:none!important}.ui.masked.reveal{overflow:hidden}.ui.instant.reveal>.content{-webkit-transition-delay:0s!important;-moz-transition-delay:0s!important;transition-delay:0s!important}.ui.segment{position:relative;background-color:#FFF;-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.1);box-shadow:0 0 0 1px rgba(0,0,0,.1);margin:1em 0;padding:1em;border-radius:5px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.ui.segment:first-child{margin-top:0}.ui.segment:last-child{margin-bottom:0}.ui.segment:after{content:'';display:block;height:0;clear:both;visibility:hidden}.ui.vertical.segment{margin:0;padding-left:0;padding-right:0;background-color:transparent;border-radius:0;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 0 rgba(0,0,0,.1)}.ui.vertical.segment:first-child{padding-top:0}.ui.horizontal.segment{margin:0;padding-top:0;padding-bottom:0;background-color:transparent;border-radius:0;-webkit-box-shadow:1px 0 0 rgba(0,0,0,.1);box-shadow:1px 0 0 rgba(0,0,0,.1)}.ui.horizontal.segment:first-child{padding-left:0}.ui.pointing.menu~.ui.attached.segment{top:1px}.ui.page.grid.segment .ui.grid .ui.segment.column{padding-top:2rem;padding-bottom:2rem}.ui.grid .ui.segment.column,.ui.grid .ui.segment.row,.ui.grid.segment{border-radius:0;-webkit-box-shadow:none;box-shadow:none;border:none}.ui.segment>:first-child{margin-top:0}.ui.segment>:last-child{margin-bottom:0}.ui.piled.segment{margin:2em 0;-webkit-box-shadow:0 0 1px 1px rgba(0,0,0,.15);-ms-box-shadow:0 0 1px 1px rgba(0,0,0,.15);-o-box-shadow:0 0 1px 1px rgba(0,0,0,.15);box-shadow:0 0 1px 1px rgba(0,0,0,.15)}.ui.piled.segment:first-child{margin-top:0}.ui.piled.segment:last-child{margin-bottom:0}.ui.piled.segment:after,.ui.piled.segment:before{background-color:#FFF;visibility:visible;content:\"\";display:block;height:100%;left:-1px;position:absolute;width:100%;-webkit-box-shadow:0 0 1px 1px rgba(0,0,0,.1);box-shadow:0 0 1px 1px rgba(0,0,0,.1)}.ui.piled.segment:after{-webkit-transform:rotate(1.2deg);-moz-transform:rotate(1.2deg);-ms-transform:rotate(1.2deg);transform:rotate(1.2deg);top:0;z-index:-1}.ui.piled.segment:before{-webkit-transform:rotate(-1.2deg);-moz-transform:rotate(-1.2deg);-ms-transform:rotate(-1.2deg);transform:rotate(-1.2deg);top:0;z-index:-2}.ui.stacked.segment{padding-bottom:1.7em}.ui.stacked.segment:after,.ui.stacked.segment:before{content:'';position:absolute;bottom:-3px;left:0;border-top:1px solid rgba(0,0,0,.1);background-color:rgba(0,0,0,.02);width:100%;height:5px;visibility:visible}.ui.stacked.segment:before{bottom:0}.ui.stacked.inverted.segment:after,.ui.stacked.inverted.segment:before{background-color:rgba(255,255,255,.1);border-top:1px solid rgba(255,255,255,.35)}.ui.circular.segment{display:table-cell;padding:2em;text-align:center;vertical-align:middle;border-radius:500em}.ui.raised.segment{-webkit-box-shadow:0 1px 2px 1px rgba(0,0,0,.1);box-shadow:0 1px 2px 1px rgba(0,0,0,.1)}.ui.disabled.segment{opacity:.8;color:#DDD}.ui.basic.segment{position:relative;background-color:transparent;-webkit-box-shadow:none;box-shadow:none;border-radius:0}.ui.basic.segment:first-child{padding-top:0}.ui.basic.segment:last-child{padding-bottom:0}.ui.fitted.segment{padding:0}.ui.blue.segment{border-top:.2em solid #6ECFF5}.ui.green.segment{border-top:.2em solid #A1CF64}.ui.red.segment{border-top:.2em solid #D95C5C}.ui.orange.segment{border-top:.2em solid #F05940}.ui.purple.segment{border-top:.2em solid #564F8A}.ui.teal.segment{border-top:.2em solid #00B5AD}.ui.inverted.black.segment{background-color:#5C6166!important;color:#FFF!important}.ui.inverted.blue.segment{background-color:#6ECFF5!important;color:#FFF!important}.ui.inverted.green.segment{background-color:#A1CF64!important;color:#FFF!important}.ui.inverted.red.segment{background-color:#D95C5C!important;color:#FFF!important}.ui.inverted.orange.segment{background-color:#F05940!important;color:#FFF!important}.ui.inverted.purple.segment{background-color:#564F8A!important;color:#FFF!important}.ui.inverted.teal.segment{background-color:#00B5AD!important;color:#FFF!important}.ui.left.aligned.segment{text-align:left}.ui.right.aligned.segment{text-align:right}.ui.center.aligned.segment{text-align:center}.ui.justified.segment{text-align:justify;-webkit-hyphens:auto;-moz-hyphens:auto;-ms-hyphens:auto;hyphens:auto}.ui.floated.segment,.ui.left.floated.segment{float:left}.ui.right.floated.segment{float:right}.ui.inverted.segment{border:none;-webkit-box-shadow:none;box-shadow:none}.ui.inverted.segment .segment{color:rgba(0,0,0,.7)}.ui.inverted.segment .inverted.segment{color:#FFF}.ui.inverted.segment,.ui.primary.inverted.segment{background-color:#222;color:#FFF}.ui.primary.segment{background-color:#FFF;color:#555}.ui.secondary.segment{background-color:#FAF9FA;color:#777}.ui.tertiary.segment{background-color:#EBEBEB;color:#B0B0B0}.ui.secondary.inverted.segment{background-color:#555;background-image:-webkit-linear-gradient(rgba(255,255,255,.3) 0,rgba(255,255,255,.3) 100%);background-image:-moz-linear-gradient(rgba(255,255,255,.3) 0,rgba(255,255,255,.3) 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(rgba(255,255,255,.3)),to(rgba(255,255,255,.3)));background-image:linear-gradient(rgba(255,255,255,.3) 0,rgba(255,255,255,.3) 100%);color:#FAFAFA}.ui.tertiary.inverted.segment{background-color:#555;background-image:-webkit-linear-gradient(rgba(255,255,255,.6) 0,rgba(255,255,255,.6) 100%);background-image:-moz-linear-gradient(rgba(255,255,255,.6) 0,rgba(255,255,255,.6) 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(rgba(255,255,255,.6)),to(rgba(255,255,255,.6)));background-image:linear-gradient(rgba(255,255,255,.6) 0,rgba(255,255,255,.6) 100%);color:#EEE}.ui.segment.attached{top:-1px;bottom:-1px;border-radius:0;margin:0;-webkit-box-shadow:0 0 0 1px #DDD;box-shadow:0 0 0 1px #DDD}.ui.top.attached.segment{top:0;bottom:-1px;margin-top:1em;margin-bottom:0;border-radius:5px 5px 0 0}.ui.segment.top.attached:first-child{margin-top:0}.ui.segment.bottom.attached{top:-1px;bottom:0;margin-top:0;margin-bottom:1em;border-radius:0 0 5px 5px}.ui.segment.bottom.attached:last-child{margin-bottom:0}.ui.step,.ui.steps .step{display:inline-block;position:relative;padding:1em 2em 1em 3em;vertical-align:top;background-color:#FFF;color:#888;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.ui.step:after,.ui.steps .step:after{position:absolute;z-index:2;content:'';top:.42em;right:-1em;border:none;background-color:#FFF;width:2.2em;height:2.2em;-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);-ms-transform:rotate(-45deg);transform:rotate(-45deg);-webkit-box-shadow:-1px -1px 0 0 rgba(0,0,0,.15) inset;box-shadow:-1px -1px 0 0 rgba(0,0,0,.15) inset}.ui.step,.ui.steps .step,.ui.steps .step:after{-webkit-transition:background-color .1s ease,opacity .1s ease,color .1s ease,-webkit-box-shadow .1s ease;-moz-transition:background-color .1s ease,opacity .1s ease,color .1s ease,box-shadow .1s ease;transition:background-color .1s ease,opacity .1s ease,color .1s ease,box-shadow .1s ease}.ui.vertical.steps{overflow:visible}.ui.vertical.steps .step{display:block;border-radius:0;padding:1em 2em}.ui.vertical.steps .step:first-child{padding:1em 2em;border-radius:.3125rem .3125rem 0 0}.ui.vertical.steps .active.step:first-child{border-top-right-radius:0}.ui.vertical.steps .step:last-child{border-radius:0 0 .3125rem .3125rem}.ui.vertical.steps .active.step:last-child{border-bottom-right-radius:0}.ui.vertical.steps .step:after{display:none}.ui.vertical.steps .active.step:after{display:block}.ui.vertical.steps .two.line.step{line-height:1.3}.ui.vertical.steps .two.line.active.step:after{position:absolute;z-index:2;content:'';top:0;right:-1.45em;background-color:transparent;border-bottom:2.35em solid transparent;border-left:1.55em solid #555;border-top:2.35em solid transparent;width:0;height:0;-webkit-transform:none;-moz-transform:none;-ms-transform:none;transform:none}.ui.steps{cursor:pointer;display:inline-block;font-size:0;overflow:hidden;-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.1);box-shadow:0 0 0 1px rgba(0,0,0,.1);line-height:1;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;border-radius:.3125rem}.ui.steps .step:first-child{padding-left:1.35em;border-radius:.3125em 0 0 .3125em}.ui.steps .step:last-child{border-radius:0 .3125em .3125em 0}.ui.steps .step:only-child{border-radius:.3125em}.ui.steps .step:last-child{margin-right:0}.ui.steps .step:last-child:after{display:none}.ui.step.hover,.ui.step:hover{background-color:#F7F7F7;color:rgba(0,0,0,.8)}.ui.step.hover::after,.ui.step:hover,.ui.steps .step.hover:after,.ui.steps .step:hover:after{background-color:#F7F7F7}.ui.step.down,.ui.step:active,.ui.steps .step.down,.ui.steps .step.down:after,.ui.steps .step:active,.ui.steps .step:active:after,.ui.steps.down::after,.ui.steps:active::after{background-color:#F0F0F0}.ui.active.step,.ui.steps .step.active{cursor:auto;background-color:#555;color:#FFF;font-weight:700}.ui.active.steps:after,.ui.steps .step.active:after{background-color:#555;-webkit-box-shadow:none;box-shadow:none}.ui.disabled.step,.ui.steps .disabled.step{cursor:auto;background-color:#FFF;color:#CBCBCB}.ui.disabled.step:after,.ui.steps .disabled.step:after{background-color:#FFF}.attached.ui.steps{margin:0;border-radius:.3125em .3125em 0 0}.attached.ui.steps .step:first-child{border-radius:.3125em 0 0}.attached.ui.steps .step:last-child{border-radius:0 .3125em 0 0}.bottom.attached.ui.steps{margin-top:-1px;border-radius:0 0 .3125em .3125em}.bottom.attached.ui.steps .step:first-child{border-radius:0 0 0 .3125em}.bottom.attached.ui.steps .step:last-child{border-radius:0 0 .3125em}.ui.eight.steps,.ui.five.steps,.ui.four.steps,.ui.one.steps,.ui.seven.steps,.ui.six.steps,.ui.three.steps,.ui.two.steps{display:block}.ui.one.steps>.step{width:100%}.ui.two.steps>.step{width:50%}.ui.three.steps>.step{width:33.333%}.ui.four.steps>.step{width:25%}.ui.five.steps>.step{width:20%}.ui.six.steps>.step{width:16.666%}.ui.seven.steps>.step{width:14.285%}.ui.eight.steps>.step{width:12.5%}.ui.mini.step,.ui.mini.steps .step{font-size:.8rem}.ui.small.step,.ui.small.steps .step{font-size:.875rem}.ui.step,.ui.steps .step{font-size:1rem}.ui.large.step,.ui.large.steps .step{font-size:1.125rem}.ui.big.step,.ui.big.steps .step{font-size:1.25rem}.ui.huge.step,.ui.huge.steps .step{font-size:1.375rem}.ui.massive.step,.ui.massive.steps .step{font-size:1.5rem;font-weight:700}.ui.accordion,.ui.accordion .accordion{width:600px;max-width:100%;font-size:1rem;border-radius:.3125em;background-color:#FFF;-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.1);box-shadow:0 0 0 1px rgba(0,0,0,.1)}.ui.accordion .accordion .title,.ui.accordion .title{cursor:pointer;margin:0;padding:.75em 1em;color:rgba(0,0,0,.6);border-top:1px solid rgba(0,0,0,.05);-webkit-transition:background-color .2s ease-out;-moz-transition:background-color .2s ease-out;transition:background-color .2s ease-out}.ui.accordion .accordion>.title:first-child,.ui.accordion>.title:first-child{border-top:none}.ui.accordion .accordion .content,.ui.accordion .content>.content,.ui.accordion>.content{display:none;margin:0;padding:1.3em 1em}.ui.accordion .accordion .title .dropdown.icon,.ui.accordion .title .dropdown.icon{display:inline-block;float:none;margin:0 .5em 0 0;-webkit-transition:-webkit-transform .2s ease,opacity .2s ease;-moz-transition:-moz-transform .2s ease,opacity .2s ease;transition:transform .2s ease,opacity .2s ease;-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg)}.ui.accordion .accordion .title .dropdown.icon:before,.ui.accordion .title .dropdown.icon:before{content:'\\f0da'}.ui.basic.accordion.menu{background-color:#FFF;-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.1);box-shadow:0 0 0 1px rgba(0,0,0,.1)}.ui.basic.accordion.menu .content,.ui.basic.accordion.menu .title{padding:0}.ui.accordion.menu .content{display:none}.ui.basic.accordion{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.ui.basic.accordion .accordion .title,.ui.basic.accordion .title{background-color:transparent;border-top:none;padding-left:0;padding-right:0}.ui.basic.accordion .accordion .content,.ui.basic.accordion .content{padding:.5em 0}.ui.basic.accordion .accordion .active.title,.ui.basic.accordion .active.title{background-color:transparent}.ui.accordion .accordion .active.title,.ui.accordion .accordion .title:hover,.ui.accordion .active.title,.ui.accordion .title:hover{color:rgba(0,0,0,.8)}.ui.accordion .accordion .active.title,.ui.accordion .active.title{background-color:rgba(0,0,0,.1);color:rgba(0,0,0,.8)}.ui.accordion .accordion .active.title .dropdown.icon,.ui.accordion .active.title .dropdown.icon{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.ui.accordion .accordion .active.content,.ui.accordion .active.content{display:block}.ui.fluid.accordion,.ui.fluid.accordion .accordion{width:100%}.ui.chatroom{background-color:#F8F8F8;padding:0}.ui.chatroom .room{position:relative;background-color:#FFF;overflow:hidden;height:286px;border:1px solid rgba(0,0,0,.1);border-top:none;border-bottom:none}.ui.chatroom .room .loader{display:none;margin:-25px 0 0 -25px}.ui.chatroom .actions{overflow:hidden;background-color:#EEE;padding:4px;border:1px solid rgba(0,0,0,.1);border-radius:5px 5px 0 0}.ui.chatroom .actions .button{float:right;margin-left:3px}.ui.chatroom .actions .message{float:left;margin-left:6px;font-size:11px;color:#AAA;text-shadow:0 -1px 0 rgba(255,255,255,.8);line-height:28px}.ui.chatroom .actions .message .loader{display:inline-block;margin-right:8px}.ui.chatroom .log{float:left;overflow:auto;overflow-x:hidden;overflow-y:auto}.ui.chatroom .log .message{padding:3px 0;border-top:1px dotted #DADADA}.ui.chatroom .log .message:first-child{border-top:none}.ui.chatroom .status{padding:5px 0;color:#AAA;font-size:12px;font-style:italic;line-height:1.33;border-top:1px dotted #DADADA}.ui.chatroom .log .status:first-child{border-top:none}.ui.chatroom .log .flag{float:left}.ui.chatroom .log p{margin-left:0}.ui.chatroom .log .author{font-weight:700;-webkit-transition:color .3s ease-out;-moz-transition:color .3s ease-out;transition:color .3s ease-out}.ui.chatroom .log a.author:hover{opacity:.8}.ui.chatroom .log .message.admin p{font-weight:700;margin:1px 0 0 23px}.ui.chatroom .log .divider{margin:-1px 0;font-size:11px;padding:10px 0;border-top:1px solid #F8F8F8;border-bottom:1px solid #F8F8F8}.ui.chatroom .log .divider .rule{top:50%;width:15%}.ui.chatroom .log .divider .label{color:#777;margin:0}.ui.chatroom .room .list{position:relative;overflow:auto;overflow-x:hidden;overflow-y:auto;float:left;background-color:#EEE;border-left:1px solid #DDD}.ui.chatroom .room .list .user{display:table;padding:3px 7px;border-bottom:1px solid #DDD}.ui.chatroom .room .list .user:hover{background-color:#F8F8F8}.ui.chatroom .room .list .image{display:table-cell;vertical-align:middle;width:20px}.ui.chatroom .room .list .image img{width:20px;height:20px;vertical-align:middle}.ui.chatroom .room .list p{display:table-cell;vertical-align:middle;padding-left:7px;padding-right:14px;font-size:11px;line-height:1.2;font-weight:700}.ui.chatroom .room .list a:hover{opacity:.8}.ui.chatroom .talk{border:1px solid rgba(0,0,0,.1);padding:5px 0 0;background-color:#EEE;border-radius:0 0 5px 5px}.ui.chatroom .talk .avatar,.ui.chatroom .talk .button,.ui.chatroom .talk input{float:left}.ui.chatroom .talk .avatar img{display:block;width:30px;height:30px;margin-right:4px;border-radius:500rem}.ui.chatroom .talk input{border:1px solid #CCC;margin:0;width:196px;height:14px;padding:8px 5px;font-size:12px;color:#555}.ui.chatroom .talk input.focus{border:1px solid #AAA}.ui.chatroom .send{width:80px;height:32px;margin-left:-1px;padding:4px 12px;font-size:12px;line-height:23px;-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.1) inset;box-shadow:0 0 0 1px rgba(0,0,0,.1) inset;border-radius:0 5px 5px 0}.ui.chatroom .talk .log-in.button{display:block;float:none;margin-top:-6px;height:22px;border-radius:0 0 4px 4px}.ui.chatroom .talk .log-in.button i{vertical-align:text-top}.ui.chatroom .log .team.flag{width:18px}.ui.chatroom.loading .loader{display:block}.ui.chatroom{width:330px;height:370px}.ui.chatroom .room .container{width:3000px}.ui.chatroom .log{width:314px;height:278px;padding:4px 7px}.ui.chatroom .room .list{width:124px;height:278px;padding:4px 0}.ui.chatroom .room .list .user{width:110px}.ui.chatroom .talk{height:40px}.ui.checkbox{position:relative;display:inline-block;min-width:1em;min-height:1.25em;line-height:1em;outline:0;vertical-align:middle}.ui.checkbox input{position:absolute;top:0;left:0;opacity:0;outline:0}.ui.checkbox .box,.ui.checkbox label{cursor:pointer;padding-left:2em;outline:0}.ui.checkbox .box:before,.ui.checkbox label:before{position:absolute;top:0;line-height:1;width:1em;height:1em;left:0;content:'';border-radius:4px;background:#FFF;-webkit-transition:background-color .3s ease,-webkit-box-shadow .3s ease;-moz-transition:background-color .3s ease,box-shadow .3s ease;transition:background-color .3s ease,box-shadow .3s ease;-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.2);box-shadow:0 0 0 1px rgba(0,0,0,.2)}.ui.checkbox .box:after,.ui.checkbox label:after{-ms-filter:\"alpha(Opacity=0)\";filter:alpha(opacity=0);opacity:0;content:'';position:absolute;background:0 0;border:.2em solid #333;border-top:none;border-right:none;-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);-ms-transform:rotate(-45deg);transform:rotate(-45deg);top:.275em;left:.2em;width:.45em;height:.15em}.ui.checkbox label{display:block;color:rgba(0,0,0,.6);-webkit-transition:color .2s ease;-moz-transition:color .2s ease;transition:color .2s ease}.ui.checkbox input:focus~label,.ui.checkbox label:hover{color:rgba(0,0,0,.8)}.ui.checkbox~label{cursor:pointer;opacity:.85;vertical-align:middle}.ui.checkbox~label:hover{opacity:1}.ui.checkbox .box:hover::before,.ui.checkbox label:hover::before{-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.3);box-shadow:0 0 0 1px rgba(0,0,0,.3)}.ui.checkbox .box:active::before,.ui.checkbox label:active::before{background-color:#F5F5F5}.ui.checkbox input:focus~.box:before,.ui.checkbox input:focus~label:before{-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.3);box-shadow:0 0 0 1px rgba(0,0,0,.3)}.ui.checkbox input:checked~.box:after,.ui.checkbox input:checked~label:after{-ms-filter:\"alpha(Opacity=100)\";filter:alpha(opacity=100);opacity:1}.ui.checkbox input[disabled]~.box:after,.ui.checkbox input[disabled]~label,.ui.disabled.checkbox label,.ui.disabled.checkbox~.box:after{opacity:.4;color:rgba(0,0,0,.3)}.ui.radio.checkbox .box:before,.ui.radio.checkbox label:before{min-width:1em;height:1em;border-radius:500px;-webkit-transform:none;-moz-transform:none;-ms-transform:none;transform:none}.ui.radio.checkbox .box:after,.ui.radio.checkbox label:after{border:none;top:.2em;left:.2em;width:.6em;height:.6em;background-color:#555;-webkit-transform:none;-moz-transform:none;-ms-transform:none;transform:none;border-radius:500px}.ui.slider.checkbox{cursor:pointer;min-width:3em}.ui.slider.checkbox:after{position:absolute;top:.5em;left:0;content:'';width:3em;height:2px;background-color:rgba(0,0,0,.1)}.ui.slider.checkbox .box,.ui.slider.checkbox label{padding-left:4em}.ui.slider.checkbox .box:before,.ui.slider.checkbox label:before{cursor:pointer;display:block;position:absolute;top:-.25em;left:0;z-index:1;width:1.5em;height:1.5em;-webkit-transform:none;-moz-transform:none;-ms-transform:none;transform:none;-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.1) inset;box-shadow:0 0 0 1px rgba(0,0,0,.1) inset;border-radius:50rem;-webkit-transition:left .3s ease 0s;-moz-transition:left .3s ease 0s;transition:left .3s ease 0s}.ui.slider.checkbox .box:after,.ui.slider.checkbox label:after{opacity:1;position:absolute;content:'';top:.15em;left:0;z-index:2;margin-left:.375em;border:none;width:.75em;height:.75em;border-radius:50rem;-webkit-transform:none;-moz-transform:none;-ms-transform:none;transform:none;-webkit-transition:background .3s ease 0s,left .3s ease 0s;-moz-transition:background .3s ease 0s,left .3s ease 0s;transition:background .3s ease 0s,left .3s ease 0s}.ui.slider.checkbox input:checked~.box:after,.ui.slider.checkbox input:checked~.box:before,.ui.slider.checkbox input:checked~label:after,.ui.slider.checkbox input:checked~label:before{left:1.75em}.ui.slider.checkbox .box:after,.ui.slider.checkbox label:after{background-color:#D95C5C}.ui.slider.checkbox input:checked~.box:after,.ui.slider.checkbox input:checked~label:after{background-color:#89B84C}.ui.toggle.checkbox{cursor:pointer}.ui.toggle.checkbox .box,.ui.toggle.checkbox label{padding-left:4em}.ui.toggle.checkbox .box:before,.ui.toggle.checkbox label:before{cursor:pointer;display:block;position:absolute;content:'';top:-.25em;left:0;z-index:1;background-color:#FFF;width:3em;height:1.5em;-webkit-transform:none;-moz-transform:none;-ms-transform:none;transform:none;-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.1) inset;box-shadow:0 0 0 1px rgba(0,0,0,.1) inset;border-radius:50rem}.ui.toggle.checkbox .box:after,.ui.toggle.checkbox label:after{opacity:1;-webkit-box-shadow:none;box-shadow:none;content:'';position:absolute;top:.15em;left:.5em;z-index:2;border:none;width:.75em;height:.75em;background-color:#D95C5C;border-radius:50rem;-webkit-transition:background .3s ease 0s,left .3s ease 0s;-moz-transition:background .3s ease 0s,left .3s ease 0s;transition:background .3s ease 0s,left .3s ease 0s}.ui.toggle.checkbox:active .box:before,.ui.toggle.checkbox:active label:before{background-color:#F5F5F5}.ui.toggle.checkbox input:checked~.box:after,.ui.toggle.checkbox input:checked~label:after{left:1.75em;background-color:#89B84C}.ui.checkbox{font-size:1em}.ui.large.checkbox{font-size:1.25em}.ui.huge.checkbox{font-size:1.5em}.ui.dimmable{position:relative}.ui.dimmer{display:none;position:absolute;top:0!important;left:0!important;width:0;height:0;text-align:center;vertical-align:middle;background-color:rgba(0,0,0,.85);opacity:0;line-height:1;-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:.5s;-moz-animation-duration:.5s;animation-duration:.5s;-webkit-transition:background-color .5s linear;-moz-transition:background-color .5s linear;transition:background-color .5s linear;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;z-index:1000}.ui.dimmer>.content{width:100%;height:100%;display:table;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.ui.dimmer>.content>div{display:table-cell;vertical-align:middle;color:#FFF}.ui.horizontal.segment>.ui.dimmer,.ui.segment>.ui.dimmer,.ui.vertical.segment>.ui.dimmer{border-radius:5px}.ui.dimmed.dimmable:not(body){overflow:hidden}.ui.active.dimmer,.ui.dimmed.dimmable>.ui.animating.dimmer,.ui.dimmed.dimmable>.ui.visible.dimmer{display:block;width:100%;height:100%;opacity:1}.ui.disabled.dimmer{width:0!important;height:0!important}.ui.page.dimmer{position:fixed;-webkit-transform-style:preserve-3d;-moz-transform-style:preserve-3d;transform-style:preserve-3d;-webkit-perspective:2000px;-moz-perspective:2000px;perspective:2000px;-webkit-transform-origin:center center;-moz-transform-origin:center center;-ms-transform-origin:center center;transform-origin:center center}.ui.scrolling.dimmable>.dimmer,.ui.scrolling.page.dimmer{position:absolute}.ui.dimmer>.top.aligned.content>*{vertical-align:top}.ui.dimmer>.bottom.aligned.content>*{vertical-align:bottom}.ui.inverted.dimmer{background-color:rgba(255,255,255,.85)}.ui.inverted.dimmer>.content>*{color:rgba(0,0,0,.8)}.ui.simple.dimmer{display:block;overflow:hidden;opacity:1;z-index:-100;background-color:transparent}.ui.dimmed.dimmable>.ui.simple.dimmer{overflow:visible;opacity:1;width:100%;height:100%;background-color:rgba(0,0,0,.85);z-index:1}.ui.simple.inverted.dimmer{background-color:rgba(255,255,255,0)}.ui.dimmed.dimmable>.ui.simple.inverted.dimmer{background-color:rgba(255,255,255,.85)}.ui.dropdown{cursor:pointer;position:relative;display:inline-block;line-height:1;-webkit-transition:border-radius .1s ease,width .2s ease;-moz-transition:border-radius .1s ease,width .2s ease;transition:border-radius .1s ease,width .2s ease;-webkit-tap-highlight-color:transparent;-moz-tap-highlight-color:transparent;tap-highlight-color:transparent}.ui.dropdown .menu{cursor:auto;position:absolute;display:none;top:100%;margin:0;background-color:#FFF;min-width:100%;white-space:nowrap;font-size:.875em;text-shadow:none;-webkit-box-shadow:0 0 1px 1px rgba(0,0,0,.1);box-shadow:0 0 1px 1px rgba(0,0,0,.1);border-radius:0 0 .325em .325em;-webkit-transition:opacity .2s ease;-moz-transition:opacity .2s ease;transition:opacity .2s ease;z-index:11}.ui.dropdown>.dropdown.icon{width:auto;margin:0 0 0 1em}.ui.dropdown>.dropdown.icon:before{content:\"\\f0d7\"}.ui.dropdown .menu .item .dropdown.icon{width:auto;float:right;margin:0 0 0 .5em}.ui.dropdown .menu .item .dropdown.icon:before{content:\"\\f0da\"}.ui.dropdown>.text{display:inline-block;-webkit-transition:color .2s ease;-moz-transition:color .2s ease;transition:color .2s ease}.ui.dropdown .menu{left:0}.ui.dropdown .menu .menu{top:0!important;left:100%!important;margin:0!important;border-radius:0 .325em .325em 0!important}.ui.dropdown .menu .menu:after{display:none}.ui.dropdown .menu .item{cursor:pointer;border:none;border-top:1px solid rgba(0,0,0,.05);height:auto;display:block;color:rgba(0,0,0,.75);padding:.85em 1em!important;font-size:.875rem;text-transform:none;font-weight:400;text-align:left;-webkit-touch-callout:none}.ui.dropdown .menu .item:before{display:none}.ui.dropdown .menu .item .icon{margin-right:.75em}.ui.dropdown .menu .item:first-child{border-top:none}.ui.buttons>.ui.dropdown:last-child .menu,.ui.menu .right.menu .dropdown:last-child .menu{left:auto;right:0}.ui.vertical.menu .dropdown.item>.dropdown.icon:before{content:\"\\f0da\"}.ui.dropdown.icon.button>.dropdown.icon{margin:0}.ui.visible.dropdown>.menu{display:block}.ui.dropdown .menu .item.selected,.ui.dropdown .menu .item:hover{background-color:rgba(0,0,0,.02);z-index:12}.ui.dropdown .menu .active.item{background-color:rgba(0,0,0,.06)!important;border-left:none;border-color:transparent!important;-moz-shadow:none;-webkit-box-shadow:none;box-shadow:none;z-index:12}.ui.default.dropdown>.text,.ui.dropdown>.default.text{color:rgba(0,0,0,.5)}.ui.default.dropdown:hover>.text,.ui.dropdown:hover>.default.text{color:rgba(0,0,0,.8)}.ui.dropdown.error,.ui.dropdown.error>.default.text,.ui.dropdown.error>.text{color:#D95C5C!important}.ui.dropdown.error>.menu,.ui.dropdown.error>.menu .menu{-webkit-box-shadow:0 0 1px 1px #E7BEBE!important;box-shadow:0 0 1px 1px #E7BEBE!important}.ui.dropdown.error>.menu .item{color:#D95C5C!important}.ui.dropdown.error>.menu .item:hover{background-color:#FFF2F2!important}.ui.dropdown.error>.menu .active.item{background-color:#FDCFCF!important}.ui.simple.dropdown .menu:after,.ui.simple.dropdown .menu:before{display:none}.ui.simple.dropdown .menu{display:block;overflow:hidden;top:-9999px!important;position:absolute;opacity:0;width:0;height:0;-webkit-transition:opacity .2s ease-out;-moz-transition:opacity .2s ease-out;transition:opacity .2s ease-out}.ui.simple.active.dropdown,.ui.simple.dropdown:hover{border-bottom-left-radius:0!important;border-bottom-right-radius:0!important}.ui.simple.active.dropdown>.menu,.ui.simple.dropdown:hover>.menu{overflow:visible;width:auto;height:auto;top:100%!important;opacity:1}.ui.simple.dropdown:hover>.menu .item:hover>.menu,.ui.simple.dropdown>.menu .item:active>.menu{overflow:visible;width:auto;height:auto;top:0!important;left:100%!important;opacity:1}.ui.simple.disabled.dropdown:hover .menu{display:none;height:0;width:0;overflow:hidden}.ui.selection.dropdown{cursor:pointer;display:inline-block;word-wrap:break-word;white-space:normal;background-color:#FFF;padding:.65em 1em;line-height:1.33;color:rgba(0,0,0,.8);-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.1)!important;box-shadow:0 0 0 1px rgba(0,0,0,.1)!important;border-radius:.3125em!important}.ui.selection.dropdown select{display:none}.ui.selection.dropdown>.dropdown.icon{opacity:.7;margin:.2em 0 .2em 1.25em;-webkit-transition:opacity .2s ease-out;-moz-transition:opacity .2s ease-out;transition:opacity .2s ease-out}.ui.selection.dropdown,.ui.selection.dropdown .menu{-webkit-transition:-webkit-box-shadow .2s ease-out;-moz-transition:box-shadow .2s ease-out;transition:box-shadow .2s ease-out}.ui.selection.dropdown .menu{top:100%;max-height:312px;overflow-x:hidden;overflow-y:auto;-webkit-box-shadow:0 1px 0 1px #E0E0E0;box-shadow:0 1px 0 1px #E0E0E0;border-radius:0 0 .325em .325em}.ui.selection.dropdown .menu:after,.ui.selection.dropdown .menu:before{display:none}.ui.selection.dropdown .menu img{height:2.5em;display:inline-block;vertical-align:middle;margin-right:.5em}.ui.selection.dropdown.error,.ui.selection.dropdown.error .item{background-color:snow;color:#D95C5C}.ui.selection.dropdown.error{-webkit-box-shadow:0 0 0 1px #e7bebe!important;box-shadow:0 0 0 1px #e7bebe!important}.ui.selection.dropdown.error .menu{-webkit-box-shadow:0 1px 0 1px #E7BEBE;box-shadow:0 1px 0 1px #E7BEBE;border-radius:0 0 .325em .325em}.ui.selection.dropdown.error .menu .active.item{background-color:#FDCFCF!important}.ui.selection.dropdown:hover{-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.2)!important;box-shadow:0 0 0 1px rgba(0,0,0,.2)!important}.ui.selection.dropdown:hover .menu{-webkit-box-shadow:0 1px 0 1px #D3D3D3;box-shadow:0 1px 0 1px #D3D3D3}.ui.selection.dropdown:hover>.dropdown.icon{opacity:1}.ui.selection.dropdown.error:hover{-webkit-box-shadow:0 0 0 1px #e7bebe!important;box-shadow:0 0 0 1px #e7bebe!important}.ui.selection.dropdown.error:hover .menu{-webkit-box-shadow:0 1px 0 1px #E7BEBE;box-shadow:0 1px 0 1px #E7BEBE}.ui.selection.dropdown.error .menu .item.selected,.ui.selection.dropdown.error .menu .item:hover{background-color:#FFF2F2}.ui.visible.selection.dropdown{border-bottom-left-radius:0!important;border-bottom-right-radius:0!important}.ui.active.selection.dropdown{border-radius:.3125em .3125em 0 0!important}.ui.active.selection.dropdown>.dropdown.icon{opacity:1}.ui.fluid.dropdown{display:block}.ui.fluid.dropdown>.dropdown.icon{float:right}.ui.inline.dropdown{cursor:pointer;display:inline-block;color:inherit}.ui.inline.dropdown .dropdown.icon{margin:0 .5em 0 .25em}.ui.inline.dropdown .text{font-weight:700}.ui.inline.dropdown .menu{cursor:auto;margin-top:.25em;border-radius:.325em}.ui.floating.dropdown .menu{left:0;right:auto;margin-top:.5em!important;border-radius:.325em}.ui.pointing.dropdown .menu{top:100%;margin-top:.75em;border-radius:.325em}.ui.pointing.dropdown .menu:after{display:block;position:absolute;pointer-events:none;content:\" \";visibility:visible;width:.5em;height:.5em;-webkit-box-shadow:-1px -1px 0 1px rgba(0,0,0,.05);box-shadow:-1px -1px 0 1px rgba(0,0,0,.05);background-image:none;background-color:#FFF;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);z-index:12}.ui.pointing.dropdown .menu .active.item:first-child{background:-webkit-linear-gradient(transparent,rgba(0,0,0,.03));background:-moz-linear-gradient(transparent,rgba(0,0,0,.03));background:-webkit-gradient(linear,left top,left bottom,from(transparent),to(rgba(0,0,0,.03)));background:linear-gradient(transparent,rgba(0,0,0,.03))}.ui.pointing.dropdown .menu:after{top:-.25em;left:50%;margin:0 0 0 -.25em}.ui.top.left.pointing.dropdown .menu{top:100%;bottom:auto;left:0;right:auto;margin:.75em 0 0}.ui.top.left.pointing.dropdown .menu:after{top:-.25em;left:1.25em;right:auto;margin:0;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg)}.ui.top.right.pointing.dropdown .menu{top:100%;bottom:auto;right:0;left:auto;margin:.75em 0 0}.ui.top.right.pointing.dropdown .menu:after{top:-.25em;left:auto;right:1.25em;margin:0;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg)}.ui.left.pointing.dropdown .menu{top:0;left:100%;right:auto;margin:0 0 0 .75em}.ui.left.pointing.dropdown .menu:after{top:1em;left:-.25em;margin:0;-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);-ms-transform:rotate(-45deg);transform:rotate(-45deg)}.ui.right.pointing.dropdown .menu{top:0;left:auto;right:100%;margin:0 .75em 0 0}.ui.right.pointing.dropdown .menu:after{top:1em;left:auto;right:-.25em;margin:0;-webkit-transform:rotate(135deg);-moz-transform:rotate(135deg);-ms-transform:rotate(135deg);transform:rotate(135deg)}.ui.modal{display:none;position:fixed;z-index:1001;top:50%;left:50%;text-align:left;width:90%;margin-left:-45%;background-color:#FFF;border:1px solid #DDD;border-radius:5px;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.ui.modal>.close{cursor:pointer;position:absolute;z-index:1;opacity:.8;font-size:1.25em;top:-1.75em;right:-1.75em;color:#FFF}.ui.modal>.close:hover{opacity:1}.ui.modal>.header{margin:0;padding:1.5rem 2rem;font-size:1.6em;font-weight:700;border-radius:.325em .325em 0 0}.ui.modal>.content{display:table;width:100%;position:relative;padding:2em;background-color:#F4F4F4;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.ui.modal>.content>.left:not(.ui){display:table-cell;padding-right:1.5%;min-width:25%}.ui.modal>.content>.right:not(.ui){display:table-cell;padding-left:1.5%;vertical-align:top}.ui.modal>.content>.left:not(.ui)>i.icon{font-size:8em;margin:0}.ui.modal>.content p{line-height:1.6}.ui.modal .actions{padding:1rem 2rem;text-align:right}.ui.modal .actions>.button{margin-left:.75em}@media only screen and (max-width:768px){.ui.modal .content>.left:not(.ui){display:block;padding:0 0 1em}.ui.modal .content>.right:not(.ui){display:block;padding:1em 0 0;-webkit-box-shadow:none;box-shadow:none}.ui.modal .content .image{width:auto!important;max-width:100%}.ui.modal .actions{padding-bottom:0}.ui.modal .actions>.button,.ui.modal .actions>.buttons{margin-bottom:1em}}@media only screen and (max-width:998px){.ui.modal{width:92%;margin-left:-46%}.ui.modal>.close{color:rgba(0,0,0,.8);top:1.5rem;right:1rem}}@media only screen and (min-width:998px){.ui.modal{width:74%;margin-left:-37%}}@media only screen and (min-width:1500px){.ui.modal{width:56%;margin-left:-28%}}@media only screen and (min-width:1750px){.ui.modal{width:42%;margin-left:-21%}}@media only screen and (min-width:2000px){.ui.modal{width:36%;margin-left:-18%}}.ui.basic.modal{background-color:transparent;border:none;color:#FFF}.ui.basic.modal>.close{top:1.5rem;right:1rem}.ui.basic.modal .content{background-color:transparent}.ui.modal.scrolling{position:absolute;margin-top:10px}.ui.active.modal{display:block}.ui.small.modal>.header{font-size:1.3em}@media only screen and (min-width:998px){.ui.small.modal{width:58%;margin-left:-29%}}@media only screen and (min-width:1500px){.ui.small.modal{width:40%;margin-left:-20%}}@media only screen and (min-width:1750px){.ui.small.modal{width:26%;margin-left:-13%}}@media only screen and (min-width:2000px){.ui.small.modal{width:20%;margin-left:-10%}}@media only screen and (min-width:998px){.ui.large.modal{width:74%;margin-left:-37%}}@media only screen and (min-width:1500px){.ui.large.modal{width:64%;margin-left:-32%}}@media only screen and (min-width:1750px){.ui.large.modal{width:54%;margin-left:-27%}}@media only screen and (min-width:2000px){.ui.large.modal{width:44%;margin-left:-22%}}.ui.nag{display:none;opacity:.95;position:relative;top:0;left:0;z-index:101;min-height:0;width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;margin:0;line-height:3em;padding:0 1em;background-color:#555;-webkit-box-shadow:0 1px 2px 0 rgba(0,0,0,.2);box-shadow:0 1px 2px 0 rgba(0,0,0,.2);font-size:1em;text-align:center;color:rgba(255,255,255,.8);border-radius:0 0 5px 5px;-webkit-transition:.2s background;-moz-transition:.2s background;transition:.2s background}a.ui.nag{cursor:pointer}.ui.nag>.title{display:inline-block;margin:0 .5em;color:#FFF}.ui.nag>.close.icon{cursor:pointer;opacity:.4;position:absolute;top:50%;right:1em;margin-top:-.5em;color:#FFF;-webkit-transition:.1s opacity;-moz-transition:.1s opacity;transition:.1s opacity}.ui.nag .close:hover,.ui.nag:hover{opacity:1}.ui.overlay.nag{position:absolute;display:block}.ui.fixed.nag{position:fixed}.ui.bottom.nag{border-radius:5px 5px 0 0}.ui.fixed.bottom.nag,.ui.fixed.bottom.nags{top:auto;bottom:0}.ui.white.nag,.ui.white.nags .nag{background-color:#F1F1F1;text-shadow:0 1px 0 rgba(255,255,255,.8);color:#ACACAC}.ui.white.nag .close,.ui.white.nag .title,.ui.white.nags .nag .close,.ui.white.nags .nag .title{color:#333}.ui.nags .nag{border-radius:0}.ui.popup{display:none;position:absolute;top:0;right:0;z-index:900;border:1px solid rgba(0,0,0,.1);max-width:250px;background-color:#FFF;padding:.8em 1.2em;font-size:.875rem;font-weight:400;font-style:normal;color:rgba(0,0,0,.7);border-radius:.2em;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.1);box-shadow:0 1px 2px rgba(0,0,0,.1)}.ui.popup .header{padding:0 0 .5em;font-size:1.125em;line-height:1.2;font-weight:700}.ui.popup:before{position:absolute;content:\"\";width:.75em;height:.75rem;background-image:none;background-color:#FFF;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);z-index:2;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;-webkit-box-shadow:1px 1px 1px rgba(0,0,0,.1);box-shadow:1px 1px 1px rgba(0,0,0,.1)}.ui.popup .ui.button{width:100%}.ui.popup{margin:0}.ui.popup.bottom{margin:.75em 0 0}.ui.popup.top{margin:0 0 .75em}.ui.popup.left.center{margin:0 .75em 0 0}.ui.popup.right.center{margin:0 0 0 .75em}.ui.popup.center{margin-left:-1.25em}.ui.bottom.center.popup:before{margin-left:-.4em;top:-.4em;left:50%;right:auto;bottom:auto;-webkit-box-shadow:-1px -1px 1px rgba(0,0,0,.2);box-shadow:-1px -1px 1px rgba(0,0,0,.2)}.ui.bottom.left.popup{margin-right:-2em}.ui.bottom.left.popup:before{top:-.4em;right:1em;bottom:auto;left:auto;margin-left:0;-webkit-box-shadow:-1px -1px 1px rgba(0,0,0,.2);box-shadow:-1px -1px 1px rgba(0,0,0,.2)}.ui.bottom.right.popup{margin-left:-2em}.ui.bottom.right.popup:before{top:-.4em;left:1em;right:auto;bottom:auto;margin-left:0;-webkit-box-shadow:-1px -1px 1px rgba(0,0,0,.2);box-shadow:-1px -1px 1px rgba(0,0,0,.2)}.ui.top.center.popup:before{top:auto;right:auto;bottom:-.4em;left:50%;margin-left:-.4em}.ui.top.left.popup{margin-right:-2em}.ui.top.left.popup:before{bottom:-.4em;right:1em;top:auto;left:auto;margin-left:0}.ui.top.right.popup{margin-left:-2em}.ui.top.right.popup:before{bottom:-.4em;left:1em;top:auto;right:auto;margin-left:0}.ui.left.center.popup:before{top:50%;right:-.35em;bottom:auto;left:auto;margin-top:-.4em;-webkit-box-shadow:1px -1px 1px rgba(0,0,0,.2);box-shadow:1px -1px 1px rgba(0,0,0,.2)}.ui.right.center.popup:before{top:50%;left:-.35em;bottom:auto;right:auto;margin-top:-.4em;-webkit-box-shadow:-1px 1px 1px rgba(0,0,0,.2);box-shadow:-1px 1px 1px rgba(0,0,0,.2)}.ui.loading.popup{display:block;visibility:hidden}.ui.animating.popup,.ui.visible.popup{display:block}.ui.small.popup{font-size:.75rem}.ui.large.popup{font-size:1rem}.ui.inverted.popup{background-color:#333;border:none;color:#FFF;-webkit-box-shadow:none;box-shadow:none}.ui.inverted.popup .header{background-color:rgba(0,0,0,.2);color:#FFF}.ui.inverted.popup:before{background-color:#333;-webkit-box-shadow:none;box-shadow:none}.ui.rating{display:inline-block;font-size:0;vertical-align:middle;margin:0 .5rem 0 0}.ui.rating:last-child{margin-right:0}.ui.rating:before{display:block;content:'';visibility:hidden;clear:both;height:0}.ui.rating .icon{cursor:pointer;margin:0;width:1em;height:auto;padding:0;color:rgba(0,0,0,.15);font-weight:400;font-style:normal}.ui.rating .icon:before{content:\"\\2605\"}.ui.star.rating .icon{width:1.2em}.ui.star.rating .icon:before{content:'\\f006';font-family:Icons}.ui.star.rating .active.icon:before{content:'\\f005';font-family:Icons}.ui.heart.rating .icon{width:1.2em}.ui.heart.rating .icon:before{content:'\\f08a';font-family:Icons}.ui.heart.rating .active.icon:before{content:'\\f004';font-family:Icons}.ui.heart.rating .active.icon{color:#EF404A!important}.ui.heart.rating .active.hover.icon,.ui.heart.rating .hover.icon{color:#FF2733!important}.ui.disabled.rating .icon{cursor:default}.ui.rating .active.icon{color:#FFCB08!important}.ui.rating.hover .active.icon{opacity:.5}.ui.rating .icon.hover,.ui.rating .icon.hover.active{opacity:1;color:#FFB70A!important}.ui.small.rating .icon{font-size:.75rem}.ui.rating .icon{font-size:1rem}.ui.large.rating .icon{font-size:1.5rem;vertical-align:middle}.ui.huge.rating .icon{font-size:2rem;vertical-align:middle}.ui.search{position:relative;text-shadow:none;font-style:normal;font-weight:400}.ui.search input{border-radius:500rem}.ui.search>.button{position:relative;z-index:2;float:right;margin:0 0 0 -15px;padding:6px 15px 7px;border-radius:0 15px 15px 0;-webkit-box-shadow:none;box-shadow:none}.ui.search .results{display:none;position:absolute;z-index:999;top:100%;left:0;overflow:hidden;background-color:#FFF;margin-top:.5em;width:380px;font-size:.875em;line-height:1.2;color:#555;border-radius:3px;-webkit-box-shadow:0 0 1px 1px rgba(0,0,0,.1),0 -2px 0 0 rgba(0,0,0,.1) inset;box-shadow:0 0 1px 1px rgba(0,0,0,.1),0 -2px 0 0 rgba(0,0,0,.1) inset}.ui.search .result{cursor:pointer;overflow:hidden;padding:.5em 1em}.ui.search .result:first-child{border-top:none}.ui.search .result .image{background:#F0F0F0;margin-right:10px;float:left;overflow:hidden;border-radius:3px;width:38px;height:38px}.ui.search .result .image img{display:block;width:38px;height:38px}.ui.search .result .image~.info{float:none;margin-left:50px}.ui.search .result .info{float:left}.ui.search .result .title{font-weight:700;color:rgba(0,0,0,.8)}.ui.search .result .description{color:rgba(0,0,0,.6)}.ui.search .result .price{float:right;color:#5BBD72;font-weight:700}.ui.search .message{padding:1em}.ui.search .message .text .title{margin:0 0 .5rem;font-size:1.25rem;font-weight:700;color:rgba(0,0,0,.8)}.ui.search .message .text .description{margin:0;font-size:1rem;color:rgba(0,0,0,.5)}.ui.search .results .category{background-color:#FAFAFA;border-top:1px solid rgba(0,0,0,.1);-webkit-transition:background .2s ease-in;-moz-transition:background .2s ease-in;transition:background .2s ease-in}.ui.search .results .category:first-child{border-top:none}.ui.search .results .category>.name{float:left;padding:12px 0 0 8px;font-weight:700;color:#777;text-shadow:0 1px 0 rgba(255,255,255,.8)}.ui.search .results .category .result{background-color:#FFF;margin-left:80px;border-left:1px solid rgba(0,0,0,.1)}.ui.search .all{display:block;border-top:1px solid rgba(0,0,0,.1);background-color:#FAFAFA;height:2em;line-height:2em;color:rgba(0,0,0,.6);font-weight:700;text-align:center}.ui.search .category .result:hover,.ui.search .result:hover{background-color:#F8F8F8}.ui.search .all:hover{background-color:#F0F0F0}.ui.search.loading .input .icon{background:url(/static/ca279c55a51ab2641c4712a333633581.gif) 50% 50% no-repeat}.ui.search.loading .input .icon:after,.ui.search.loading .input .icon:before{display:none}.ui.search .results .category.active{background-color:#F1F1F1}.ui.search .results .category.active>.name{color:#333}.ui.search .category .result.active,.ui.search .result.active{background-color:#FBFBFB}.ui.search .result.active .title{color:#000}.ui.search .result.active .description{color:#555}.ui.search .large.result .image,.ui.search .large.result .image img{width:50px;height:50px}.ui.search .large.results .indented.info{margin-left:65px}.ui.search .large.results .info .title{font-size:16px}.ui.search .large.results .info .description{font-size:11px}.ui.shape{display:inline-block;position:relative;-webkit-perspective:2000px;-moz-perspective:2000px;-ms-perspective:2000px;perspective:2000px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.ui.shape .sides{-webkit-transform-style:preserve-3d;-moz-transform-style:preserve-3d;-ms-transform-style:preserve-3d;transform-style:preserve-3d}.ui.shape .side{opacity:1;width:100%;margin:0!important;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;backface-visibility:hidden;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;display:none}.ui.cube.shape .side{min-width:15em;height:15em;padding:2em;background-color:#E6E6E6;color:rgba(0,0,0,.6);-webkit-box-shadow:0 0 2px rgba(0,0,0,.3);box-shadow:0 0 2px rgba(0,0,0,.3)}.ui.cube.shape .side>.content{width:100%;height:100%;display:table;text-align:center;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.ui.cube.shape .side>.content>div{display:table-cell;vertical-align:middle;font-size:2em}.ui.text.shape.animating .sides{position:static}.ui.text.shape .side{white-space:nowrap}.ui.text.shape .side>*{white-space:normal}.ui.loading.shape{position:absolute;top:-9999px;left:-9999px}.ui.shape .animating.side{position:absolute;top:0;left:0;z-index:100}.ui.shape .hidden.side{opacity:.4}.ui.shape.animating{-webkit-transition:all .6s ease-in-out;-moz-transition:all .6s ease-in-out;transition:all .6s ease-in-out}.ui.shape.animating .sides{position:absolute;-webkit-transition:all .6s ease-in-out;-moz-transition:all .6s ease-in-out;transition:all .6s ease-in-out}.ui.shape.animating .side{-webkit-transition:opacity .6s ease-in-out;-moz-transition:opacity .6s ease-in-out;transition:opacity .6s ease-in-out}.ui.shape .active.side{display:block}body{-webkit-transition:margin .3s ease,-webkit-transform .3s ease;-moz-transition:margin .3s ease,-moz-transform .3s ease;transition:margin .3s ease,transform .3s ease}.ui.sidebar{position:fixed;margin:0!important;height:100%!important;border-radius:0!important;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;-ms-overflow-y:auto;overflow-y:auto;top:0;left:0;z-index:999;-webkit-transition:margin-left .3s ease,margin-top .3s ease;-moz-transition:margin-left .3s ease,margin-top .3s ease;transition:margin-left .3s ease,margin-top .3s ease}body.pushed.scrolling.ui.dimmable{position:static}.ui.right.sidebar,.ui.right.thin.sidebar,.ui.right.very.thin.sidebar,.ui.right.very.wide.sidebar,.ui.right.wide.sidebar{left:100%;margin:0!important}.ui.top.sidebar{width:100%!important}.ui.bottom.sidebar{width:100%!important;top:100%;margin:0!important}.ui.active.bottom.sidebar,.ui.active.top.sidebar{margin-top:0!important}.ui.styled.sidebar{padding:1em 1.5em;background-color:#FFF;-webkit-box-shadow:1px 0 0 rgba(0,0,0,.1);box-shadow:1px 0 0 rgba(0,0,0,.1)}.ui.styled.very.thin.sidebar{padding:.5em}.ui.styled.thin.sidebar{padding:1em}.ui.floating.sidebar{-webkit-box-shadow:2px 0 2px rgba(0,0,0,.2);box-shadow:2px 0 2px rgba(0,0,0,.2)}.ui.right.floating.sidebar{-webkit-box-shadow:-2px 0 2px rgba(0,0,0,.2);box-shadow:-2px 0 2px rgba(0,0,0,.2)}.ui.top.floating.sidebar{-webkit-box-shadow:0 4px 4px rgba(0,0,0,.2);box-shadow:0 4px 4px rgba(0,0,0,.2)}.ui.bottom.floating.sidebar{-webkit-box-shadow:0 -4px 4px rgba(0,0,0,.2);box-shadow:0 -4px 4px rgba(0,0,0,.2)}.ui.very.thin.sidebar{width:60px!important;margin-left:-60px!important}.ui.active.very.thin.sidebar{margin-left:0!important}.ui.active.right.very.thin.sidebar{margin-left:-60px!important}.ui.thin.sidebar{width:200px!important;margin-left:-200px!important}.ui.active.thin.sidebar{margin-left:0!important}.ui.active.right.thin.sidebar{margin-left:-200px!important}.ui.sidebar{width:275px!important;margin-left:-275px!important}.ui.active.sidebar{margin-left:0!important}.ui.active.right.sidebar{margin-left:-275px!important}.ui.wide.sidebar{width:350px!important;margin-left:-350px!important}.ui.active.wide.sidebar{margin-left:0!important}.ui.active.right.wide.sidebar{margin-left:-350px!important}.ui.very.wide.sidebar{width:475px!important;margin-left:-475px!important}.ui.active.very.wide.sidebar{margin-left:0!important}.ui.active.right.very.wide.sidebar{margin-left:-475px!important}.ui.top.sidebar{margin:-40px 0 0!important}.ui.bottom.sidebar,.ui.top.sidebar{height:40px!important}.ui.active.bottom.sidebar{margin-top:-40px!important}.ui.tab{display:none}.ui.tab.active,.ui.tab.open{display:block}.ui.tab.loading{position:relative;overflow:hidden;display:block;min-height:250px;text-indent:-10000px}.ui.tab.loading *{position:relative!important;left:-10000px!important}.ui.tab.loading:after{position:absolute;top:50px;left:50%;content:'Loading...';margin-left:-32px;text-indent:5px;color:rgba(0,0,0,.4);width:100%;height:100%;padding-top:75px;background:url(/static/9af25aaeb6ca6d08d213b04841813eb5.gif) no-repeat;visibility:visible}.ui.transition{-webkit-animation-iteration-count:1;-moz-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-duration:1s;-moz-animation-duration:1s;animation-duration:1s;-webkit-animation-timing-function:ease;-moz-animation-timing-function:ease;animation-timing-function:ease;-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;animation-fill-mode:both}.ui.animating.transition{display:block;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform:translateZ(0);-moz-transform:translateZ(0);transform:translateZ(0)}.ui.loading.transition{position:absolute;top:-999999px;left:-99999px}.ui.hidden.transition{display:none!important}.ui.visible.transition{display:block;visibility:visible}.ui.disabled.transition{-webkit-animation-play-state:paused;-moz-animation-play-state:paused;animation-play-state:paused}.ui.looping.transition{-webkit-animation-iteration-count:infinite;-moz-animation-iteration-count:infinite;animation-iteration-count:infinite}.ui.flash.transition{-webkit-animation-name:flash;-moz-animation-name:flash;animation-name:flash}.ui.shake.transition{-webkit-animation-name:shake;-moz-animation-name:shake;animation-name:shake}.ui.bounce.transition{-webkit-animation-name:bounce;-moz-animation-name:bounce;animation-name:bounce}.ui.tada.transition{-webkit-animation-name:tada;-moz-animation-name:tada;animation-name:tada}.ui.pulse.transition{-webkit-animation-name:pulse;-moz-animation-name:pulse;animation-name:pulse}.ui.flip.transition.in,.ui.flip.transition.out{-webkit-perspective:2000px;-moz-perspective:2000px;perspective:2000px}.ui.horizontal.flip.transition.in,.ui.horizontal.flip.transition.out{-webkit-animation-name:horizontalFlip;-moz-animation-name:horizontalFlip;animation-name:horizontalFlip}.ui.horizontal.flip.transition.out{-webkit-animation-name:horizontalFlipOut;-moz-animation-name:horizontalFlipOut;animation-name:horizontalFlipOut}.ui.vertical.flip.transition.in,.ui.vertical.flip.transition.out{-webkit-animation-name:verticalFlip;-moz-animation-name:verticalFlip;animation-name:verticalFlip}.ui.vertical.flip.transition.out{-webkit-animation-name:verticalFlipOut;-moz-animation-name:verticalFlipOut;animation-name:verticalFlipOut}.ui.fade.transition.in{-webkit-animation-name:fade;-moz-animation-name:fade;animation-name:fade}.ui.fade.transition.out{-webkit-animation-name:fadeOut;-moz-animation-name:fadeOut;animation-name:fadeOut}.ui.fade.up.transition.in{-webkit-animation-name:fadeUp;-moz-animation-name:fadeUp;animation-name:fadeUp}.ui.fade.up.transition.out{-webkit-animation-name:fadeUpOut;-moz-animation-name:fadeUpOut;animation-name:fadeUpOut}.ui.fade.down.transition.in{-webkit-animation-name:fadeDown;-moz-animation-name:fadeDown;animation-name:fadeDown}.ui.fade.down.transition.out{-webkit-animation-name:fadeDownOut;-moz-animation-name:fadeDownOut;animation-name:fadeDownOut}.ui.fade.left.transition.in{-webkit-animation-name:fadeLeft;-moz-animation-name:fadeLeft;animation-name:fadeLeft}.ui.fade.left.transition.out{-webkit-animation-name:fadeLeftOut;-moz-animation-name:fadeLeftOut;animation-name:fadeLeftOut}.ui.fade.right.transition.in{-webkit-animation-name:fadeRight;-moz-animation-name:fadeRight;animation-name:fadeRight}.ui.fade.right.transition.out{-webkit-animation-name:fadeRightOut;-moz-animation-name:fadeRightOut;animation-name:fadeRightOut}.ui.scale.transition.in{-webkit-animation-name:scale;-moz-animation-name:scale;animation-name:scale}.ui.scale.transition.out{-webkit-animation-name:scaleOut;-moz-animation-name:scaleOut;animation-name:scaleOut}.ui.slide.down.transition.in{-webkit-animation-name:slide;-moz-animation-name:slide;animation-name:slide;-moz-transform-origin:50% 0;transform-origin:50% 0;-ms-transform-origin:50% 0;-webkit-transform-origin:50% 0}.ui.slide.down.transition.out{-webkit-animation-name:slideOut;-moz-animation-name:slideOut;animation-name:slideOut;-webkit-transform-origin:50% 0;-moz-transform-origin:50% 0;-ms-transform-origin:50% 0;transform-origin:50% 0}.ui.slide.up.transition.in{-webkit-animation-name:slide;-moz-animation-name:slide;animation-name:slide;-webkit-transform-origin:50% 100%;-moz-transform-origin:50% 100%;-ms-transform-origin:50% 100%;transform-origin:50% 100%}.ui.slide.up.transition.out{-webkit-animation-name:slideOut;-moz-animation-name:slideOut;animation-name:slideOut;-webkit-transform-origin:50% 100%;-moz-transform-origin:50% 100%;-ms-transform-origin:50% 100%;transform-origin:50% 100%}@-webkit-keyframes slide{0%{opacity:0;-webkit-transform:scaleY(0);transform:scaleY(0)}100%{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1)}}@-moz-keyframes slide{0%{opacity:0;-moz-transform:scaleY(0);transform:scaleY(0)}100%{opacity:1;-moz-transform:scaleY(1);transform:scaleY(1)}}@keyframes slide{0%{opacity:0;-webkit-transform:scaleY(0);-moz-transform:scaleY(0);transform:scaleY(0)}100%{opacity:1;-webkit-transform:scaleY(1);-moz-transform:scaleY(1);transform:scaleY(1)}}@-webkit-keyframes slideOut{0%{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1)}100%{opacity:0;-webkit-transform:scaleY(0);transform:scaleY(0)}}@-moz-keyframes slideOut{0%{opacity:1;-moz-transform:scaleY(1);transform:scaleY(1)}100%{opacity:0;-moz-transform:scaleY(0);transform:scaleY(0)}}@keyframes slideOut{0%{opacity:1;-webkit-transform:scaleY(1);-moz-transform:scaleY(1);transform:scaleY(1)}100%{opacity:0;-webkit-transform:scaleY(0);-moz-transform:scaleY(0);transform:scaleY(0)}}@-webkit-keyframes flash{0%,100%,50%{opacity:1}25%,75%{opacity:0}}@-moz-keyframes flash{0%,100%,50%{opacity:1}25%,75%{opacity:0}}@keyframes flash{0%,100%,50%{opacity:1}25%,75%{opacity:0}}@-webkit-keyframes shake{0%,100%{-webkit-transform:translateX(0);transform:translateX(0)}10%,30%,50%,70%,90%{-webkit-transform:translateX(-10px);transform:translateX(-10px)}20%,40%,60%,80%{-webkit-transform:translateX(10px);transform:translateX(10px)}}@-moz-keyframes shake{0%,100%{-moz-transform:translateX(0);transform:translateX(0)}10%,30%,50%,70%,90%{-moz-transform:translateX(-10px);transform:translateX(-10px)}20%,40%,60%,80%{-moz-transform:translateX(10px);transform:translateX(10px)}}@keyframes shake{0%,100%{-webkit-transform:translateX(0);-moz-transform:translateX(0);transform:translateX(0)}10%,30%,50%,70%,90%{-webkit-transform:translateX(-10px);-moz-transform:translateX(-10px);transform:translateX(-10px)}20%,40%,60%,80%{-webkit-transform:translateX(10px);-moz-transform:translateX(10px);transform:translateX(10px)}}@-webkit-keyframes bounce{0%,100%,20%,50%,80%{-webkit-transform:translateY(0);transform:translateY(0)}40%{-webkit-transform:translateY(-30px);transform:translateY(-30px)}60%{-webkit-transform:translateY(-15px);transform:translateY(-15px)}}@-moz-keyframes bounce{0%,100%,20%,50%,80%{-moz-transform:translateY(0);transform:translateY(0)}40%{-moz-transform:translateY(-30px);transform:translateY(-30px)}60%{-moz-transform:translateY(-15px);transform:translateY(-15px)}}@keyframes bounce{0%,100%,20%,50%,80%{-webkit-transform:translateY(0);-moz-transform:translateY(0);transform:translateY(0)}40%{-webkit-transform:translateY(-30px);-moz-transform:translateY(-30px);transform:translateY(-30px)}60%{-webkit-transform:translateY(-15px);-moz-transform:translateY(-15px);transform:translateY(-15px)}}@-webkit-keyframes tada{0%{-webkit-transform:scale(1);transform:scale(1)}10%,20%{-webkit-transform:scale(0.9) rotate(-3deg);transform:scale(0.9) rotate(-3deg)}30%,50%,70%,90%{-webkit-transform:scale(1.1) rotate(3deg);transform:scale(1.1) rotate(3deg)}40%,60%,80%{-webkit-transform:scale(1.1) rotate(-3deg);transform:scale(1.1) rotate(-3deg)}100%{-webkit-transform:scale(1) rotate(0);transform:scale(1) rotate(0)}}@-moz-keyframes tada{0%{-moz-transform:scale(1);transform:scale(1)}10%,20%{-moz-transform:scale(0.9) rotate(-3deg);transform:scale(0.9) rotate(-3deg)}30%,50%,70%,90%{-moz-transform:scale(1.1) rotate(3deg);transform:scale(1.1) rotate(3deg)}40%,60%,80%{-moz-transform:scale(1.1) rotate(-3deg);transform:scale(1.1) rotate(-3deg)}100%{-moz-transform:scale(1) rotate(0);transform:scale(1) rotate(0)}}@keyframes tada{0%{-webkit-transform:scale(1);-moz-transform:scale(1);transform:scale(1)}10%,20%{-webkit-transform:scale(0.9) rotate(-3deg);-moz-transform:scale(0.9) rotate(-3deg);transform:scale(0.9) rotate(-3deg)}30%,50%,70%,90%{-webkit-transform:scale(1.1) rotate(3deg);-moz-transform:scale(1.1) rotate(3deg);transform:scale(1.1) rotate(3deg)}40%,60%,80%{-webkit-transform:scale(1.1) rotate(-3deg);-moz-transform:scale(1.1) rotate(-3deg);transform:scale(1.1) rotate(-3deg)}100%{-webkit-transform:scale(1) rotate(0);-moz-transform:scale(1) rotate(0);transform:scale(1) rotate(0)}}@-webkit-keyframes pulse{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}50%{-webkit-transform:scale(0.9);transform:scale(0.9);opacity:.7}100%{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@-moz-keyframes pulse{0%{-moz-transform:scale(1);transform:scale(1);opacity:1}50%{-moz-transform:scale(0.9);transform:scale(0.9);opacity:.7}100%{-moz-transform:scale(1);transform:scale(1);opacity:1}}@keyframes pulse{0%{-webkit-transform:scale(1);-moz-transform:scale(1);transform:scale(1);opacity:1}50%{-webkit-transform:scale(0.9);-moz-transform:scale(0.9);transform:scale(0.9);opacity:.7}100%{-webkit-transform:scale(1);-moz-transform:scale(1);transform:scale(1);opacity:1}}@-webkit-keyframes horizontalFlip{0%{-webkit-transform:rotateY(-90deg);transform:rotateY(-90deg);opacity:0}100%{-webkit-transform:rotateY(0deg);transform:rotateY(0deg);opacity:1}}@-moz-keyframes horizontalFlip{0%{-moz-transform:rotateY(-90deg);transform:rotateY(-90deg);opacity:0}100%{-moz-transform:rotateY(0deg);transform:rotateY(0deg);opacity:1}}@keyframes horizontalFlip{0%{-webkit-transform:rotateY(-90deg);-moz-transform:rotateY(-90deg);transform:rotateY(-90deg);opacity:0}100%{-webkit-transform:rotateY(0deg);-moz-transform:rotateY(0deg);transform:rotateY(0deg);opacity:1}}@-webkit-keyframes horizontalFlipOut{0%{-webkit-transform:rotateY(0deg);transform:rotateY(0deg);opacity:1}100%{-webkit-transform:rotateY(90deg);transform:rotateY(90deg);opacity:0}}@-moz-keyframes horizontalFlipOut{0%{-moz-transform:rotateY(0deg);transform:rotateY(0deg);opacity:1}100%{-moz-transform:rotateY(90deg);transform:rotateY(90deg);opacity:0}}@keyframes horizontalFlipOut{0%{-webkit-transform:rotateY(0deg);-moz-transform:rotateY(0deg);transform:rotateY(0deg);opacity:1}100%{-webkit-transform:rotateY(90deg);-moz-transform:rotateY(90deg);transform:rotateY(90deg);opacity:0}}@-webkit-keyframes verticalFlip{0%{-webkit-transform:rotateX(-90deg);transform:rotateX(-90deg);opacity:0}100%{-webkit-transform:rotateX(0deg);transform:rotateX(0deg);opacity:1}}@-moz-keyframes verticalFlip{0%{-moz-transform:rotateX(-90deg);transform:rotateX(-90deg);opacity:0}100%{-moz-transform:rotateX(0deg);transform:rotateX(0deg);opacity:1}}@keyframes verticalFlip{0%{-webkit-transform:rotateX(-90deg);-moz-transform:rotateX(-90deg);transform:rotateX(-90deg);opacity:0}100%{-webkit-transform:rotateX(0deg);-moz-transform:rotateX(0deg);transform:rotateX(0deg);opacity:1}}@-webkit-keyframes verticalFlipOut{0%{-webkit-transform:rotateX(0deg);transform:rotateX(0deg);opacity:1}100%{-webkit-transform:rotateX(-90deg);transform:rotateX(-90deg);opacity:0}}@-moz-keyframes verticalFlipOut{0%{-moz-transform:rotateX(0deg);transform:rotateX(0deg);opacity:1}100%{-moz-transform:rotateX(-90deg);transform:rotateX(-90deg);opacity:0}}@keyframes verticalFlipOut{0%{-webkit-transform:rotateX(0deg);-moz-transform:rotateX(0deg);transform:rotateX(0deg);opacity:1}100%{-webkit-transform:rotateX(-90deg);-moz-transform:rotateX(-90deg);transform:rotateX(-90deg);opacity:0}}@-webkit-keyframes fade{0%{opacity:0}100%{opacity:1}}@-moz-keyframes fade{0%{opacity:0}100%{opacity:1}}@keyframes fade{0%{opacity:0}100%{opacity:1}}@-webkit-keyframes fadeOut{0%{opacity:1}100%{opacity:0}}@-moz-keyframes fadeOut{0%{opacity:1}100%{opacity:0}}@keyframes fadeOut{0%{opacity:1}100%{opacity:0}}@-webkit-keyframes fadeUp{0%{opacity:0;-webkit-transform:translateY(20px);transform:translateY(20px)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@-moz-keyframes fadeUp{0%{opacity:0;-moz-transform:translateY(20px);transform:translateY(20px)}100%{opacity:1;-moz-transform:translateY(0);transform:translateY(0)}}@keyframes fadeUp{0%{opacity:0;-webkit-transform:translateY(20px);-moz-transform:translateY(20px);transform:translateY(20px)}100%{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);transform:translateY(0)}}@-webkit-keyframes fadeUpOut{0%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}100%{opacity:0;-webkit-transform:translateY(20px);transform:translateY(20px)}}@-moz-keyframes fadeUpOut{0%{opacity:1;-moz-transform:translateY(0);transform:translateY(0)}100%{opacity:0;-moz-transform:translateY(20px);transform:translateY(20px)}}@keyframes fadeUpOut{0%{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);transform:translateY(0)}100%{opacity:0;-webkit-transform:translateY(20px);-moz-transform:translateY(20px);transform:translateY(20px)}}@-webkit-keyframes fadeDown{0%{opacity:0;-webkit-transform:translateY(-20px);transform:translateY(-20px)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@-moz-keyframes fadeDown{0%{opacity:0;-moz-transform:translateY(-20px);transform:translateY(-20px)}100%{opacity:1;-moz-transform:translateY(0);transform:translateY(0)}}@keyframes fadeDown{0%{opacity:0;-webkit-transform:translateY(-20px);-moz-transform:translateY(-20px);transform:translateY(-20px)}100%{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);transform:translateY(0)}}@-webkit-keyframes fadeDownOut{0%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}100%{opacity:0;-webkit-transform:translateY(-20px);transform:translateY(-20px)}}@-moz-keyframes fadeDownOut{0%{opacity:1;-moz-transform:translateY(0);transform:translateY(0)}100%{opacity:0;-moz-transform:translateY(-20px);transform:translateY(-20px)}}@keyframes fadeDownOut{0%{opacity:1;-webkit-transform:translateY(0);-moz-transform:translateY(0);transform:translateY(0)}100%{opacity:0;-webkit-transform:translateY(-20px);-moz-transform:translateY(-20px);transform:translateY(-20px)}}@-webkit-keyframes fadeLeft{0%{opacity:0;-webkit-transform:translateX(-20px);transform:translateX(-20px)}100%{opacity:1;-webkit-transform:translateX(0);transform:translateX(0)}}@-moz-keyframes fadeLeft{0%{opacity:0;-moz-transform:translateX(-20px);transform:translateX(-20px)}100%{opacity:1;-moz-transform:translateX(0);transform:translateX(0)}}@keyframes fadeLeft{0%{opacity:0;-webkit-transform:translateX(-20px);-moz-transform:translateX(-20px);transform:translateX(-20px)}100%{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);transform:translateX(0)}}@-webkit-keyframes fadeLeftOut{0%{opacity:1;-webkit-transform:translateX(0);transform:translateX(0)}100%{opacity:0;-webkit-transform:translateX(-20px);transform:translateX(-20px)}}@-moz-keyframes fadeLeftOut{0%{opacity:1;-moz-transform:translateX(0);transform:translateX(0)}100%{opacity:0;-moz-transform:translateX(-20px);transform:translateX(-20px)}}@keyframes fadeLeftOut{0%{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);transform:translateX(0)}100%{opacity:0;-webkit-transform:translateX(-20px);-moz-transform:translateX(-20px);transform:translateX(-20px)}}@-webkit-keyframes fadeRight{0%{opacity:0;-webkit-transform:translateX(20px);transform:translateX(20px)}100%{opacity:1;-webkit-transform:translateX(0);transform:translateX(0)}}@-moz-keyframes fadeRight{0%{opacity:0;-moz-transform:translateX(20px);transform:translateX(20px)}100%{opacity:1;-moz-transform:translateX(0);transform:translateX(0)}}@keyframes fadeRight{0%{opacity:0;-webkit-transform:translateX(20px);-moz-transform:translateX(20px);transform:translateX(20px)}100%{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);transform:translateX(0)}}@-webkit-keyframes fadeRightOut{0%{opacity:1;-webkit-transform:translateX(0);transform:translateX(0)}100%{opacity:0;-webkit-transform:translateX(20px);transform:translateX(20px)}}@-moz-keyframes fadeRightOut{0%{opacity:1;-moz-transform:translateX(0);transform:translateX(0)}100%{opacity:0;-moz-transform:translateX(20px);transform:translateX(20px)}}@keyframes fadeRightOut{0%{opacity:1;-webkit-transform:translateX(0);-moz-transform:translateX(0);transform:translateX(0)}100%{opacity:0;-webkit-transform:translateX(20px);-moz-transform:translateX(20px);transform:translateX(20px)}}@-webkit-keyframes scale{0%{opacity:0;-webkit-transform:scale(0.7);transform:scale(0.7)}100%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@-moz-keyframes scale{0%{opacity:0;-moz-transform:scale(0.7);transform:scale(0.7)}100%{opacity:1;-moz-transform:scale(1);transform:scale(1)}}@keyframes scale{0%{opacity:0;-webkit-transform:scale(0.7);-moz-transform:scale(0.7);transform:scale(0.7)}100%{opacity:1;-webkit-transform:scale(1);-moz-transform:scale(1);transform:scale(1)}}@-webkit-keyframes scaleOut{0%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}100%{opacity:0;-webkit-transform:scale(0.7);transform:scale(0.7)}}@-moz-keyframes scaleOut{0%{opacity:1;-moz-transform:scale(1);transform:scale(1)}100%{opacity:0;-moz-transform:scale(0.7);transform:scale(0.7)}}@keyframes scaleOut{0%{opacity:1;-webkit-transform:scale(1);-moz-transform:scale(1);transform:scale(1)}100%{opacity:0;-webkit-transform:scale(0.7);-moz-transform:scale(0.7);transform:scale(0.7)}}.ui.video{position:relative;max-width:100%}.ui.video .placeholder{background-color:#333}.ui.video .play{cursor:pointer;position:absolute;top:0;left:0;z-index:10;width:100%;height:100%;-ms-filter:\"alpha(Opacity=60)\";filter:alpha(opacity=60);opacity:.6;-webkit-transition:opacity .3s;-moz-transition:opacity .3s;transition:opacity .3s}.ui.video .play.icon:before{position:absolute;top:50%;left:50%;z-index:11;font-size:6rem;margin:-3rem 0 0 -3rem;color:#FFF;text-shadow:0 3px 3px rgba(0,0,0,.4)}.ui.video .placeholder{display:block;width:100%;height:100%}.ui.video .embed{display:none}.ui.video .play:hover{opacity:1}.ui.video.active .placeholder,.ui.video.active .play{display:none}.ui.video.active .embed{display:block}.ui.comments a{cursor:pointer}.ui.comments .comment{position:relative;margin-top:.5em;padding-top:.5em}.ui.comments .comment:first-child{margin-top:0;padding-top:0}.ui.comments .comment .avatar{display:block;float:left;width:4em}.ui.comments .comment .avatar img{display:block;margin:0 auto;width:3em;height:3em;border-radius:500px}.ui.comments .comment>.avatar,.ui.comments .comment>.content{display:block}.ui.comments .comment .avatar~.content{padding:0 1em}.ui.comments .comment>.avatar~.content{padding-top:.25em;margin-left:3.5em}.ui.comments .comment .metadata{display:inline-block;margin-left:.3em;color:rgba(0,0,0,.4)}.ui.comments .comment .metadata>*{display:inline-block;margin:0 .3em 0 0}.ui.comments .comment .text{margin:.25em 0 .5em;word-wrap:break-word}.ui.comments .comment .actions{font-size:.9em}.ui.comments .comment .actions a{display:inline-block;margin:0 .3em 0 0;color:rgba(0,0,0,.3)}.ui.comments .comment .actions a.active,.ui.comments .comment .actions a:hover{color:rgba(0,0,0,.6)}.ui.comments .reply.form{margin-top:.75em;width:100%;max-width:30em}.ui.comments .comment .reply.form{margin-left:2em}.ui.comments>.reply.form{margin-top:1.5em;max-width:40em}.ui.comments .reply.form textarea{height:12em}.ui.comments .comment .comments{margin-top:.5em;padding-top:.5em;padding-bottom:1em}.ui.comments .comment .comments:before{position:absolute;top:0;left:0}.ui.comments>.comment .comments{margin-left:2em}.ui.comments>.comment>.comments>.comment>.comments{margin-left:1.75em}.ui.comments>.comment>.comments>.comment>.comments>.comment>.comments{margin-left:1.5em}.ui.comments>.comment>.comments>.comment>.comments>.comment>.comments>.comment .comments{margin-left:.5em}.ui.threaded.comments .comment .comments{margin-left:2em!important;padding-left:2em!important;-webkit-box-shadow:-1px 0 0 rgba(0,0,0,.05);box-shadow:-1px 0 0 rgba(0,0,0,.05)}.ui.minimal.comments .comment .actions{opacity:0;-webkit-transition:opacity .1s ease-out;-moz-transition:opacity .1s ease-out;transition:opacity .1s ease-out;-webkit-transition-delay:.1s;-moz-transition-delay:.1s;transition-delay:.1s}.ui.minimal.comments .comment>.content:hover>.actions{opacity:1}.ui.small.comments{font-size:.875em}.ui.feed a{cursor:pointer}.ui.feed,.ui.feed .content,.ui.feed .event,.ui.feed .extra,.ui.feed .label{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.ui.feed .event{width:100%;display:table}.ui.feed .event:first-child{border-top:0}.ui.feed .event:last-child{margin-bottom:1em}.ui.feed .label{width:3em;display:table-cell;vertical-align:top;text-align:left}.ui.feed .label .icon{font-size:1.5em;padding:.5em;margin:0}.ui.feed .label img{width:3em;margin:0;border-radius:50em}.ui.feed .label+.content{padding:.75em 1em 0}.ui.feed .content{display:table-cell;vertical-align:top;text-align:left;word-wrap:break-word}.ui.feed .content .date{float:right;padding-left:1em;color:rgba(0,0,0,.4)}.ui.feed .content .summary{color:rgba(0,0,0,.75)}.ui.feed .content .summary img{display:inline-block;margin-right:.25em;width:4em;border-radius:500px}.ui.feed .content .extra{margin:1em 0 0;padding:.5em 0 0;color:rgba(0,0,0,.5)}.ui.feed .content .extra.images img{display:inline-block;margin-right:.25em;width:6em}.ui.feed .content .extra.text{padding:.5em 1em;border-left:.2em solid rgba(0,0,0,.1)}.ui.small.feed{font-size:.875em}.ui.small.feed .label img{width:2.5em}.ui.small.feed .label .icon{font-size:1.25em}.ui.feed .event{padding:.75em 0}.ui.small.feed .label+.content{padding:.5em .5em 0}.ui.small.feed .content .extra.images img{width:5em}.ui.small.feed .content .extra{margin:.5em 0 0}.ui.small.feed .content .extra.text{padding:.25em .5em}.ui.items{margin:1em 0 0}.ui.items:first-child{margin-top:0}.ui.items:last-child{margin-bottom:-1em}.ui.items:after{display:block;content:' ';height:0;clear:both;overflow:hidden;visibility:hidden}.ui.items>.item,.ui.items>.row>.item{display:block;float:left;position:relative;top:0;width:316px;min-height:375px;margin:0 .5em 2.5em;background-color:#FFF;line-height:1.2;font-size:1em;-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.1);box-shadow:0 0 0 1px rgba(0,0,0,.1);border-bottom:.2em solid rgba(0,0,0,.2);border-radius:.33em;-webkit-transition:-webkit-box-shadow .2s ease;-moz-transition:box-shadow .2s ease;transition:box-shadow .2s ease;padding:.5em}.ui.items .item a,.ui.items a.item{cursor:pointer}.ui.items .item,.ui.items .item>.content,.ui.items .item>.content>.extra,.ui.items .item>.content>.meta,.ui.items .item>.image,.ui.items .item>.image .overlay{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.ui.items .item>.image{display:block;position:relative;background-color:rgba(0,0,0,.05);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;border-radius:.2em}.ui.items .item>.image>img{display:block;width:100%}.ui.items .item>.content{padding:.75em .5em}.ui.items .item>.content>.name{display:block;font-size:1.25em;font-weight:700;margin-bottom:.2em;color:rgba(0,0,0,.7)}.ui.items .item>.content>.description{clear:both;margin:0;color:rgba(0,0,0,.45)}.ui.items .item>.content>.description p{margin:0 0 .2em}.ui.items .item>.content>.description p:last-child{margin-bottom:0}.ui.items .item .meta{float:right;color:rgba(0,0,0,.35)}.ui.items .item>.content>.meta+.name{float:left}.ui.items .item .star.label:hover::after{border-right-color:#F6EFC3;border-top-color:#F6EFC3}.ui.items .item .star.label:hover .icon{color:#ac9400}.ui.items .item .star.label.active::after{border-right-color:#F6EFC3;border-top-color:#F6EFC3}.ui.items .item .star.label.active .icon{color:#ac9400}.ui.items .item .like.label:hover::after{border-right-color:#F5E1E2}.ui.items .item .like.label:hover .icon{color:#ef404a}.ui.items .item .like.label.active::after{border-right-color:#F5E1E2;border-top-color:#F5E1E2}.ui.items .item .like.label.active .icon{color:#ef404a}.ui.items .item .extra{position:absolute;width:100%;padding:0 .5em;bottom:-2em;left:0;height:1.5em;color:rgba(0,0,0,.25);-webkit-transition:color .2s ease;-moz-transition:color .2s ease;transition:color .2s ease}.ui.items .item .extra>img{display:inline-block;border-radius:500px;margin-right:.25em;vertical-align:middle;width:2em}.ui.items .item .extra .left{float:left}.ui.items .item .extra .right{float:right}.ui.items .item:hover{cursor:pointer;z-index:5;-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.2);box-shadow:0 0 0 1px rgba(0,0,0,.2)}.ui.items .item:hover .extra{color:rgba(0,0,0,.5)}.ui.items .item:nth-of-type(6n+1):hover{border-bottom-color:#6ECFF5!important}.ui.items .item:nth-of-type(6n+2):hover{border-bottom-color:#5C6166!important}.ui.items .item:nth-of-type(6n+3):hover{border-bottom-color:#A1CF64!important}.ui.items .item:nth-of-type(6n+4):hover{border-bottom-color:#D95C5C!important}.ui.items .item:nth-of-type(6n+5):hover{border-bottom-color:#00B5AD!important}.ui.items .item:nth-of-type(6n+6):hover{border-bottom-color:#564F8A!important}.ui.connected.items{display:table;width:100%;margin-left:0!important;margin-right:0!important}.ui.connected.items>.item,.ui.connected.items>.row>.item{float:none;display:table-cell;vertical-align:top;height:auto;border-radius:0;margin:0;width:33.33%}.ui.connected.items>.row{display:table;margin:.5em 0}.ui.connected.items>.row:first-child{margin-top:0}.ui.connected.items>.item,.ui.connected.items>.row:last-child>.item{border-bottom:.2em solid rgba(0,0,0,.2)}.ui.connected.items>.item:first-child,.ui.connected.items>.row:last-child>.item:first-child{border-radius:0 0 0 .33em}.ui.connected.items>.item:last-child,.ui.connected.items>.row:last-child>.item:last-child{border-radius:0 0 .33em}.ui.connected.items .item:hover{border-bottom-width:.2em}.ui.one.connected.items>.item,.ui.one.connected.items>.row>.item{width:50%;padding-left:2%;padding-right:2%}.ui.two.connected.items>.item,.ui.two.connected.items>.row>.item{width:50%;padding-left:1%;padding-right:1%}.ui.three.connected.items>.item,.ui.three.connected.items>.row>.item{width:33.333%;padding-left:1%;padding-right:1%}.ui.four.connected.items>.item,.ui.four.connected.items>.row>.item{width:25%;padding-left:.5%;padding-right:.5%}.ui.five.connected.items>.item,.ui.five.connected.items>.row>.item{width:20%;padding-left:.5%;padding-right:.5%}.ui.six.connected.items>.item,.ui.six.connected.items>.row>.item{width:16.66%;padding-left:.5%;padding-right:.5%}.ui.seven.connected.items>.item,.ui.seven.connected.items>.row>.item{width:14.28%;padding-left:.5%;padding-right:.5%}.ui.eight.connected.items>.item,.ui.eight.connected.items>.row>.item{width:12.5%;padding-left:.25%;padding-right:.25%}.ui.nine.connected.items>.item,.ui.nine.connected.items>.row>.item{width:11.11%;padding-left:.25%;padding-right:.25%}.ui.ten.connected.items>.item,.ui.ten.connected.items>.row>.item{width:10%;padding-left:.2%;padding-right:.2%}.ui.eleven.connected.items>.item,.ui.eleven.connected.items>.row>.item{width:9.09%;padding-left:.2%;padding-right:.2%}.ui.twelve.connected.items>.item,.ui.twelve.connected.items>.row>.item{width:8.3333%;padding-left:.1%;padding-right:.1%}@media only screen and (max-width:768px){.ui.stackable.items{display:block!important}.ui.stackable.items>.item,.ui.stackable.items>.row>.item{display:block!important;height:auto!important;width:100%!important;padding:0!important}}.ui.horizontal.items>.item,.ui.items>.horizontal.item{display:table}.ui.horizontal.items>.item>.image,.ui.items>.horizontal.item>.image{display:table-cell;width:50%}.ui.horizontal.items>.item>.image+.content,.ui.items>.horizontal.item>.image+.content{width:50%;display:table-cell}.ui.horizontal.items>.item>.content,.ui.items>.horizontal.item>.content{padding:1% 1.7% 11% 3%;vertical-align:top}.ui.horizontal.items>.item>.meta,.ui.items>.horizontal.item>.meta{position:absolute;padding:0;bottom:7%;left:3%;width:94%}.ui.horizontal.items>.item>.image+.content+.meta,.ui.items>.horizontal.item>.image+.content+.meta{bottom:7%;left:53%;width:44%}.ui.horizontal.items>.item .avatar,.ui.items>.horizontal.item .avatar{width:11.5%}.ui.items>.item .avatar{max-width:25px}.ui.one.items{margin-left:-2%;margin-right:-2%}.ui.one.items>.item{width:100%;margin-left:2%;margin-right:2%}.ui.two.items{margin-left:-1%;margin-right:-1%}.ui.two.items>.item{width:48%;margin-left:1%;margin-right:1%}.ui.two.items>.item:nth-child(2n+1){clear:left}.ui.three.items{margin-left:-1%;margin-right:-1%}.ui.three.items>.item{width:31.333%;margin-left:1%;margin-right:1%}.ui.three.items>.item:nth-child(3n+1){clear:left}.ui.four.items{margin-left:-.5%;margin-right:-.5%}.ui.four.items>.item{width:24%;margin-left:.5%;margin-right:.5%}.ui.four.items>.item:nth-child(4n+1){clear:left}.ui.five.items{margin-left:-.5%;margin-right:-.5%}.ui.five.items>.item{width:19%;margin-left:.5%;margin-right:.5%}.ui.five.items>.item:nth-child(5n+1){clear:left}.ui.six.items{margin-left:-.5%;margin-right:-.5%}.ui.six.items>.item{width:15.66%;margin-left:.5%;margin-right:.5%}.ui.six.items>.item:nth-child(6n+1){clear:left}.ui.seven.items{margin-left:-.5%;margin-right:-.5%}.ui.seven.items>.item{width:13.28%;margin-left:.5%;margin-right:.5%;font-size:11px}.ui.seven.items>.item:nth-child(7n+1){clear:left}.ui.eight.items{margin-left:-.25%;margin-right:-.25%}.ui.eight.items>.item{width:12%;margin-left:.25%;margin-right:.25%;font-size:11px}.ui.eight.items>.item:nth-child(8n+1){clear:left}.ui.nine.items{margin-left:-.25%;margin-right:-.25%}.ui.nine.items>.item{width:10.61%;margin-left:.25%;margin-right:.25%;font-size:10px}.ui.nine.items>.item:nth-child(9n+1){clear:left}.ui.ten.items{margin-left:-.2%;margin-right:-.2%}.ui.ten.items>.item{width:9.6%;margin-left:.2%;margin-right:.2%;font-size:10px}.ui.ten.items>.item:nth-child(10n+1){clear:left}.ui.eleven.items{margin-left:-.2%;margin-right:-.2%}.ui.eleven.items>.item{width:8.69%;margin-left:.2%;margin-right:.2%;font-size:9px}.ui.eleven.items>.item:nth-child(11n+1){clear:left}.ui.twelve.items{margin-left:-.1%;margin-right:-.1%}.ui.twelve.items>.item{width:8.1333%;margin-left:.1%;margin-right:.1%;font-size:9px}.ui.twelve.items>.item:nth-child(12n+1){clear:left}.ui.list,ol.ui.list,ul.ui.list{list-style-type:none;margin:1em 0;padding:0}.ui.list .list,ol.ui.list ol,ul.ui.list ul{margin:0;padding:.5em 0 .5em 1em}.ui.list:first-child,ol.ui.list:first-child,ul.ui.list:first-child{margin-top:0}.ui.list:last-child,ol.ui.list:last-child,ul.ui.list:last-child{margin-bottom:0}.ui.list .item,ol.ui.list li,ul.ui.list li{display:list-item;list-style-type:none;list-style-position:inside;padding:.3em 0;line-height:1.2em}.ui.list .item:after{content:'';display:block;height:0;clear:both;visibility:hidden}.ui.list .list{clear:both}.ui.list .item>.icon{display:block;float:left;margin:0 1em 0 0;padding:.1em 0 0}.ui.list .item>.icon:only-child{display:inline-block}.ui.horizontal.list .item>.icon{margin:0;padding:0 .25em 0 0}.ui.horizontal.list .item>.icon,.ui.horizontal.list .item>.icon+.content{float:none;display:inline-block}.ui.list .item>img{display:block;float:left;margin-right:1em;vertical-align:middle}.ui.list .item>.content{display:inline-block;vertical-align:middle;line-height:1.2em}.ui.list .item>.icon+.content{display:table-cell;vertical-align:top}.ui.list a{cursor:pointer}.ui.list a .icon{color:rgba(0,0,0,.6);-webkit-transition:color .2s ease;-moz-transition:color .2s ease;transition:color .2s ease}.ui.list .header{font-weight:700}.ui.list .description{color:rgba(0,0,0,.5)}.ui.list .item>.left.floated{margin-right:1em;float:left}.ui.list .item>.right.floated{margin-left:1em;float:right}.ui.horizontal.list{display:inline-block;font-size:0}.ui.horizontal.list>.item{display:inline-block;margin-left:1em;font-size:1rem}.ui.horizontal.list>.item:first-child{margin-left:0}.ui.horizontal.list .list{padding-left:0;padding-bottom:0}.ui.list a:hover .icon{color:rgba(0,0,0,.8)}.ui.inverted.list a .icon{color:rgba(255,255,255,.6)}.ui.inverted.list .description{color:rgba(255,255,255,.8)}.ui.inverted.link.list .item{color:rgba(255,255,255,.4)}.ui.link.list .item{color:rgba(0,0,0,.3)}.ui.link.list .item a,.ui.link.list a.item{color:rgba(0,0,0,.5)}.ui.link.list .active.item a,.ui.link.list .item a:active,.ui.link.list .item a:hover,.ui.link.list a.active.item,.ui.link.list a.item:active,.ui.link.list a.item:hover{color:rgba(0,0,0,.8)}.ui.inverted.link.list .item a,.ui.inverted.link.list a.item{color:rgba(255,255,255,.6)}.ui.inverted.link.list .item a:hover,.ui.inverted.link.list a.item:hover{color:rgba(255,255,255,.8)}.ui.inverted.link.list .item a:active,.ui.inverted.link.list a.item:active{color:rgba(255,255,255,.9)}.ui.inverted.link.list .active.item a,.ui.inverted.link.list a.active.item{color:rgba(255,255,255,.8)}.ui.selection.list .item{cursor:pointer;color:rgba(0,0,0,.4);padding:.5em;-webkit-transition:.2s color ease,.2s padding-left ease,.2s background-color ease;-moz-transition:.2s color ease,.2s padding-left ease,.2s background-color ease;transition:.2s color ease,.2s padding-left ease,.2s background-color ease}.ui.selection.list .item:hover{background-color:rgba(0,0,0,.02);color:rgba(0,0,0,.7)}.ui.selection.list .item:active{background-color:rgba(0,0,0,.05);color:rgba(0,0,0,.7)}.ui.selection.list .item.active{background-color:rgba(0,0,0,.04);color:rgba(0,0,0,.7)}.ui.animated.list .item{-webkit-transition:.2s color ease,.2s padding-left ease,.2s background-color ease;-moz-transition:.2s color ease,.2s padding-left ease,.2s background-color ease;transition:.2s color ease,.2s padding-left ease,.2s background-color ease}.ui.animated.list:not(.horizontal) .item:hover{padding-left:1em}.ui.animated.list:not(.horizontal) .item:hover .item:hover{padding-left:.5em}.ui.inverted.selection.list .item{color:rgba(255,255,255,.6)}.ui.inverted.selection.list .item:hover{background-color:rgba(255,255,255,.04);color:rgba(255,255,255,.8)}.ui.inverted.selection.list .item:active{background-color:rgba(255,255,255,.1);color:rgba(255,255,255,.7)}.ui.inverted.selection.list .item.active{background-color:rgba(255,255,255,.08);color:#FFF}.ui.bulleted.list,ul.ui.list{margin-left:1.5em}.ui.bulleted.list .item,ul.ui.list li{position:relative}.ui.bulleted.list .item:before,ul.ui.list li:before{position:absolute;left:-1.5em;content:'•'}.ui.bulleted.list .list,ul.ui.list ul{padding-left:1.5em}.ui.horizontal.bulleted.list,ul.ui.horizontal.bulleted.list{margin-left:0}.ui.horizontal.bulleted.list .item,ul.ui.horizontal.bulleted.list li{margin-left:1.5em}.ui.horizontal.bulleted.list .item:before,ul.ui.horizontal.bulleted.list li:before{left:-.9em}.ui.horizontal.bulleted.list .item:first-child,ul.ui.horizontal.bulleted.list li:first-child{margin-left:0}.ui.horizontal.bulleted.list .item:first-child::before,ul.ui.horizontal.bulleted.list li:first-child::before{display:none}.ui.ordered.list,ol.ui.list{counter-reset:ordered;margin-left:2em;list-style-type:none}.ui.ordered.list .item,ol.ui.list li{list-style-type:none;position:relative}.ui.ordered.list .item:before,ol.ui.list li:before{position:absolute;left:-2em;counter-increment:ordered;content:counters(ordered,\".\");text-align:right;vertical-align:top;opacity:.75}.ui.ordered.list .list,ol.ui.list ol{counter-reset:ordered;padding-left:2.5em}.ui.ordered.list .list .item:before,ol.ui.list ol li:before{left:-2.5em}.ui.ordered.horizontal.list,ol.ui.horizontal.list{margin-left:0}.ui.ordered.horizontal.list .item:before,ol.ui.horizontal.list li:before{position:static;left:0;margin:0 .5em 0 0}.ui.divided.list:not(.horizontal)>.list,.ui.divided.list>.item{border-top:1px solid rgba(0,0,0,.1);padding-left:.5em;padding-right:.5em}.ui.divided.list .item .menu .item{border-width:0}.ui.divided.list .item:first-child{border-top-width:0}.ui.divided.list:not(.horizontal) .list:not(.icon){margin-left:-.5em;margin-right:-.5em}.ui.divided.list:not(.horizontal) .list .item{padding-left:1em;padding-right:1em}.ui.divided.list:not(.horizontal) .list .item:first-child{border-top-width:1px}.ui.divided.bulleted.list{margin-left:0}.ui.divided.bulleted.list .item{padding-left:1.5em}.ui.divided.bulleted.list .item:before{left:.5em}.ui.divided.ordered.list{margin-left:0}.ui.divided.ordered.list>.item{padding-left:2em;padding-right:2em}.ui.divided.ordered.list>.item:before{left:.5em}.ui.divided.ordered.list .item .list{margin-left:-2em;margin-right:-2em}.ui.divided.horizontal.list{margin-left:0}.ui.divided.horizontal.list>.item{border-top:none;border-left:1px solid rgba(0,0,0,.1);margin:0;padding-left:.75em;padding-right:.75em;line-height:.6em}.ui.horizontal.divided.list>.item:first-child{border-left:none;padding-left:0}.ui.divided.inverted.horizontal.list .item,.ui.divided.inverted.list>.item,.ui.divided.inverted.list>.list{border-color:rgba(255,255,255,.2)}.ui.celled.list>.item,.ui.celled.list>.list{border-top:1px solid rgba(0,0,0,.1);padding-left:.5em;padding-right:.5em}.ui.celled.list>.item:last-child{border-bottom:1px solid rgba(0,0,0,.1)}.ui.celled.list .item .list{margin-left:-.5em;margin-right:-.5em}.ui.celled.list .item .list .item{border-width:0}.ui.celled.list .list .item:first-child{border-top-width:0}.ui.celled.bulleted.list{margin-left:0}.ui.celled.bulleted.list>.item{padding-left:1.5em}.ui.celled.bulleted.list>.item:before{left:.5em}.ui.celled.ordered.list{margin-left:0}.ui.celled.ordered.list .item{padding-left:2em;padding-right:2em}.ui.celled.ordered.list .item:before{left:.5em}.ui.celled.ordered.list .item .list{margin-left:-2em;margin-right:-2em}.ui.horizontal.celled.list{margin-left:0}.ui.horizontal.celled.list .item{border-top:none;border-left:1px solid rgba(0,0,0,.1);margin:0;padding-left:.75em;padding-right:.75em;line-height:.6em}.ui.horizontal.celled.list .item:last-child{border-bottom:none;border-right:1px solid rgba(0,0,0,.1)}.ui.celled.inverted.horizontal.list .item,.ui.celled.inverted.list>.item,.ui.celled.inverted.list>.list{border-color:rgba(255,255,255,.2)}.ui.relaxed.list:not(.horizontal) .item{padding-top:.5em;padding-bottom:.5em}.ui.relaxed.list .header{margin-bottom:.25em}.ui.horizontal.relaxed.list .item{padding-left:1.25em;padding-right:1.25em}.ui.very.relaxed.list:not(.horizontal) .item{padding-top:1em;padding-bottom:1em}.ui.very.relaxed.list .header{margin-bottom:.5em}.ui.horizontal.very.relaxed.list .item{padding-left:2em;padding-right:2em}.ui.mini.list .item{font-size:.7rem}.ui.tiny.list .item{font-size:.8125rem}.ui.small.list .item{font-size:.875rem}.ui.list .item{font-size:1em}.ui.large.list .item{font-size:1.125rem}.ui.big.list .item{font-size:1.25rem}.ui.huge.list .item{font-size:1.375rem}.ui.massive.list .item{font-size:1.5rem}.ui.statistic{text-align:center}.ui.statistic>.number{font-size:4em;font-weight:700;color:rgba(0,0,0,.7)}.ui.statistic>.description{opacity:.8}.hljs{display:block;overflow-x:auto;padding:.5em;color:#333;background:#f8f8f8;-webkit-text-size-adjust:none}.diff .hljs-header,.hljs-comment{color:#998;font-style:italic}.css .rule .hljs-keyword,.hljs-keyword,.hljs-request,.hljs-status,.hljs-subst,.hljs-winutils,.nginx .hljs-title{color:#333;font-weight:700}.hljs-hexcolor,.hljs-number,.ruby .hljs-constant{color:teal}.hljs-doctag,.hljs-string,.hljs-tag .hljs-value,.tex .hljs-formula{color:#d14}.hljs-id,.hljs-title,.scss .hljs-preprocessor{color:#900;font-weight:700}.hljs-list .hljs-keyword,.hljs-subst{font-weight:400}.hljs-class .hljs-title,.hljs-type,.tex .hljs-command,.vhdl .hljs-literal{color:#458;font-weight:700}.django .hljs-tag .hljs-keyword,.hljs-rule .hljs-property,.hljs-tag,.hljs-tag .hljs-title{color:navy;font-weight:400}.hljs-attribute,.hljs-name,.hljs-variable,.lisp .hljs-body{color:teal}.hljs-regexp{color:#009926}.clojure .hljs-keyword,.hljs-prompt,.hljs-symbol,.lisp .hljs-keyword,.ruby .hljs-symbol .hljs-string,.scheme .hljs-keyword,.tex .hljs-special{color:#990073}.hljs-built_in{color:#0086b3}.hljs-cdata,.hljs-doctype,.hljs-pi,.hljs-pragma,.hljs-preprocessor,.hljs-shebang{color:#999;font-weight:700}.hljs-deletion{background:#fdd}.hljs-addition{background:#dfd}.diff .hljs-change{background:#0086b3}.hljs-chunk{color:#aaa}.jcrop-holder{direction:ltr;text-align:left}.jcrop-hline,.jcrop-vline{background:url(/static/7a4b4c6ebdb549fcbe47408f9457493e.gif) #fff;font-size:0;position:absolute}.jcrop-vline{height:100%;width:1px!important}.jcrop-vline.right{right:0}.jcrop-hline{height:1px!important;width:100%}.jcrop-hline.bottom{bottom:0}.jcrop-tracker{height:100%;width:100%;-webkit-tap-highlight-color:transparent;-webkit-touch-callout:none;-webkit-user-select:none}.jcrop-handle{background-color:#333;border:1px solid #eee;width:7px;height:7px;font-size:1px}.jcrop-handle.ord-n{left:50%;margin-left:-4px;margin-top:-4px;top:0}.jcrop-handle.ord-s{bottom:0;left:50%;margin-bottom:-4px;margin-left:-4px}.jcrop-handle.ord-e{margin-right:-4px;margin-top:-4px;right:0;top:50%}.jcrop-handle.ord-w{left:0;margin-left:-4px;margin-top:-4px;top:50%}.jcrop-handle.ord-nw{left:0;margin-left:-4px;margin-top:-4px;top:0}.jcrop-handle.ord-ne{margin-right:-4px;margin-top:-4px;right:0;top:0}.jcrop-handle.ord-se{bottom:0;margin-bottom:-4px;margin-right:-4px;right:0}.jcrop-handle.ord-sw{bottom:0;left:0;margin-bottom:-4px;margin-left:-4px}.jcrop-dragbar.ord-n,.jcrop-dragbar.ord-s{height:7px;width:100%}.jcrop-dragbar.ord-e,.jcrop-dragbar.ord-w{height:100%;width:7px}.jcrop-dragbar.ord-n{margin-top:-4px}.jcrop-dragbar.ord-s{bottom:0;margin-bottom:-4px}.jcrop-dragbar.ord-e{margin-right:-4px;right:0}.jcrop-dragbar.ord-w{margin-left:-4px}.jcrop-light .jcrop-hline,.jcrop-light .jcrop-vline{background:#fff;filter:alpha(opacity=70)!important;opacity:.7!important}.jcrop-light .jcrop-handle{-moz-border-radius:3px;-webkit-border-radius:3px;background-color:#000;border-color:#fff;border-radius:3px}.jcrop-dark .jcrop-hline,.jcrop-dark .jcrop-vline{background:#000;filter:alpha(opacity=70)!important;opacity:.7!important}.jcrop-dark .jcrop-handle{-moz-border-radius:3px;-webkit-border-radius:3px;background-color:#fff;border-color:#000;border-radius:3px}.solid-line .jcrop-hline,.solid-line .jcrop-vline{background:#fff}.jcrop-holder img,img.jcrop-preview{max-width:none}.atwho-view{position:absolute;top:0;left:0;display:none;margin-top:18px;background:#fff;border:1px solid #DDD;border-radius:3px;box-shadow:0 0 5px rgba(0,0,0,.1);min-width:120px;z-index:11110!important}.atwho-view .cur{background:#36F;color:#fff}.atwho-view .cur small{color:#fff}.atwho-view strong{color:#36F}.atwho-view .cur strong{color:#fff;font:700}.atwho-view ul{list-style:none;padding:0;margin:auto}.atwho-view ul li{display:block;padding:5px 10px;border-bottom:1px solid #DDD;cursor:pointer}.atwho-view small{font-size:smaller;color:#777;font-weight:400}/*!\nAnimate.css - http://daneden.me/animate\nLicensed under the MIT license\n\nCopyright (c) 2013 Daniel Eden\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n*/.animated{-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-fill-mode:both;animation-fill-mode:both}.animated.hinge{-webkit-animation-duration:2s;animation-duration:2s}@-webkit-keyframes bounce{0%,100%,20%,50%,80%{-webkit-transform:translateY(0);transform:translateY(0)}40%{-webkit-transform:translateY(-30px);transform:translateY(-30px)}60%{-webkit-transform:translateY(-15px);transform:translateY(-15px)}}@keyframes bounce{0%,100%,20%,50%,80%{-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}40%{-webkit-transform:translateY(-30px);-ms-transform:translateY(-30px);transform:translateY(-30px)}60%{-webkit-transform:translateY(-15px);-ms-transform:translateY(-15px);transform:translateY(-15px)}}.bounce{-webkit-animation-name:bounce;animation-name:bounce}@-webkit-keyframes flash{0%,100%,50%{opacity:1}25%,75%{opacity:0}}@keyframes flash{0%,100%,50%{opacity:1}25%,75%{opacity:0}}.flash{-webkit-animation-name:flash;animation-name:flash}@-webkit-keyframes pulse{0%{-webkit-transform:scale(1);transform:scale(1)}50%{-webkit-transform:scale(1.1);transform:scale(1.1)}100%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes pulse{0%{-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}50%{-webkit-transform:scale(1.1);-ms-transform:scale(1.1);transform:scale(1.1)}100%{-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}}.pulse{-webkit-animation-name:pulse;animation-name:pulse}@-webkit-keyframes shake{0%,100%{-webkit-transform:translateX(0);transform:translateX(0)}10%,30%,50%,70%,90%{-webkit-transform:translateX(-10px);transform:translateX(-10px)}20%,40%,60%,80%{-webkit-transform:translateX(10px);transform:translateX(10px)}}@keyframes shake{0%,100%{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}10%,30%,50%,70%,90%{-webkit-transform:translateX(-10px);-ms-transform:translateX(-10px);transform:translateX(-10px)}20%,40%,60%,80%{-webkit-transform:translateX(10px);-ms-transform:translateX(10px);transform:translateX(10px)}}.shake{-webkit-animation-name:shake;animation-name:shake}@-webkit-keyframes swing{20%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}40%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}60%{-webkit-transform:rotate(5deg);transform:rotate(5deg)}80%{-webkit-transform:rotate(-5deg);transform:rotate(-5deg)}100%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@keyframes swing{20%{-webkit-transform:rotate(15deg);-ms-transform:rotate(15deg);transform:rotate(15deg)}40%{-webkit-transform:rotate(-10deg);-ms-transform:rotate(-10deg);transform:rotate(-10deg)}60%{-webkit-transform:rotate(5deg);-ms-transform:rotate(5deg);transform:rotate(5deg)}80%{-webkit-transform:rotate(-5deg);-ms-transform:rotate(-5deg);transform:rotate(-5deg)}100%{-webkit-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg)}}.swing{-webkit-transform-origin:top center;-ms-transform-origin:top center;transform-origin:top center;-webkit-animation-name:swing;animation-name:swing}@-webkit-keyframes tada{0%{-webkit-transform:scale(1);transform:scale(1)}10%,20%{-webkit-transform:scale(0.9) rotate(-3deg);transform:scale(0.9) rotate(-3deg)}30%,50%,70%,90%{-webkit-transform:scale(1.1) rotate(3deg);transform:scale(1.1) rotate(3deg)}40%,60%,80%{-webkit-transform:scale(1.1) rotate(-3deg);transform:scale(1.1) rotate(-3deg)}100%{-webkit-transform:scale(1) rotate(0);transform:scale(1) rotate(0)}}@keyframes tada{0%{-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}10%,20%{-webkit-transform:scale(0.9) rotate(-3deg);-ms-transform:scale(0.9) rotate(-3deg);transform:scale(0.9) rotate(-3deg)}30%,50%,70%,90%{-webkit-transform:scale(1.1) rotate(3deg);-ms-transform:scale(1.1) rotate(3deg);transform:scale(1.1) rotate(3deg)}40%,60%,80%{-webkit-transform:scale(1.1) rotate(-3deg);-ms-transform:scale(1.1) rotate(-3deg);transform:scale(1.1) rotate(-3deg)}100%{-webkit-transform:scale(1) rotate(0);-ms-transform:scale(1) rotate(0);transform:scale(1) rotate(0)}}.tada{-webkit-animation-name:tada;animation-name:tada}@-webkit-keyframes wobble{0%{-webkit-transform:translateX(0%);transform:translateX(0%)}15%{-webkit-transform:translateX(-25%) rotate(-5deg);transform:translateX(-25%) rotate(-5deg)}30%{-webkit-transform:translateX(20%) rotate(3deg);transform:translateX(20%) rotate(3deg)}45%{-webkit-transform:translateX(-15%) rotate(-3deg);transform:translateX(-15%) rotate(-3deg)}60%{-webkit-transform:translateX(10%) rotate(2deg);transform:translateX(10%) rotate(2deg)}75%{-webkit-transform:translateX(-5%) rotate(-1deg);transform:translateX(-5%) rotate(-1deg)}100%{-webkit-transform:translateX(0%);transform:translateX(0%)}}@keyframes wobble{0%{-webkit-transform:translateX(0%);-ms-transform:translateX(0%);transform:translateX(0%)}15%{-webkit-transform:translateX(-25%) rotate(-5deg);-ms-transform:translateX(-25%) rotate(-5deg);transform:translateX(-25%) rotate(-5deg)}30%{-webkit-transform:translateX(20%) rotate(3deg);-ms-transform:translateX(20%) rotate(3deg);transform:translateX(20%) rotate(3deg)}45%{-webkit-transform:translateX(-15%) rotate(-3deg);-ms-transform:translateX(-15%) rotate(-3deg);transform:translateX(-15%) rotate(-3deg)}60%{-webkit-transform:translateX(10%) rotate(2deg);-ms-transform:translateX(10%) rotate(2deg);transform:translateX(10%) rotate(2deg)}75%{-webkit-transform:translateX(-5%) rotate(-1deg);-ms-transform:translateX(-5%) rotate(-1deg);transform:translateX(-5%) rotate(-1deg)}100%{-webkit-transform:translateX(0%);-ms-transform:translateX(0%);transform:translateX(0%)}}.wobble{-webkit-animation-name:wobble;animation-name:wobble}@-webkit-keyframes bounceIn{0%{opacity:0;-webkit-transform:scale(.3);transform:scale(.3)}50%{opacity:1;-webkit-transform:scale(1.05);transform:scale(1.05)}70%{-webkit-transform:scale(.9);transform:scale(.9)}100%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes bounceIn{0%{opacity:0;-webkit-transform:scale(.3);-ms-transform:scale(.3);transform:scale(.3)}50%{opacity:1;-webkit-transform:scale(1.05);-ms-transform:scale(1.05);transform:scale(1.05)}70%{-webkit-transform:scale(.9);-ms-transform:scale(.9);transform:scale(.9)}100%{-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}}.bounceIn{-webkit-animation-name:bounceIn;animation-name:bounceIn}@-webkit-keyframes bounceInDown{0%{opacity:0;-webkit-transform:translateY(-2000px);transform:translateY(-2000px)}60%{opacity:1;-webkit-transform:translateY(30px);transform:translateY(30px)}80%{-webkit-transform:translateY(-10px);transform:translateY(-10px)}100%{-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes bounceInDown{0%{opacity:0;-webkit-transform:translateY(-2000px);-ms-transform:translateY(-2000px);transform:translateY(-2000px)}60%{opacity:1;-webkit-transform:translateY(30px);-ms-transform:translateY(30px);transform:translateY(30px)}80%{-webkit-transform:translateY(-10px);-ms-transform:translateY(-10px);transform:translateY(-10px)}100%{-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}.bounceInDown{-webkit-animation-name:bounceInDown;animation-name:bounceInDown}@-webkit-keyframes bounceInLeft{0%{opacity:0;-webkit-transform:translateX(-2000px);transform:translateX(-2000px)}60%{opacity:1;-webkit-transform:translateX(30px);transform:translateX(30px)}80%{-webkit-transform:translateX(-10px);transform:translateX(-10px)}100%{-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes bounceInLeft{0%{opacity:0;-webkit-transform:translateX(-2000px);-ms-transform:translateX(-2000px);transform:translateX(-2000px)}60%{opacity:1;-webkit-transform:translateX(30px);-ms-transform:translateX(30px);transform:translateX(30px)}80%{-webkit-transform:translateX(-10px);-ms-transform:translateX(-10px);transform:translateX(-10px)}100%{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}}.bounceInLeft{-webkit-animation-name:bounceInLeft;animation-name:bounceInLeft}@-webkit-keyframes bounceInRight{0%{opacity:0;-webkit-transform:translateX(2000px);transform:translateX(2000px)}60%{opacity:1;-webkit-transform:translateX(-30px);transform:translateX(-30px)}80%{-webkit-transform:translateX(10px);transform:translateX(10px)}100%{-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes bounceInRight{0%{opacity:0;-webkit-transform:translateX(2000px);-ms-transform:translateX(2000px);transform:translateX(2000px)}60%{opacity:1;-webkit-transform:translateX(-30px);-ms-transform:translateX(-30px);transform:translateX(-30px)}80%{-webkit-transform:translateX(10px);-ms-transform:translateX(10px);transform:translateX(10px)}100%{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}}.bounceInRight{-webkit-animation-name:bounceInRight;animation-name:bounceInRight}@-webkit-keyframes bounceInUp{0%{opacity:0;-webkit-transform:translateY(2000px);transform:translateY(2000px)}60%{opacity:1;-webkit-transform:translateY(-30px);transform:translateY(-30px)}80%{-webkit-transform:translateY(10px);transform:translateY(10px)}100%{-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes bounceInUp{0%{opacity:0;-webkit-transform:translateY(2000px);-ms-transform:translateY(2000px);transform:translateY(2000px)}60%{opacity:1;-webkit-transform:translateY(-30px);-ms-transform:translateY(-30px);transform:translateY(-30px)}80%{-webkit-transform:translateY(10px);-ms-transform:translateY(10px);transform:translateY(10px)}100%{-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}.bounceInUp{-webkit-animation-name:bounceInUp;animation-name:bounceInUp}@-webkit-keyframes bounceOut{0%{-webkit-transform:scale(1);transform:scale(1)}25%{-webkit-transform:scale(.95);transform:scale(.95)}50%{opacity:1;-webkit-transform:scale(1.1);transform:scale(1.1)}100%{opacity:0;-webkit-transform:scale(.3);transform:scale(.3)}}@keyframes bounceOut{0%{-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}25%{-webkit-transform:scale(.95);-ms-transform:scale(.95);transform:scale(.95)}50%{opacity:1;-webkit-transform:scale(1.1);-ms-transform:scale(1.1);transform:scale(1.1)}100%{opacity:0;-webkit-transform:scale(.3);-ms-transform:scale(.3);transform:scale(.3)}}.bounceOut{-webkit-animation-name:bounceOut;animation-name:bounceOut}@-webkit-keyframes bounceOutDown{0%{-webkit-transform:translateY(0);transform:translateY(0)}20%{opacity:1;-webkit-transform:translateY(-20px);transform:translateY(-20px)}100%{opacity:0;-webkit-transform:translateY(2000px);transform:translateY(2000px)}}@keyframes bounceOutDown{0%{-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}20%{opacity:1;-webkit-transform:translateY(-20px);-ms-transform:translateY(-20px);transform:translateY(-20px)}100%{opacity:0;-webkit-transform:translateY(2000px);-ms-transform:translateY(2000px);transform:translateY(2000px)}}.bounceOutDown{-webkit-animation-name:bounceOutDown;animation-name:bounceOutDown}@-webkit-keyframes bounceOutLeft{0%{-webkit-transform:translateX(0);transform:translateX(0)}20%{opacity:1;-webkit-transform:translateX(20px);transform:translateX(20px)}100%{opacity:0;-webkit-transform:translateX(-2000px);transform:translateX(-2000px)}}@keyframes bounceOutLeft{0%{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}20%{opacity:1;-webkit-transform:translateX(20px);-ms-transform:translateX(20px);transform:translateX(20px)}100%{opacity:0;-webkit-transform:translateX(-2000px);-ms-transform:translateX(-2000px);transform:translateX(-2000px)}}.bounceOutLeft{-webkit-animation-name:bounceOutLeft;animation-name:bounceOutLeft}@-webkit-keyframes bounceOutRight{0%{-webkit-transform:translateX(0);transform:translateX(0)}20%{opacity:1;-webkit-transform:translateX(-20px);transform:translateX(-20px)}100%{opacity:0;-webkit-transform:translateX(2000px);transform:translateX(2000px)}}@keyframes bounceOutRight{0%{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}20%{opacity:1;-webkit-transform:translateX(-20px);-ms-transform:translateX(-20px);transform:translateX(-20px)}100%{opacity:0;-webkit-transform:translateX(2000px);-ms-transform:translateX(2000px);transform:translateX(2000px)}}.bounceOutRight{-webkit-animation-name:bounceOutRight;animation-name:bounceOutRight}@-webkit-keyframes bounceOutUp{0%{-webkit-transform:translateY(0);transform:translateY(0)}20%{opacity:1;-webkit-transform:translateY(20px);transform:translateY(20px)}100%{opacity:0;-webkit-transform:translateY(-2000px);transform:translateY(-2000px)}}@keyframes bounceOutUp{0%{-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}20%{opacity:1;-webkit-transform:translateY(20px);-ms-transform:translateY(20px);transform:translateY(20px)}100%{opacity:0;-webkit-transform:translateY(-2000px);-ms-transform:translateY(-2000px);transform:translateY(-2000px)}}.bounceOutUp{-webkit-animation-name:bounceOutUp;animation-name:bounceOutUp}@-webkit-keyframes fadeIn{0%{opacity:0}100%{opacity:1}}@keyframes fadeIn{0%{opacity:0}100%{opacity:1}}.fadeIn{-webkit-animation-name:fadeIn;animation-name:fadeIn}@-webkit-keyframes fadeInDown{0%{opacity:0;-webkit-transform:translateY(-20px);transform:translateY(-20px)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes fadeInDown{0%{opacity:0;-webkit-transform:translateY(-20px);-ms-transform:translateY(-20px);transform:translateY(-20px)}100%{opacity:1;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}.fadeInDown{-webkit-animation-name:fadeInDown;animation-name:fadeInDown}@-webkit-keyframes fadeInDownBig{0%{opacity:0;-webkit-transform:translateY(-2000px);transform:translateY(-2000px)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes fadeInDownBig{0%{opacity:0;-webkit-transform:translateY(-2000px);-ms-transform:translateY(-2000px);transform:translateY(-2000px)}100%{opacity:1;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}.fadeInDownBig{-webkit-animation-name:fadeInDownBig;animation-name:fadeInDownBig}@-webkit-keyframes fadeInLeft{0%{opacity:0;-webkit-transform:translateX(-20px);transform:translateX(-20px)}100%{opacity:1;-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes fadeInLeft{0%{opacity:0;-webkit-transform:translateX(-20px);-ms-transform:translateX(-20px);transform:translateX(-20px)}100%{opacity:1;-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}}.fadeInLeft{-webkit-animation-name:fadeInLeft;animation-name:fadeInLeft}@-webkit-keyframes fadeInLeftBig{0%{opacity:0;-webkit-transform:translateX(-2000px);transform:translateX(-2000px)}100%{opacity:1;-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes fadeInLeftBig{0%{opacity:0;-webkit-transform:translateX(-2000px);-ms-transform:translateX(-2000px);transform:translateX(-2000px)}100%{opacity:1;-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}}.fadeInLeftBig{-webkit-animation-name:fadeInLeftBig;animation-name:fadeInLeftBig}@-webkit-keyframes fadeInRight{0%{opacity:0;-webkit-transform:translateX(20px);transform:translateX(20px)}100%{opacity:1;-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes fadeInRight{0%{opacity:0;-webkit-transform:translateX(20px);-ms-transform:translateX(20px);transform:translateX(20px)}100%{opacity:1;-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}}.fadeInRight{-webkit-animation-name:fadeInRight;animation-name:fadeInRight}@-webkit-keyframes fadeInRightBig{0%{opacity:0;-webkit-transform:translateX(2000px);transform:translateX(2000px)}100%{opacity:1;-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes fadeInRightBig{0%{opacity:0;-webkit-transform:translateX(2000px);-ms-transform:translateX(2000px);transform:translateX(2000px)}100%{opacity:1;-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}}.fadeInRightBig{-webkit-animation-name:fadeInRightBig;animation-name:fadeInRightBig}@-webkit-keyframes fadeInUp{0%{opacity:0;-webkit-transform:translateY(20px);transform:translateY(20px)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes fadeInUp{0%{opacity:0;-webkit-transform:translateY(20px);-ms-transform:translateY(20px);transform:translateY(20px)}100%{opacity:1;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}.fadeInUp{-webkit-animation-name:fadeInUp;animation-name:fadeInUp}@-webkit-keyframes fadeInUpBig{0%{opacity:0;-webkit-transform:translateY(2000px);transform:translateY(2000px)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes fadeInUpBig{0%{opacity:0;-webkit-transform:translateY(2000px);-ms-transform:translateY(2000px);transform:translateY(2000px)}100%{opacity:1;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}.fadeInUpBig{-webkit-animation-name:fadeInUpBig;animation-name:fadeInUpBig}@-webkit-keyframes fadeOut{0%{opacity:1}100%{opacity:0}}@keyframes fadeOut{0%{opacity:1}100%{opacity:0}}.fadeOut{-webkit-animation-name:fadeOut;animation-name:fadeOut}@-webkit-keyframes fadeOutDown{0%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}100%{opacity:0;-webkit-transform:translateY(20px);transform:translateY(20px)}}@keyframes fadeOutDown{0%{opacity:1;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}100%{opacity:0;-webkit-transform:translateY(20px);-ms-transform:translateY(20px);transform:translateY(20px)}}.fadeOutDown{-webkit-animation-name:fadeOutDown;animation-name:fadeOutDown}@-webkit-keyframes fadeOutDownBig{0%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}100%{opacity:0;-webkit-transform:translateY(2000px);transform:translateY(2000px)}}@keyframes fadeOutDownBig{0%{opacity:1;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}100%{opacity:0;-webkit-transform:translateY(2000px);-ms-transform:translateY(2000px);transform:translateY(2000px)}}.fadeOutDownBig{-webkit-animation-name:fadeOutDownBig;animation-name:fadeOutDownBig}@-webkit-keyframes fadeOutLeft{0%{opacity:1;-webkit-transform:translateX(0);transform:translateX(0)}100%{opacity:0;-webkit-transform:translateX(-20px);transform:translateX(-20px)}}@keyframes fadeOutLeft{0%{opacity:1;-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}100%{opacity:0;-webkit-transform:translateX(-20px);-ms-transform:translateX(-20px);transform:translateX(-20px)}}.fadeOutLeft{-webkit-animation-name:fadeOutLeft;animation-name:fadeOutLeft}@-webkit-keyframes fadeOutLeftBig{0%{opacity:1;-webkit-transform:translateX(0);transform:translateX(0)}100%{opacity:0;-webkit-transform:translateX(-2000px);transform:translateX(-2000px)}}@keyframes fadeOutLeftBig{0%{opacity:1;-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}100%{opacity:0;-webkit-transform:translateX(-2000px);-ms-transform:translateX(-2000px);transform:translateX(-2000px)}}.fadeOutLeftBig{-webkit-animation-name:fadeOutLeftBig;animation-name:fadeOutLeftBig}@-webkit-keyframes fadeOutRight{0%{opacity:1;-webkit-transform:translateX(0);transform:translateX(0)}100%{opacity:0;-webkit-transform:translateX(20px);transform:translateX(20px)}}@keyframes fadeOutRight{0%{opacity:1;-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}100%{opacity:0;-webkit-transform:translateX(20px);-ms-transform:translateX(20px);transform:translateX(20px)}}.fadeOutRight{-webkit-animation-name:fadeOutRight;animation-name:fadeOutRight}@-webkit-keyframes fadeOutRightBig{0%{opacity:1;-webkit-transform:translateX(0);transform:translateX(0)}100%{opacity:0;-webkit-transform:translateX(2000px);transform:translateX(2000px)}}@keyframes fadeOutRightBig{0%{opacity:1;-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}100%{opacity:0;-webkit-transform:translateX(2000px);-ms-transform:translateX(2000px);transform:translateX(2000px)}}.fadeOutRightBig{-webkit-animation-name:fadeOutRightBig;animation-name:fadeOutRightBig}@-webkit-keyframes fadeOutUp{0%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}100%{opacity:0;-webkit-transform:translateY(-20px);transform:translateY(-20px)}}@keyframes fadeOutUp{0%{opacity:1;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}100%{opacity:0;-webkit-transform:translateY(-20px);-ms-transform:translateY(-20px);transform:translateY(-20px)}}.fadeOutUp{-webkit-animation-name:fadeOutUp;animation-name:fadeOutUp}@-webkit-keyframes fadeOutUpBig{0%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}100%{opacity:0;-webkit-transform:translateY(-2000px);transform:translateY(-2000px)}}@keyframes fadeOutUpBig{0%{opacity:1;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}100%{opacity:0;-webkit-transform:translateY(-2000px);-ms-transform:translateY(-2000px);transform:translateY(-2000px)}}.fadeOutUpBig{-webkit-animation-name:fadeOutUpBig;animation-name:fadeOutUpBig}@-webkit-keyframes flip{0%{-webkit-transform:perspective(400px) translateZ(0) rotateY(0) scale(1);transform:perspective(400px) translateZ(0) rotateY(0) scale(1);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}40%{-webkit-transform:perspective(400px) translateZ(150px) rotateY(170deg) scale(1);transform:perspective(400px) translateZ(150px) rotateY(170deg) scale(1);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}50%{-webkit-transform:perspective(400px) translateZ(150px) rotateY(190deg) scale(1);transform:perspective(400px) translateZ(150px) rotateY(190deg) scale(1);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}80%{-webkit-transform:perspective(400px) translateZ(0) rotateY(360deg) scale(.95);transform:perspective(400px) translateZ(0) rotateY(360deg) scale(.95);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}100%{-webkit-transform:perspective(400px) translateZ(0) rotateY(360deg) scale(1);transform:perspective(400px) translateZ(0) rotateY(360deg) scale(1);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}}@keyframes flip{0%{-webkit-transform:perspective(400px) translateZ(0) rotateY(0) scale(1);-ms-transform:perspective(400px) translateZ(0) rotateY(0) scale(1);transform:perspective(400px) translateZ(0) rotateY(0) scale(1);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}40%{-webkit-transform:perspective(400px) translateZ(150px) rotateY(170deg) scale(1);-ms-transform:perspective(400px) translateZ(150px) rotateY(170deg) scale(1);transform:perspective(400px) translateZ(150px) rotateY(170deg) scale(1);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}50%{-webkit-transform:perspective(400px) translateZ(150px) rotateY(190deg) scale(1);-ms-transform:perspective(400px) translateZ(150px) rotateY(190deg) scale(1);transform:perspective(400px) translateZ(150px) rotateY(190deg) scale(1);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}80%{-webkit-transform:perspective(400px) translateZ(0) rotateY(360deg) scale(.95);-ms-transform:perspective(400px) translateZ(0) rotateY(360deg) scale(.95);transform:perspective(400px) translateZ(0) rotateY(360deg) scale(.95);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}100%{-webkit-transform:perspective(400px) translateZ(0) rotateY(360deg) scale(1);-ms-transform:perspective(400px) translateZ(0) rotateY(360deg) scale(1);transform:perspective(400px) translateZ(0) rotateY(360deg) scale(1);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}}.animated.flip{-webkit-backface-visibility:visible;-ms-backface-visibility:visible;backface-visibility:visible;-webkit-animation-name:flip;animation-name:flip}@-webkit-keyframes flipInX{0%{-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg);opacity:0}40%{-webkit-transform:perspective(400px) rotateX(-10deg);transform:perspective(400px) rotateX(-10deg)}70%{-webkit-transform:perspective(400px) rotateX(10deg);transform:perspective(400px) rotateX(10deg)}100%{-webkit-transform:perspective(400px) rotateX(0deg);transform:perspective(400px) rotateX(0deg);opacity:1}}@keyframes flipInX{0%{-webkit-transform:perspective(400px) rotateX(90deg);-ms-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg);opacity:0}40%{-webkit-transform:perspective(400px) rotateX(-10deg);-ms-transform:perspective(400px) rotateX(-10deg);transform:perspective(400px) rotateX(-10deg)}70%{-webkit-transform:perspective(400px) rotateX(10deg);-ms-transform:perspective(400px) rotateX(10deg);transform:perspective(400px) rotateX(10deg)}100%{-webkit-transform:perspective(400px) rotateX(0deg);-ms-transform:perspective(400px) rotateX(0deg);transform:perspective(400px) rotateX(0deg);opacity:1}}.flipInX{-webkit-backface-visibility:visible!important;-ms-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipInX;animation-name:flipInX}@-webkit-keyframes flipInY{0%{-webkit-transform:perspective(400px) rotateY(90deg);transform:perspective(400px) rotateY(90deg);opacity:0}40%{-webkit-transform:perspective(400px) rotateY(-10deg);transform:perspective(400px) rotateY(-10deg)}70%{-webkit-transform:perspective(400px) rotateY(10deg);transform:perspective(400px) rotateY(10deg)}100%{-webkit-transform:perspective(400px) rotateY(0deg);transform:perspective(400px) rotateY(0deg);opacity:1}}@keyframes flipInY{0%{-webkit-transform:perspective(400px) rotateY(90deg);-ms-transform:perspective(400px) rotateY(90deg);transform:perspective(400px) rotateY(90deg);opacity:0}40%{-webkit-transform:perspective(400px) rotateY(-10deg);-ms-transform:perspective(400px) rotateY(-10deg);transform:perspective(400px) rotateY(-10deg)}70%{-webkit-transform:perspective(400px) rotateY(10deg);-ms-transform:perspective(400px) rotateY(10deg);transform:perspective(400px) rotateY(10deg)}100%{-webkit-transform:perspective(400px) rotateY(0deg);-ms-transform:perspective(400px) rotateY(0deg);transform:perspective(400px) rotateY(0deg);opacity:1}}.flipInY{-webkit-backface-visibility:visible!important;-ms-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipInY;animation-name:flipInY}@-webkit-keyframes flipOutX{0%{-webkit-transform:perspective(400px) rotateX(0deg);transform:perspective(400px) rotateX(0deg);opacity:1}100%{-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg);opacity:0}}@keyframes flipOutX{0%{-webkit-transform:perspective(400px) rotateX(0deg);-ms-transform:perspective(400px) rotateX(0deg);transform:perspective(400px) rotateX(0deg);opacity:1}100%{-webkit-transform:perspective(400px) rotateX(90deg);-ms-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg);opacity:0}}.flipOutX{-webkit-animation-name:flipOutX;animation-name:flipOutX;-webkit-backface-visibility:visible!important;-ms-backface-visibility:visible!important;backface-visibility:visible!important}@-webkit-keyframes flipOutY{0%{-webkit-transform:perspective(400px) rotateY(0deg);transform:perspective(400px) rotateY(0deg);opacity:1}100%{-webkit-transform:perspective(400px) rotateY(90deg);transform:perspective(400px) rotateY(90deg);opacity:0}}@keyframes flipOutY{0%{-webkit-transform:perspective(400px) rotateY(0deg);-ms-transform:perspective(400px) rotateY(0deg);transform:perspective(400px) rotateY(0deg);opacity:1}100%{-webkit-transform:perspective(400px) rotateY(90deg);-ms-transform:perspective(400px) rotateY(90deg);transform:perspective(400px) rotateY(90deg);opacity:0}}.flipOutY{-webkit-backface-visibility:visible!important;-ms-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipOutY;animation-name:flipOutY}@-webkit-keyframes lightSpeedIn{0%{-webkit-transform:translateX(100%) skewX(-30deg);transform:translateX(100%) skewX(-30deg);opacity:0}60%{-webkit-transform:translateX(-20%) skewX(30deg);transform:translateX(-20%) skewX(30deg);opacity:1}80%{-webkit-transform:translateX(0%) skewX(-15deg);transform:translateX(0%) skewX(-15deg);opacity:1}100%{-webkit-transform:translateX(0%) skewX(0deg);transform:translateX(0%) skewX(0deg);opacity:1}}@keyframes lightSpeedIn{0%{-webkit-transform:translateX(100%) skewX(-30deg);-ms-transform:translateX(100%) skewX(-30deg);transform:translateX(100%) skewX(-30deg);opacity:0}60%{-webkit-transform:translateX(-20%) skewX(30deg);-ms-transform:translateX(-20%) skewX(30deg);transform:translateX(-20%) skewX(30deg);opacity:1}80%{-webkit-transform:translateX(0%) skewX(-15deg);-ms-transform:translateX(0%) skewX(-15deg);transform:translateX(0%) skewX(-15deg);opacity:1}100%{-webkit-transform:translateX(0%) skewX(0deg);-ms-transform:translateX(0%) skewX(0deg);transform:translateX(0%) skewX(0deg);opacity:1}}.lightSpeedIn{-webkit-animation-name:lightSpeedIn;animation-name:lightSpeedIn;-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}@-webkit-keyframes lightSpeedOut{0%{-webkit-transform:translateX(0%) skewX(0deg);transform:translateX(0%) skewX(0deg);opacity:1}100%{-webkit-transform:translateX(100%) skewX(-30deg);transform:translateX(100%) skewX(-30deg);opacity:0}}@keyframes lightSpeedOut{0%{-webkit-transform:translateX(0%) skewX(0deg);-ms-transform:translateX(0%) skewX(0deg);transform:translateX(0%) skewX(0deg);opacity:1}100%{-webkit-transform:translateX(100%) skewX(-30deg);-ms-transform:translateX(100%) skewX(-30deg);transform:translateX(100%) skewX(-30deg);opacity:0}}.lightSpeedOut{-webkit-animation-name:lightSpeedOut;animation-name:lightSpeedOut;-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}@-webkit-keyframes rotateIn{0%{-webkit-transform-origin:center center;transform-origin:center center;-webkit-transform:rotate(-200deg);transform:rotate(-200deg);opacity:0}100%{-webkit-transform-origin:center center;transform-origin:center center;-webkit-transform:rotate(0);transform:rotate(0);opacity:1}}@keyframes rotateIn{0%{-webkit-transform-origin:center center;-ms-transform-origin:center center;transform-origin:center center;-webkit-transform:rotate(-200deg);-ms-transform:rotate(-200deg);transform:rotate(-200deg);opacity:0}100%{-webkit-transform-origin:center center;-ms-transform-origin:center center;transform-origin:center center;-webkit-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0);opacity:1}}.rotateIn{-webkit-animation-name:rotateIn;animation-name:rotateIn}@-webkit-keyframes rotateInDownLeft{0%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate(-90deg);transform:rotate(-90deg);opacity:0}100%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate(0);transform:rotate(0);opacity:1}}@keyframes rotateInDownLeft{0%{-webkit-transform-origin:left bottom;-ms-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate(-90deg);-ms-transform:rotate(-90deg);transform:rotate(-90deg);opacity:0}100%{-webkit-transform-origin:left bottom;-ms-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0);opacity:1}}.rotateInDownLeft{-webkit-animation-name:rotateInDownLeft;animation-name:rotateInDownLeft}@-webkit-keyframes rotateInDownRight{0%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate(90deg);transform:rotate(90deg);opacity:0}100%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate(0);transform:rotate(0);opacity:1}}@keyframes rotateInDownRight{0%{-webkit-transform-origin:right bottom;-ms-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg);opacity:0}100%{-webkit-transform-origin:right bottom;-ms-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0);opacity:1}}.rotateInDownRight{-webkit-animation-name:rotateInDownRight;animation-name:rotateInDownRight}@-webkit-keyframes rotateInUpLeft{0%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate(90deg);transform:rotate(90deg);opacity:0}100%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate(0);transform:rotate(0);opacity:1}}@keyframes rotateInUpLeft{0%{-webkit-transform-origin:left bottom;-ms-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg);opacity:0}100%{-webkit-transform-origin:left bottom;-ms-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0);opacity:1}}.rotateInUpLeft{-webkit-animation-name:rotateInUpLeft;animation-name:rotateInUpLeft}@-webkit-keyframes rotateInUpRight{0%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate(-90deg);transform:rotate(-90deg);opacity:0}100%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate(0);transform:rotate(0);opacity:1}}@keyframes rotateInUpRight{0%{-webkit-transform-origin:right bottom;-ms-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate(-90deg);-ms-transform:rotate(-90deg);transform:rotate(-90deg);opacity:0}100%{-webkit-transform-origin:right bottom;-ms-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0);opacity:1}}.rotateInUpRight{-webkit-animation-name:rotateInUpRight;animation-name:rotateInUpRight}@-webkit-keyframes rotateOut{0%{-webkit-transform-origin:center center;transform-origin:center center;-webkit-transform:rotate(0);transform:rotate(0);opacity:1}100%{-webkit-transform-origin:center center;transform-origin:center center;-webkit-transform:rotate(200deg);transform:rotate(200deg);opacity:0}}@keyframes rotateOut{0%{-webkit-transform-origin:center center;-ms-transform-origin:center center;transform-origin:center center;-webkit-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0);opacity:1}100%{-webkit-transform-origin:center center;-ms-transform-origin:center center;transform-origin:center center;-webkit-transform:rotate(200deg);-ms-transform:rotate(200deg);transform:rotate(200deg);opacity:0}}.rotateOut{-webkit-animation-name:rotateOut;animation-name:rotateOut}@-webkit-keyframes rotateOutDownLeft{0%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate(0);transform:rotate(0);opacity:1}100%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate(90deg);transform:rotate(90deg);opacity:0}}@keyframes rotateOutDownLeft{0%{-webkit-transform-origin:left bottom;-ms-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0);opacity:1}100%{-webkit-transform-origin:left bottom;-ms-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg);opacity:0}}.rotateOutDownLeft{-webkit-animation-name:rotateOutDownLeft;animation-name:rotateOutDownLeft}@-webkit-keyframes rotateOutDownRight{0%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate(0);transform:rotate(0);opacity:1}100%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate(-90deg);transform:rotate(-90deg);opacity:0}}@keyframes rotateOutDownRight{0%{-webkit-transform-origin:right bottom;-ms-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0);opacity:1}100%{-webkit-transform-origin:right bottom;-ms-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate(-90deg);-ms-transform:rotate(-90deg);transform:rotate(-90deg);opacity:0}}.rotateOutDownRight{-webkit-animation-name:rotateOutDownRight;animation-name:rotateOutDownRight}@-webkit-keyframes rotateOutUpLeft{0%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate(0);transform:rotate(0);opacity:1}100%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate(-90deg);transform:rotate(-90deg);opacity:0}}@keyframes rotateOutUpLeft{0%{-webkit-transform-origin:left bottom;-ms-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0);opacity:1}100%{-webkit-transform-origin:left bottom;-ms-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate(-90deg);-ms-transform:rotate(-90deg);transform:rotate(-90deg);opacity:0}}.rotateOutUpLeft{-webkit-animation-name:rotateOutUpLeft;animation-name:rotateOutUpLeft}@-webkit-keyframes rotateOutUpRight{0%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate(0);transform:rotate(0);opacity:1}100%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate(90deg);transform:rotate(90deg);opacity:0}}@keyframes rotateOutUpRight{0%{-webkit-transform-origin:right bottom;-ms-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0);opacity:1}100%{-webkit-transform-origin:right bottom;-ms-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg);opacity:0}}.rotateOutUpRight{-webkit-animation-name:rotateOutUpRight;animation-name:rotateOutUpRight}@-webkit-keyframes slideInDown{0%{opacity:0;-webkit-transform:translateY(-2000px);transform:translateY(-2000px)}100%{-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes slideInDown{0%{opacity:0;-webkit-transform:translateY(-2000px);-ms-transform:translateY(-2000px);transform:translateY(-2000px)}100%{-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}.slideInDown{-webkit-animation-name:slideInDown;animation-name:slideInDown}@-webkit-keyframes slideInLeft{0%{opacity:0;-webkit-transform:translateX(-2000px);transform:translateX(-2000px)}100%{-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes slideInLeft{0%{opacity:0;-webkit-transform:translateX(-2000px);-ms-transform:translateX(-2000px);transform:translateX(-2000px)}100%{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}}.slideInLeft{-webkit-animation-name:slideInLeft;animation-name:slideInLeft}@-webkit-keyframes slideInRight{0%{opacity:0;-webkit-transform:translateX(2000px);transform:translateX(2000px)}100%{-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes slideInRight{0%{opacity:0;-webkit-transform:translateX(2000px);-ms-transform:translateX(2000px);transform:translateX(2000px)}100%{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}}.slideInRight{-webkit-animation-name:slideInRight;animation-name:slideInRight}@-webkit-keyframes slideOutLeft{0%{-webkit-transform:translateX(0);transform:translateX(0)}100%{opacity:0;-webkit-transform:translateX(-2000px);transform:translateX(-2000px)}}@keyframes slideOutLeft{0%{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}100%{opacity:0;-webkit-transform:translateX(-2000px);-ms-transform:translateX(-2000px);transform:translateX(-2000px)}}.slideOutLeft{-webkit-animation-name:slideOutLeft;animation-name:slideOutLeft}@-webkit-keyframes slideOutRight{0%{-webkit-transform:translateX(0);transform:translateX(0)}100%{opacity:0;-webkit-transform:translateX(2000px);transform:translateX(2000px)}}@keyframes slideOutRight{0%{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}100%{opacity:0;-webkit-transform:translateX(2000px);-ms-transform:translateX(2000px);transform:translateX(2000px)}}.slideOutRight{-webkit-animation-name:slideOutRight;animation-name:slideOutRight}@-webkit-keyframes slideOutUp{0%{-webkit-transform:translateY(0);transform:translateY(0)}100%{opacity:0;-webkit-transform:translateY(-2000px);transform:translateY(-2000px)}}@keyframes slideOutUp{0%{-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}100%{opacity:0;-webkit-transform:translateY(-2000px);-ms-transform:translateY(-2000px);transform:translateY(-2000px)}}.slideOutUp{-webkit-animation-name:slideOutUp;animation-name:slideOutUp}@-webkit-keyframes hinge{0%{-webkit-transform:rotate(0);transform:rotate(0);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}20%,60%{-webkit-transform:rotate(80deg);transform:rotate(80deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}40%{-webkit-transform:rotate(60deg);transform:rotate(60deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}80%{-webkit-transform:rotate(60deg) translateY(0);transform:rotate(60deg) translateY(0);opacity:1;-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}100%{-webkit-transform:translateY(700px);transform:translateY(700px);opacity:0}}@keyframes hinge{0%{-webkit-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0);-webkit-transform-origin:top left;-ms-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}20%,60%{-webkit-transform:rotate(80deg);-ms-transform:rotate(80deg);transform:rotate(80deg);-webkit-transform-origin:top left;-ms-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}40%{-webkit-transform:rotate(60deg);-ms-transform:rotate(60deg);transform:rotate(60deg);-webkit-transform-origin:top left;-ms-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}80%{-webkit-transform:rotate(60deg) translateY(0);-ms-transform:rotate(60deg) translateY(0);transform:rotate(60deg) translateY(0);opacity:1;-webkit-transform-origin:top left;-ms-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}100%{-webkit-transform:translateY(700px);-ms-transform:translateY(700px);transform:translateY(700px);opacity:0}}.hinge{-webkit-animation-name:hinge;animation-name:hinge}@-webkit-keyframes rollIn{0%{opacity:0;-webkit-transform:translateX(-100%) rotate(-120deg);transform:translateX(-100%) rotate(-120deg)}100%{opacity:1;-webkit-transform:translateX(0px) rotate(0deg);transform:translateX(0px) rotate(0deg)}}@keyframes rollIn{0%{opacity:0;-webkit-transform:translateX(-100%) rotate(-120deg);-ms-transform:translateX(-100%) rotate(-120deg);transform:translateX(-100%) rotate(-120deg)}100%{opacity:1;-webkit-transform:translateX(0px) rotate(0deg);-ms-transform:translateX(0px) rotate(0deg);transform:translateX(0px) rotate(0deg)}}.rollIn{-webkit-animation-name:rollIn;animation-name:rollIn}@-webkit-keyframes rollOut{0%{opacity:1;-webkit-transform:translateX(0px) rotate(0deg);transform:translateX(0px) rotate(0deg)}100%{opacity:0;-webkit-transform:translateX(100%) rotate(120deg);transform:translateX(100%) rotate(120deg)}}@keyframes rollOut{0%{opacity:1;-webkit-transform:translateX(0px) rotate(0deg);-ms-transform:translateX(0px) rotate(0deg);transform:translateX(0px) rotate(0deg)}100%{opacity:0;-webkit-transform:translateX(100%) rotate(120deg);-ms-transform:translateX(100%) rotate(120deg);transform:translateX(100%) rotate(120deg)}}.rollOut{-webkit-animation-name:rollOut;animation-name:rollOut}.ps-container{overflow:hidden!important}.ps-container.ps-active-x>.ps-scrollbar-x-rail,.ps-container.ps-active-y>.ps-scrollbar-y-rail{display:block}.ps-container.ps-in-scrolling{pointer-events:none}.ps-container.ps-in-scrolling.ps-x>.ps-scrollbar-x-rail{background-color:#eee;opacity:.9}.ps-container.ps-in-scrolling.ps-x>.ps-scrollbar-x-rail>.ps-scrollbar-x{background-color:#999}.ps-container.ps-in-scrolling.ps-y>.ps-scrollbar-y-rail{background-color:#eee;opacity:.9}.ps-container.ps-in-scrolling.ps-y>.ps-scrollbar-y-rail>.ps-scrollbar-y{background-color:#999}.ps-container>.ps-scrollbar-x-rail{display:none;position:absolute;-webkit-border-radius:4px;-moz-border-radius:4px;-ms-border-radius:4px;border-radius:4px;opacity:0;-webkit-transition:background-color .2s linear,opacity .2s linear;-moz-transition:background-color .2s linear,opacity .2s linear;-o-transition:background-color .2s linear,opacity .2s linear;transition:background-color .2s linear,opacity .2s linear;bottom:3px;height:8px}.ps-container>.ps-scrollbar-x-rail>.ps-scrollbar-x{position:absolute;background-color:#aaa;-webkit-border-radius:4px;-moz-border-radius:4px;-ms-border-radius:4px;border-radius:4px;-webkit-transition:background-color .2s linear;-moz-transition:background-color .2s linear;-o-transition:background-color .2s linear;transition:background-color .2s linear;bottom:0;height:8px}.ps-container>.ps-scrollbar-y-rail{display:none;position:absolute;-webkit-border-radius:4px;-moz-border-radius:4px;-ms-border-radius:4px;border-radius:4px;opacity:0;-webkit-transition:background-color .2s linear,opacity .2s linear;-moz-transition:background-color .2s linear,opacity .2s linear;-o-transition:background-color .2s linear,opacity .2s linear;transition:background-color .2s linear,opacity .2s linear;right:3px;width:8px}.ps-container>.ps-scrollbar-y-rail>.ps-scrollbar-y{position:absolute;background-color:#aaa;-webkit-border-radius:4px;-moz-border-radius:4px;-ms-border-radius:4px;border-radius:4px;-webkit-transition:background-color .2s linear;-moz-transition:background-color .2s linear;-o-transition:background-color .2s linear;transition:background-color .2s linear;right:0;width:8px}.ps-container:hover.ps-in-scrolling{pointer-events:none}.ps-container:hover.ps-in-scrolling.ps-x>.ps-scrollbar-x-rail{background-color:#eee;opacity:.9}.ps-container:hover.ps-in-scrolling.ps-x>.ps-scrollbar-x-rail>.ps-scrollbar-x{background-color:#999}.ps-container:hover.ps-in-scrolling.ps-y>.ps-scrollbar-y-rail{background-color:#eee;opacity:.9}.ps-container:hover.ps-in-scrolling.ps-y>.ps-scrollbar-y-rail>.ps-scrollbar-y{background-color:#999}.ps-container:hover>.ps-scrollbar-x-rail,.ps-container:hover>.ps-scrollbar-y-rail{opacity:.6}.ps-container:hover>.ps-scrollbar-x-rail:hover{background-color:#eee;opacity:.9}.ps-container:hover>.ps-scrollbar-x-rail:hover>.ps-scrollbar-x{background-color:#999}.ps-container:hover>.ps-scrollbar-y-rail:hover{background-color:#eee;opacity:.9}.ps-container:hover>.ps-scrollbar-y-rail:hover>.ps-scrollbar-y{background-color:#999}/*!\n * # Semantic UI 2.1.7 - Flag\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */i.flag:not(.icon){display:inline-block;width:16px;height:11px;line-height:11px;vertical-align:baseline;margin:0 .5em 0 0;text-decoration:inherit;speak:none;font-smoothing:antialiased;-webkit-backface-visibility:hidden;backface-visibility:hidden}i.flag:not(.icon):before{display:inline-block;content:'';background:url(/static/9c74e172f87984c48ddf5c8108cabe67.png) -108px -1976px no-repeat;width:16px;height:11px}i.flag.ad:before,i.flag.andorra:before{background-position:0 0}i.flag.ae:before,i.flag.uae:before,i.flag.united.arab.emirates:before{background-position:0 -26px}i.flag.af:before,i.flag.afghanistan:before{background-position:0 -52px}i.flag.ag:before,i.flag.antigua:before{background-position:0 -78px}i.flag.ai:before,i.flag.anguilla:before{background-position:0 -104px}i.flag.al:before,i.flag.albania:before{background-position:0 -130px}i.flag.am:before,i.flag.armenia:before{background-position:0 -156px}i.flag.an:before,i.flag.netherlands.antilles:before{background-position:0 -182px}i.flag.angola:before,i.flag.ao:before{background-position:0 -208px}i.flag.ar:before,i.flag.argentina:before{background-position:0 -234px}i.flag.american.samoa:before,i.flag.as:before{background-position:0 -260px}i.flag.at:before,i.flag.austria:before{background-position:0 -286px}i.flag.au:before,i.flag.australia:before{background-position:0 -312px}i.flag.aruba:before,i.flag.aw:before{background-position:0 -338px}i.flag.aland.islands:before,i.flag.ax:before{background-position:0 -364px}i.flag.az:before,i.flag.azerbaijan:before{background-position:0 -390px}i.flag.ba:before,i.flag.bosnia:before{background-position:0 -416px}i.flag.barbados:before,i.flag.bb:before{background-position:0 -442px}i.flag.bangladesh:before,i.flag.bd:before{background-position:0 -468px}i.flag.be:before,i.flag.belgium:before{background-position:0 -494px}i.flag.bf:before,i.flag.burkina.faso:before{background-position:0 -520px}i.flag.bg:before,i.flag.bulgaria:before{background-position:0 -546px}i.flag.bahrain:before,i.flag.bh:before{background-position:0 -572px}i.flag.bi:before,i.flag.burundi:before{background-position:0 -598px}i.flag.benin:before,i.flag.bj:before{background-position:0 -624px}i.flag.bermuda:before,i.flag.bm:before{background-position:0 -650px}i.flag.bn:before,i.flag.brunei:before{background-position:0 -676px}i.flag.bo:before,i.flag.bolivia:before{background-position:0 -702px}i.flag.br:before,i.flag.brazil:before{background-position:0 -728px}i.flag.bahamas:before,i.flag.bs:before{background-position:0 -754px}i.flag.bhutan:before,i.flag.bt:before{background-position:0 -780px}i.flag.bouvet.island:before,i.flag.bv:before{background-position:0 -806px}i.flag.botswana:before,i.flag.bw:before{background-position:0 -832px}i.flag.belarus:before,i.flag.by:before{background-position:0 -858px}i.flag.belize:before,i.flag.bz:before{background-position:0 -884px}i.flag.ca:before,i.flag.canada:before{background-position:0 -910px}i.flag.cc:before,i.flag.cocos.islands:before{background-position:0 -962px}i.flag.cd:before,i.flag.congo:before{background-position:0 -988px}i.flag.central.african.republic:before,i.flag.cf:before{background-position:0 -1014px}i.flag.cg:before,i.flag.congo.brazzaville:before{background-position:0 -1040px}i.flag.ch:before,i.flag.switzerland:before{background-position:0 -1066px}i.flag.ci:before,i.flag.cote.divoire:before{background-position:0 -1092px}i.flag.ck:before,i.flag.cook.islands:before{background-position:0 -1118px}i.flag.chile:before,i.flag.cl:before{background-position:0 -1144px}i.flag.cameroon:before,i.flag.cm:before{background-position:0 -1170px}i.flag.china:before,i.flag.cn:before{background-position:0 -1196px}i.flag.co:before,i.flag.colombia:before{background-position:0 -1222px}i.flag.costa.rica:before,i.flag.cr:before{background-position:0 -1248px}i.flag.cs:before,i.flag.serbia:before{background-position:0 -1274px}i.flag.cu:before,i.flag.cuba:before{background-position:0 -1300px}i.flag.cape.verde:before,i.flag.cv:before{background-position:0 -1326px}i.flag.christmas.island:before,i.flag.cx:before{background-position:0 -1352px}i.flag.cy:before,i.flag.cyprus:before{background-position:0 -1378px}i.flag.cz:before,i.flag.czech.republic:before{background-position:0 -1404px}i.flag.de:before,i.flag.germany:before{background-position:0 -1430px}i.flag.dj:before,i.flag.djibouti:before{background-position:0 -1456px}i.flag.denmark:before,i.flag.dk:before{background-position:0 -1482px}i.flag.dm:before,i.flag.dominica:before{background-position:0 -1508px}i.flag.do:before,i.flag.dominican.republic:before{background-position:0 -1534px}i.flag.algeria:before,i.flag.dz:before{background-position:0 -1560px}i.flag.ec:before,i.flag.ecuador:before{background-position:0 -1586px}i.flag.ee:before,i.flag.estonia:before{background-position:0 -1612px}i.flag.eg:before,i.flag.egypt:before{background-position:0 -1638px}i.flag.eh:before,i.flag.western.sahara:before{background-position:0 -1664px}i.flag.er:before,i.flag.eritrea:before{background-position:0 -1716px}i.flag.es:before,i.flag.spain:before{background-position:0 -1742px}i.flag.et:before,i.flag.ethiopia:before{background-position:0 -1768px}i.flag.eu:before,i.flag.european.union:before{background-position:0 -1794px}i.flag.fi:before,i.flag.finland:before{background-position:0 -1846px}i.flag.fiji:before,i.flag.fj:before{background-position:0 -1872px}i.flag.falkland.islands:before,i.flag.fk:before{background-position:0 -1898px}i.flag.fm:before,i.flag.micronesia:before{background-position:0 -1924px}i.flag.faroe.islands:before,i.flag.fo:before{background-position:0 -1950px}i.flag.fr:before,i.flag.france:before{background-position:0 -1976px}i.flag.ga:before,i.flag.gabon:before{background-position:-36px 0}i.flag.gb:before,i.flag.united.kingdom:before{background-position:-36px -26px}i.flag.gd:before,i.flag.grenada:before{background-position:-36px -52px}i.flag.ge:before,i.flag.georgia:before{background-position:-36px -78px}i.flag.french.guiana:before,i.flag.gf:before{background-position:-36px -104px}i.flag.gh:before,i.flag.ghana:before{background-position:-36px -130px}i.flag.gi:before,i.flag.gibraltar:before{background-position:-36px -156px}i.flag.gl:before,i.flag.greenland:before{background-position:-36px -182px}i.flag.gambia:before,i.flag.gm:before{background-position:-36px -208px}i.flag.gn:before,i.flag.guinea:before{background-position:-36px -234px}i.flag.gp:before,i.flag.guadeloupe:before{background-position:-36px -260px}i.flag.equatorial.guinea:before,i.flag.gq:before{background-position:-36px -286px}i.flag.gr:before,i.flag.greece:before{background-position:-36px -312px}i.flag.gs:before,i.flag.sandwich.islands:before{background-position:-36px -338px}i.flag.gt:before,i.flag.guatemala:before{background-position:-36px -364px}i.flag.gu:before,i.flag.guam:before{background-position:-36px -390px}i.flag.guinea-bissau:before,i.flag.gw:before{background-position:-36px -416px}i.flag.guyana:before,i.flag.gy:before{background-position:-36px -442px}i.flag.hk:before,i.flag.hong.kong:before{background-position:-36px -468px}i.flag.heard.island:before,i.flag.hm:before{background-position:-36px -494px}i.flag.hn:before,i.flag.honduras:before{background-position:-36px -520px}i.flag.croatia:before,i.flag.hr:before{background-position:-36px -546px}i.flag.haiti:before,i.flag.ht:before{background-position:-36px -572px}i.flag.hu:before,i.flag.hungary:before{background-position:-36px -598px}i.flag.id:before,i.flag.indonesia:before{background-position:-36px -624px}i.flag.ie:before,i.flag.ireland:before{background-position:-36px -650px}i.flag.il:before,i.flag.israel:before{background-position:-36px -676px}i.flag.in:before,i.flag.india:before{background-position:-36px -702px}i.flag.indian.ocean.territory:before,i.flag.io:before{background-position:-36px -728px}i.flag.iq:before,i.flag.iraq:before{background-position:-36px -754px}i.flag.ir:before,i.flag.iran:before{background-position:-36px -780px}i.flag.iceland:before,i.flag.is:before{background-position:-36px -806px}i.flag.it:before,i.flag.italy:before{background-position:-36px -832px}i.flag.jamaica:before,i.flag.jm:before{background-position:-36px -858px}i.flag.jo:before,i.flag.jordan:before{background-position:-36px -884px}i.flag.japan:before,i.flag.jp:before{background-position:-36px -910px}i.flag.ke:before,i.flag.kenya:before{background-position:-36px -936px}i.flag.kg:before,i.flag.kyrgyzstan:before{background-position:-36px -962px}i.flag.cambodia:before,i.flag.kh:before{background-position:-36px -988px}i.flag.ki:before,i.flag.kiribati:before{background-position:-36px -1014px}i.flag.comoros:before,i.flag.km:before{background-position:-36px -1040px}i.flag.kn:before,i.flag.saint.kitts.and.nevis:before{background-position:-36px -1066px}i.flag.kp:before,i.flag.north.korea:before{background-position:-36px -1092px}i.flag.kr:before,i.flag.south.korea:before{background-position:-36px -1118px}i.flag.kuwait:before,i.flag.kw:before{background-position:-36px -1144px}i.flag.cayman.islands:before,i.flag.ky:before{background-position:-36px -1170px}i.flag.kazakhstan:before,i.flag.kz:before{background-position:-36px -1196px}i.flag.la:before,i.flag.laos:before{background-position:-36px -1222px}i.flag.lb:before,i.flag.lebanon:before{background-position:-36px -1248px}i.flag.lc:before,i.flag.saint.lucia:before{background-position:-36px -1274px}i.flag.li:before,i.flag.liechtenstein:before{background-position:-36px -1300px}i.flag.lk:before,i.flag.sri.lanka:before{background-position:-36px -1326px}i.flag.liberia:before,i.flag.lr:before{background-position:-36px -1352px}i.flag.lesotho:before,i.flag.ls:before{background-position:-36px -1378px}i.flag.lithuania:before,i.flag.lt:before{background-position:-36px -1404px}i.flag.lu:before,i.flag.luxembourg:before{background-position:-36px -1430px}i.flag.latvia:before,i.flag.lv:before{background-position:-36px -1456px}i.flag.libya:before,i.flag.ly:before{background-position:-36px -1482px}i.flag.ma:before,i.flag.morocco:before{background-position:-36px -1508px}i.flag.mc:before,i.flag.monaco:before{background-position:-36px -1534px}i.flag.md:before,i.flag.moldova:before{background-position:-36px -1560px}i.flag.me:before,i.flag.montenegro:before{background-position:-36px -1586px}i.flag.madagascar:before,i.flag.mg:before{background-position:-36px -1613px}i.flag.marshall.islands:before,i.flag.mh:before{background-position:-36px -1639px}i.flag.macedonia:before,i.flag.mk:before{background-position:-36px -1665px}i.flag.mali:before,i.flag.ml:before{background-position:-36px -1691px}i.flag.burma:before,i.flag.mm:before,i.flag.myanmar:before{background-position:-36px -1717px}i.flag.mn:before,i.flag.mongolia:before{background-position:-36px -1743px}i.flag.macau:before,i.flag.mo:before{background-position:-36px -1769px}i.flag.mp:before,i.flag.northern.mariana.islands:before{background-position:-36px -1795px}i.flag.martinique:before,i.flag.mq:before{background-position:-36px -1821px}i.flag.mauritania:before,i.flag.mr:before{background-position:-36px -1847px}i.flag.montserrat:before,i.flag.ms:before{background-position:-36px -1873px}i.flag.malta:before,i.flag.mt:before{background-position:-36px -1899px}i.flag.mauritius:before,i.flag.mu:before{background-position:-36px -1925px}i.flag.maldives:before,i.flag.mv:before{background-position:-36px -1951px}i.flag.malawi:before,i.flag.mw:before{background-position:-36px -1977px}i.flag.mexico:before,i.flag.mx:before{background-position:-72px 0}i.flag.malaysia:before,i.flag.my:before{background-position:-72px -26px}i.flag.mozambique:before,i.flag.mz:before{background-position:-72px -52px}i.flag.na:before,i.flag.namibia:before{background-position:-72px -78px}i.flag.nc:before,i.flag.new.caledonia:before{background-position:-72px -104px}i.flag.ne:before,i.flag.niger:before{background-position:-72px -130px}i.flag.nf:before,i.flag.norfolk.island:before{background-position:-72px -156px}i.flag.ng:before,i.flag.nigeria:before{background-position:-72px -182px}i.flag.ni:before,i.flag.nicaragua:before{background-position:-72px -208px}i.flag.netherlands:before,i.flag.nl:before{background-position:-72px -234px}i.flag.no:before,i.flag.norway:before{background-position:-72px -260px}i.flag.nepal:before,i.flag.np:before{background-position:-72px -286px}i.flag.nauru:before,i.flag.nr:before{background-position:-72px -312px}i.flag.niue:before,i.flag.nu:before{background-position:-72px -338px}i.flag.new.zealand:before,i.flag.nz:before{background-position:-72px -364px}i.flag.om:before,i.flag.oman:before{background-position:-72px -390px}i.flag.pa:before,i.flag.panama:before{background-position:-72px -416px}i.flag.pe:before,i.flag.peru:before{background-position:-72px -442px}i.flag.french.polynesia:before,i.flag.pf:before{background-position:-72px -468px}i.flag.new.guinea:before,i.flag.pg:before{background-position:-72px -494px}i.flag.ph:before,i.flag.philippines:before{background-position:-72px -520px}i.flag.pakistan:before,i.flag.pk:before{background-position:-72px -546px}i.flag.pl:before,i.flag.poland:before{background-position:-72px -572px}i.flag.pm:before,i.flag.saint.pierre:before{background-position:-72px -598px}i.flag.pitcairn.islands:before,i.flag.pn:before{background-position:-72px -624px}i.flag.pr:before,i.flag.puerto.rico:before{background-position:-72px -650px}i.flag.palestine:before,i.flag.ps:before{background-position:-72px -676px}i.flag.portugal:before,i.flag.pt:before{background-position:-72px -702px}i.flag.palau:before,i.flag.pw:before{background-position:-72px -728px}i.flag.paraguay:before,i.flag.py:before{background-position:-72px -754px}i.flag.qa:before,i.flag.qatar:before{background-position:-72px -780px}i.flag.re:before,i.flag.reunion:before{background-position:-72px -806px}i.flag.ro:before,i.flag.romania:before{background-position:-72px -832px}i.flag.rs:before,i.flag.serbia:before{background-position:-72px -858px}i.flag.ru:before,i.flag.russia:before{background-position:-72px -884px}i.flag.rw:before,i.flag.rwanda:before{background-position:-72px -910px}i.flag.sa:before,i.flag.saudi.arabia:before{background-position:-72px -936px}i.flag.sb:before,i.flag.solomon.islands:before{background-position:-72px -962px}i.flag.sc:before,i.flag.seychelles:before{background-position:-72px -988px}i.flag.sd:before,i.flag.sudan:before{background-position:-72px -1040px}i.flag.se:before,i.flag.sweden:before{background-position:-72px -1066px}i.flag.sg:before,i.flag.singapore:before{background-position:-72px -1092px}i.flag.saint.helena:before,i.flag.sh:before{background-position:-72px -1118px}i.flag.si:before,i.flag.slovenia:before{background-position:-72px -1144px}i.flag.jan.mayen:before,i.flag.sj:before,i.flag.svalbard:before{background-position:-72px -1170px}i.flag.sk:before,i.flag.slovakia:before{background-position:-72px -1196px}i.flag.sierra.leone:before,i.flag.sl:before{background-position:-72px -1222px}i.flag.san.marino:before,i.flag.sm:before{background-position:-72px -1248px}i.flag.senegal:before,i.flag.sn:before{background-position:-72px -1274px}i.flag.so:before,i.flag.somalia:before{background-position:-72px -1300px}i.flag.sr:before,i.flag.suriname:before{background-position:-72px -1326px}i.flag.sao.tome:before,i.flag.st:before{background-position:-72px -1352px}i.flag.el.salvador:before,i.flag.sv:before{background-position:-72px -1378px}i.flag.sy:before,i.flag.syria:before{background-position:-72px -1404px}i.flag.swaziland:before,i.flag.sz:before{background-position:-72px -1430px}i.flag.caicos.islands:before,i.flag.tc:before{background-position:-72px -1456px}i.flag.chad:before,i.flag.td:before{background-position:-72px -1482px}i.flag.french.territories:before,i.flag.tf:before{background-position:-72px -1508px}i.flag.tg:before,i.flag.togo:before{background-position:-72px -1534px}i.flag.th:before,i.flag.thailand:before{background-position:-72px -1560px}i.flag.tajikistan:before,i.flag.tj:before{background-position:-72px -1586px}i.flag.tk:before,i.flag.tokelau:before{background-position:-72px -1612px}i.flag.timorleste:before,i.flag.tl:before{background-position:-72px -1638px}i.flag.tm:before,i.flag.turkmenistan:before{background-position:-72px -1664px}i.flag.tn:before,i.flag.tunisia:before{background-position:-72px -1690px}i.flag.to:before,i.flag.tonga:before{background-position:-72px -1716px}i.flag.tr:before,i.flag.turkey:before{background-position:-72px -1742px}i.flag.trinidad:before,i.flag.tt:before{background-position:-72px -1768px}i.flag.tuvalu:before,i.flag.tv:before{background-position:-72px -1794px}i.flag.taiwan:before,i.flag.tw:before{background-position:-72px -1820px}i.flag.tanzania:before,i.flag.tz:before{background-position:-72px -1846px}i.flag.ua:before,i.flag.ukraine:before{background-position:-72px -1872px}i.flag.ug:before,i.flag.uganda:before{background-position:-72px -1898px}i.flag.um:before,i.flag.us.minor.islands:before{background-position:-72px -1924px}i.flag.america:before,i.flag.united.states:before,i.flag.us:before{background-position:-72px -1950px}i.flag.uruguay:before,i.flag.uy:before{background-position:-72px -1976px}i.flag.uz:before,i.flag.uzbekistan:before{background-position:-108px 0}i.flag.va:before,i.flag.vatican.city:before{background-position:-108px -26px}i.flag.saint.vincent:before,i.flag.vc:before{background-position:-108px -52px}i.flag.ve:before,i.flag.venezuela:before{background-position:-108px -78px}i.flag.british.virgin.islands:before,i.flag.vg:before{background-position:-108px -104px}i.flag.us.virgin.islands:before,i.flag.vi:before{background-position:-108px -130px}i.flag.vietnam:before,i.flag.vn:before{background-position:-108px -156px}i.flag.vanuatu:before,i.flag.vu:before{background-position:-108px -182px}i.flag.wallis.and.futuna:before,i.flag.wf:before{background-position:-108px -234px}i.flag.samoa:before,i.flag.ws:before{background-position:-108px -260px}i.flag.ye:before,i.flag.yemen:before{background-position:-108px -286px}i.flag.mayotte:before,i.flag.yt:before{background-position:-108px -312px}i.flag.south.africa:before,i.flag.za:before{background-position:-108px -338px}i.flag.zambia:before,i.flag.zm:before{background-position:-108px -364px}i.flag.zimbabwe:before,i.flag.zw:before{background-position:-108px -390px}"
  },
  {
    "path": "automatic/static/css/page-v3/ak-master-page-v3.css",
    "content": "@charset \"UTF-8\";\n/*Zara*/\nbody {\n    font-family: Arial,'Microsoft Yahei' !important;\n}\n.ak-zmaster-sidebar-height{height:100%;}\n.ak-zn-fabars{background-color: #4684cf;border-color: #1ab394;color: #fff;border-radius:3px;padding: 8px 12px;margin:-5px 15px 0 10px;font-size: 14px;float: left;}\n.nav > li > a{font-weight:normal;}\n.btn-primary.ak-znavbar-btnblue{background-color: #4684cf;border-color: #4684cf;color: #FFFFFF;}\n.btn-primary.ak-znavbar-btnblue:hover{background-color: #4684cf;border-color: #4684cf;color: #FFFFFF;}\n@media (max-width: 992px){.body-small.mini-navbar .navbar-static-side{display: none;}}\n@media (max-width:992px){body.mini-navbar #page-wrapper{margin: 0 0 0 0;}\n.ak-zmaster-ntoprow{display:none;}\n.navbar-header{display:none;}\n.navbar-static-side{display:none;}}\n.ak-zprofile-userimg .img-box{width:48px;height:48px;overflow:hidden;display:inline-block;}\n@media (max-width: 992px){#page-wrapper{margin:0;}}.navbar-default .special_link a{background: #17987e !important;color: white;}\n.nav-tabs > li.active > a,\n.nav-tabs > li.active > a:hover,\n.nav-tabs > li.active > a:focus{-moz-border-bottom-colors: none;-moz-border-left-colors: none;-moz-border-right-colors: none;-moz-border-top-colors: none;background: none;border-color: #dddddd #dddddd rgba(0, 0, 0, 0);border-bottom: #f3f3f4;border-image: none;border-style: solid;border-width: 1px;color: #555555;cursor: default;}\n/*top row*/\n/*Message center start*/.dropdown-menu.media-list{max-width: 280px;padding: 0;}\n.dropdown-menu.media-list > .media .media-object{border-radius: 50%;color: #fff;font-size: 14px;height: 36px;line-height: 36px;text-align: center;width: 36px;}\n.media .media-object{width: 128px;}\n.bg-red{background: #ff5b57 none repeat scroll 0 0 !important;}\n.bg-green{background: #00acac none repeat scroll 0 0 !important;}\n.bg-blue{background: #348fe2 none repeat scroll 0 0 !important;}\n.media, .media-body{overflow: hidden;}\n.navbar-default .navbar-nav .open .dropdown-menu > li > a{color: #333;}\n.dropdown-menu.media-list > .media .media-object{border-radius: 50% !important;color: #fff;font-size: 14px;height: 36px;line-height: 36px;text-align: center;width: 36px;}\n.header-v6 .shopping-cart .shopping-cart-open.ak-notice-con{padding:0;}\n.dropdown-menu.media-list .dropdown-header{padding: 10px 20px!important;background: #fafafa;}\n.dropdown-menu.media-list>.media{margin-top: 0;border-top: 1px solid #eee;border-bottom: 1px solid #eee;margin-bottom: -1px;}\n.dropdown-menu.media-list>.media>a{display: block;padding: 10px 20px!important;}\n.dropdown-menu.media-list p{text-overflow: ellipsis;overflow: hidden;margin-bottom: 4px;/*max-width: 200px;*/}\n.f-s-11{font-size: 11px!important;}\n.dropdown-header{font-size: 14px;font-weight: 700;color: #242a30;padding: 0;margin: 0 0 10px;}\nspan.ak-top-msbadge{top:-9px;left: 8px;color: #fff;width: 18px;height: 18px;padding: 4px;display: block;font-size: 11px;text-align: center;position: absolute;background: #279fbb;display: inline-block;border-radius: 50% !important;}\n.ak-top-msbell{width: 25px;cursor: pointer;font-size: 18px;display: inline-block;color:#555;}\n.ak-top-ms-unread h6.media-heading ,.ak-top-ms-unread .text-muted,.ak-top-ms-unread p{color:#4584ce;}\n.ak-top-ms-unread{background-color:#fafafa;}\n.dropdown-menu.ak-notice-con{left: auto;top:40px;}\n@media (min-width: 992px){.header-v6 .dropdown-menu{padding: 0;}\n.dropdown-menu.ak-notice-con{max-width: 280px;padding: 0;}}\n@media (max-width: 768px){.dropdown-menu.ak-notice-con{left: auto;right: -60px;top:30px;}}\n/*Message center end*/\n.ak-zmaster-logo{display:inline-block;float:left;margin-top:11px;display:none;margin-left:-8px;}\n.ak-zmaster-sidebar.slidebar-open .ak-zmaster-logo{display:block;}\n@media (max-width:992px){.ak-zmaster-sidebarbtn{height:49px;display:none;}\n.ak-zmaster-sidebar.slidebar-open .ak-zmaster-sidebarbtn{display:block;}}\n.ak-zmaster-bottomnav{display:none;z-index:999;background:#f5f5f5;border-top: solid 1px #ddd;font-size:12px;}\n@media (max-width:992px){.ak-zmaster-bottomnav{position:fixed;bottom:0;width:100%;display:block!important;height:50px;}}\n.ak-zmaster-bottomnav li{width:20%;float:left;text-align:center;}\n.ak-zmaster-bottomnav li i.nav-icon{float:none;display:block;margin:0 auto 2px auto;}\n.ak-zmaster-bottomnav li{padding:5px 0 2px 0;}\n.ak-zmaster-bottomnav li a{padding:0;}\n.ak-zmaster-bottomnav li:last-child a{border-right:none;}\n.ak-zmaster-bottomnav li a:hover{background:transparent;color:#555;}\n@media (min-width:992px){.ak-zmemo-leftnav,.ak-zmemo-account-con{padding-top:50px;}}\n/*new top row*/\n.ak-zmaster-ntoprow{height:60px;border-bottom: solid 1px #ddd;background:#fff;padding:20px 10px 0 72px;}\n.ak-zmaster-ntoprow.toprow-fixed{box-shadow: 0 1px 8px rgba(0,0,0,0.1)!important;position:fixed;z-index:999;top:0;left:0;right:0;}\n.ak-zmaster-ntoplogo{display:inline-block;float:left;margin-top:-5px;}\n.navbar-appcenter .dropdown-toggle img{float: left;width: 22px;height: 22px;margin-right:15px;}\n.navbar-user .dropdown-toggle img{float: left;width: 26px;height: 26px;margin: -5px 15px 0 0;-webkit-border-radius: 26px !important;-moz-border-radius: 26px !important;border-radius: 26px !important;}\n@media (max-width:992px){.ak-zmaster-ntoprow{padding-left:12px;}}\n@media (min-width: 992px){.ak-zabout-me-height{min-height: 240px;max-height: 300px;overflow-y: auto;}}\n/*top-row app-center*/\n.ak-ztapp-ul{margin:0;padding:0 10px!important;list-style:none;}\n.ak-ztapp-ul > li{float:left;list-style:none;width:33.3%;margin-bottom:10px;}\n.ak-ztapp-ul > li a{padding:5px;}\n.ak-ztapp-ul li .ak-ztapp-smbox{display:block;text-align:center; line-height:170%; padding: 5px!important;}\n.ak-ztapp-ul li .ak-ztapp-smbox .img-box{width:40px;height:40px;display:inline-block;overflow:hidden;margin:0 auto;}\n.ak-ztapp-ul li .ak-ztapp-smbox .text{font-size:12px;margin: 0;padding: 0;margin-top: 8px;color: #4a4a4a;text-align: center;overflow: hidden;white-space: nowrap !important;text-overflow: ellipsis;-o-text-overflos: ellipsis;}\n.ak-znapp-center-dropdown{width:320px;}\n.ak-znapp-center-dropdown .dropdown-header{font-weight:normal;color: #242a30;padding: 0;margin: 0 0 10px;padding: 10px 20px!important;background: #fafafa;font-size: 14px;}\n.ak-ztapp-ul li a:hover{background-color: #f2f2f2!important;}\n.ak-znapp-center-dropdown.message-ul{width:300px;max-height:400px;overflow:auto;}\n.ak-zmaster-bottomnav{z-index:9999;}\n.ak-zn-master-con{padding-bottom:56px;}\n@media (max-width:992px){\n.ak-zn-logotop-row{display:none;}}\n@media (max-width: 768px){}\n.ak-zdol-sm-magnet-ulbox{margin-top: 10px;}\n.row.border-bottom{overflow: hidden;}\n/*user start*/\n.navbar-user .dropdown-toggle img{float: left;width: 30px;height: 30px;margin: -5px 10px 0 0;-webkit-border-radius: 30px !important;-moz-border-radius: 30px !important;border-radius: 30px !important;}\n\n@media (max-width: 768px){.dropdown-menu.ak-user-dropdown-menu{left: auto;right: -10px;top:30px;}}\n.ak-zadmin-dptop{position:relative;padding:15px 0;}\n.ak-zadmin-dptop .img-box{width:60px;height:60px;display:inline-block;overflow:hidden;border-radius:50%;position:absolute;top:10px;left:10px;}\n.ak-zadmin-dropdown{padding:0;width:200px;}\n.dropdown.navbar-user.ak-inlineblock.open{}\n.ak-zadmin-dropmenu{padding:15px 0 0 0;width:300px;}\n.ak-zadmin-dropmenu .topbox{position:relative;padding-left:95px;border-bottom: solid 1px #eaeaea;height:100px;padding-top:4px; color:#555;}\n.ak-zadmin-dropmenu .topbox .img-box{width:70px;height:70px;display:inline-block;overflow:hidden;border-radius:50%;position:absolute;top:5px;left:15px;bottom:10px;}\n.ak-zadmin-dropmenu .topbox .img-box img { min-height: 100%; min-width: 100%;}\n.ak-zadmin-dropmenu .topbox .name{font-size:14px;margin:0;padding:0;overflow:hidden; white-space:nowrap !important;text-overflow:ellipsis;}\n.ak-zadmin-dropmenu .topbox .email{font-size:12px;margin:0;padding:0;color:#7f7f7f; line-height:24px;overflow:hidden; white-space:nowrap !important;text-overflow:ellipsis;}\n.ak-zadmin-infobtn{background:#4d90fe;border:none;color:#fff;outline:medium none;padding:5px 12px;font-size:12px;margin-top:10px;border-radius:3px;line-height: 170%;}\n.ak-zadmin-dropmenu .mid-ul{margin:0;padding:0;list-style:none;}\n.ak-zadmin-dropmenu .mid-ul li{border-bottom: solid 1px #eaeaea;}\n.ak-zadmin-dropmenu .mid-ul li a{display:block;padding:8px 0;width:100%;padding-left:20px;color:#555;padding: 8px 0 8px 20px!important; line-height: 170%; font-size: 14px;}\n.ak-zadmin-dropmenu .footbox{background:#f5f5f5;padding:10px 25px;}\n.ak-zadmin-bottombtn{background:transparent;border:solid 1px #d0d0d0;color:#555;outline:medium none;/*padding:2px 12px;*/font-size:12px;border-radius:3px;}\n.ak-zadmin-bottombtn a{display:block;color:#555;font-size:12px!important;}\n.ak-zadmin-bottombtn a:hover    {color:#4c9be8;background:transparent !important;}\n.ak-zicon.ak-yun-setting{background-position: -408px -130px;}\n.ak-zborder-top{border-top: solid 1px #ddd;}\n.ak-zindex-appnav-ingbox .ak-update-img{width:70px;height:70px;}\n.ak-zindex-appnav-ingbox img{min-height:100%;min-width:100%;}\n.ak-zindex-appnav-ingbox .team-grids1 .captn33 span.ak-zvote-photoicon{top:35%;}\n.ak-app-box .dropdown-menu>li{float:none;width:auto;}\n.ak-zprofile-userimg .img-box{width:48px;height:48px;overflow:hidden;display:inline-block;}\n.ak-zprofile-userimg .img-box img{display: block;max-width: 100%;}\n\n/*user end*/\n/*bottom nav-icon*/\n.ak-zicon-masternav-blue{display:none;}\ni.nav-icon{float: left;margin-right: 20px;text-align: center;width: 20px;height: 20px;display: inline-block;}\n/*img{display: block;max-width: 100%!important;height: auto;}*/\n.ak-zmaster-bottomnav li:hover a .nav-icon .ak-zicon-masternav-grey,.ak-zmaster-bottomnav li.active .nav-icon .ak-zicon-masternav-grey{display:none;}\n.ak-zmaster-bottomnav li:hover a .nav-icon .ak-zicon-masternav-blue,.ak-zmaster-bottomnav li.active .nav-icon .ak-zicon-masternav-blue{display:inline-block;}\n.ak-zadmin-bottombtn.m-l-5{margin-left: 5px;}\n\n/**/\n.members-sidebar { padding:0; width:320px!important;right:-325px; overflow: auto;}\n.ak-zuser-aimg { width: 40px; height: 40px; display: inline-block; overflow: hidden; border-radius:50%;}\n.gn-menu-main .navbar-right .ak-zuser-aimgbox {\n    padding: 0 20px !important;\n  \n}\n.notifications.ak-zuser-dropdowndiv .dropdown-menu{ padding: 10px 0;line-height: 150%; padding-bottom:0;}\n.notifications.ak-zuser-dropdowndiv .dropdown-menu ul { width: 100%;}\n.notifications.ak-zuser-dropdowndiv .dropdown-menu.ak-znapp-center-dropdown { padding:0;}\ni.nav-icon img { width: 20px; max-width:20px!important; display: inline-block;;}\n.ak-zmaster-paage2-logo { margin-top:5px; display: inline-block;}\n.content { padding:58px 15px 40px 15px;}\n/*.ak-zn-master-con { overflow: hidden;}*/\n.members-sidebar { z-index: 998!important;}\n@media (max-width:768px) {.max-block { display: block!important;}\n.max-none { display: none!important;}\n}\n\n@media (max-width:768px) {.ak-znapp-center-dropdown { right: 0; left: auto;}}\n.mini-nav .content {\n    margin: 0 0 0 66px;\n}\n\n/*notice*/\n.notice-sidebar {\n    background: #e9eaed;\n    padding: 20px;\n    overflow: hidden;\n    position: fixed;\n    top: 56px;\n    bottom: 0;\n    width: 240px !important;\n    z-index: 605;\n    right: -245px;\n    -webkit-box-shadow: -1px 1px 5px 0px rgba(0, 0, 0, 0.13);\n    box-shadow: -1px 1px 5px 0px rgba(0, 0, 0, 0.13);\n    -webkit-transition: all, .5s;\n    transition: all, .5s;\n}\n\n.notice-sidebar {\n    padding:0;\n    width: 320px!important;\n    right: -325px;\n    overflow: auto;\n}\n.notice-sidebar {\n    z-index: 998!important;\n}\n.notice-sidebar-open {\n    right: 0 !important;\n}\n@media (min-width:992px) {.ak-zn-master-con { margin-top:20px;}}\n\n.ak-zmaster-backdropicon {\n  \n    background: url(../../images/ak-common.png) -124px -247px;\n   width: 24px;\n     float: none;\n}\n\n.ak-zdol-searchbox span.searchicon {\n    background: #fff url(\"../../images/ak-common.png\") no-repeat scroll -240px -242px;\n    border: 0 none;\n    display: inline-block;\n    height: 16px;\n    left: 6px;\n    outline: medium none;\n    position: absolute;\n    top: 6px;\n    width: 16px;\n    top: 1px;\n    left: 1px;\n    width: 25px;\n    height: 24px;\n}\n\n/**/\n#menu-toggle span {background: #fff !important;}\n#menu-toggle:hover span {\n    background: #fff !important;\n}\n.ak-zpage2-luser { width: 24px; height: 24px; display: inline-block; border-radius:50%; overflow: hidden;}\n.gn-submenu li a {\n    padding-left: 0;\n  \n}\n.gn-submenu li a:before {\n     display: none;\n}\n@media (max-width:768px) {.top-clock { display: none!important;} .logo { display: block!important;}}\n.mini-nav .content { padding-top:0!important;}\n.content {padding-top:0!important;}\n\n.tabbable,.carousel { margin-bottom:0!important;}\n\n.ak-mes-defbox-new2 { box-shadow: none!important;}\n.gn-menu-main .navbar-right .ak-ztapp-ul li a:focus, .gn-menu-main .navbar-right .ak-ztapp-ul li a:hover {background-color: #f2f2f2!important;}\n\n.ak-notice-close {width: 16px;\n    height: 16px;\n    background: url(../../images/ak-z-icon.png) -150px -1px;\n    opacity: 1;\n    color: transparent;\n    margin-top: 4px;\n    outline: medium none; display: inline-block; float: right; cursor: pointer;}\n\n    .ak-zmaster-mes-header {\n    font-weight: normal;\n    color: #555;\n    padding: 0;\n    margin: 0;\n    padding: 12px 15px!important;\n    background: #fafafa;\n    font-size: 16px;\n}\n.menu-toggle .hamburger span {\n    width: 26px;\n    height: 2px;\n    position: relative;\n    margin: 6px 2px;\n}\n.menu-toggle .cross span:nth-child(1) {\n    height: 0%;\n    width: 2px;\n    position: absolute;\n    top: 34px;\n    left: 9px;\n    -webkit-transition-delay: 0s;\n    transition-delay: 0s;\n}\n.menu-toggle .cross span:nth-child(2) {\n    width: 0%;\n    height: 2px;\n    position: absolute;\n    left: -6px;\n    top: 49px;\n    -webkit-transition-delay: .25s;\n    transition-delay: .25s;\n}\n.ak-mp01-nav-icon {\n    float: left;\n    text-align: center;\n    width: 20px;\n    height: 20px;\n    display: inline-block;\n    padding:0!important;\n    margin:20px 24px 0 24px;\n}\n.ak-mp01-nav-icon.subnav {margin:15px 20px 0 24px;\n}\n.ak-mp01-nav-icon.menhu { background-position:-222px -68px; }\n.ak-mp01-nav-icon.news { background-position:-256px -68px; }\n.ak-mp01-nav-icon.wendang { background-position:-534px -68px; }\n.ak-mp01-nav-icon.zhishi { background-position:-678px -68px; }\n.ak-mp01-nav-icon.txl { background-position:-463px -68px; }\n.ak-mp01-nav-icon.personal { background-position:-400px -68px; }\n.ak-mp01-nav-icon.renwu { background-position:-292px -68px; }\n.ak-mp01-nav-icon.richeng { background-position:-328px -68px; }\n.ak-mp01-nav-icon.beiwang { background-position:0 -68px; }\n.ak-mp01-nav-icon.liucheng { background-position:-186px -68px; }\n.no-touch .gn-menu-main a:hover .ak-mp01-nav-icon, .no-touch .gn-search-item:hover .ak-mp01-nav-icon { background-position-y:0;}\n.gn-menu li.active > a .ak-mp01-nav-icon {background-position-y:0;}\n\n/*=============消息中心 end==============*/\n.ak-meeting-box dt.meeting-time{ width:50px; font-size:12px; font-weight:normal; float:left;/* display:block;*/margin-right:5px; height:45px;}\n.ak-meeting-box dd.date { margin-left:60px; color:#b1afaf; overflow:hidden; white-space:nowrap !important;text-overflow:ellipsis; -o-text-overflos:ellipsis; font-size:12px;}\n.ak-mes-defbox span.panel-title {/*border-bottom: solid 2px #9f9f9f;padding-bottom:2px;*/ font-size:12px;}\n.ak-mes-defbox .panel-footer a.detail { display:block; width:100%;}\n.ak-mes-defbox .panel-footer a.detail:hover { text-decoration:none;}\n.ak-mes-defbox .panel-footer a.detail i { width:11px; height:14px; float:right;  opacity:0.5; margin-top:4px; margin-left:5px;}\n.ak-mes-defbox .panel-body h4 { font-size:14px;}\n.ak-mes-defbox p { color:#b8b8b8; font-size:12px;}\n.ak-caret1 { width:14px; height:15px; display:inline-block;}\n.ak-fa-plus1 {  width:17px; height:17px; display:inline-block; float:left;}\n.dropdown-toggle:focus { outline:medium none; box-shadow:none;}\n.ak-handleicon { width:16px; height:16px; display:inline-block; float:left;}\n:focus {\n    outline: none!important;\n}\n.ak-meeting-box dt.meeting-time .colorb8b8b8 { color:#b8b8b8;}\n.ak-mes-defbox .panel-footer button { width:30%!important;}\n.ak-mes-defbox .ak-mes-handlebox button { width:45%!important;}\n.ak-mes-new-btn {margin-right:10px;}\n@media (max-width:768px) {.ak-mes-new-btn { margin-right:25px;}\n}\n.ak-mes-handlebox { padding:10px 0; /*display:none;*/}\n.ak-mes-handlebox textarea  { width:calc(100% - 65px);\nborder: solid 1px #ddd; padding-left:5px;}\n.ak-collect-star{display: block;width: 16px;height: 16px;position: absolute;right: 5px;top: 0;background-position:0 0;z-index:1030;background-repeat: no-repeat;}\n.ak-collect-star.active{background-position:-20px 0;}\n.ak-mes-defbox-new2{padding:0 15px;background:#fff;margin-top:10px;box-shadow: 0 0 8px #ddd;}\n.mes-heading{padding:5px 0;border-bottom: solid 1px #ddd;}\n.ak-mes-defbox-new2 span.panel-title{font-size: 12px;}\n.ak-mes-defbox-new2 span.time{font-size: 12px;color: #b8b8b8;line-height: 210%;}\n.ak-desk-icon2.title-icon{width: 10px;height: 11px;margin: 5px;background-position: 0 0;cursor:pointer;}\n.no-padding-lr{padding-left:0!important;padding-right:0!important;}\n.mes-panel-body{padding:15px 0 10px 0;}\n.mes-panel-body h4{font-size: 14px;margin-bottom:2px;margin-top:0;width:98%;width: calc(100% - 20px);}\n.mes-panel-left{width:60px;}\n.mes-panel-right{width:80%;width:calc( 100% - 60px)!important;}\n.ak-mes-defbox-new2 p{color: #b8b8b8;font-size: 12px;}\n/*.mes-foot{padding: 8px 0;border-top: solid 1px #ddd;}*/\n.ak-mes-defbox-new2 .mes-foot a.detail{display: block;width: 100%;font-size:12px;color:#b8b8b8;}\n.ak-mes-defbox-new2 .mes-foot a.detail i{width: 11px;height: 14px;float: right;opacity: 0.5;margin-top: 1px;margin-left: 5px;}\n.m-b-6{margin-bottom:6px;}\n.color-7f7f7f{color:#7f7f7f;}\n.ak-mes-defbox-new2 .mes-foot button{width: 30%!important;}\n.list-group.width50 p{width:50%;float:left;}\n.ak-mes-handlebox.ak-mes-handlebox2{background:#f5f5f5;margin-left:-15px;margin-right:-15px;padding-left:15px;padding-right:15px;/*margin-bottom:-8px;*//*margin-top:8px;*/border-top: solid 1px #e1e2e3;}\n.ak-relative{position: relative;}\n.ak-mes-docbox{width:98%;background:#f4f5f7;border-radius:3px;overflow:hidden;margin-top:10px;height:60px;margin-left:2px;}\n.ak-mes-docbox span.img{width:60px;height:60px;}\n.p-box{margin-top:7px;padding:0 2px;}\n.list-group.ak-p-col p.col-sm-6 span{width:50%;display:inline-block;overflow:hidden;white-space:nowrap !important;text-overflow:ellipsis;-o-text-overflos:ellipsis;}\n@media (max-width:1200px){.list-group.ak-p-col .col-sm-6{width:100%!important;}}\n@media (max-width: 768px){.ak-col-6padding-box .col-md-6.col-sm-6.ak-col-6padding{padding-left:0!important;padding-right:0!important;}}\n@media (max-width:768px) {.ak-znews-none { display:none;}}\n.ak-mes-handlebox2 button { border-radius:0!important;}\n.btn-zblue { background:#4684cf;border:none!important; color:#fff; padding:4px 20px;}\n\n.ak-afun-appicon { background-image:none!important; width:50px!important; height:50px!important; overflow:hidden; display:block;}\n.ak-afun-appicon img  {display: block; max-width: 100%; height: auto; width:30px; height:30px; margin:10px;} \n.ak-news-topsort a.active {color: #3c72b4; font-weight:600;}\n\n@media (max-width:768px) {.ak-col-6padding-box .col-md-6.col-sm-6.ak-col-6padding {right:0;}}\n\n.col-md-6.col-sm-6.ak-col-6padding:after {\n    margin-bottom: 10px; background:#000;  margin-top:50px;\n}\n/*message*/\n.ak-zwei-people-container{overflow-y:auto;height:-moz-calc(100% - 270px);height:-webkit-calc(100% - 270px);height:calc(100% - 270px);}\n.ak-zwei-people-ul,.ak-zwei-people-ul li{margin:0;padding:0;list-style:none;}\n.ak-zwei-people-ul li{padding:8px 10px 0 10px;cursor:pointer;}\n.ak-zwei-people-ul li:hover{background:#6d84b4;color:#fff!important;}\n.ak-zwei-weicharrow{position:relative;border-bottom: solid 1px #ddd;}\n.ak-zwei-people-ul li:hover .ak-zwei-weicharrow{border-bottom: solid 1px transparent;}\n.ak-zwei-weicharrow .img-box{width:50px;height:50px;display:inline-block;overflow:hidden;float:left;margin-bottom:8px;}\n.ak-zwei-weicharrow .img-box img{min-width:50px;min-height:50px;}\n.ak-zwei-weicharrow .text-box{padding:0 60px;}\n.ak-zwei-weicharrow .text-box .name{font-size:14px;font-weight:600;margin-top:5px;margin-bottom:5px;overflow:hidden;white-space:nowrap !important;text-overflow:ellipsis;-o-text-overflos:ellipsis;}\n.ak-zwei-weicharrow .text-box .signature{font-size:12px;color:#878787;overflow:hidden;white-space:nowrap !important;text-overflow:ellipsis;-o-text-overflos:ellipsis;margin-bottom:0;}\n.ak-zwei-weicharrow .time{position:absolute;right:0;top:0;width:50px;overflow:hidden;text-align:right;color:#a3a3a3;}\n.ak-zwei-people-ul li:hover .text-box .name,.ak-zwei-people-ul li:hover .text-box .signature,.ak-zwei-people-ul li:hover .time{color:#fff!important;}\n.ak-zwei-signature-icon{width:15px;height:15px;display:inline-block;float:left;}\n.chat-name{height:50px;line-height:50px;text-align:center;line-height:50px;position:absolute;top:0;left:55px;right:55px;font-size: 16px;cursor: pointer;}\n.ak-zper-inbox-title.chat{position:relative;}\n.ak-zwei-dialog-box{height:-moz-calc(100% - 220px);height:-webkit-calc(100% - 220px);height:calc(100% - 220px);}\n.ak-zwei-dialog-box{position:relative;}\n.ak-zwei-footsendbox{height:100px;position:absolute;left:0;bottom:0;background:#fff;border-top: solid 1px #ddd;width:100%;}\n.ak-zwei-sendmessage{height:60px;padding:5px 10px;overflow:hidden;}\n.ak-zwei-sendbtnbox{height:40px;border-top: solid 1px #ddd;}\n.ak-zwei-add-enclosure{height:40px;line-height:40px;width:80px;text-align:center;border:none;border-right: solid 1px #ddd;background:transparent;outline:none;}\n.ak-zwei-add--sendbtn{width:80px;height:28px;text-align:center;border: solid 1px #ddd;background:#f5f5f5;outline:none;line-height:28px;margin:6px 10px;}\n.ak-zwei-add--sendbtn:hover{background:#e0dfdf;}\n.ak-zwei-dialog-message-container{padding:10px 15px 10px 10px;height:-moz-calc(100% - 100px);height:-webkit-calc(100% - 100px);height:calc(100% - 100px);overflow:auto;}\n.ak-zwei-dialog-message-row .img-box{width:40px;height:40px;display:inline-block;overflow:hidden;float:left;cursor:pointer;}\n.ak-zwei-dialog-message-row .img-box img{min-height:40px;min-height:40px;}\n.ak-zwei-dialog-message-row{margin-bottom:7px;}\n.ak-zwei-dialog-message-row .message-bubble{border-radius:4px;padding:10px;line-height:170%;font-size:12px;display:inline-block;margin-left:15px;position:relative;cursor:pointer;max-width:45%;word-wrap: break-word;}\n.ak-zwei-dialog-message-row .message-bubble.white{background-color:#fff;}\n.ak-zwei-dialog-message-row .message-bubble.green{background-color:#b4eb7c;}\n.ak-zwei-dialog-message-row .message-bubble.right{margin-right:15px;margin-left:0;}\n.ak-zwei-arrow-left{width:0;height:0;border-width:7px 7px 7px 0;border-style:solid;border-color:transparent #fff transparent transparent;position:absolute;top:10px;left:-7px;}\n.ak-zwei-arrow-right{width:0;height:0;border-width:7px 0 7px 7px;border-style:solid;border-color:transparent transparent transparent #b4eb7c;position:absolute;top:10px;right:-7px;}\n.ak-zwei-dialog-message-row .message-bubble.img-chatbox{max-width:160px;max-height:150px;padding:2px;}\n.ak-zwei-dialog-message-row .message-bubble.img-chatbox{max-width:160px;max-height:150px;padding:2px;}\n@media (max-width:768px){.ak-zwei-people-container{overflow-y:auto;height:-moz-calc(100% - 200px);height:-webkit-calc(100% - 200px);height:calc(100% - 200px);}\n.ak-zwei-dialog-box{height:-moz-calc(100% - 150px);height:-webkit-calc(100% - 150px);height:calc(100% - 150px);}\n.ak-zwei-dialog-message-row .message-bubble{max-width:75%;}}\n@media (max-width:400px){.ak-zmemo-masternav li a{padding: 10px 5px;}}.ak-zwei-addpeople-btn{width:30px;height:30px;cursor:pointer;display:inline-block;float:right;margin:10px;}\n/*.ak-zmemo-account-con{padding-bottom:9999px;margin-bottom:-9999px;overflow:hidden;min-height:100%;}*/.ak-zwei-chat-searchbox{border-bottom:solid 1px #ddd;height:36px;padding:3px 0;position:relative;}\n.ak-zwei-chat-searchbox span.searchicon{background:url(../../images/ak-z-icon.png) no-repeat scroll 0 0;border: 0 none;display: inline-block;height: 16px;left: 6px;outline: medium none;position: absolute;top: 12px;width: 16px;}\n.ak-zwei-chat-searchbox input[type=\"text\"]{border:none;color: #797979;display: inline-block;font-size: 0.975em;outline: medium none;padding: 0 2px 0 30px;width: 100%;height: 36px;background:transparent;}\n.ak-zwei-friend-row{position:relative;border-bottom: solid 1px #ddd;cursor:pointer;}\n.ak-zwei-friend-row .img-box{width:36px;height:36px;display: inline-block;overflow: hidden;float: left;margin-bottom: 4px;margin-top:4px;}\n.ak-zwei-friend-row .img-box img{min-width: 36px;min-height: 36px;}\n.ak-zwei-friend-row .text-box{padding: 0 60px 0 45px;}\n.ak-zwei-friend-row .text-box .name{font-size: 14px;margin-top: 5px;margin-bottom: 5px;overflow: hidden;white-space: nowrap !important;text-overflow: ellipsis;-o-text-overflos: ellipsis;}\n.ak-zwei-friend-row .right-checkbox{position: absolute;right: 10px;top: 0;width: 50px;vertical-align:middle;margin-top:10px;overflow: hidden;text-align: right;color: #a3a3a3;}\n.ak-zwei-sort-letter{height:26px;background:#ebebeb;color:#878787;padding:0 10px;font-size:12px;line-height:26px;margin:5px 0;}\n@media (min-width:768px){.ak-zweichat-modal .modal-content{max-height:100%;}\n.ak-zweichat-mainbody{max-height:600px;}\n.ak-zweichat-modal .ak-zweichat-modal-height{max-height:540px;overflow:auto;}}\n.ak-zwei-sending-time-row {margin:7px 0;}\n.ak-zwei-sending-time { font-size:12px; color:#fff; padding:4px 6px; background:#c4c4c5;  display:inline-block; border-radius:6px; cursor:pointer; }\n@media (max-width:768px) {.ak-zwei-sending-time { padding:2px 5px;}}\n.ak-zwei-weicharrow .img-box { position:relative;}\n.ak-zwei-unread-icon { position: absolute; right:-6px; top:-6px; width:20px; height:20px; background:red; color:#fff; display:inline-block; font-style:normal; border-radius:50%; overflow:hidden; text-align:center; line-height:20px; font-size:11px; z-index:9;}\n.ak-zwei-weicharrow .left-imgbox {width: 50px; position:relative; height: 50px;  display: inline-block;  float: left;  margin-bottom: 8px;}\n.bottom-bnts a {\n    background: #2C393F;\n    color: #76828E;\n}\n.metismenu .fa.arrow:before {\n    content: \"\\f105\";\n}\n.no-touch .gn-menu-main .active > a, .no-touch .gn-search-item.active > a {\n    background: #4c9be8;\n    color: #fff;\n}\n.content { background: #fff; overflow: hidden;}\n.gn-submenu li a.active:after {\n    border-left: 8px solid transparent;\n}\n/*nav img*/\n\n.ak-mp01-nav-icon { overflow: hidden; background-image: none; margin-top:22px;}\n.ak-mp01-nav-icon img {display: block;\n    max-width: 100%;\n    height: auto;}\n\n\n\n.ak-zmaster-mes-footer { background: #e9e8e8;  height: 36px; line-height: 36px; text-align: center; position: absolute; bottom:0; width: 100%; color: #555;}\n.ak-zmaster-mes-footer a { font-size: 12px; padding: 6px 12px;}\n.members-sidebar .gn-scroller { height: calc(100% - 100px);}   \n\n\n\n@media (max-width: 992px){\n.ak-min-fullwidth-modal .modal-content {\n    min-height: 100%;\n    border-radius: 0!important;\n}\n}\n\n@media (max-width: 450px){\n.ak-znapp-center-dropdown {\n     right:0!important;\n    position: fixed;\n    top:56px;\n}\n}\n\n\n.ak-zpage2-luser img { min-height: 24px; min-width: 24px;}\n\n\n/*setting*/\n.ak-zuser-dropdowndiv.open > a{ background: #666777;\n    color: #fff;}\n.ak-zmaster-setting-row {position: relative; cursor: pointer; padding-top:10px;  margin-top:-1px;}\n\n.ak-zmaster-setting-row .img-box { width: 40px; height: 40px;overflow: hidden; display: inline-block; float: left; }\n.ak-zmaster-setting-row .img-box img { min-height:100%; min-width:100%;}\n.ak-zmaster-setting-row .text-box { border-top: solid 1px transparent;border-bottom: solid 1px #eaeaea;margin: 0 30px;  padding-bottom:10px;}\n.ak-zmaster-setting-row:hover {background-color: #f4f9fd; border-bottom: solid 1px #eaeaea;border-top: solid 1px #eaeaea; }\n\n\n.ak-zmaster-setting-row:hover .text-box { border:none;}\n.ak-zmaster-setting-row .text-box .title { margin: 0 0 5px 0; font-size: 14px; color: #3498db;}\n.ak-zmaster-setting-row .text-box .describe { font-size: 12px; margin: 0;}\n.ak-zmaster-setting-h3 { margin: 0 0 0 15px; float: left;}\n\n.gn-menu-main .navbar-right li.active > a{background: #4c9be8;\n    color: #fff;}\n .gn-menu-main .navbar-right { border-radius: 0!important;}\n\n\n\n  .ak-zmaster-droplayer {\n    position: fixed;\n    top: 56px;\n    left: 0;\n    right: 0;\n    bottom: 0;\n    background:transparent none repeat scroll !important;\n    z-index: 1001;\n     width:100%;\n}\n\n.dropcap img{float: left;height: 40px;padding: 2px;width:40px;}\n.rounded-x{border-radius: 50% !important;}\n.dropcap{width:50px;height:50px;color: #555;float: left;line-height: 50px;margin: 0 5px 0 0;overflow:hidden;font-size:24px;text-align:center;}\n.dropcap.dropcap1{width:40px;height:40px; overflow:hidden;}\n.mes-panel-left{width:60px;}\n.mes-panel-right{width:80%;width:calc( 100% - 60px)!important;}\n.ak-mes-defbox-new2 p{color: #b8b8b8;font-size: 12px;}\n\n\n/*navbar*/\n@media(max-width:400px) {.gn-menu-main .navbar-right a {\n    padding: 0 8px !important;\n    font-size: 18px;\n}\n.gn-menu-main .navbar-right .ak-zuser-aimgbox {\n    padding: 0 8px !important;\n}\n\n}\n\n@media(min-width: 992px) {.gn-menu-main.navbar { border-radius: 0!important;}}\n.navbar{ border-radius: 0!important;}\n@media (max-width:500px) {.gn-menu-main .logo {padding-left:10px!important;}\n\n.menu-toggle .hamburger span { width:20px;}.gn-menu-main li.gn-trigger { width: 46px;}}\n\n\n@media(min-width: 992px) {.gn-menu-main.navbar { border-radius: 0!important;}}\n.navbar{ border-radius: 0!important;}\n@media (max-width:500px) {.gn-menu-main .logo {padding-left:10px!important;}\n\n.menu-toggle .hamburger span { width:20px;}.gn-menu-main li.gn-trigger { width: 46px;}}\n.gn-menu-main .logo {overflow:hidden; white-space:nowrap !important;text-overflow:ellipsis;}\n\n@media (min-width:1201px) {.gn-menu-main .logo { max-width:460px;}}\n@media (min-width:993px) and (max-width:1200px) {.gn-menu-main .logo { max-width:350px;}}\n@media (min-width:769px) and (max-width:992px) {.gn-menu-main .logo { max-width:250px;}}\n@media (min-width:501px) and (max-width:768px) {.gn-menu-main .logo { max-width:250px;}}\n@media (min-width:430px) and (max-width:500px) {.gn-menu-main .logo { max-width:200px;}}\n@media (max-width:430px) {.gn-menu-main .logo { max-width:150px;}}\n/*.menu-toggle.gn-selected .cross span:nth-child(2){ width: 33px;}\n.menu-toggle.gn-selected .cross span:nth-child(1){ height: 33px;}*/\n/*nav button*/\n@media(max-width:500px) {.gn-menu-main > li > .menu-toggle.gn-icon {padding:0;}\n.menu-toggle .hamburger {margin-left:10px;}\n.menu-toggle .cross {left:18px;}\n.menu-toggle .cross span:nth-child(1){top: 26px;  left: 8px; }\n.menu-toggle .cross span:nth-child(2){    left: -5px; top: 40px; }\n.menu-toggle.gn-selected .cross span:nth-child(2){ width: 30px;}\n.menu-toggle.gn-selected .cross span:nth-child(1){ height: 30px;}\n}\n\n/*4-15*/\n.gn-menu-main ul.gn-menu a { color: #fff;}\n.gn-menu-main, .gn-menu-main ul { line-height: 56px; }\n.ak-mp01-nav-icon { margin-top:17px; }\n.gn-menu-wrapper.gn-open-all .gn-submenu li {\n  height: 50px;\n  line-height: 50px;\n}\n.gn-menu-main ul.gn-menu a { display: inline-block; width: 100%; height: 56px; }\n.gn-menu .arrow { line-height: 50px; color: #fff; }\n.ak-mp01-nav-icon img {display: block;\n    max-width: 100%;\n    height: auto;}\n    .gn-menu-wrapper { width: 50px!important; top:50px;}\n.gn-menu-main li.gn-trigger { width: 50px!important;}\n.gn-menu-wrapper.gn-open-all { width: 270px!important;}\n.ak-mp01-nav-icon {\n    width: 16px;\n    height: 16px;\n}\n.ak-mp01-nav-icon {\n    margin: 17px 20px 0 15px;\n}.gn-menu-main > li > a { height: 50px;margin:0; }\n.gn-menu-main, .gn-menu-main ul { line-height: 50px; }\n.gn-menu-main { height: 50px; }\n.gn-menu i {\n    padding: 0 18px;\n    font-size: 14px;\n}\n.menu-toggle .cross span:nth-child(2) { left: 1px;\n    top: 37px;\n    height: 1px;}\n.menu-toggle.gn-selected .cross span:nth-child(2) { width: 46%; }\n.menu-toggle .cross span:nth-child(1) { top: 26px;\n    left: 12px;\n    width: 1px;}\n.menu-toggle .hamburger { margin-left:-2px; }\n.menu-toggle .hamburger span { height: 1px; }\n.gn-menu-main li.gn-trigger a { padding: 0;}\n\n/*grey*/\n.gn-menu-wrapper { width: 56px!important; top:56px;}\n.gn-menu-main li.gn-trigger { width: 56px!important;}\n@media (min-width: 769px) {.gn-menu-main li.gn-trigger {margin:-1px 0 0 -1px!important;}}\n.gn-menu-wrapper.gn-open-all { width: 270px!important;}\n.ak-mp01-nav-icon {\n    margin: 20px 20px 0 20px;\n} \n.gn-menu-main > li > a { padding: 0 15px; }\n.gn-menu-main > li > a { height: 56px;margin:0; }\n.gn-menu-main, .gn-menu-main ul { line-height: 56px; }\n.gn-menu-main { height: 56px; }\n.menu-toggle .cross span:nth-child(2) { left: 1px;\n    top: 37px;\n    height: 1px;}\n.menu-toggle.gn-selected .cross span:nth-child(2) { width: 46%; }\n.menu-toggle .cross span:nth-child(1) { top: 26px;\n    left: 12px;\n    width: 1px;}\n.menu-toggle .hamburger { margin-left:-2px; }\n.ak-mp01-nav-icon { width: 16px; height: 16px; }\n.menu-toggle .hamburger span { height: 1px; }\n.gn-open-all .ak-zmp-nav { width: 100%!important; }\n.gn-menu .fa.arrow:before { display: none; }\n.gn-menu .fa.arrow{ background:url(../../images/ak-common.png) no-repeat -300px -120px; width: 30px; height: 30px; display: inline-block; margin-top:13px; }\n.metismenu .active>a>.fa.arrow { background-position:-360px -300px;  }\n.gn-menu-main > li > a {\n    padding: 0 15px;\n}\n.menu-toggle .hamburger span {\n    width: 20px;\n    height: 2px;\n    position: relative;\n}\n.menu-toggle .cross span:nth-child(1) {\n    height: 0%;\n    width: 2px;\n    position: absolute;\n    top: 32px;\n    left: 9px;\n    -webkit-transition-delay: 0s;\n    transition-delay: 0s;\n}\n.menu-toggle .cross span:nth-child(2) {\n    width: 0%;\n    height: 2px;\n    position: absolute;\n    left: -6px;\n    top: 47px;\n    -webkit-transition-delay: .25s;\n    transition-delay: .25s;\n}\n.gn-menu-main li.gn-trigger #menu-toggle { padding: 0 15px;}\n.menu-toggle .cross span:nth-child(1) {\n  position: absolute;\n  top: 32px;\n  left: 9px;\n  width: 3px;\n  height: 0%;\n  -webkit-transition-delay: 0s;\n          transition-delay: 0s;\n}\n\n.menu-toggle .cross span:nth-child(2) {\n  position: absolute;\n  top: 47px;\n  left: -6px;\n  width: 0%;\n  height: 3px;\n  -webkit-transition-delay: .25s;\n          transition-delay: .25s;\n}\n.menu-toggle .cross span:nth-child(2) { left: 1px;\n    top: 38px;\n    height: 1px;}\n.menu-toggle.gn-selected .cross span:nth-child(2) { width: 26px; }\n.menu-toggle .cross span:nth-child(1) { top: 26px;\n    left: 13px;\n    width: 1px;}\n.menu-toggle .hamburger { margin-left:-2px; }\n.menu-toggle .hamburger span { height: 1px; }\n.menu-toggle.gn-selected .cross span:nth-child(1) {\n  height: 26px;\n  -webkit-transition-delay: .625s;\n          transition-delay: .625s;\n}\n\n.menu-toggle.gn-selected .cross span:nth-child(2) {\n  width: 46%;\n  -webkit-transition-delay: .375s;\n          transition-delay: .375s;\n}\n.gn-menu-main li.gn-trigger a { font-size: 14px;}\n.gn-menu-main .logo {line-height:56px;}\n.gn-search-item input.gn-search { padding-left:56px;}\n.mini-nav .content { margin: 0 0 0 56px;}\n.gn-search-item input.gn-search:hover { color: #fff!important;}\n.menu-toggle .hamburger { top:15px;}\n.menu-toggle .cross { top:3px;}\n\n"
  },
  {
    "path": "automatic/static/css/page-v3/ak-master-page-v3style.css",
    "content": "@charset \"UTF-8\";\n/*\n *\n *   RENAISSANCE - Responsive Admin Theme\n *   version 1.3.0\n *\n*/\n\n.preloader {\n  position: fixed !important;\n  z-index: 99999;\n  width: 100%;\n  height: 100%;\n}\n\n/*!\n * Load Awesome v1.1.0 (http://github.danielcardoso.net/load-awesome/)\n * Copyright 2015 Daniel Cardoso <@DanielCardoso>\n * Licensed under MIT\n */\n.la-ball-scale-multiple,\n.la-ball-scale-multiple > div {\n  position: relative;\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n}\n\n.la-ball-scale-multiple {\n  display: block;\n  margin: 0 auto;\n  color: #63A8EB;\n  font-size: 0;\n}\n\n.la-ball-scale-multiple.la-dark {\n  color: #333;\n}\n\n.la-ball-scale-multiple > div {\n  float: none;\n  display: inline-block;\n  border: 0 solid currentColor;\n  background-color: currentColor;\n}\n\n.la-ball-scale-multiple {\n  width: 32px;\n  height: 32px;\n}\n\n.la-ball-scale-multiple > div {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 32px;\n  height: 32px;\n  -webkit-border-radius: 100%;\n          border-radius: 100%;\n  opacity: 0;\n  -webkit-animation: ball-scale-multiple 1s 0s linear infinite;\n          animation: ball-scale-multiple 1s 0s linear infinite;\n}\n\n.la-ball-scale-multiple > div:nth-child(2) {\n  -webkit-animation-delay: .2s;\n          animation-delay: .2s;\n}\n\n.la-ball-scale-multiple > div:nth-child(3) {\n  -webkit-animation-delay: .4s;\n          animation-delay: .4s;\n}\n\n.la-ball-scale-multiple.la-sm {\n  width: 16px;\n  height: 16px;\n}\n\n.la-ball-scale-multiple.la-sm > div {\n  width: 16px;\n  height: 16px;\n}\n\n.la-ball-scale-multiple.la-2x {\n  width: 64px;\n  height: 64px;\n}\n\n.la-ball-scale-multiple.la-2x > div {\n  width: 64px;\n  height: 64px;\n}\n\n.la-ball-scale-multiple.la-3x {\n  width: 96px;\n  height: 96px;\n}\n\n.la-ball-scale-multiple.la-3x > div {\n  width: 96px;\n  height: 96px;\n}\n\n/*\n * Animation\n */\n@-webkit-keyframes ball-scale-multiple {\n  0% {\n    opacity: 0;\n    -webkit-transform: scale(0);\n            transform: scale(0);\n  }\n  5% {\n    opacity: .75;\n  }\n  100% {\n    opacity: 0;\n    -webkit-transform: scale(1);\n            transform: scale(1);\n  }\n}\n\n@keyframes ball-scale-multiple {\n  0% {\n    opacity: 0;\n    -webkit-transform: scale(0);\n            transform: scale(0);\n  }\n  5% {\n    opacity: .75;\n  }\n  100% {\n    opacity: 0;\n    -webkit-transform: scale(1);\n            transform: scale(1);\n  }\n}\n\n/*Timer Loader*/\n.refresh-preloader {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 100;\n  display: none;\n  background: #fff;\n  text-align: center;\n}\n\n.refresh-preloader .la-timer {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  -webkit-transform: translate(-50%, -50%);\n          transform: translate(-50%, -50%);\n      -ms-transform: translate(-50%, -50%);\n}\n\n\n.gn-scroller {\n  overflow-x: hidden;\n  height: -webkit-calc(100% - 65px);\n  height: calc(100% - 65px);\n}\n\n.gn-menu-main,\n.gn-menu-main ul {\n  z-index: 1200;\n  margin: 0;\n  padding: 0;\n  width: 270px;\n  list-style: none;\n  text-transform: none;\n  font-weight: 300;\n  line-height: 66px;\n}\n\n.gn-menu-main {\n  position: fixed;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 56px;\n  font-size: 13px;\n}\n\n.gn-menu-main a {\n  display: block;\n  height: 100%;\n  text-decoration: none;\n  cursor: pointer;\n}\n\n.gn-menu-main > li {\n  float: left;\n  display: block;\n  padding: 0;\n  height: 100%;\n  text-align: center;\n}\n\n.gn-menu-main > li > a {\n  padding: 0 30px;\n  text-transform: uppercase;\n  letter-spacing: 1px;\n  font-weight: bold;\n}\n\n.gn-menu-main li.gn-trigger {\n  position: relative;\n  width: 66px;\n  -webkit-touch-callout: none;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n      -ms-user-select: none;\n          user-select: none;\n}\n\n.gn-menu-main:after {\n  clear: both;\n  display: table;\n  content: \"\";\n}\n\n.gn-menu-main .navbar-right {\n  width: auto;\n  line-height: 54px;\n}\n\n.gn-menu-main .navbar-right a {\n  padding: 0 20px !important;\n  font-size: 18px;\n}\n\n.gn-menu-main .navbar-right .mdi {\n  vertical-align: -5px;\n  font-size: 30px;\n}\n\n.gn-menu-main .navbar-right .cs-select {\n  margin-bottom: 0;\n}\n\n.gn-menu-main .navbar-right .cs-select > span {\n  margin-top: -1px;\n  padding: 0 3em 0 1em;\n  height: 55px;\n  line-height: 50px;\n}\n\n.gn-menu-main .navbar-right .cs-select ul {\n  width: auto;\n  line-height: 1.42857143;\n}\n\n.gn-menu-main .navbar-right .cs-select ul li {\n  width: 100%;\n}\n\n.gn-menu-main .navbar-right .cs-select ul li span {\n  padding-left: 52px;\n  background-position: 12% 50%;\n  background-size: 2em auto;\n  background-repeat: no-repeat;\n  text-align: left;\n}\n\n.gn-menu-main .navbar-right .cs-skin-elastic .cs-options li.flag-france span {\n  background : #FFFFFF;\n}\n\n.gn-menu-main .navbar-right .cs-skin-elastic .cs-options li.flag-england span {\n  background : #FFFFFF;\n}\n\n.gn-menu-main .navbar-right .cs-skin-elastic .cs-options li.flag-germany span {\n  background : #FFFFFF;\n}\n\n.gn-menu-main .navbar-right .label {\n  right: 8px;\n}\n\n.gn-menu-main .logo {\n  padding: 0 14px;\n  font-weight: 300;\n  font-size: 20px;\n  line-height: 56px;\n}\n\n.gn-menu-main .logo i {\n  margin-left: 10px;\n}\n\n.gn-menu-main .member-info {\n  line-height: 1.42857143;\n}\n\n.menu-toggle {\n  position: relative;\n  cursor: pointer;\n}\n\n.menu-toggle span {\n  display: block;\n  -webkit-border-radius: 2px;\n          border-radius: 2px;\n  -webkit-transition-duration: .2s;\n          transition-duration: .2s;\n  -webkit-transition-property: top, left, width, height;\n          transition-property: top, left, width, height;\n}\n\n.menu-toggle .hamburger {\n  position: absolute;\n  top: 12px;\n  margin-left: -13px;\n}\n\n.menu-toggle .hamburger span {\n  position: relative;\n  margin: 6px 0;\n  width: 30px;\n  height: 3px;\n}\n\n.menu-toggle .hamburger span:nth-child(1) {\n  -webkit-transition-delay: .5s;\n          transition-delay: .5s;\n}\n\n.menu-toggle .hamburger span:nth-child(2) {\n  -webkit-transition-delay: .625s;\n          transition-delay: .625s;\n}\n\n.menu-toggle .hamburger span:nth-child(3) {\n  -webkit-transition-delay: .75s;\n          transition-delay: .75s;\n}\n\n.menu-toggle .cross {\n  position: absolute;\n  width: 100%;\n  height: 100%;\n  -webkit-transform: rotate(45deg);\n          transform: rotate(45deg);\n      -ms-transform: rotate(45deg);\n}\n\n.menu-toggle .cross span:nth-child(1) {\n  position: absolute;\n  top: 32px;\n  left: 9px;\n  width: 3px;\n  height: 0%;\n  -webkit-transition-delay: 0s;\n          transition-delay: 0s;\n}\n\n.menu-toggle .cross span:nth-child(2) {\n  position: absolute;\n  top: 47px;\n  left: -6px;\n  width: 0%;\n  height: 3px;\n  -webkit-transition-delay: .25s;\n          transition-delay: .25s;\n}\n\n.menu-toggle.gn-selected .hamburger span {\n  width: 0%;\n}\n\n.menu-toggle.gn-selected .hamburger span:nth-child(1) {\n  -webkit-transition-delay: 0s;\n          transition-delay: 0s;\n}\n\n.menu-toggle.gn-selected .hamburger span:nth-child(2) {\n  -webkit-transition-delay: .125s;\n          transition-delay: .125s;\n}\n\n.menu-toggle.gn-selected .hamburger span:nth-child(3) {\n  -webkit-transition-delay: .25s;\n          transition-delay: .25s;\n}\n\n.menu-toggle.gn-selected .cross span:nth-child(1) {\n  height: 60%;\n  -webkit-transition-delay: .625s;\n          transition-delay: .625s;\n}\n\n.menu-toggle.gn-selected .cross span:nth-child(2) {\n  width: 52%;\n  -webkit-transition-delay: .375s;\n          transition-delay: .375s;\n}\n\n.gn-menu-wrapper {\n  position: fixed;\n  top: 56px;\n  bottom: 0;\n  left: 0;\n  overflow: hidden;\n  width: 66px;\n  -webkit-transition: -webkit-transform 0.3s, width 0.3s;\n          transition: transform 0.3s, width 0.3s;\n  -webkit-transform: translateX(-66px);\n          transform: translateX(-66px);\n      -ms-transform: translateX(-66px);\n}\n\n.gn-menu {\n  padding-bottom: 40px !important;\n  text-align: left;\n  font-size: 16px;\n}\n\n.gn-menu li.active > a {\n  color: #fff !important;\n}\n\n.gn-menu i {\n  padding: 0 24px;\n  font-size: 19px;\n}\n\n.gn-menu .label {\n  margin-top: 24px;\n  margin-right: 12px;\n  padding-top: .3em;\n}\n\n.gn-menu .arrow {\n  float: right;\n  margin-right: 12px;\n  line-height: 66px;\n}\n\n.gn-submenu {\n  position: relative;\n  z-index: 0 !important;\n}\n\n.gn-submenu li {\n  overflow: hidden;\n  height: 0;\n  -webkit-transition: height, .3s;\n          transition: height, .3s;\n}\n\n.gn-submenu li a {\n  position: relative;\n  padding-left: 66px;\n}\n\n.gn-submenu li a:before {\n  position: absolute;\n  left: 32px;\n  width: 3px;\n  height: 100%;\n  content: \"\";\n}\n\n.gn-submenu li a.active:after {\n  position: absolute;\n  top: 16px;\n  left: 35px;\n  border: 8px solid transparent;\n  content: \"\";\n}\n\n.gn-search-item {\n  position: relative;\n}\n\n.gn-search-item input.gn-search {\n  position: relative;\n  padding-right: 15px;\n  padding-left: 66px;\n  width: 270px;\n  outline: none;\n  border: none;\n  -webkit-border-radius: 0;\n          border-radius: 0;\n  font-weight: 300;\n  cursor: pointer;\n  -webkit-appearance: none;\n}\n\ninput.gn-search:focus {\n  cursor: text;\n}\n\n.gn-menu-main a.search-icon {\n  position: absolute;\n  top: 0;\n  left: 0;\n  height: 60px;\n}\n\n/* if an icon anchor has a span, hide the span */\n.search-icon span {\n  display: block;\n  overflow: hidden;\n  width: 0;\n  height: 0;\n}\n\n/* styles for opening menu */\n.gn-menu-wrapper.gn-open-all,\n.gn-menu-wrapper.gn-open-part,\n.gn-menu-wrapper.gn-open-fixed {\n  -webkit-transform: translateX(0px);\n          transform: translateX(0px);\n      -ms-transform: translateX(0px);\n}\n\n.gn-menu-wrapper.gn-open-all {\n  width: 270px;\n}\n\n.gn-menu-wrapper.gn-open-all .gn-submenu li {\n  height: 50px;\n  line-height: 50px;\n}\n\n.top-clock {\n  position: absolute;\n  top: 0;\n  /*left: 50%;*/\n  /*margin-left: -90px;*/\n  width:180px;\n  font-weight: 300;\n  font-size: 24px;\n  line-height: 56px;\n}\n\n.bottom-bnts {\n  position: absolute;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  background: #2C393F;\n}\n\n.bottom-bnts a {\n  display: block;\n  text-align: center;\n  font-size: 19px;\n  line-height: 66px;\n}\n\n.bottom-bnts .profile, .bottom-bnts .fix-nav {\n  display: none;\n}\n\n.gn-open-all .bottom-bnts a {\n  display: inline-block;\n  width: 32%;\n}\n\n.mini-nav .content {\n  margin: 0 0 0 60px;\n}\n\n.right-menu > li {\n  float: left;\n}\n\n.right-menu a {\n  margin: 0;\n  padding: 15px 30px !important;\n}\n\n.right-menu .label {\n  position: absolute;\n  top: 8px;\n  right: 15px;\n  font-size: 72%;\n}\n\n.lang a {\n  padding: 17px 15px !important;\n  font-size: 15px;\n}\n\n.lang i {\n  margin-left: 5px;\n}\n\n.some-btn a {\n  padding: 17px 30px !important;\n  font-size: 15px;\n}\n\n@media screen and (max-width: 422px) {\n  .gn-menu-main ul {\n    width: 100%;\n  }\n  .gn-menu-wrapper.gn-open-all {\n    width: 100%;\n    -webkit-transform: translateX(0px);\n            transform: translateX(0px);\n        -ms-transform: translateX(0px);\n  }\n  .gn-menu-wrapper.gn-open-all .bottom-bnts a {\n    display: inline-block;\n    width: 49%;\n  }\n  .gn-menu-wrapper.gn-open-all .fix-nav {\n    display: none !important;\n  }\n}\n\na, button {\n  outline: none !important;\n  text-decoration: none;\n  -webkit-tap-highlight-color: transparent;\n}\n\nbutton:focus, button:active {\n  outline: none !important;\n}\n\nbutton::-moz-focus-inner {\n  border: 0;\n}\n\nhtml {\n  height: 100%;\n}\n\nbody {\n  position: relative;\n  overflow-x: hidden;\n  padding-top: 56px;\n  background: #F1F4F5;\n  color: #555;\n  font-weight: 300;\n  font-size: 14px;\n  font-family: \"Roboto\", \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n}\n\n.main-wrapper {\n  position: relative;\n  width: 100%;\n}\n\n.boxed-layout {\n  overflow: hidden;\n  margin: 0 auto;\n  max-width: 1200px;\n  -webkit-box-shadow: 0px 0px 5px 0px rgba(0, 0, 0, 0.75);\n          box-shadow: 0px 0px 5px 0px rgba(0, 0, 0, 0.75);\n}\n\n\n\n\n/*Boxes*/\n.content {\n  position: relative;\n  margin: 0;\n  padding: 20px 30px 66px;\n  background: #F1F4F5;\n  -webkit-transition: margin, .4s;\n          transition: margin, .4s;\n}\n\n.content-box {\n  position: relative;\n  overflow: hidden;\n  margin-bottom: 30px;\n  -webkit-border-radius: 3px;\n          border-radius: 3px;\n  background: #fff;\n  -webkit-box-shadow: 0 1px 1px 0 rgba(0, 0, 0, 0.05);\n          box-shadow: 0 1px 1px 0 rgba(0, 0, 0, 0.05);\n}\n\n.content-box .lead {\n  font-size: 16px;\n}\n\n\n.page-header .breadcrumb, .page-header h2 {\n  margin: 0;\n  padding: 0;\n}\n\n.page-header h2 {\n  padding-bottom: 10px;\n}\n\n.content-title {\n  position: relative;\n  width: 100%;\n}\n\n.content-title h4 {\n  float: left;\n  display: inline-block;\n}\n\n.content-tools > a {\n  position: relative;\n  display: inline-block;\n  margin-left: 28px;\n  text-decoration: none;\n  opacity: .99;\n  cursor: pointer;\n}\n\n.content-tools > a:before {\n  position: absolute;\n  top: -5px;\n  left: -7px;\n  z-index: -1;\n  width: 28px;\n  height: 28px;\n  -webkit-border-radius: 50%;\n          border-radius: 50%;\n  background: rgba(39, 50, 56, 0.25);\n  content: \"\";\n  -webkit-transition: -webkit-transform .2s ease-in-out;\n          transition: transform .2s ease-in-out;\n  -webkit-transform: scale(0);\n          transform: scale(0);\n      -ms-transform: scale(0);\n}\n\n.content-tools > a:last-child:before {\n  left: -9px;\n}\n\n.content-tools > a:hover {\n  color: #fff;\n}\n\n.content-tools > a:hover:before {\n  -webkit-transform: scale(1);\n          transform: scale(1);\n      -ms-transform: scale(1);\n}\n\n.chart-legend {\n  position: absolute;\n  right: 20px;\n  bottom: -14px;\n}\n\n.chart-legend table {\n  display: inline-block;\n}\n\n.chart-legend .legendColorBox div {\n  margin-right: 2px;\n  margin-left: 10px;\n  -webkit-border-radius: 50%;\n          border-radius: 50%;\n}\n\n.chart-legend .round {\n  display: inline-block;\n  margin-right: 4px;\n  margin-left: 14px;\n  width: 12px;\n  height: 12px;\n  -webkit-border-radius: 50%;\n          border-radius: 50%;\n}\n\n.left-block, .chart-legend.left {\n  bottom: -30px !important;\n  left: 20px !important;\n}\n\n.left-block .item, .chart-legend.left .item {\n  margin-right: 10px;\n}\n\n\n.member-info {\n  margin-top: 20px;\n  font-weight: 400;\n}\n\n.member-info img {\n  margin-right: 10px;\n}\n\n.member-info .member-role {\n  margin-top: 8px;\n}\n\n.member-info .member-role .round {\n  display: inline-block;\n  margin-right: 4px;\n  width: 12px;\n  height: 12px;\n  -webkit-border-radius: 50%;\n          border-radius: 50%;\n}\n\n/*Dropdown*/\n.dropdown, .dropup {\n  display: inline-block;\n}\n\n/* .dropdown .dropdown-menu, .dropup .dropdown-menu, .btn-group .dropdown-menu, .content-tools .dropdown-menu {\n  opacity: 0; */\n\n/* -webkit-transform: scale(0); */\n\n/* -ms-transform: scale(0); */\n\n/* transform: scale(0); */\n\n/* -webkit-transition: all .2s; */\n\n/* transition: all .2s; */\n\n/* -webkit-backface-visibility: hidden; */\n\n/* backface-visibility: hidden; */\n\n/* display: block; */\n\n/* border-color: transparent; */\n\n/* -webkit-border-radius: 3px; */\n\n/* border-radius: 3px; */\n\n\n.dropdown .dropdown-menu > li > a, .dropup .dropdown-menu > li > a, .btn-group .dropdown-menu > li > a, .content-tools .dropdown-menu > li > a {\n  padding: 8px 20px;\n}\n\n.dropdown .dropdown-menu.pull-right, .dropup .dropdown-menu.pull-right, .btn-group .dropdown-menu.pull-right, .content-tools .dropdown-menu.pull-right {\n  right: 0;\n  left: auto;\n}\n\n.dropdown .dropdown-menu, .btn-group .dropdown-menu, .content-tools .dropdown-menu {\n  -webkit-transform-origin: top left;\n          transform-origin: top left;\n      -ms-transform-origin: top left;\n}\n\n.dropdown .dropdown-menu.pull-right, .btn-group .dropdown-menu.pull-right, .content-tools .dropdown-menu.pull-right {\n  -webkit-transform-origin: top right;\n          transform-origin: top right;\n      -ms-transform-origin: top right;\n}\n\n.dropdown.notifications .dropdown-menu, .content-tools .dropdown-menu {\n  -webkit-transform-origin: top right;\n          transform-origin: top right;\n      -ms-transform-origin: top right;\n}\n\n.dropup .dropdown-menu {\n  -webkit-transform-origin: bottom left;\n          transform-origin: bottom left;\n      -ms-transform-origin: bottom left;\n}\n\n.dropup .dropdown-menu.pull-right {\n  -webkit-transform-origin: bottom right;\n          transform-origin: bottom right;\n      -ms-transform-origin: bottom right;\n}\n\n.dropdown.open .dropdown-menu, .dropup.open .dropdown-menu, .btn-group.open .dropdown-menu, .content-tools.open .dropdown-menu {\n  opacity: 1;\n  -webkit-transform: scale(1);\n          transform: scale(1);\n      -ms-transform: scale(1);\n}\n\n.user-info .dropdown-menu {\n  margin-top: 10px;\n}\n\n.content-tools .dropdown-menu {\n  margin-top: -5px;\n  margin-right: 28px;\n  min-width: 150px;\n}\n\n.content-tools .dropdown-menu a {\n  margin-left: 0;\n}\n\n.notifications .dropdown-menu, .clock .dropdown-menu {\n  padding: 10px;\n  min-width: 240px;\n  background: #fff !important;\n}\n\n.clock .dropdown-menu {\n  left: -20px;\n  color: #76828E;\n}\n\n.clock .progress {\n  margin-top: 3px;\n  margin-bottom: 6px;\n  height: 10px;\n}\n\n.reg-chart .content-tools .dropdown-menu, .calendar .content-tools .dropdown-menu {\n  margin-top: 10px;\n  margin-right: 9px;\n  min-width: 150px;\n}\n\n\n/*Page 404*/\n.table-wrapper {\n  position: absolute;\n  top: 0;\n  left: 0;\n  display: table;\n  width: 100%;\n  height: 100%;\n  background: #F1F4F5;\n}\n\n.table-wrapper .table-row {\n  display: table-row;\n}\n\n.table-wrapper .table-row .table-cell {\n  display: table-cell;\n  vertical-align: middle;\n}\n\n.table-wrapper .pagenotfound {\n  width: 100%;\n  max-width: 520px;\n  min-width: 280px;\n}\n\n.table-wrapper .pagenotfound .top {\n  position: relative;\n}\n\n.table-wrapper .pagenotfound h1 {\n  font-weight: 100;\n  font-size: 150px;\n}\n\n.table-wrapper .pagenotfound .icon-home {\n  position: absolute;\n  right: 30px;\n  bottom: -25px;\n}\n\n.table-wrapper .pagenotfound .icon-back {\n  position: absolute;\n  top: 10px;\n  left: 10px;\n}\n\n.table-wrapper .pagenotfound .fa-circle {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.13);\n}\n\n.table-wrapper .pagenotfound h4, .table-wrapper .pagenotfound p {\n  padding: 0 30px;\n  font-weight: 400;\n}\n\n.table-wrapper .pagenotfound .input-group-addon {\n  background: #fff;\n}\n\n.table-wrapper .pagenotfound input {\n  padding-left: 0;\n  border-left: 0;\n}\n\n.table-wrapper .pagenotfound input:focus {\n  border-color: #E7EBEC;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n\n\n/*Contacts Page*/\n.contact-info {\n  margin-top: 10px;\n  padding-left: 50px;\n}\n\n.contact-info i {\n  margin-right: 5px;\n}\n\n.contact-info p {\n  margin: 0;\n}\n\n.contact-info p:first-child {\n  margin-bottom: 10px;\n}\n\n\n.fileinput-new.input-group .btn-file, .fileinput-new .input-group .btn-file {\n  border: 1px solid #E7EBEC;\n  border-right: 0;\n  -webkit-border-radius: 3px 0 0 3px;\n          border-radius: 3px 0 0 3px;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n\n.list-group-item.active, .list-group-item.active:focus, .list-group-item.active:hover {\n  border-color: #63A8EB;\n  background-color: #63A8EB;\n}\n\n\n\n/* Common, default styles for the notification box. Adapted from http://tympanus.net/codrops/2014/07/23/notification-styles-inspiration*/\n.ns-box {\n  position: fixed;\n  z-index: 4000;\n  padding: 22px;\n  background: #368fe5;\n  color: #fff;\n  font-size: 90%;\n  line-height: 1.4;\n  pointer-events: none;\n}\n\n.ns-box a {\n  color: inherit;\n  font-weight: 700;\n  opacity: 0.7;\n}\n\n.ns-box a:hover, .ns-box a:focus {\n  opacity: 1;\n}\n\n.ns-box p {\n  margin: 0;\n}\n\n.ns-box .fa {\n  margin-left: -5px;\n}\n\n.ns-box.ns-show,\n.ns-box.ns-visible {\n  pointer-events: auto;\n}\n\n.ns-close {\n  position: absolute;\n  top: 4px;\n  right: 4px;\n  overflow: hidden;\n  width: 20px;\n  height: 20px;\n  text-indent: 100%;\n  cursor: pointer;\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden;\n}\n\n.ns-close:hover, .ns-close:focus {\n  outline: none;\n}\n\n.ns-close:before, .ns-close:after {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  width: 3px;\n  height: 60%;\n  background: #6e6e6e;\n  content: '';\n}\n\n.ns-close:hover::before, .ns-close:hover::after {\n  background: #fff;\n}\n\n.ns-close:before {\n  -webkit-transform: translate(-50%, -50%) rotate(45deg);\n          transform: translate(-50%, -50%) rotate(45deg);\n      -ms-transform: translate(-50%, -50%) rotate(45deg);\n}\n\n.ns-close:after {\n  -webkit-transform: translate(-50%, -50%) rotate(-45deg);\n          transform: translate(-50%, -50%) rotate(-45deg);\n      -ms-transform: translate(-50%, -50%) rotate(-45deg);\n}\n\n/* Growl-style notifications */\n.ns-attached {\n  left: 30px;\n  max-width: 300px;\n}\n\n[class^=\"ns-effect-\"].ns-attached.ns-hide,\n[class*=\" ns-effect-\"].ns-attached.ns-hide {\n  -webkit-animation-direction: reverse;\n          animation-direction: reverse;\n}\n\n#welcome .ns-box {\n  top: 65px !important;\n  right: 30px;\n  left: auto;\n  padding: 30px 60px !important;\n}\n\n#welcome .ns-box span {\n  color: #fff !important;\n  font-size: 14px;\n}\n\n/* Individual effects */\n/* Flip */\n.ns-effect-flip {\n  bottom: 0px;\n  padding: 1.5em;\n  max-width: 280px;\n  background: #9bd1a2;\n  font-size: 1.15em;\n  -webkit-transform-origin: 50% 100%;\n          transform-origin: 50% 100%;\n      -ms-transform-origin: 50% 100%;\n  -webkit-backface-visibility: hidden;\n          backface-visibility: hidden;\n}\n\n.ns-effect-flip .ns-close::before,\n.ns-effect-flip .ns-close::after {\n  background: #5a9862;\n}\n\n.ns-effect-flip .ns-close:hover::before,\n.ns-effect-flip .ns-close:hover::after {\n  background: #4e8455;\n}\n\n.ns-effect-flip.ns-show,\n.ns-effect-flip.ns-hide {\n  -webkit-animation-name: animFlipFront;\n          animation-name: animFlipFront;\n  -webkit-animation-duration: 0.3s;\n          animation-duration: 0.3s;\n}\n\n.ns-effect-flip.ns-hide {\n  -webkit-animation-name: animFlipBack;\n          animation-name: animFlipBack;\n}\n\n@-webkit-keyframes animFlipFront {\n  0% {\n    -webkit-transform: perspective(1000px) rotate3d(1, 0, 0, -90deg);\n            transform: perspective(1000px) rotate3d(1, 0, 0, -90deg);\n  }\n  100% {\n    -webkit-transform: perspective(1000px);\n            transform: perspective(1000px);\n  }\n}\n\n@keyframes animFlipFront {\n  0% {\n    -webkit-transform: perspective(1000px) rotate3d(1, 0, 0, -90deg);\n            transform: perspective(1000px) rotate3d(1, 0, 0, -90deg);\n  }\n  100% {\n    -webkit-transform: perspective(1000px);\n            transform: perspective(1000px);\n  }\n}\n\n@-webkit-keyframes animFlipBack {\n  0% {\n    -webkit-transform: perspective(1000px) rotate3d(1, 0, 0, 90deg);\n            transform: perspective(1000px) rotate3d(1, 0, 0, 90deg);\n  }\n  100% {\n    -webkit-transform: perspective(1000px);\n            transform: perspective(1000px);\n  }\n}\n\n@keyframes animFlipBack {\n  0% {\n    -webkit-transform: perspective(1000px) rotate3d(1, 0, 0, 90deg);\n            transform: perspective(1000px) rotate3d(1, 0, 0, 90deg);\n  }\n  100% {\n    -webkit-transform: perspective(1000px);\n            transform: perspective(1000px);\n  }\n}\n\n/* Bouncy Flip adapted from animate.css by Dan Eden: http://daneden.github.io/animate.css/ */\n.ns-effect-bouncyflip {\n  top: 0;\n  background: #ffc107;\n  -webkit-box-shadow: 0 13px 10px -5px rgba(0, 0, 0, 0.2);\n          box-shadow: 0 13px 10px -5px rgba(0, 0, 0, 0.2);\n  color: #484860;\n  -webkit-transform-origin: 50% 0%;\n          transform-origin: 50% 0%;\n      -ms-transform-origin: 50% 0%;\n}\n\n.ns-effect-bouncyflip .icon {\n  position: absolute;\n  top: 2em;\n  left: 2em;\n  display: block;\n}\n\n.ns-effect-bouncyflip p {\n  padding: 0.5em 0.8em 0.8em 3.5em;\n}\n\n.ns-effect-bouncyflip .ns-close::after,\n.ns-effect-bouncyflip .ns-close::before {\n  background: #fff;\n  opacity: .7;\n}\n\n.ns-effect-bouncyflip .ns-close:hover::after,\n.ns-effect-bouncyflip .ns-close:hover::before {\n  opacity: 1;\n}\n\n.ns-effect-bouncyflip.ns-show,\n.ns-effect-bouncyflip.ns-hide {\n  background: #ffc107;\n  color: #fff !important;\n  -webkit-animation-name: flipInX;\n          animation-name: flipInX;\n  -webkit-animation-duration: 0.8s;\n          animation-duration: 0.8s;\n}\n\n@-webkit-keyframes flipInX {\n  0% {\n    -webkit-transition-timing-function: ease-in;\n            transition-timing-function: ease-in;\n    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -90deg);\n            transform: perspective(400px) rotate3d(1, 0, 0, -90deg);\n  }\n  40% {\n    -webkit-transition-timing-function: ease-out;\n            transition-timing-function: ease-out;\n    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 20deg);\n            transform: perspective(400px) rotate3d(1, 0, 0, 20deg);\n  }\n  60% {\n    opacity: 1;\n    -webkit-transition-timing-function: ease-in;\n            transition-timing-function: ease-in;\n    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -10deg);\n            transform: perspective(400px) rotate3d(1, 0, 0, -10deg);\n  }\n  80% {\n    -webkit-transition-timing-function: ease-out;\n            transition-timing-function: ease-out;\n    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 5deg);\n            transform: perspective(400px) rotate3d(1, 0, 0, 5deg);\n  }\n  100% {\n    -webkit-transform: perspective(400px);\n            transform: perspective(400px);\n  }\n}\n\n@keyframes flipInX {\n  0% {\n    -webkit-transition-timing-function: ease-in;\n            transition-timing-function: ease-in;\n    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -90deg);\n            transform: perspective(400px) rotate3d(1, 0, 0, -90deg);\n  }\n  40% {\n    -webkit-transition-timing-function: ease-out;\n            transition-timing-function: ease-out;\n    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 20deg);\n            transform: perspective(400px) rotate3d(1, 0, 0, 20deg);\n  }\n  60% {\n    opacity: 1;\n    -webkit-transition-timing-function: ease-in;\n            transition-timing-function: ease-in;\n    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -10deg);\n            transform: perspective(400px) rotate3d(1, 0, 0, -10deg);\n  }\n  80% {\n    -webkit-transition-timing-function: ease-out;\n            transition-timing-function: ease-out;\n    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 5deg);\n            transform: perspective(400px) rotate3d(1, 0, 0, 5deg);\n  }\n  100% {\n    -webkit-transform: perspective(400px);\n            transform: perspective(400px);\n  }\n}\n\n.ns-effect-bouncyflip.ns-hide {\n  -webkit-animation-name: flipInXSimple;\n          animation-name: flipInXSimple;\n  -webkit-animation-duration: 0.3s;\n          animation-duration: 0.3s;\n}\n\n@-webkit-keyframes flipInXSimple {\n  0% {\n    -webkit-transition-timing-function: ease-in;\n            transition-timing-function: ease-in;\n    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -90deg);\n            transform: perspective(400px) rotate3d(1, 0, 0, -90deg);\n  }\n  100% {\n    -webkit-transform: perspective(400px);\n            transform: perspective(400px);\n  }\n}\n\n@keyframes flipInXSimple {\n  0% {\n    -webkit-transition-timing-function: ease-in;\n            transition-timing-function: ease-in;\n    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -90deg);\n            transform: perspective(400px) rotate3d(1, 0, 0, -90deg);\n  }\n  100% {\n    -webkit-transform: perspective(400px);\n            transform: perspective(400px);\n  }\n}\n\n@media screen and (max-width: 25em) {\n  .ns-attached {\n    right: 30px;\n    left: 30px;\n    max-width: none;\n  }\n}\n\n/* To bar notifications */\n.ns-box.ns-bar {\n  top: 0;\n  left: 0;\n  width: 100%;\n}\n\n.ns-bar .ns-close {\n  top: 50%;\n  right: 20px;\n  background: transparent;\n  -webkit-transform: translateY(-50%);\n          transform: translateY(-50%);\n      -ms-transform: translateY(-50%);\n}\n\n.ns-bar .ns-close:before, .ns-bar .ns-close:after {\n  background: #fff;\n}\n\n[class^=\"ns-effect-\"].ns-bar.ns-hide,\n[class*=\" ns-effect-\"].ns-bar.ns-hide {\n  -webkit-animation-direction: reverse;\n          animation-direction: reverse;\n}\n\n/* Individual Effects */\n\nbody nav .slimScrollDiv {\n  padding-bottom: 65px;\n}\n\nbody .slimScrollDiv {\n  padding-bottom: 0;\n}\n\n\n\n.form-control.material {\n  padding-left: 0;\n  border: 0;\n  -webkit-border-radius: 0;\n          border-radius: 0;\n  background-color: transparent;\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#63A8EB), to(#63A8EB)), -webkit-gradient(linear, left top, left bottom, from(#d2d2d2), to(#d2d2d2));\n  background-image: -webkit-linear-gradient(#63A8EB, #63A8EB), -webkit-linear-gradient(#d2d2d2, #d2d2d2);\n  background-image: linear-gradient(#63A8EB, #63A8EB), linear-gradient(#d2d2d2, #d2d2d2);\n  background-position: center bottom, center -webkit-calc(100% - 1px);\n  background-position: center bottom, center calc(100% - 1px);\n  background-size: 0 2px,100% 1px;\n  background-repeat: no-repeat;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n\n.form-control.material:focus {\n  outline: none;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  -webkit-animation: input-highlight .5s forwards;\n          animation: input-highlight .5s forwards;\n}\n\n@-webkit-keyframes input-highlight {\n  0% {\n    background-size: 0 2px, 100% 1px;\n  }\n  100% {\n    background-size: 100% 2px, 100% 1px;\n  }\n}\n\n@keyframes input-highlight {\n  0% {\n    background-size: 0 2px, 100% 1px;\n  }\n  100% {\n    background-size: 100% 2px, 100% 1px;\n  }\n}\n\n\n/*Member sidebar*/\n.members-sidebar {\n  position: fixed;\n  top: 56px;\n  right: -245px;\n  bottom: 0;\n  z-index: 605;\n  overflow: hidden;\n  padding: 20px;\n  width: 240px !important;\n  background: #fff;\n  -webkit-box-shadow: -1px 1px 5px 0px rgba(0, 0, 0, 0.13);\n          box-shadow: -1px 1px 5px 0px rgba(0, 0, 0, 0.13);\n  -webkit-transition: all, .5s;\n          transition: all, .5s;\n}\n\n.members-sidebar .messages {\n  margin-top: 30px;\n}\n\n.members-sidebar .member-name {\n  font-weight: 500;\n}\n\n.members-sidebar li {\n  padding: 10px 0;\n  font-weight: 400;\n}\n\n.members-sidebar li .status {\n  display: inline-block;\n  margin-right: 8px;\n  width: 10px;\n  height: 10px;\n  -webkit-border-radius: 50%;\n          border-radius: 50%;\n  background-color: #E7EBEC;\n}\n\n.members-sidebar li .online {\n  background-color: #4caf50;\n}\n\n.members-sidebar li .not-available {\n  background-color: #ffc107;\n}\n\n.members-sidebar .members-group {\n  padding-top: 30px;\n  font-size: 16px;\n}\n\n.members-sidebar-open {\n  right: 0 !important;\n}\n\n.close-members-sidebar {\n  font-size: 18px;\n  cursor: pointer;\n}\n\n/*Skins*/\n.gn-menu-main {\n  background: #091c33;\n  color: #fff;\n}\n\n.gn-menu-main ul.gn-menu {\n  background: #273238;\n}\n\n.gn-menu-main ul.gn-menu a {\n  color: #76828E;\n}\n.gn-menu-main a:hover {\n  background-color: #666777;\n}\n\n.gn-menu-main ul.gn-menu a.active {\n  color: #fff;\n}\n\n.gn-menu-main a {\n  color: #FFFFFF;\n}\n\n\n\n.gn-menu-main .navbar-right .cs-select > span {\n  border-color: #63A8EB;\n  background: #63A8EB;\n  color: #fff;\n}\n\n.gn-menu-main .cs-skin-elastic .cs-options span:hover, .gn-menu-main .cs-skin-elastic .cs-options li.cs-focus span, .gn-menu-main .cs-skin-elastic .cs-options .cs-selected span {\n  color: #63A8EB;\n}\n\n.gn-menu-main .notifications > a:focus {\n  background-color: #666777 !important;\n}\n\n.gn-menu-main .notifications ul {\n  color: #76828E;\n}\n\n#menu-toggle:hover span {\n  background: #fff !important;\n}\n\n#menu-toggle span {\n  background: #273238;\n}\n\n.no-touch .gn-menu-main a:hover,\n.no-touch .gn-search-item:hover {\n  background: #4c9be8;\n  color: #fff;\n}\n\n.gn-menu-wrapper {\n  background: #273238;\n}\n\n.gn-menu .arrow {\n  color: #76828E;\n}\n\n.gn-submenu {\n  background: #313f47 !important;\n}\n\n.gn-submenu li a {\n  color: #76828E;\n}\n\n.gn-submenu li a:before {\n  background: #273238;\n}\n\n.gn-submenu li a.active {\n  color: #fff;\n}\n\n.gn-submenu li a.active:after {\n  border-left: 8px solid #273238;\n}\n\n.gn-search-item:hover a {\n  color: #fff !important;\n}\n\n.gn-search-item.active input.gn-search {\n  background: #fff;\n}\n\n.gn-search-item.active .search-icon {\n  color: #76828E !important;\n}\n\n.gn-search-item.active .search-icon:hover {\n  background: #fff;\n}\n\n.gn-search-item.active:hover input.gn-search {\n  color: #76828E !important;\n}\n\n.gn-search-item.active:hover input.gn-search:-moz-placeholder {\n  color: #76828E !important;\n}\n\n.gn-search-item.active:hover input.gn-search::-moz-placeholder {\n  color: #76828E !important;\n}\n\n.gn-search-item.active:hover input.gn-search:-ms-input-placeholder {\n  color: #76828E !important;\n}\n\n.gn-search-item.active:hover input.gn-search::-webkit-input-placeholder {\n  color: #76828E !important;\n}\n\n.gn-search-item input.gn-search {\n  background: transparent;\n  color: #76828E;\n}\n\n.gn-search-item input.gn-search:-moz-placeholder {\n  color: #76828E;\n}\n\n.gn-search-item input.gn-search::-moz-placeholder {\n  color: #76828E;\n}\n\n.gn-search-item input.gn-search:-ms-input-placeholder {\n  color: #76828E;\n}\n\n.gn-search-item input.gn-search::-webkit-input-placeholder {\n  color: #76828E;\n}\n\n.gn-search-item:hover input.gn-search {\n  color: #fff !important;\n}\n\n.gn-search-item:hover input.gn-search:-moz-placeholder {\n  color: #fff !important;\n}\n\n.gn-search-item:hover input.gn-search::-moz-placeholder {\n  color: #fff !important;\n}\n\n.gn-search-item:hover input.gn-search:-ms-input-placeholder {\n  color: #fff !important;\n}\n\n.gn-search-item:hover input.gn-search::-webkit-input-placeholder {\n  color: #fff !important;\n}\n\n\n@media (max-width: 768px) {\n    .footer.f-fixed {\n        margin-left: 0 !important;\n    }\n\n    /*Remove not useful elements from top navigation*/\n    .logo, .clock, .lang, .some-btn, .notifications {\n        display: none !important;\n    }\n\n    /*Remove margins from content block*/\n    .content {\n        margin: 0;\n        padding: 20px 10px 40px;\n    }\n\n    @media only screen and (max-width: 450px) {\n        .table-inbox tr td {\n            white-space: nowrap !important;\n        }\n\n        .content-tools > a {\n            display: inline-block;\n            margin-left: 18px;\n        }\n\n        .gn-search-item input.gn-search {\n            width: 100%;\n        }\n    }\n\n\n    .gn-menu-main {\n        position: fixed;\n        top: 0;\n        left: 0;\n        width: 100%;\n        height: 56px;\n        border: 0;\n        -webkit-border-radius: 0;\n        border-radius: 0;\n        box-shadow: none;\n        font-size: 13px;\n    }\n\n    .gn-menu-main.ak-menu-shadow {\n        -webkit-box-shadow: 0px 1px 4px rgba(0, 0, 0, 0.3);\n        box-shadow: 0px 1px 4px rgba(0, 0, 0, 0.3);\n        box-shadow: 0px 1px 4px rgba(0, 0, 0, 0.3);\n    }\n}\n\n"
  },
  {
    "path": "automatic/static/css/wheelmenu.css",
    "content": "/* Required Stylesheets */\n\na {\n    text-decoration: none;\n}\n\n.wheel-button {\n    position: relative;\n}\n\n.wheel {\n    margin: 0;\n    padding: 0;\n    list-style: none;\n    width: 260px; /* this will determine the diameter of the circle  */\n    height: 200px; /* this will determine the diameter of the circle  */\n    visibility: hidden;\n    position: relative;\n    display: none;\n}\n\n.wheel li {\n    overflow: hidden;\n    float: left;\n}\n\n.wheel li a {\n    display: block;\n}\n\n.wheel-button, .wheel-button:visited {\n    line-height: 35px;\n    font-weight: bold;\n    font-size: 36px;\n    background: #df4727;\n    padding: 10px 11px;\n    text-align: center;\n    border-radius: 50px;\n    width: 60px;\n    height: 60px;\n    color: white;\n    display: block;\n    margin: 70px auto 20px;\n    border: 3px solid #92311e;\n    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.25);\n    -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.25);\n    -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.25);\n}\n\n.wheel-button:hover {\n    color: white;\n}\n\n.wheel-button.ne {\n    border-color: white;\n    background: #35b0ee;\n    color: #0277bd;\n    position: absolute;\n    bottom: 50px;\n    left: 0px;\n}\n\n.wheel-button.nw {\n    border-color: white;\n    background-color: #E67E22;\n    color: #FFFC44;\n    position: absolute;\n    bottom: 10px;\n    right: 10px;\n}\n\n.wheel-button span, .wheel span {\n    position: relative;\n    -moz-transition: all 1s ease;\n    -webkit-transition: all 1s ease;\n    -o-transition: all 1s ease;\n    transition: all 1s ease;\n    display: block;\n}\n\n.wheel-button.active span {\n    transform: rotate(135deg);\n    -ms-transform: rotate(135deg); /* IE 9 */\n    -webkit-transform: rotate(135deg); /* Safari and Chrome */\n}\n\n.wheel-button.ne span{\n    font-size:28px;\n    line-height:32px;\n    font-family: sans-serif;\n}\n.wheel li a, .wheel li a:visited {\n    background: rgba(0, 0, 0, 0.65);\n    border-radius: 50px;\n    font-weight: bold;\n    padding: 10px;\n    text-align: center;\n    width: 40px;\n    height: 40px;\n    border: 1px solid black;\n    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.25), inset 0 1px 1px rgba(255, 255, 255, 0.5);\n    -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.25), inset 0 1px 1px rgba(255, 255, 255, 0.5);\n    -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.25), inset 0 1px 1px rgba(255, 255, 255, 0.5);\n    color: white;\n    -moz-transition: all 0.25s ease;\n    -webkit-transition: all 0.25s ease;\n    -o-transition: all 0.25s ease;\n    transition: all 0.25s ease;\n}\n\n.wheel li a:hover {\n    background: rgba(0, 0, 0, 0.8);\n}"
  },
  {
    "path": "automatic/static/js/automagic.js",
    "content": "/**\n * Created by ray on 16-9-9.\n */\n\n\n\n\nfunction getUrlParam(name) {\n    var reg = new RegExp(\"(^|&)\" + name + \"=([^&]*)(&|$)\");\n    var r = window.location.search.substr(1).match(reg);\n    if (r != null)return r[2];return 0;\n}\n\n$(document).ready(function () {\n\n\n    //产品和项目二级菜单关联 通过product关联project下拉菜单\n    $(\"#selproductid\").bind(\"change\", function () {\n        var s1SelectedVal = $('#selproductid').val();\n        $('#check_productid').val(s1SelectedVal);\n        $.ajax({\n            type: \"GET\",\n            data: {'productid': s1SelectedVal},\n            url: \"/setting/get/project/\", //后台处理函数的url 这里用的是static url 需要与urls.py中的name一致\n            cache: false,\n            dataType: 'json',\n            async: false,\n\n            success: function (result, TextStatus) {\n                //元素管理元素添加项目选择\n                $('select[name=\"ele_add_projectid\"]').empty();\n                $('select[name=\"ele_add_projectid\"]').append('<option value=\"\">所属项目</option>');\n                if (result.length > 0) {\n                    for (i = 0; i < result.length; i++) {\n                        $('select[name=\"ele_add_projectid\"]').append('<option value=\"' + result[i].key + '\">' + result[i].value + '</option>');\n                    }\n                }\n                $('#selprojectid').empty();\n                // $('#selprojectid').append('<option value=\"\">所属项目</option>');\n                if (result.length > 0) {\n                    for (i = 0; i < result.length; i++) {\n                        $('#selprojectid').append('<option value=\"' + result[i].key + '\">' + result[i].value + '</option>');\n                    }\n                }\n                if ($(\"#selprojectid\").val() != localStorage.getItem('project')) {\n                    // alert('test');\n                    $(\"#selprojectid\").find(\"option[value=\" + localStorage.getItem('project') + \"]\").attr(\"selected\", true);\n                }\n                if ($(\"#selprojectid\").val() != \"\") {\n                    $(\"#selprojectid\").change();\n                }\n            }\n        });\n\n        if (s1SelectedVal == localStorage.getItem('product')) {\n            return;\n        }\n        localStorage.setItem('product', s1SelectedVal);\n        localStorage.setItem('moduleid', '');\n        $('#search_btn').trigger('click');\n    });\n\n    /*    通过project关联module下拉菜单   */\n    $(\"#selprojectid\").bind(\"change\", function () {\n        var s1SelectedVal = $('#selprojectid').val();\n        localStorage.setItem('project', s1SelectedVal);\n        $.ajax({\n            type: \"GET\",\n            data: {'projectid': s1SelectedVal},\n            url: \"/setting/get/module/\", //后台处理函数的url 这里用的是static url 需要与urls.py中的name一致\n            cache: false,\n            dataType: 'json',\n\n            success: function (result, TextStatus) {\n                $('#selmoduleid').empty();\n                $('#selmoduleid').append('<option value=\"\">所属模块</option>');\n                if (result.length > 0) {\n                    for (i = 0; i < result.length; i++) {\n                        $('#selmoduleid').append('<option value=\"' + result[i].key + '\">' + result[i].value + '</option>');\n                    }\n                }\n                if ($(\"#selmoduleid\").val() != localStorage.getItem('moduleid')) {\n                    $(\"#selmoduleid\").find(\"option[value=\" + localStorage.getItem('moduleid') + \"]\").attr(\"selected\", true);\n                }\n\n            }\n        });\n        var projectid_url = getUrlParam('projectid');\n        if (projectid_url == 0 && $('#selprojectid').val() !== null){\n            $('#search_btn').trigger('click');\n        }\n    });\n\n    /*   通过module关联element 菜单 */\n    $(\"#selmoduleid\").bind(\"change\", function () {\n        var moduleVal = $('#selmoduleid').val();\n        var moduleid = localStorage.getItem('moduleid');\n        if (moduleVal!== moduleid){\n            $('#search_btn').trigger('click');\n            localStorage.setItem('moduleid', moduleVal);\n        }\n    });\n\n    /*  通过 localStorage 在本地存储选择的产品  */\n    if (window.localStorage) {\n        var selproduct = localStorage.getItem('product');\n        $(\"#selproductid\").find(\"option[value=\" + selproduct + \"]\").attr(\"selected\", true);\n        //$(\"#selproductid\").change();\n\n    }\n    if ($(\"#selproductid\") != '') {\n        $(\"#selproductid\").change();\n    }\n\n\n    /*    添加元素页面 project关联module下拉多选菜单   */\n    $(\"#sel_projectid\").bind(\"change\", function () {\n        var s1SelectedVal = $('#sel_projectid').val();\n        // $('#mdlist').val('');\n        // $('#selvalue').val('');\n        $.ajax({\n            type: \"GET\",\n            data: {'projectid': s1SelectedVal},\n            url: \"/setting/get/module/\", //后台处理函数的url 这里用的是static url 需要与urls.py中的name一致\n            cache: false,\n            dataType: 'json',\n\n            success: function (result, TextStatus) {\n                // $('.multi_select').empty();\n                // $('#selmoduleid').append('<option value=\"\">所属模块</option>');\n                // if (result.length > 0) {\n                //    $(function (){\n                //      $('.multi_select').MSDL({\n                //        'width': '160',\n                //        'data': result,\n                //      });\n                //    });\n                // }\n                $('#selvalue').empty();\n                $('#selvalue').append('<option value=\"\">所属模块</option>');\n                if (result.length > 0) {\n                    for (i = 0; i < result.length; i++) {\n                        $('#selvalue').append('<option value=\"' + result[i].key + '\">' + result[i].value + '</option>');\n                    }\n                }\n            }\n        });\n    });\n\n    /*    编辑元素project关联module下拉菜单   */\n    $(\"#eleprojectid\").bind(\"change\", function () {\n        var s1SelectedVal = $('#eleprojectid').val();\n        $.ajax({\n            type: \"GET\",\n            data: {'projectid': s1SelectedVal},\n            url: \"/setting/get/module/\", //后台处理函数的url 这里用的是static url 需要与urls.py中的name一致\n            cache: false,\n            dataType: 'json',\n            async: false,\n\n            success: function (result, TextStatus) {\n                $('#elemoduleid').empty();\n                $('#elemoduleid').append('<option value=\"\">所属模块</option>');\n                if (result.length > 0) {\n                    for (i = 0; i < result.length; i++) {\n                        $('#elemoduleid').append('<option value=\"' + result[i].key + '\">' + result[i].value + '</option>');\n                    }\n                }\n            }\n        });\n    });\n\n    /*    添加测试用例    */\n    $('#case_add').submit(function () {\n        $('[name=\"autocomplete\"]').each(function () {\n            if ($(this).val() == '') {\n                $(this).next().val('None')\n            }\n        });\n        $.ajax({\n            type: \"POST\",\n            data: $(this).serialize(),\n            //             data:{casedesc:casedesc, isenabled:isenabled, issmoke:issmoke, projectid:projectid, moduleid:moduleid,dependent:dependent,descr:descr,keyword:keyword,elementid:elementid,inputtext:inputtext},\n            url: \"/func/case/add/\",\n            cache: false,\n            async: false,\n            dataType: \"html\",\n            success: function (result, statues, xml) {\n                $('#log_info').addClass('bg-primary');\n                $('#log_info').css('display', 'block');\n                $('#log_info').html(result);\n                setTimeout(\"location.reload()\", 1500);\n                window.location.href = \"/func/case/list/\"\n            },\n            error: function () {\n                $('#log_info').addClass('bg-primary');\n                $('#log_info').css('display', 'block');\n                $('#log_info').html('保存失败');\n                setTimeout(\"$('#log_info').css('display','none');\", 1500);\n            }\n        });\n        return false;\n    });\n\n    /*    添加元素     */\n    $('#ele_add').submit(function () {\n        var descr = $(\"#id_descr\").val();      //获得form中用户输入的descr 注意这里的descr 与你html中的id一致\n        var projectid = $(\"#sel_projectid\").val(); //同上\n        var moduleid = $(\"#selvalue\").val(); //同上\n        var locmode = $(\"#id_locmode\").val();\n        var location = $(\"#id_location\").val();\n        var m = []\n        m = moduleid.split(';')\n        // alert(m.length);\n        for (i = 0; i < m.length; i++) {\n            $.ajax({\n                type: \"POST\",\n                data: {descr: descr, projectid: projectid, moduleid: m[i], locmode: locmode, location: location},\n                url: \"/func/element/add/\", //后台处理函数的url 这里用的是static url 需要与urls.py中的name一致\n                cache: false,\n                dataType: \"html\",\n\n                success: function (result, statues, xml) {\n                    // debugger;\n                    $('#log_info').addClass('bg-primary');\n                    $('#log_info').css('display', 'block');\n                    $('#log_info').html(result);\n                    setTimeout(\"$('#log_info').css('display', 'None');$('#id_location').val('');\", 1500);  //成功时弹出view传回来的结\n                },\n                error: function () {\n                    // debugger;\n                    $('#log_info').addClass('bg-primary');\n                    $('#log_info').css('display', 'block');\n                    $('#log_info').html('添加失败。');\n                    setTimeout(\"location.reload()\", 1500);\n                }\n            });\n        }\n\n        return false;\n    });\n\n    /*     添加关键字     */\n    $('#add_keyword').submit(function () {\n        var keyword = $('#keyword').val();\n        var kwdescr = $('#kwdescr').val();\n        var productid = $('#selproductid').val();\n        $.ajax({\n            type: \"POST\",\n            data: {keyword: keyword, kwdescr: kwdescr, productid: productid},\n            url: \"/func/keyword/add/\",\n            cache: false,\n            dataType: \"html\",\n            success: function (result, statues, xml) {\n                // debugger;\n                $('#log_info').addClass('bg-primary');\n                $('#log_info').css('display', 'block');\n                $('#log_info').html(result);\n                setTimeout(\"location.reload()\", 1500);\n                // alert(result);\n            },\n            error: function () {\n                // debugger;\n                $('#log_info').addClass('bg-primary');\n                $('#log_info').css('display', 'block');\n                $('#log_info').html('添加失败，关键字可能已经存在。');\n                setTimeout(\"location.reload()\", 1500);\n            }\n        });\n        return false;\n    });\n\n    /*    添加产品     */\n    $('#product_add').submit(function () {\n        $.ajax({\n            type: \"POST\",\n            data: $(this).serialize(),\n            url: \"/setting/product/add/\",\n            cache: false,\n            dataType: \"html\",\n            success: function (result, statues, xml) {\n                $('#addProductModal').hide()\n                $('#log_info').addClass('bg-primary');\n                $('#log_info').css('display', 'block');\n                $('#log_info').html(result);\n                setTimeout(\"location.reload()\", 1200);\n            },\n            error: function () {\n                $('#log_info').addClass('bg-primary');\n                $('#log_info').css('display', 'block');\n                $('#log_info').html('创建失败');\n                alert('创建失败')\n            }\n        });\n        return false;\n    });\n\n    /*     编辑产品     */\n    $('#product_edit').submit(function () {\n        $.ajax({\n            type: \"POST\",\n            data: $(this).serialize(),\n            url: \"/setting/product/update/\",\n            cache: false,\n            dataType: \"html\",\n            success: function (result, statues, xml) {\n                $('#editProductModal').hide()\n                $('#log_info').addClass('bg-primary');\n                $('#log_info').css('display', 'block');\n                $('#log_info').html(result);\n                setTimeout(\"location.reload()\", 1200);\n            },\n            error: function () {\n                $('#log_info').addClass('bg-primary');\n                $('#log_info').css('display', 'block');\n                $('#log_info').html('创建失败');\n                alert('创建失败')\n            }\n        });\n        return false;\n    });\n\n    /*     添加项目     */\n    $('#project_add').submit(function () {\n        $.ajax({\n            type: \"POST\",\n            data: $(this).serialize(),\n            url: \"/setting/project/add/\",\n            cache: false,\n            dataType: \"html\",\n            success: function (result, statues, xml) {\n                $('#addProjectModal').hide()\n                $('#log_info').addClass('bg-primary');\n                $('#log_info').css('display', 'block');\n                $('#log_info').html(result);\n                setTimeout(\"location.reload()\", 1200);\n            },\n            error: function () {\n                $('#log_info').addClass('bg-primary');\n                $('#log_info').css('display', 'block');\n                $('#log_info').html('创建失败');\n                alert('创建失败')\n            }\n        });\n        return false;\n    });\n\n    /*     编辑项目     */\n    $('#project_edit').submit(function () {\n        $.ajax({\n            type: \"POST\",\n            data: $(this).serialize(),\n\n            url: \"/setting/project/update/\",\n            cache: false,\n            dataType: \"html\",\n            success: function (result, statues, xml) {\n                $('#editProjectModal').hide()\n                $('#log_info').addClass('bg-primary');\n                $('#log_info').css('display', 'block');\n                $('#log_info').html(result);\n                setTimeout(\"location.reload()\", 1200);\n            },\n            error: function () {\n                $('#log_info').addClass('bg-primary');\n                $('#log_info').css('display', 'block');\n                $('#log_info').html('创建失败');\n                alert('创建失败')\n            }\n        });\n        return false;\n    });\n\n    /*   添加模块   */\n    $('#module_add').submit(function () {\n        $.ajax({\n            type: \"POST\",\n            data: $(this).serialize(),\n            url: \"/setting/module/add/\",\n            cache: false,\n            dataType: \"html\",\n            success: function (result, statues, xml) {\n                $('#addModuleModal').hide()\n                $('#log_info').addClass('bg-primary');\n                $('#log_info').css('display', 'block');\n                $('#log_info').html(result);\n                setTimeout(\"location.reload()\", 1200);\n            },\n            error: function () {\n                $('#log_info').addClass('bg-primary');\n                $('#log_info').css('display', 'block');\n                $('#log_info').html('创建失败');\n                alert('创建失败')\n            }\n        });\n        return false;\n    });\n\n    /*  编辑模块   */\n    $('#module_edit').submit(function () {\n        $.ajax({\n            type: \"POST\",\n            data: $(this).serialize(),\n            url: \"/setting/module/update/\",\n            cache: false,\n            dataType: \"html\",\n            success: function (result, statues, xml) {\n                $('#editModuleModal').hide()\n                $('#log_info').addClass('bg-primary');\n                $('#log_info').css('display', 'block');\n                $('#log_info').html(result);\n                setTimeout(\"location.reload()\", 1200);\n            },\n            error: function () {\n                $('#log_info').addClass('bg-primary');\n                $('#log_info').css('display', 'block');\n                $('#log_info').html('创建失败');\n                alert('创建失败')\n            }\n        });\n        return false;\n    });\n\n    /*     提交编辑元素    */\n    $('#element_edit').submit(function () {\n        $.ajax({\n            type: \"POST\",\n            data: $(this).serialize(),\n            url: \"/func/element/update/\",\n            cache: false,\n            dataType: \"html\",\n            success: function (result, statues, xml) {\n                $('#editElementModal').hide()\n                $('#log_info').addClass('bg-primary');\n                $('#log_info').css('display', 'block');\n                $('#log_info').html(result);\n                setTimeout(\"location.reload()\", 1500);\n            },\n            error: function () {\n                $('#log_info').addClass('bg-primary');\n                $('#log_info').css('display', 'block');\n                $('#log_info').html('创建失败');\n                alert('创建失败')\n            }\n        });\n        return false;\n    });\n\n    $(\".radioitem\").bind(\"change\", function () {\n        var selectvalue = $(\"input[name='tasktype']:checked\").val();\n        if (selectvalue == 1) {\n            $(\"#testrailrunid\").show();\n            $(\"#testrailsuites\").hide();\n            $(\"#testsectionid\").hide();\n            $(\"#treeDemo\").show();\n            $(\"#customParameters\").show();\n            $(\"#jenkins_server_url\").hide();\n            $(\"#user_id\").hide();\n            $(\"#api_token\").hide();\n            $(\"#build_name\").hide();\n            $(\"#selectedCases\").show();\n        }\n        else if (selectvalue == 2) {\n            $(\"#testrailrunid\").hide();\n            $(\"#testrailsuites\").show();\n            $(\"#testsectionid\").show();\n            $(\"#treeDemo\").show();\n            $(\"#customParameters\").show();\n            $(\"#jenkins_server_url\").hide();\n            $(\"#user_id\").hide();\n            $(\"#api_token\").hide();\n            $(\"#build_name\").hide();\n            $(\"#selectedCases\").show();\n        }\n        else {\n            $(\"#testrailrunid\").hide();\n            $(\"#testrailsuites\").hide();\n            $(\"#testsectionid\").hide();\n            $(\"#treeDemo\").hide();\n            $(\"#customParameters\").hide();\n            $(\"#jenkins_server_url\").show();\n            $(\"#user_id\").show();\n            $(\"#api_token\").show();\n            $(\"#build_name\").show();\n            $(\"#selectedCases\").hide();\n        }\n    });\n\n    /*     提交新增任务    */\n    $('#task_add').submit(function () {\n        var treeObj = $.fn.zTree.getZTreeObj(\"treeDemo\");\n        var nodes = treeObj.getCheckedNodes(true);\n        var index = 1;\n        var text = '';\n        var jsonlist = {};\n        nodes.forEach(function (node) {\n            if (node.level === 1) {\n                var childIds = [];\n                node.children.forEach(function (child) {\n                    childIds.push(child.id)\n                });\n                jsonlist[index++] = childIds.join(',')\n            }\n        });\n        text = JSON.stringify(jsonlist);\n        // for (x in nodes){\n        //     if (nodes[x].id < 9999999){\n        //         text = text + nodes[x].id + \",\";\n        //     }\n        // }\n        $('#caseids').val(text);\n        $.ajax({\n            type: \"POST\",\n            data: $(this).serialize(),\n            url: \"/func/task/add/\",\n            cache: false,\n            dataType: \"html\",\n            success: function (result, statues, xml) {\n                $('#log_info').addClass('bg-primary');\n                $('#log_info').css('display', 'block');\n                $('#log_info').html(result);\n                setTimeout(\"window.location.href='/func/task/list/'\", 500);\n            },\n            error: function () {\n                $('#log_info').addClass('bg-primary');\n                $('#log_info').css('display', 'block');\n                $('#log_info').html('创建失败');\n                alert('创建失败')\n            }\n        });\n        return false;\n    });\n\n    /*     提交编辑任务    */\n    $('#task_edit').submit(function () {\n        var treeObj = $.fn.zTree.getZTreeObj(\"treeDemo\");\n        var nodes = treeObj.getCheckedNodes(true);\n        var index = 1;\n        var text = \"\";\n        var jsonlist = {}\n        nodes.forEach(function (node) {\n            if (node.level === 1) {\n                var childIds = []\n                node.children.forEach(function (child) {\n                    if (child.checked === true) {\n                        childIds.push(child.id)\n                    }\n                })\n                jsonlist[index++] = childIds.join(',')\n            }\n        })\n        text = JSON.stringify(jsonlist);\n        // for (x in nodes){\n        //     if (nodes[x].id < 9999999){\n        //         text = text + nodes[x].id + \",\";\n        //     }\n        // }\n        $('#caseids').val(text);\n        var taskid = $(\"#taskid\").val();\n        $.ajax({\n            type: \"POST\",\n            data: $(this).serialize(),\n            url: \"/func/task/update/\" + taskid + \"/\",\n            cache: false,\n            dataType: \"html\",\n            success: function (result, statues, xml) {\n                $('#log_info').addClass('bg-primary');\n                $('#log_info').css('display', 'block');\n                $('#log_info').html(result);\n                setTimeout(\"window.location.href='/func/task/list/'\", 500);\n            },\n            error: function () {\n                $('#log_info').addClass('bg-primary');\n                $('#log_info').css('display', 'block');\n                $('#log_info').html('修改失败');\n                alert('修改失败')\n            }\n        });\n        return false;\n    });\n\n\n});\n\n/*    点击产品编辑按钮    */\nfunction setproductValue(id) {\n    $.ajax({\n        type: \"GET\",\n        data: {'productid': id},\n        url: \"/setting/setedit/product/\",\n        cache: false,\n        dataType: 'json',\n\n        success: function (result, TextStatus) {\n            if (result.length > 0) {\n                for (i = 0; i < result.length; i++) {\n                    $('#editProductModal [name=\"productid\"]').val(result[i].id);\n                    $('#editProductModal [name=\"productname\"]').val(result[i].name);\n                    $('#editProductModal [name=\"descr\"]').val(result[i].descr);\n                    $('#editProductModal [name=\"sortby\"]').val(result[i].sortby);\n\n                    if (result[i].isenabled) {\n                        $('#editProductModal input:checkbox').attr(\"checked\", \"checked\");\n                    }\n                    else {\n                        $('#editProductModal input:checkbox').attr(\"checked\", false);\n                    }\n                }\n            }\n        }\n    });\n}\n\n/*   点击项目编辑按钮    */\nfunction setprojectValue(id) {\n    $.ajax({\n        type: \"GET\",\n        data: {'projectid': id},\n        url: \"/setting/setedit/project/\",\n        cache: false,\n        dataType: 'json',\n\n        success: function (result, TextStatus) {\n            if (result.length > 0) {\n                for (i = 0; i < result.length; i++) {\n                    $('#editProjectModal [name=\"projectid\"]').val(result[i].id);\n                    $('#editProjectModal [name=\"projectname\"]').val(result[i].name);\n                    $('#editProjectModal [name=\"descr\"]').val(result[i].descr);\n                    $('#editProjectModal [name=\"version\"]').val(result[i].version);\n                    $('#editProjectModal [name=\"sortby\"]').val(result[i].sortby);\n\n                    if (result[i].isenabled) {\n                        $('#editProjectModal input:checkbox').attr(\"checked\", \"checked\");\n                    }\n                    else {\n                        $('#editProjectModal input:checkbox').attr(\"checked\", false);\n                    }\n                }\n            }\n        }\n    });\n}\n\n/*点击模块编辑按钮*/\nfunction setmoduleValue(id) {\n    $.ajax({\n        type: \"GET\",\n        data: {'moduleid': id},\n        url: \"/setting/setedit/module/\",\n        cache: false,\n        dataType: 'json',\n\n        success: function (result, TextStatus) {\n            if (result.length > 0) {\n                for (i = 0; i < result.length; i++) {\n                    $('#editModuleModal [name=\"moduleid\"]').val(result[i].id);\n                    $('#editModuleModal [name=\"modulename\"]').val(result[i].name);\n                    $('#editModuleModal [name=\"sortby\"]').val(result[i].sortby);\n\n                    if (result[i].isenabled) {\n                        $('#editModuleModal input:checkbox').attr(\"checked\", \"checked\");\n                    }\n                    else {\n                        $('#editModuleModal input:checkbox').attr(\"checked\", false);\n                    }\n                    // debugger;\n                }\n            }\n        }\n    });\n}\n\n/*    点击用户编辑按钮    */\nfunction setuserValue(id) {\n    $.ajax({\n        type: \"GET\",\n        data: {'userid': id},\n        url: \"/account/setedit/user/\",\n        cache: false,\n        dataType: 'json',\n\n        success: function (result, TextStatus) {\n            if (result.length > 0) {\n                for (i = 0; i < result.length; i++) {\n                    $('#editUserModal [name=\"userid\"]').val(result[i].id);\n                    $('#editUserModal [name=\"username\"]').val(result[i].username);\n                    // $('#editUserModal [name=\"password\"]').val(result[i].password);\n                    // $('#editUserModal [name=\"confirmPassword\"]').val(result[i].password);\n                    $('#editUserModal [name=\"email\"]').val(result[i].email);\n                    $('#editUserModal [name=\"realname\"]').val(result[i].realname);\n                    $('#editUserModal [name=\"mobile\"]').val(result[i].mobile);\n                    // $('#editUserModal [name=\"testrailuser\"]').val(result[i].testrailuser);\n                    // $('#editUserModal [name=\"testrailpass\"]').val(result[i].testrailpass);\n                    if (result[i].dept){\n                        $('#editUserModal select[name=\"dept\"]').get(0).value = result[i].dept;\n                    }\n                    else{\n                        console.log(result[i]);\n                    }\n                    if (result[i].is_active){\n                        $('#editUserModal input[name=\"is_active\"]').attr(\"checked\", \"checked\");\n                    }\n                    else {\n                        $('#editUserModal input[name=\"is_active\"]').attr(\"checked\", false);\n                    }\n                    if (result[i].is_admin) {\n                        $('#editUserModal input[name=\"is_admin\"]').attr(\"checked\", \"checked\");\n                    }\n                    else {\n                        $('#editUserModal input[name=\"is_admin\"]').attr(\"checked\", false);\n                    }\n\n                }\n            }\n        }\n    });\n}\n\n\n/*    点击元素编辑按钮    */\nfunction setelementValue(id) {\n\n    $.ajax({\n        type: \"GET\",\n        data: {'elementid': id},\n        url: \"/func/element/setedit/\",\n        cache: false,\n        dataType: 'json',\n        async: true,\n\n        success: function (result, TextStatus) {\n            if (result.length > 0) {\n                for (var i = 0; i < result.length; i++) {\n                    $('#editElementModal [name=\"elementid\"]').val(result[i].id);\n                    $('#editElementModal [name=\"eledescr\"]').val(result[i].descr);\n                    $('#editElementModal [name=\"ele_add_projectid\"]').val(result[i].projectid);\n                    $('#eleprojectid').change();\n                    $('#editElementModal [name=\"moduleid\"]').val(result[i].moduleid);\n                    $('#editElementModal [name=\"locmode\"]').val(result[i].locmode);\n                    $('#editElementModal [name=\"elelocation\"]').val(result[i].location);\n                }\n\n            }\n            // alert(result[i].projectid);\n\n        }\n    });\n\n}\n\n/*     添加用户     */\n$(function () {\n    $('#user_add')\n        .bootstrapValidator({\n//        live: 'disabled',\n            message: 'This value is not valid',\n            feedbackIcons: {\n                valid: 'icon icon-ok',\n                invalid: 'icon icon-remove',\n                validating: 'icon icon-refresh'\n            },\n            fields: {\n                username: {\n                    message: '无效的用户名',\n                    validators: {\n                        notEmpty: {\n                            message: '登录用户名不能为空'\n                        },\n                        stringLength: {\n                            min: 4,\n                            max: 30,\n                            message: '用户名的长度为4-30字符'\n                        },\n                        regexp: {\n                            regexp: /^[a-zA-Z0-9_\\.\\@]+$/,\n                            message: '用户名只能由字母、数字和下划线组成'\n                        },\n                        different: {\n                            field: 'password',\n                            message: '用户名和密码不能一样'\n                        }\n                    }\n                },\n                email: {\n                    validators: {\n                        emailAddress: {\n                            message: '无效的邮箱地址'\n                        },\n                        notEmpty: {\n                            message: '邮箱地址不能为空'\n                        }\n                    }\n                },\n                password: {\n                    validators: {\n                        notEmpty: {\n                            message: '登录密码不能为空'\n                        },\n                        different: {\n                            field: 'username',\n                            message: '密码不能和用户名一样'\n                        }\n                    }\n                },\n                confirmPassword: {\n                    validators: {\n                        notEmpty: {\n                            message: '确认密码不能为空'\n                        },\n                        identical: {\n                            field: 'password',\n                            message: '密码和确认密码输入不一致'\n                        }\n                    }\n                }\n            }\n        })\n\n        .on('success.form.bv', function (e) {\n\n            e.preventDefault();\n\n            var $form = $(e.target);\n\n            var bv = $form.data('bootstrapValidator');\n\n            $.post($form.attr('action'), $form.serialize(), function (result) {\n                $('#addUserModal').hide()\n                $('#log_info').addClass('bg-primary');\n                $('#log_info').css('display', 'block');\n                $('#log_info').html(result);\n                setTimeout(\"location.reload()\", 1500);\n            })\n        });\n\n});\n\n/*     编辑用户     */\n$(function () {\n    $('#user_edit')\n        .bootstrapValidator({\n//        live: 'disabled',\n            message: 'This value is not valid',\n            feedbackIcons: {\n                valid: 'icon icon-ok',\n                invalid: 'icon icon-remove',\n                validating: 'icon icon-refresh'\n            },\n            fields: {\n                email: {\n                    validators: {\n                        emailAddress: {\n                            message: '无效的邮箱地址'\n                        },\n                        notEmpty: {\n                            message: '邮箱地址不能为空'\n                        }\n                    }\n                },\n                password: {\n                    validators: {\n                        identical: {\n                            field: 'confirmPassword',\n                            message: '密码和确认密码输入不一致'\n                        }\n                    }\n                },\n                confirmPassword: {\n                    validators: {\n                        identical: {\n                            field: 'password',\n                            message: '密码和确认密码输入不一致'\n                        }\n                    }\n                }\n            }\n        })\n        //         .bootstrapValidator({\n        // //        live: 'disabled',\n        //         message: 'This value is not valid',\n        //         feedbackIcons: {\n        //             valid: 'icon icon-ok',\n        //             invalid: 'icon icon-remove',\n        //             validating: 'icon icon-refresh'\n        //         },\n        //         fields: {\n        //             email: {\n        //                 validators: {\n        //                     emailAddress: {\n        //                         message: '无效的邮箱地址'\n        //                     },\n        //                     notEmpty: {\n        //                         message: '邮箱地址不能为空'\n        //                     }\n        //                 }\n        //             },\n        //             password: {\n        //                 validators: {\n        //                     different: {\n        //                         field: 'username',\n        //                         message: '密码不能和用户名一样'\n        //                     }\n        //                 }\n        //             },\n        //             confirmPassword: {\n        //                 validators: {\n        //                     identical: {\n        //                         field: 'password',\n        //                         message: '密码和确认密码输入不一致'\n        //                     }\n        //                 }\n        //             },\n        //         }\n        //     })\n\n        .on('success.form.bv', function (e) {\n\n            e.preventDefault();\n\n            var $form = $(e.target);\n\n            var bv = $form.data('bootstrapValidator');\n\n            $.post($form.attr('action'), $form.serialize(), function (result) {\n                $('#addEditModal').hide();\n                $('#log_info').addClass('bg-primary');\n                $('#log_info').css('display', 'block');\n                $('#log_info').html(result);\n                setTimeout(\"location.reload()\", 1500);\n            })\n        });\n\n});\n\n/*   执行用例    */\nfunction runcase(id) {\n    $('#run' + id).attr('disabled', true);\n    $('#run' + id + '>i.glyphicon.glyphicon-play-circle').remove();\n    $('#run' + id).append('<i class=\"glyphicon glyphicon-record\"></i>');\n\n    $.ajax({\n        type: \"GET\",\n        data: {'caseid': id},\n        url: \"/func/case/run/\",\n        cache: false,\n        dataType: \"html\",\n\n        success: function (result, TextStatus, xml) {\n            // debugger;\n            // alert(result);\n            // $('#run'+id).attr('disabled',false);\n            // $('#run'+id).addClass('green');\n            // $('#run'+id).text('Run');\n            setTimeout(\"location.reload()\", 500);\n        }\n    });\n}\n\n/*   执行任务    */\nfunction runtask(id) {\n    // $('#run'+id).attr('disabled',true);\n    $('#run' + id + '>i.glyphicon.glyphicon-play-circle').remove();\n    $('#run' + id).append('<i class=\"glyphicon glyphicon-record\"></i>');\n\n    $.ajax({\n        type: \"GET\",\n        data: {'taskid': id},\n        url: \"/func/task/run/\",\n        cache: false,\n        dataType: \"html\",\n\n        success: function (result, TextStatus, xml) {\n            // debugger;\n            // alert(result);\n            // $('#run'+id).attr('disabled',false);\n            // $('#run'+id).addClass('green');\n            // $('#run'+id).text('Run');\n            setTimeout(\"location.reload()\", 500);\n        }\n    });\n}\n\nfunction viewdebuginfo(x) {\n    var debuginfo = $('td#' + x + ' pre').text();\n    $('#divdebuginfo').text(debuginfo);\n}\n\n\n$(\"#selprojectid\").on(\"change\", function () {\n    $('#mdlist').val('');\n    $('#selvalue').val('');\n});\n\n/*    编辑元素上下移动行    */\nfunction up(obj) {\n    var objParentTR = $(obj).parent().parent();\n    var prevTR = objParentTR.prev();\n    if (prevTR.length > 0) {\n        prevTR.insertAfter(objParentTR);\n    }\n}\nfunction down(obj) {\n    var objParentTR = $(obj).parent().parent();\n    var nextTR = objParentTR.next();\n    if (nextTR.length > 0) {\n        nextTR.insertBefore(objParentTR);\n    }\n}\n\nfunction goback() {\n    window.history.back();\n}"
  },
  {
    "path": "automatic/static/js/back-to-top.js",
    "content": "//** jQuery Scroll to Top Control script- (c) Dynamic Drive DHTML code library: http://www.dynamicdrive.com.\n//** Available/ usage terms at http://www.dynamicdrive.com (March 30th, 09')\n//** v1.1 (April 7th, 09'):\n//** 1) Adds ability to scroll to an absolute position (from top of page) or specific element on the page instead.\n//** 2) Fixes scroll animation not working in Opera. \n\n\nvar scrolltotop={\n\t//startline: Integer. Number of pixels from top of doc scrollbar is scrolled before showing control\n\t//scrollto: Keyword (Integer, or \"Scroll_to_Element_ID\"). How far to scroll document up when control is clicked on (0=top).\n\tsetting: {startline:100, scrollto: 0, scrollduration:1000, fadeduration:[500, 100]},\n\tcontrolHTML: '', //<img src=\"assets/img/up.png\" style=\"width:51px; height:42px\" /> //HTML for control, which is auto wrapped in DIV w/ ID=\"topcontrol\"\n\tcontrolattrs: {offsetx:5, offsety:5}, //offset of control relative to right/ bottom of window corner\n\tanchorkeyword: '#top', //Enter href value of HTML anchors on the page that should also act as \"Scroll Up\" links\n\n\tstate: {isvisible:false, shouldvisible:false},\n\n\tscrollup:function(){\n\t\tif (!this.cssfixedsupport) //if control is positioned using JavaScript\n\t\t\tthis.$control.css({opacity:0}) //hide control immediately after clicking it\n\t\tvar dest=isNaN(this.setting.scrollto)? this.setting.scrollto : parseInt(this.setting.scrollto)\n\t\tif (typeof dest==\"string\" && jQuery('#'+dest).length==1) //check element set by string exists\n\t\t\tdest=jQuery('#'+dest).offset().top\n\t\telse\n\t\t\tdest=0\n\t\tthis.$body.animate({scrollTop: dest}, this.setting.scrollduration);\n\t},\n\n\tkeepfixed:function(){\n\t\tvar $window=jQuery(window)\n\t\tvar controlx=$window.scrollLeft() + $window.width() - this.$control.width() - this.controlattrs.offsetx\n\t\tvar controly=$window.scrollTop() + $window.height() - this.$control.height() - this.controlattrs.offsety\n\t\tthis.$control.css({left:controlx+'px', top:controly+'px'})\n\t},\n\n\ttogglecontrol:function(){\n\t\tvar scrolltop=jQuery(window).scrollTop()\n\t\tif (!this.cssfixedsupport)\n\t\t\tthis.keepfixed()\n\t\tthis.state.shouldvisible=(scrolltop>=this.setting.startline)? true : false\n\t\tif (this.state.shouldvisible && !this.state.isvisible){\n\t\t\tthis.$control.stop().animate({opacity:1}, this.setting.fadeduration[0])\n\t\t\tthis.state.isvisible=true\n\t\t}\n\t\telse if (this.state.shouldvisible==false && this.state.isvisible){\n\t\t\tthis.$control.stop().animate({opacity:0}, this.setting.fadeduration[1])\n\t\t\tthis.state.isvisible=false\n\t\t}\n\t},\n\t\n\tinit:function(){\n\t\tjQuery(document).ready(function($){\n\t\t\tvar mainobj=scrolltotop\n\t\t\tvar iebrws=document.all\n\t\t\tmainobj.cssfixedsupport=!iebrws || iebrws && document.compatMode==\"CSS1Compat\" && window.XMLHttpRequest //not IE or IE7+ browsers in standards mode\n\t\t\tmainobj.$body=(window.opera)? (document.compatMode==\"CSS1Compat\"? $('html') : $('body')) : $('html,body')\n\t\t\tmainobj.$control=$('<div id=\"topcontrol\">'+mainobj.controlHTML+'</div>')\n\t\t\t\t.css({position:mainobj.cssfixedsupport? 'fixed' : 'absolute', bottom:mainobj.controlattrs.offsety, right:mainobj.controlattrs.offsetx, opacity:0, cursor:'pointer'})\n\t\t\t\t.attr({title:'Scroll Back to Top'})\n\t\t\t\t.click(function(){mainobj.scrollup(); return false})\n\t\t\t\t.appendTo('body')\n\t\t\tif (document.all && !window.XMLHttpRequest && mainobj.$control.text()!='') //loose check for IE6 and below, plus whether control contains any text\n\t\t\t\tmainobj.$control.css({width:mainobj.$control.width()}) //IE6- seems to require an explicit width on a DIV containing text\n\t\t\tmainobj.togglecontrol()\n\t\t\t$('a[href=\"' + mainobj.anchorkeyword +'\"]').click(function(){\n\t\t\t\tmainobj.scrollup()\n\t\t\t\treturn false\n\t\t\t})\n\t\t\t$(window).bind('scroll resize', function(e){\n\t\t\t\tmainobj.togglecontrol()\n\t\t\t})\n\t\t})\n\t}\n}\n\nscrolltotop.init()"
  },
  {
    "path": "automatic/static/js/bootstrapValidator.js",
    "content": "/*!\n * BootstrapValidator (http://bootstrapvalidator.com)\n * The best jQuery plugin to validate form fields. Designed to use with Bootstrap 3\n *\n * @version     v0.5.1-dev, built on 2014-07-23 6:05:15 AM\n * @author      https://twitter.com/nghuuphuoc\n * @copyright   (c) 2013 - 2014 Nguyen Huu Phuoc\n * @license     MIT\n */\n(function($) {\n    var BootstrapValidator = function(form, options) {\n        this.$form   = $(form);\n        this.options = $.extend({}, $.fn.bootstrapValidator.DEFAULT_OPTIONS, options);\n\n        this.$invalidFields = $([]);    // Array of invalid fields\n        this.$submitButton  = null;     // The submit button which is clicked to submit form\n\n        // Validating status\n        this.STATUS_NOT_VALIDATED = 'NOT_VALIDATED';\n        this.STATUS_VALIDATING    = 'VALIDATING';\n        this.STATUS_INVALID       = 'INVALID';\n        this.STATUS_VALID         = 'VALID';\n\n        // Determine the event that is fired when user change the field value\n        // Most modern browsers supports input event except IE 7, 8.\n        // IE 9 supports input event but the event is still not fired if I press the backspace key.\n        // Get IE version\n        // https://gist.github.com/padolsey/527683/#comment-7595\n        var ieVersion = (function() {\n            var v = 3, div = document.createElement('div'), a = div.all || [];\n            while (div.innerHTML = '<!--[if gt IE '+(++v)+']><br><![endif]-->', a[0]) {}\n            return v > 4 ? v : !v;\n        }());\n\n        var el = document.createElement('div');\n        this._changeEvent = (ieVersion === 9 || !('oninput' in el)) ? 'keyup' : 'input';\n\n        // The flag to indicate that the form is ready to submit when a remote/callback validator returns\n        this._submitIfValid = null;\n\n        // Field elements\n        this._cacheFields = {};\n\n        this._init();\n    };\n\n    BootstrapValidator.prototype = {\n        constructor: BootstrapValidator,\n\n        /**\n         * Init form\n         */\n        _init: function() {\n            var that    = this,\n                options = {\n                    excluded:       this.$form.attr('data-bv-excluded'),\n                    trigger:        this.$form.attr('data-bv-trigger'),\n                    message:        this.$form.attr('data-bv-message'),\n                    container:      this.$form.attr('data-bv-container'),\n                    group:          this.$form.attr('data-bv-group'),\n                    submitButtons:  this.$form.attr('data-bv-submitbuttons'),\n                    threshold:      this.$form.attr('data-bv-threshold'),\n                    live:           this.$form.attr('data-bv-live'),\n                    onSuccess:      this.$form.attr('data-bv-onsuccess'),\n                    onError:        this.$form.attr('data-bv-onerror'),\n                    fields:         {},\n                    feedbackIcons: {\n                        valid:      this.$form.attr('data-bv-feedbackicons-valid'),\n                        invalid:    this.$form.attr('data-bv-feedbackicons-invalid'),\n                        validating: this.$form.attr('data-bv-feedbackicons-validating')\n                    }\n                };\n\n            this.$form\n                // Disable client side validation in HTML 5\n                .attr('novalidate', 'novalidate')\n                .addClass(this.options.elementClass)\n                // Disable the default submission first\n                .on('submit.bv', function(e) {\n                    e.preventDefault();\n                    that.validate();\n                })\n                .on('click.bv', this.options.submitButtons, function() {\n                    that.$submitButton  = $(this);\n\t\t\t\t\t// The user just click the submit button\n\t\t\t\t\tthat._submitIfValid = true;\n                })\n                // Find all fields which have either \"name\" or \"data-bv-field\" attribute\n                .find('[name], [data-bv-field]')\n                    .each(function() {\n                        var $field = $(this),\n                            field  = $field.attr('name') || $field.attr('data-bv-field'),\n                            opts   = that._parseOptions($field);\n                        if (opts) {\n                            $field.attr('data-bv-field', field);\n                            options.fields[field] = $.extend({}, opts, options.fields[field]);\n                        }\n                    });\n\n            this.options = $.extend(true, this.options, options);\n            for (var field in this.options.fields) {\n                this._initField(field);\n            }\n\n            this.$form.trigger($.Event('init.form.bv'), {\n                bv: this,\n                options: this.options\n            });\n\n            // Prepare the events\n            if (this.options.onSuccess) {\n                this.$form.on('success.form.bv', function(e) {\n                    $.fn.bootstrapValidator.helpers.call(that.options.onSuccess, [e]);\n                });\n            }\n            if (this.options.onError) {\n                this.$form.on('error.form.bv', function(e) {\n                    $.fn.bootstrapValidator.helpers.call(that.options.onError, [e]);\n                });\n            }\n        },\n\n        /**\n         * Parse the validator options from HTML attributes\n         *\n         * @param {jQuery} $field The field element\n         * @returns {Object}\n         */\n        _parseOptions: function($field) {\n            var field      = $field.attr('name') || $field.attr('data-bv-field'),\n                validators = {},\n                validator,\n                v,          // Validator name\n                enabled,\n                optionName,\n                optionValue,\n                html5AttrName,\n                html5AttrMap;\n\n            for (v in $.fn.bootstrapValidator.validators) {\n                validator    = $.fn.bootstrapValidator.validators[v];\n                enabled      = $field.attr('data-bv-' + v.toLowerCase()) + '';\n                html5AttrMap = ('function' === typeof validator.enableByHtml5) ? validator.enableByHtml5($field) : null;\n\n                if ((html5AttrMap && enabled !== 'false')\n                    || (html5AttrMap !== true && ('' === enabled || 'true' === enabled)))\n                {\n                    // Try to parse the options via attributes\n                    validator.html5Attributes = $.extend({}, { message: 'message', onerror: 'onError', onsuccess: 'onSuccess' }, validator.html5Attributes);\n                    validators[v] = $.extend({}, html5AttrMap === true ? {} : html5AttrMap, validators[v]);\n\n                    for (html5AttrName in validator.html5Attributes) {\n                        optionName  = validator.html5Attributes[html5AttrName];\n                        optionValue = $field.attr('data-bv-' + v.toLowerCase() + '-' + html5AttrName);\n                        if (optionValue) {\n                            if ('true' === optionValue) {\n                                optionValue = true;\n                            } else if ('false' === optionValue) {\n                                optionValue = false;\n                            }\n                            validators[v][optionName] = optionValue;\n                        }\n                    }\n                }\n            }\n\n            var opts = {\n                    excluded:      $field.attr('data-bv-excluded'),\n                    feedbackIcons: $field.attr('data-bv-feedbackicons'),\n                    trigger:       $field.attr('data-bv-trigger'),\n                    message:       $field.attr('data-bv-message'),\n                    container:     $field.attr('data-bv-container'),\n                    group:         $field.attr('data-bv-group'),\n                    selector:      $field.attr('data-bv-selector'),\n                    threshold:     $field.attr('data-bv-threshold'),\n                    onStatus:      $field.attr('data-bv-onstatus'),\n                    onSuccess:     $field.attr('data-bv-onsuccess'),\n                    onError:       $field.attr('data-bv-onerror'),\n                    validators:    validators\n                },\n                emptyOptions    = $.isEmptyObject(opts),        // Check if the field options are set using HTML attributes\n                emptyValidators = $.isEmptyObject(validators);  // Check if the field validators are set using HTML attributes\n\n            if (!emptyValidators || (!emptyOptions && this.options.fields && this.options.fields[field])) {\n                opts.validators = validators;\n                return opts;\n            } else {\n                return null;\n            }\n        },\n\n        /**\n         * Init field\n         *\n         * @param {String|jQuery} field The field name or field element\n         */\n        _initField: function(field) {\n            var fields = $([]);\n            switch (typeof field) {\n                case 'object':\n                    fields = field;\n                    field  = field.attr('data-bv-field');\n                    break;\n                case 'string':\n                    fields = this.getFieldElements(field);\n                    fields.attr('data-bv-field', field);\n                    break;\n                default:\n                    break;\n            }\n\n            if (this.options.fields[field] === null || this.options.fields[field].validators === null) {\n                return;\n            }\n\n            // We don't need to validate non-existing fields\n            if (fields.length === 0) {\n                delete this.options.fields[field];\n                return;\n            }\n            var validatorName;\n            for (validatorName in this.options.fields[field].validators) {\n                if (!$.fn.bootstrapValidator.validators[validatorName]) {\n                    delete this.options.fields[field].validators[validatorName];\n                }\n            }\n            if (this.options.fields[field].enabled === null) {\n                this.options.fields[field].enabled = true;\n            }\n\n            var that      = this,\n                total     = fields.length,\n                type      = fields.attr('type'),\n                updateAll = (total === 1) || ('radio' === type) || ('checkbox' === type),\n                event     = ('radio' === type || 'checkbox' === type || 'file' === type || 'SELECT' === fields.eq(0).get(0).tagName) ? 'change' : this._changeEvent,\n                trigger   = (this.options.fields[field].trigger || this.options.trigger || event).split(' '),\n                events    = $.map(trigger, function(item) {\n                    return item + '.update.bv';\n                }).join(' ');\n\n            for (var i = 0; i < total; i++) {\n                var $field    = fields.eq(i),\n                    group     = this.options.fields[field].group || this.options.group,\n                    $parent   = $field.parents(group),\n                    // Allow user to indicate where the error messages are shown\n                    container = this.options.fields[field].container || this.options.container,\n                    $message  = (container && container !== 'tooltip' && container !== 'popover') ? $(container) : this._getMessageContainer($field, group);\n\n                if (container && container !== 'tooltip' && container !== 'popover') {\n                    $message.addClass('has-error');\n                }\n\n                // Remove all error messages and feedback icons\n                $message.find('.help-block[data-bv-validator][data-bv-for=\"' + field + '\"]').remove();\n                $parent.find('i[data-bv-icon-for=\"' + field + '\"]').remove();\n\n                // Whenever the user change the field value, mark it as not validated yet\n                $field.off(events).on(events, function() {\n                    that.updateStatus($(this), that.STATUS_NOT_VALIDATED);\n                });\n\n                // Create help block elements for showing the error messages\n                $field.data('bv.messages', $message);\n                for (validatorName in this.options.fields[field].validators) {\n                    $field.data('bv.result.' + validatorName, this.STATUS_NOT_VALIDATED);\n\n                    if (!updateAll || i === total - 1) {\n                        $('<small/>')\n                            .css('display', 'none')\n                            .addClass('help-block')\n                            .attr('data-bv-validator', validatorName)\n                            .attr('data-bv-for', field)\n                            .attr('data-bv-result', this.STATUS_NOT_VALIDATED)\n                            .html(this._getMessage(field, validatorName))\n                            .appendTo($message);\n                    }\n\n                    // Prepare the validator events\n                    if (this.options.fields[field].validators[validatorName].onSuccess) {\n                        $field.on('success.validator.bv', function(e, data) {\n                             $.fn.bootstrapValidator.helpers.call(that.options.fields[field].validators[validatorName].onSuccess, [e, data]);\n                        });\n                    }\n                    if (this.options.fields[field].validators[validatorName].onError) {\n                        $field.on('error.validator.bv', function(e, data) {\n                             $.fn.bootstrapValidator.helpers.call(that.options.fields[field].validators[validatorName].onError, [e, data]);\n                        });\n                    }\n                }\n\n                // Prepare the feedback icons\n                // Available from Bootstrap 3.1 (http://getbootstrap.com/css/#forms-control-validation)\n                if (this.options.fields[field].feedbackIcons !== false && this.options.fields[field].feedbackIcons !== 'false'\n                    && this.options.feedbackIcons\n                    && this.options.feedbackIcons.validating && this.options.feedbackIcons.invalid && this.options.feedbackIcons.valid\n                    && (!updateAll || i === total - 1))\n                {\n                    $parent.removeClass('has-success').removeClass('has-error').addClass('has-feedback');\n                    var $icon = $('<i/>')\n                                    .css('display', 'none')\n                                    .addClass('form-control-feedback')\n                                    .attr('data-bv-icon-for', field)\n                                    // Place it after the label containing the checkbox/radio\n                                    // so when clicking the icon, it doesn't effect to the checkbox/radio element\n                                    .insertAfter(('checkbox' === type || 'radio' === type) ? $field.parent() : $field);\n\n                    // The feedback icon does not render correctly if there is no label\n                    // https://github.com/twbs/bootstrap/issues/12873\n                    if ($parent.find('label').length === 0) {\n                        $icon.css('top', 0);\n                    }\n                    // Fix feedback icons in input-group\n                    if ($parent.find('.input-group').length !== 0) {\n                        $icon.css({\n                            'top': 0,\n                            'z-index': 100\n                        }).insertAfter($parent.find('.input-group').eq(0));\n                    }\n                }\n            }\n\n            // Prepare the events\n            if (this.options.fields[field].onSuccess) {\n                fields.on('success.field.bv', function(e, data) {\n                    $.fn.bootstrapValidator.helpers.call(that.options.fields[field].onSuccess, [e, data]);\n                });\n            }\n            if (this.options.fields[field].onError) {\n                fields.on('error.field.bv', function(e, data) {\n                    $.fn.bootstrapValidator.helpers.call(that.options.fields[field].onError, [e, data]);\n                });\n            }\n            if (this.options.fields[field].onStatus) {\n                fields.on('status.field.bv', function(e, data) {\n                    $.fn.bootstrapValidator.helpers.call(that.options.fields[field].onStatus, [e, data]);\n                });\n            }\n\n            // Set live mode\n            events = $.map(trigger, function(item) {\n                return item + '.live.bv';\n            }).join(' ');\n            switch (this.options.live) {\n                case 'submitted':\n                    break;\n                case 'disabled':\n                    fields.off(events);\n                    break;\n                case 'enabled':\n                /* falls through */\n                default:\n                    fields.off(events).on(events, function() {\n                        if (that._exceedThreshold($(this))) {\n                            that.validateField($(this));\n                        }\n                    });\n                    break;\n            }\n\n            fields.trigger($.Event('init.field.bv'), {\n                bv: this,\n                field: field,\n                element: fields\n            });\n        },\n\n        /**\n         * Get the error message for given field and validator\n         *\n         * @param {String} field The field name\n         * @param {String} validatorName The validator name\n         * @returns {String}\n         */\n        _getMessage: function(field, validatorName) {\n            if (!this.options.fields[field] || !$.fn.bootstrapValidator.validators[validatorName]\n                || !this.options.fields[field].validators || !this.options.fields[field].validators[validatorName])\n            {\n                return '';\n            }\n\n            var options = this.options.fields[field].validators[validatorName];\n            switch (true) {\n                case (!!options.message):\n                    return options.message;\n                case (!!this.options.fields[field].message):\n                    return this.options.fields[field].message;\n                case (!!$.fn.bootstrapValidator.i18n[validatorName]):\n                    return $.fn.bootstrapValidator.i18n[validatorName]['default'];\n                default:\n                    return this.options.message;\n            }\n        },\n\n        /**\n         * Get the element to place the error messages\n         *\n         * @param {jQuery} $field The field element\n         * @param {String} group\n         * @returns {jQuery}\n         */\n        _getMessageContainer: function($field, group) {\n            var $parent = $field.parent();\n            if ($parent.is(group)) {\n                return $parent;\n            }\n\n            var cssClasses = $parent.attr('class');\n            if (!cssClasses) {\n                return this._getMessageContainer($parent, group);\n            }\n\n            cssClasses = cssClasses.split(' ');\n            var n = cssClasses.length;\n            for (var i = 0; i < n; i++) {\n                if (/^col-(xs|sm|md|lg)-\\d+$/.test(cssClasses[i]) || /^col-(xs|sm|md|lg)-offset-\\d+$/.test(cssClasses[i])) {\n                    return $parent;\n                }\n            }\n\n            return this._getMessageContainer($parent, group);\n        },\n\n        /**\n         * Called when all validations are completed\n         */\n        _submit: function() {\n            var isValid   = this.isValid(),\n                eventType = isValid ? 'success.form.bv' : 'error.form.bv',\n                e         = $.Event(eventType);\n\n            this.$form.trigger(e);\n\n            // Call default handler\n            // Check if whether the submit button is clicked\n            if (this.$submitButton) {\n                isValid ? this._onSuccess(e) : this._onError(e);\n            }\n        },\n\n        /**\n         * Check if the field is excluded.\n         * Returning true means that the field will not be validated\n         *\n         * @param {jQuery} $field The field element\n         * @returns {Boolean}\n         */\n        _isExcluded: function($field) {\n            var excludedAttr = $field.attr('data-bv-excluded'),\n                // I still need to check the 'name' attribute while initializing the field\n                field        = $field.attr('data-bv-field') || $field.attr('name');\n\n            switch (true) {\n                case (!!field && this.options.fields && this.options.fields[field] && (this.options.fields[field].excluded === 'true' || this.options.fields[field].excluded === true)):\n                case (excludedAttr === 'true'):\n                case (excludedAttr === ''):\n                    return true;\n\n                case (!!field && this.options.fields && this.options.fields[field] && (this.options.fields[field].excluded === 'false' || this.options.fields[field].excluded === false)):\n                case (excludedAttr === 'false'):\n                    return false;\n\n                default:\n                    if (this.options.excluded) {\n                        // Convert to array first\n                        if ('string' === typeof this.options.excluded) {\n                            this.options.excluded = $.map(this.options.excluded.split(','), function(item) {\n                                // Trim the spaces\n                                return $.trim(item);\n                            });\n                        }\n\n                        var length = this.options.excluded.length;\n                        for (var i = 0; i < length; i++) {\n                            if (('string' === typeof this.options.excluded[i] && $field.is(this.options.excluded[i]))\n                                || ('function' === typeof this.options.excluded[i] && this.options.excluded[i].call(this, $field, this) === true))\n                            {\n                                return true;\n                            }\n                        }\n                    }\n                    return false;\n            }\n        },\n\n        /**\n         * Check if the number of characters of field value exceed the threshold or not\n         *\n         * @param {jQuery} $field The field element\n         * @returns {Boolean}\n         */\n        _exceedThreshold: function($field) {\n            var field     = $field.attr('data-bv-field'),\n                threshold = this.options.fields[field].threshold || this.options.threshold;\n            if (!threshold) {\n                return true;\n            }\n            var cannotType = $.inArray($field.attr('type'), ['button', 'checkbox', 'file', 'hidden', 'image', 'radio', 'reset', 'submit']) !== -1;\n            return (cannotType || $field.val().length >= threshold);\n        },\n        \n        // ---\n        // Events\n        // ---\n\n        /**\n         * The default handler of error.form.bv event.\n         * It will be called when there is a invalid field\n         *\n         * @param {jQuery.Event} e The jQuery event object\n         */\n        _onError: function(e) {\n            if (e.isDefaultPrevented()) {\n                return;\n            }\n\n            if ('submitted' === this.options.live) {\n                // Enable live mode\n                this.options.live = 'enabled';\n                var that = this;\n                for (var field in this.options.fields) {\n                    (function(f) {\n                        var fields  = that.getFieldElements(f);\n                        if (fields.length) {\n                            var type    = $(fields[0]).attr('type'),\n                                event   = ('radio' === type || 'checkbox' === type || 'file' === type || 'SELECT' === $(fields[0]).get(0).tagName) ? 'change' : that._changeEvent,\n                                trigger = that.options.fields[field].trigger || that.options.trigger || event,\n                                events  = $.map(trigger.split(' '), function(item) {\n                                    return item + '.live.bv';\n                                }).join(' ');\n\n                            fields.off(events).on(events, function() {\n                                if (that._exceedThreshold($(this))) {\n                                    that.validateField($(this));\n                                }\n                            });\n                        }\n                    })(field);\n                }\n            }\n\n            var $invalidField = this.$invalidFields.eq(0);\n            if ($invalidField) {\n                // Activate the tab containing the invalid field if exists\n                var $tabPane = $invalidField.parents('.tab-pane'), tabId;\n                if ($tabPane && (tabId = $tabPane.attr('id'))) {\n                    $('a[href=\"#' + tabId + '\"][data-toggle=\"tab\"]').tab('show');\n                }\n\n                // Focus to the first invalid field\n                $invalidField.focus();\n            }\n        },\n\n        /**\n         * The default handler of success.form.bv event.\n         * It will be called when all the fields are valid\n         *\n         * @param {jQuery.Event} e The jQuery event object\n         */\n        _onSuccess: function(e) {\n            if (e.isDefaultPrevented()) {\n                return;\n            }\n\n            // Submit the form\n            this.disableSubmitButtons(true).defaultSubmit();\n        },\n\n        /**\n         * Called after validating a field element\n         *\n         * @param {jQuery} $field The field element\n         * @param {String} [validatorName] The validator name\n         */\n        _onFieldValidated: function($field, validatorName) {\n            var field         = $field.attr('data-bv-field'),\n                validators    = this.options.fields[field].validators,\n                counter       = {},\n                numValidators = 0,\n                data          = {\n                    bv: this,\n                    field: field,\n                    element: $field,\n                    validator: validatorName\n                };\n\n            // Trigger an event after given validator completes\n            if (validatorName) {\n                switch ($field.data('bv.result.' + validatorName)) {\n                    case this.STATUS_INVALID:\n                        $field.trigger($.Event('error.validator.bv'), data);\n                        break;\n                    case this.STATUS_VALID:\n                        $field.trigger($.Event('success.validator.bv'), data);\n                        break;\n                    default:\n                        break;\n                }\n            }\n\n            counter[this.STATUS_NOT_VALIDATED] = 0;\n            counter[this.STATUS_VALIDATING]    = 0;\n            counter[this.STATUS_INVALID]       = 0;\n            counter[this.STATUS_VALID]         = 0;\n\n            for (var v in validators) {\n                if (validators[v].enabled === false) {\n                    continue;\n                }\n\n                numValidators++;\n                var result = $field.data('bv.result.' + v);\n                if (result) {\n                    counter[result]++;\n                }\n            }\n\n            if (counter[this.STATUS_VALID] === numValidators) {\n                // Remove from the list of invalid fields\n                this.$invalidFields = this.$invalidFields.not($field);\n\n                $field.trigger($.Event('success.field.bv'), data);\n            }\n            // If all validators are completed and there is at least one validator which doesn't pass\n            else if (counter[this.STATUS_NOT_VALIDATED] === 0 && counter[this.STATUS_VALIDATING] === 0 && counter[this.STATUS_INVALID] > 0) {\n                // Add to the list of invalid fields\n                this.$invalidFields = this.$invalidFields.add($field);\n\n                $field.trigger($.Event('error.field.bv'), data);\n            }\n        },\n\n        // ---\n        // Public methods\n        // ---\n\n        /**\n         * Retrieve the field elements by given name\n         *\n         * @param {String} field The field name\n         * @returns {null|jQuery[]}\n         */\n        getFieldElements: function(field) {\n            if (!this._cacheFields[field]) {\n                this._cacheFields[field] = (this.options.fields[field] && this.options.fields[field].selector)\n                                         ? $(this.options.fields[field].selector)\n                                         : this.$form.find('[name=\"' + field + '\"]');\n            }\n\n            return this._cacheFields[field];\n        },\n\n        /**\n         * Disable/enable submit buttons\n         *\n         * @param {Boolean} disabled Can be true or false\n         * @returns {BootstrapValidator}\n         */\n        disableSubmitButtons: function(disabled) {\n            if (!disabled) {\n                this.$form.find(this.options.submitButtons).removeAttr('disabled');\n            } else if (this.options.live !== 'disabled') {\n                // Don't disable if the live validating mode is disabled\n                this.$form.find(this.options.submitButtons).attr('disabled', 'disabled');\n            }\n\n            return this;\n        },\n\n        /**\n         * Validate the form\n         *\n         * @returns {BootstrapValidator}\n         */\n        validate: function() {\n            if (!this.options.fields) {\n                return this;\n            }\n            this.disableSubmitButtons(true);\n\n            for (var field in this.options.fields) {\n                this.validateField(field);\n            }\n\n            this._submit();\n\n            return this;\n        },\n\n        /**\n         * Validate given field\n         *\n         * @param {String|jQuery} field The field name or field element\n         * @returns {BootstrapValidator}\n         */\n        validateField: function(field) {\n            var fields = $([]);\n            switch (typeof field) {\n                case 'object':\n                    fields = field;\n                    field  = field.attr('data-bv-field');\n                    break;\n                case 'string':\n                    fields = this.getFieldElements(field);\n                    break;\n                default:\n                    break;\n            }\n\n            if (this.options.fields[field] && this.options.fields[field].enabled === false) {\n                return this;\n            }\n\n            var that       = this,\n                type       = fields.attr('type'),\n                total      = ('radio' === type || 'checkbox' === type) ? 1 : fields.length,\n                updateAll  = ('radio' === type || 'checkbox' === type),\n                validators = this.options.fields[field].validators,\n                validatorName,\n                validateResult;\n\n            for (var i = 0; i < total; i++) {\n                var $field = fields.eq(i);\n                if (this._isExcluded($field)) {\n                    continue;\n                }\n\n                for (validatorName in validators) {\n                    if ($field.data('bv.dfs.' + validatorName)) {\n                        $field.data('bv.dfs.' + validatorName).reject();\n                    }\n\n                    // Don't validate field if it is already done\n                    var result = $field.data('bv.result.' + validatorName);\n                    if (result === this.STATUS_VALID || result === this.STATUS_INVALID || validators[validatorName].enabled === false) {\n                        this._onFieldValidated($field, validatorName);\n                        continue;\n                    }\n\n                    $field.data('bv.result.' + validatorName, this.STATUS_VALIDATING);\n                    validateResult = $.fn.bootstrapValidator.validators[validatorName].validate(this, $field, validators[validatorName]);\n\n                    // validateResult can be a $.Deferred object ...\n                    if ('object' === typeof validateResult && validateResult.resolve) {\n                        this.updateStatus(updateAll ? field : $field, this.STATUS_VALIDATING, validatorName);\n                        $field.data('bv.dfs.' + validatorName, validateResult);\n\n                        validateResult.done(function($f, v, isValid, message) {\n                            // v is validator name\n                            $f.removeData('bv.dfs.' + v);\n                            if (message) {\n                                that.updateMessage($f, v, message);\n                            }\n\n                            that.updateStatus(updateAll ? $f.attr('data-bv-field') : $f, isValid ? that.STATUS_VALID : that.STATUS_INVALID, v);\n\n                            if (isValid && that._submitIfValid === true) {\n                                // If a remote validator returns true and the form is ready to submit, then do it\n                                that._submit();\n                            }\n                        });\n                    }\n                    // ... or object { valid: true/false, message: 'dynamic message' }\n                    else if ('object' === typeof validateResult && validateResult.valid !== undefined && validateResult.message !== undefined) {\n                        this.updateMessage(updateAll ? field : $field, validatorName, validateResult.message);\n                        this.updateStatus(updateAll ? field : $field, validateResult.valid ? this.STATUS_VALID : this.STATUS_INVALID, validatorName);\n                    }\n                    // ... or a boolean value\n                    else if ('boolean' === typeof validateResult) {\n                        this.updateStatus(updateAll ? field : $field, validateResult ? this.STATUS_VALID : this.STATUS_INVALID, validatorName);\n                    }\n                }\n            }\n\n            return this;\n        },\n\n        /**\n         * Update the error message\n         *\n         * @param {String|jQuery} field The field name or field element\n         * @param {String} validator The validator name\n         * @param {String} message The message\n         * @returns {BootstrapValidator}\n         */\n        updateMessage: function(field, validator, message) {\n            var $fields = $([]);\n            switch (typeof field) {\n                case 'object':\n                    $fields = field;\n                    field   = field.attr('data-bv-field');\n                    break;\n                case 'string':\n                    $fields = this.getFieldElements(field);\n                    break;\n                default:\n                    break;\n            }\n\n            $fields.each(function() {\n                $(this).data('bv.messages').find('.help-block[data-bv-validator=\"' + validator + '\"][data-bv-for=\"' + field + '\"]').html(message);\n            });\n        },\n        \n        /**\n         * Update all validating results of field\n         *\n         * @param {String|jQuery} field The field name or field element\n         * @param {String} status The status. Can be 'NOT_VALIDATED', 'VALIDATING', 'INVALID' or 'VALID'\n         * @param {String} [validatorName] The validator name. If null, the method updates validity result for all validators\n         * @returns {BootstrapValidator}\n         */\n        updateStatus: function(field, status, validatorName) {\n            var fields = $([]);\n            switch (typeof field) {\n                case 'object':\n                    fields = field;\n                    field  = field.attr('data-bv-field');\n                    break;\n                case 'string':\n                    fields = this.getFieldElements(field);\n                    break;\n                default:\n                    break;\n            }\n\n            if (status === this.STATUS_NOT_VALIDATED) {\n                // Reset the flag\n                this._submitIfValid = false;\n            }\n\n            var that  = this,\n                type  = fields.attr('type'),\n                group = this.options.fields[field].group || this.options.group,\n                total = ('radio' === type || 'checkbox' === type) ? 1 : fields.length;\n\n            for (var i = 0; i < total; i++) {\n                var $field       = fields.eq(i);\n                if (this._isExcluded($field)) {\n                    continue;\n                }\n\n                var $parent      = $field.parents(group),\n                    $message     = $field.data('bv.messages'),\n                    $allErrors   = $message.find('.help-block[data-bv-validator][data-bv-for=\"' + field + '\"]'),\n                    $errors      = validatorName ? $allErrors.filter('[data-bv-validator=\"' + validatorName + '\"]') : $allErrors,\n                    $icon        = $parent.find('.form-control-feedback[data-bv-icon-for=\"' + field + '\"]'),\n                    container    = this.options.fields[field].container || this.options.container,\n                    isValidField = null;\n\n                // Update status\n                if (validatorName) {\n                    $field.data('bv.result.' + validatorName, status);\n                } else {\n                    for (var v in this.options.fields[field].validators) {\n                        $field.data('bv.result.' + v, status);\n                    }\n                }\n\n                // Show/hide error elements and feedback icons\n                $errors.attr('data-bv-result', status);\n\n                // Determine the tab containing the element\n                var $tabPane = $field.parents('.tab-pane'),\n                    tabId, $tab;\n                if ($tabPane && (tabId = $tabPane.attr('id'))) {\n                    $tab = $('a[href=\"#' + tabId + '\"][data-toggle=\"tab\"]').parent();\n                }\n\n                switch (status) {\n                    case this.STATUS_VALIDATING:\n                        isValidField = null;\n                        this.disableSubmitButtons(true);\n                        $parent.removeClass('has-success').removeClass('has-error');\n                        if ($icon) {\n                            $icon.removeClass(this.options.feedbackIcons.valid).removeClass(this.options.feedbackIcons.invalid).addClass(this.options.feedbackIcons.validating).show();\n                        }\n                        if ($tab) {\n                            $tab.removeClass('bv-tab-success').removeClass('bv-tab-error');\n                        }\n                        break;\n\n                    case this.STATUS_INVALID:\n                        isValidField = false;\n                        this.disableSubmitButtons(true);\n                        $parent.removeClass('has-success').addClass('has-error');\n                        if ($icon) {\n                            $icon.removeClass(this.options.feedbackIcons.valid).removeClass(this.options.feedbackIcons.validating).addClass(this.options.feedbackIcons.invalid).show();\n                        }\n                        if ($tab) {\n                            $tab.removeClass('bv-tab-success').addClass('bv-tab-error');\n                        }\n                        break;\n\n                    case this.STATUS_VALID:\n                        // If the field is valid (passes all validators)\n                        isValidField = ($allErrors.filter('[data-bv-result=\"' + this.STATUS_NOT_VALIDATED +'\"]').length === 0)\n                                     ? ($allErrors.filter('[data-bv-result=\"' + this.STATUS_VALID +'\"]').length === $allErrors.length)  // All validators are completed\n                                     : null;                                                                                            // There are some validators that have not done\n                        if (isValidField !== null) {\n                            this.disableSubmitButtons(this.$submitButton ? !this.isValid() : !isValidField);\n                            if ($icon) {\n                                $icon\n                                    .removeClass(this.options.feedbackIcons.invalid).removeClass(this.options.feedbackIcons.validating).removeClass(this.options.feedbackIcons.valid)\n                                    .addClass(isValidField ? this.options.feedbackIcons.valid : this.options.feedbackIcons.invalid)\n                                    .show();\n                            }\n                        }\n\n                        $parent.removeClass('has-error has-success').addClass(this.isValidContainer($parent) ? 'has-success' : 'has-error');\n                        if ($tab) {\n                            $tab.removeClass('bv-tab-success').removeClass('bv-tab-error').addClass(this.isValidContainer($tabPane) ? 'bv-tab-success' : 'bv-tab-error');\n                        }\n                        break;\n\n                    case this.STATUS_NOT_VALIDATED:\n                    /* falls through */\n                    default:\n                        isValidField = null;\n                        this.disableSubmitButtons(false);\n                        $parent.removeClass('has-success').removeClass('has-error');\n                        if ($icon) {\n                            $icon.removeClass(this.options.feedbackIcons.valid).removeClass(this.options.feedbackIcons.invalid).removeClass(this.options.feedbackIcons.validating).hide();\n                        }\n                        if ($tab) {\n                            $tab.removeClass('bv-tab-success').removeClass('bv-tab-error');\n                        }\n                        break;\n                }\n\n                switch (true) {\n                    // Only show the first error message if it is placed inside a tooltip ...\n                    case ($icon && 'tooltip' === container):\n                        (isValidField === false)\n                                ? $icon.css('cursor', 'pointer').tooltip('destroy').tooltip({\n                                    html: true,\n                                    placement: 'top',\n                                    title: $allErrors.filter('[data-bv-result=\"' + that.STATUS_INVALID + '\"]').eq(0).html()\n                                })\n                                : $icon.css('cursor', '').tooltip('destroy');\n                        break;\n                    // ... or popover\n                    case ($icon && 'popover' === container):\n                        (isValidField === false)\n                                ? $icon.css('cursor', 'pointer').popover('destroy').popover({\n                                    content: $allErrors.filter('[data-bv-result=\"' + that.STATUS_INVALID + '\"]').eq(0).html(),\n                                    html: true,\n                                    placement: 'top',\n                                    trigger: 'hover click'\n                                })\n                                : $icon.css('cursor', '').popover('destroy');\n                        break;\n                    default:\n                        (status === this.STATUS_INVALID) ? $errors.show() : $errors.hide();\n                        break;\n                }\n\n                // Trigger an event\n                $field.trigger($.Event('status.field.bv'), {\n                    bv: this,\n                    field: field,\n                    element: $field,\n                    status: status\n                });\n                this._onFieldValidated($field, validatorName);\n            }\n\n            return this;\n        },\n\n        /**\n         * Check the form validity\n         *\n         * @returns {Boolean}\n         */\n        isValid: function() {\n            for (var field in this.options.fields) {\n                if (!this.isValidField(field)) {\n                    return false;\n                }\n            }\n\n            return true;\n        },\n\n        /**\n         * Check if the field is valid or not\n         *\n         * @param {String|jQuery} field The field name or field element\n         * @returns {Boolean}\n         */\n        isValidField: function(field) {\n            var fields = $([]);\n            switch (typeof field) {\n                case 'object':\n                    fields = field;\n                    field  = field.attr('data-bv-field');\n                    break;\n                case 'string':\n                    fields = this.getFieldElements(field);\n                    break;\n                default:\n                    break;\n            }\n            if (fields.length === 0 || this.options.fields[field] === null || this.options.fields[field].enabled === false) {\n                return true;\n            }\n\n            var type  = fields.attr('type'),\n                total = ('radio' === type || 'checkbox' === type) ? 1 : fields.length,\n                $field, validatorName, status;\n            for (var i = 0; i < total; i++) {\n                $field = fields.eq(i);\n                if (this._isExcluded($field)) {\n                    continue;\n                }\n\n                for (validatorName in this.options.fields[field].validators) {\n                    if (this.options.fields[field].validators[validatorName].enabled === false) {\n                        continue;\n                    }\n\n                    status = $field.data('bv.result.' + validatorName);\n                    if (status !== this.STATUS_VALID) {\n                        return false;\n                    }\n                }\n            }\n\n            return true;\n        },\n\n        /**\n         * Check if all fields inside a given container are valid.\n         * It's useful when working with a wizard-like such as tab, collapse\n         *\n         * @param {String|jQuery} container The container selector or element\n         * @returns {Boolean}\n         */\n        isValidContainer: function(container) {\n            var that       = this,\n                map        = {},\n                $container = ('string' === typeof container) ? $(container) : container;\n            if ($container.length === 0) {\n                return true;\n            }\n\n            $container.find('[data-bv-field]').each(function() {\n                var $field = $(this),\n                    field  = $field.attr('data-bv-field');\n                if (!that._isExcluded($field) && !map[field]) {\n                    map[field] = $field;\n                }\n            });\n\n            for (var field in map) {\n                var $f = map[field];\n                if ($f.data('bv.messages')\n                      .find('.help-block[data-bv-validator][data-bv-for=\"' + field + '\"]')\n                      .filter(function() {\n                          var v = $(this).attr('data-bv-validator'),\n                              f = $(this).attr('data-bv-for');\n                          return (that.options.fields[f].validators[v].enabled !== false\n                                && $f.data('bv.result.' + v) && $f.data('bv.result.' + v) !== that.STATUS_VALID);\n                      })\n                      .length !== 0)\n                {\n                    // The field is not valid\n                    return false;\n                }\n            }\n\n            return true;\n        },\n\n        /**\n         * Submit the form using default submission.\n         * It also does not perform any validations when submitting the form\n         */\n        defaultSubmit: function() {\n            if (this.$submitButton) {\n                // Create hidden input to send the submit buttons\n                $('<input/>')\n                    .attr('type', 'hidden')\n                    .attr('data-bv-submit-hidden', '')\n                    .attr('name', this.$submitButton.attr('name'))\n                    .val(this.$submitButton.val())\n                    .appendTo(this.$form);\n            }\n\n            // Submit form\n            this.$form.off('submit.bv').submit();\n        },\n\n        // ---\n        // Useful APIs which aren't used internally\n        // ---\n\n        /**\n         * Get the list of invalid fields\n         *\n         * @returns {jQuery[]}\n         */\n        getInvalidFields: function() {\n            return this.$invalidFields;\n        },\n\n        /**\n         * Returns the clicked submit button\n         *\n         * @returns {jQuery}\n         */\n        getSubmitButton: function() {\n            return this.$submitButton;\n        },\n\n        /**\n         * Get the error messages\n         *\n         * @param {String|jQuery} [field] The field name or field element\n         * If the field is not defined, the method returns all error messages of all fields\n         * @param {String} [validator] The name of validator\n         * If the validator is not defined, the method returns error messages of all validators\n         * @returns {String[]}\n         */\n        getMessages: function(field, validator) {\n            var that     = this,\n                messages = [],\n                $fields  = $([]);\n\n            switch (true) {\n                case (field && 'object' === typeof field):\n                    $fields = field;\n                    break;\n                case (field && 'string' === typeof field):\n                    var f = this.getFieldElements(field);\n                    if (f.length > 0) {\n                        var type = f.attr('type');\n                        $fields = ('radio' === type || 'checkbox' === type) ? f.eq(0) : f;\n                    }\n                    break;\n                default:\n                    $fields = this.$invalidFields;\n                    break;\n            }\n\n            var filter = validator ? '[data-bv-validator=\"' + validator + '\"]' : '';\n            $fields.each(function() {\n                messages = messages.concat(\n                    $(this)\n                        .data('bv.messages')\n                        .find('.help-block[data-bv-for=\"' + $(this).attr('data-bv-field') + '\"][data-bv-result=\"' + that.STATUS_INVALID + '\"]' + filter)\n                        .map(function() {\n                            var v = $(this).attr('data-bv-validator'),\n                                f = $(this).attr('data-bv-for');\n                            return (that.options.fields[f].validators[v].enabled === false) ? '' : $(this).html();\n                        })\n                        .get()\n                );\n            });\n\n            return messages;\n        },\n\n        /**\n         * Get the field options\n         *\n         * @param {String|jQuery} [field] The field name or field element. If it is not set, the method returns the form options\n         * @param {String} [validator] The name of validator. It null, the method returns form options\n         * @param {String} [option] The option name\n         * @return {String|Object}\n         */\n        getOptions: function(field, validator, option) {\n            if (!field) {\n                return this.options;\n            }\n            if ('object' === typeof field) {\n                field = field.attr('data-bv-field');\n            }\n            if (!this.options.fields[field]) {\n                return null;\n            }\n\n            var options = this.options.fields[field];\n            if (!validator) {\n                return options;\n            }\n            if (!options.validators || !options.validators[validator]) {\n                return null;\n            }\n\n            return option ? options.validators[validator][option] : options.validators[validator];\n        },\n\n        /**\n         * Update the option of a specific validator\n         *\n         * @param {String|jQuery} field The field name or field element\n         * @param {String} validator The validator name\n         * @param {String} option The option name\n         * @param {String} value The value to set\n         * @returns {BootstrapValidator}\n         */\n        updateOption: function(field, validator, option, value) {\n            if ('object' === typeof field) {\n                field = field.attr('data-bv-field');\n            }\n            if (this.options.fields[field] && this.options.fields[field].validators[validator]) {\n                this.options.fields[field].validators[validator][option] = value;\n                this.updateStatus(field, this.STATUS_NOT_VALIDATED, validator);\n            }\n\n            return this;\n        },\n\n        /**\n         * Add a new field\n         *\n         * @param {String|jQuery} field The field name or field element\n         * @param {Object} [options] The validator rules\n         * @returns {BootstrapValidator}\n         */\n        addField: function(field, options) {\n            var fields = $([]);\n            switch (typeof field) {\n                case 'object':\n                    fields = field;\n                    field  = field.attr('data-bv-field') || field.attr('name');\n                    break;\n                case 'string':\n                    delete this._cacheFields[field];\n                    fields = this.getFieldElements(field);\n                    break;\n                default:\n                    break;\n            }\n\n            fields.attr('data-bv-field', field);\n\n            var type  = fields.attr('type'),\n                total = ('radio' === type || 'checkbox' === type) ? 1 : fields.length;\n\n            for (var i = 0; i < total; i++) {\n                var $field = fields.eq(i);\n\n                // Try to parse the options from HTML attributes\n                var opts = this._parseOptions($field);\n                opts = (opts === null) ? options : $.extend(true, options, opts);\n\n                this.options.fields[field] = $.extend(true, this.options.fields[field], opts);\n\n                // Update the cache\n                this._cacheFields[field] = this._cacheFields[field] ? this._cacheFields[field].add($field) : $field;\n\n                // Init the element\n                this._initField(('checkbox' === type || 'radio' === type) ? field : $field);\n            }\n\n            this.disableSubmitButtons(false);\n            // Trigger an event\n            this.$form.trigger($.Event('added.field.bv'), {\n                field: field,\n                element: fields,\n                options: this.options.fields[field]\n            });\n\n            return this;\n        },\n\n        /**\n         * Remove a given field\n         *\n         * @param {String|jQuery} field The field name or field element\n         * @returns {BootstrapValidator}\n         */\n        removeField: function(field) {\n            var fields = $([]);\n            switch (typeof field) {\n                case 'object':\n                    fields = field;\n                    field  = field.attr('data-bv-field') || field.attr('name');\n                    fields.attr('data-bv-field', field);\n                    break;\n                case 'string':\n                    fields = this.getFieldElements(field);\n                    break;\n                default:\n                    break;\n            }\n\n            if (fields.length === 0) {\n                return this;\n            }\n\n            var type  = fields.attr('type'),\n                total = ('radio' === type || 'checkbox' === type) ? 1 : fields.length;\n\n            for (var i = 0; i < total; i++) {\n                var $field = fields.eq(i);\n\n                // Remove from the list of invalid fields\n                this.$invalidFields = this.$invalidFields.not($field);\n\n                // Update the cache\n                this._cacheFields[field] = this._cacheFields[field].not($field);\n            }\n\n            if (!this._cacheFields[field] || this._cacheFields[field].length === 0) {\n                delete this.options.fields[field];\n            }\n            if ('checkbox' === type || 'radio' === type) {\n                this._initField(field);\n            }\n\n            this.disableSubmitButtons(false);\n            // Trigger an event\n            this.$form.trigger($.Event('removed.field.bv'), {\n                field: field,\n                element: fields\n            });\n\n            return this;\n        },\n\n        /**\n         * Reset given field\n         *\n         * @param {String|jQuery} field The field name or field element\n         * @param {Boolean} [resetValue] If true, the method resets field value to empty or remove checked/selected attribute (for radio/checkbox)\n         * @returns {BootstrapValidator}\n         */\n        resetField: function(field, resetValue) {\n            var $fields = $([]);\n            switch (typeof field) {\n                case 'object':\n                    $fields = field;\n                    field   = field.attr('data-bv-field');\n                    break;\n                case 'string':\n                    $fields = this.getFieldElements(field);\n                    break;\n                default:\n                    break;\n            }\n\n            var total = $fields.length;\n            if (this.options.fields[field]) {\n                for (var i = 0; i < total; i++) {\n                    for (var validator in this.options.fields[field].validators) {\n                        $fields.eq(i).removeData('bv.dfs.' + validator);\n                    }\n                }\n            }\n\n            // Mark field as not validated yet\n            this.updateStatus(field, this.STATUS_NOT_VALIDATED);\n\n            if (resetValue) {\n                var type = $fields.attr('type');\n                ('radio' === type || 'checkbox' === type) ? $fields.removeAttr('checked').removeAttr('selected') : $fields.val('');\n            }\n\n            return this;\n        },\n\n        /**\n         * Reset the form\n         *\n         * @param {Boolean} [resetValue] If true, the method resets field value to empty or remove checked/selected attribute (for radio/checkbox)\n         * @returns {BootstrapValidator}\n         */\n        resetForm: function(resetValue) {\n            for (var field in this.options.fields) {\n                this.resetField(field, resetValue);\n            }\n\n            this.$invalidFields = $([]);\n            this.$submitButton  = null;\n\n            // Enable submit buttons\n            this.disableSubmitButtons(false);\n\n            return this;\n        },\n\n        /**\n         * Revalidate given field\n         * It's used when you need to revalidate the field which its value is updated by other plugin\n         *\n         * @param {String|jQuery} field The field name of field element\n         * @returns {BootstrapValidator}\n         */\n        revalidateField: function(field) {\n            this.updateStatus(field, this.STATUS_NOT_VALIDATED)\n                .validateField(field);\n\n            return this;\n        },\n\n        /**\n         * Enable/Disable all validators to given field\n         *\n         * @param {String} field The field name\n         * @param {Boolean} enabled Enable/Disable field validators\n         * @param {String} [validatorName] The validator name. If null, all validators will be enabled/disabled\n         * @returns {BootstrapValidator}\n         */\n        enableFieldValidators: function(field, enabled, validatorName) {\n            var validators = this.options.fields[field].validators;\n\n            // Enable/disable particular validator\n            if (validatorName\n                && validators\n                && validators[validatorName] && validators[validatorName].enabled !== enabled)\n            {\n                this.options.fields[field].validators[validatorName].enabled = enabled;\n                this.updateStatus(field, this.STATUS_NOT_VALIDATED, validatorName);\n            }\n            // Enable/disable all validators\n            else if (!validatorName && this.options.fields[field].enabled !== enabled) {\n                this.options.fields[field].enabled = enabled;\n                for (var v in validators) {\n                    this.enableFieldValidators(field, enabled, v);\n                }\n            }\n\n            return this;\n        },\n\n        /**\n         * Some validators have option which its value is dynamic.\n         * For example, the zipCode validator has the country option which might be changed dynamically by a select element.\n         *\n         * @param {jQuery|String} field The field name or element\n         * @param {String|Function} option The option which can be determined by:\n         * - a string\n         * - name of field which defines the value\n         * - name of function which returns the value\n         * - a function returns the value\n         *\n         * The callback function has the format of\n         *      callback: function(value, validator, $field) {\n         *          // value is the value of field\n         *          // validator is the BootstrapValidator instance\n         *          // $field is the field element\n         *      }\n         *\n         * @returns {String}\n         */\n        getDynamicOption: function(field, option) {\n            var $field = ('string' === typeof field) ? this.getFieldElements(field) : field,\n                value  = $field.val();\n\n            // Option can be determined by\n            // ... a function\n            if ('function' === typeof option) {\n                return $.fn.bootstrapValidator.helpers.call(option, [value, this, $field]);\n            }\n            // ... value of other field\n            else if ('string' === typeof option) {\n                var $f = this.getFieldElements(option);\n                if ($f.length) {\n                    return $f.val();\n                }\n                // ... return value of callback\n                else {\n                    return $.fn.bootstrapValidator.helpers.call(option, [value, this, $field]);\n                }\n            }\n\n            return null;\n        },\n\n        /**\n         * Destroy the plugin\n         * It will remove all error messages, feedback icons and turn off the events\n         */\n        destroy: function() {\n            var field, fields, $field, validator, $icon, container, group;\n            for (field in this.options.fields) {\n                fields    = this.getFieldElements(field);\n                container = this.options.fields[field].container || this.options.container,\n                group     = this.options.fields[field].group || this.options.group;\n                for (var i = 0; i < fields.length; i++) {\n                    $field = fields.eq(i);\n                    $field\n                        // Remove all error messages\n                        .data('bv.messages')\n                            .find('.help-block[data-bv-validator][data-bv-for=\"' + field + '\"]').remove().end()\n                            .end()\n                        .removeData('bv.messages')\n                        // Remove feedback classes\n                        .parents(group)\n                            .removeClass('has-feedback has-error has-success')\n                            .end()\n                        // Turn off events\n                        .off('.bv')\n                        .removeAttr('data-bv-field');\n\n                    // Remove feedback icons, tooltip/popover container\n                    $icon = $field.parents(group).find('i[data-bv-icon-for=\"' + field + '\"]');\n                    if ($icon) {\n                        switch (container) {\n                            case 'tooltip':\n                                $icon.tooltip('destroy').remove();\n                                break;\n                            case 'popover':\n                                $icon.popover('destroy').remove();\n                                break;\n                            default:\n                                $icon.remove();\n                                break;\n                        }\n                    }\n\n                    for (validator in this.options.fields[field].validators) {\n                        if ($field.data('bv.dfs.' + validator)) {\n                            $field.data('bv.dfs.' + validator).reject();\n                        }\n                        $field.removeData('bv.result.' + validator).removeData('bv.dfs.' + validator);\n                    }\n                }\n            }\n\n            // Enable submit buttons\n            this.disableSubmitButtons(false);\n\n            this.$form\n                .removeClass(this.options.elementClass)\n                .off('.bv')\n                .removeData('bootstrapValidator')\n                // Remove generated hidden elements\n                .find('[data-bv-submit-hidden]').remove();\n        }\n    };\n\n    // Plugin definition\n    $.fn.bootstrapValidator = function(option) {\n        var params = arguments;\n        return this.each(function() {\n            var $this   = $(this),\n                data    = $this.data('bootstrapValidator'),\n                options = 'object' === typeof option && option;\n            if (!data) {\n                data = new BootstrapValidator(this, options);\n                $this.data('bootstrapValidator', data);\n            }\n\n            // Allow to call plugin method\n            if ('string' === typeof option) {\n                data[option].apply(data, Array.prototype.slice.call(params, 1));\n            }\n        });\n    };\n\n    // The default options\n    $.fn.bootstrapValidator.DEFAULT_OPTIONS = {\n        // The form CSS class\n        elementClass: 'bv-form',\n\n        // Default invalid message\n        message: 'This value is not valid',\n\n        // The CSS selector for indicating the element consists the field\n        // By default, each field is placed inside the <div class=\"form-group\"></div>\n        // You should adjust this option if your form group consists of many fields which not all of them need to be validated\n        group: '.form-group',\n\n        //The error messages container. It can be:\n        // - 'tooltip' if you want to use Bootstrap tooltip to show error messages\n        // - 'popover' if you want to use Bootstrap popover to show error messages\n        // - a CSS selector indicating the container\n        // In the first two cases, since the tooltip/popover should be small enough, the plugin only shows only one error message\n        // You also can define the message container for particular field\n        container: null,\n\n        // The field will not be live validated if its length is less than this number of characters\n        threshold: null,\n\n        // Indicate fields which won't be validated\n        // By default, the plugin will not validate the following kind of fields:\n        // - disabled\n        // - hidden\n        // - invisible\n        //\n        // The setting consists of jQuery filters. Accept 3 formats:\n        // - A string. Use a comma to separate filter\n        // - An array. Each element is a filter\n        // - An array. Each element can be a callback function\n        //      function($field, validator) {\n        //          $field is jQuery object representing the field element\n        //          validator is the BootstrapValidator instance\n        //          return true or false;\n        //      }\n        //\n        // The 3 following settings are equivalent:\n        //\n        // 1) ':disabled, :hidden, :not(:visible)'\n        // 2) [':disabled', ':hidden', ':not(:visible)']\n        // 3) [':disabled', ':hidden', function($field) {\n        //        return !$field.is(':visible');\n        //    }]\n        excluded: [':disabled', ':hidden', ':not(:visible)'],\n\n        // Shows ok/error/loading icons based on the field validity.\n        // This feature requires Bootstrap v3.1.0 or later (http://getbootstrap.com/css/#forms-control-validation).\n        // Since Bootstrap doesn't provide any methods to know its version, this option cannot be on/off automatically.\n        // In other word, to use this feature you have to upgrade your Bootstrap to v3.1.0 or later.\n        //\n        // Examples:\n        // - Use Glyphicons icons:\n        //  feedbackIcons: {\n        //      valid: 'glyphicon glyphicon-ok',\n        //      invalid: 'glyphicon glyphicon-remove',\n        //      validating: 'glyphicon glyphicon-refresh'\n        //  }\n        // - Use FontAwesome icons:\n        //  feedbackIcons: {\n        //      valid: 'fa fa-check',\n        //      invalid: 'fa fa-times',\n        //      validating: 'fa fa-refresh'\n        //  }\n        feedbackIcons: {\n            valid:      null,\n            invalid:    null,\n            validating: null\n        },\n\n        // The submit buttons selector\n        // These buttons will be disabled to prevent the valid form from multiple submissions\n        submitButtons: '[type=\"submit\"]',\n\n        // Live validating option\n        // Can be one of 3 values:\n        // - enabled: The plugin validates fields as soon as they are changed\n        // - disabled: Disable the live validating. The error messages are only shown after the form is submitted\n        // - submitted: The live validating is enabled after the form is submitted\n        live: 'enabled',\n\n        // Map the field name with validator rules\n        fields: null\n    };\n\n    // Available validators\n    $.fn.bootstrapValidator.validators  = {};\n\n    // i18n\n    $.fn.bootstrapValidator.i18n        = {};\n\n    $.fn.bootstrapValidator.Constructor = BootstrapValidator;\n\n    // Helper methods, which can be used in validator class\n    $.fn.bootstrapValidator.helpers = {\n        /**\n         * Execute a callback function\n         *\n         * @param {String|Function} functionName Can be\n         * - name of global function\n         * - name of namespace function (such as A.B.C)\n         * - a function\n         * @param {Array} args The callback arguments\n         */\n        call: function(functionName, args) {\n            if ('function' === typeof functionName) {\n                return functionName.apply(this, args);\n            } else if ('string' === typeof functionName) {\n                if ('()' === functionName.substring(functionName.length - 2)) {\n                    functionName = functionName.substring(0, functionName.length - 2);\n                }\n                var ns      = functionName.split('.'),\n                    func    = ns.pop(),\n                    context = window;\n                for (var i = 0; i < ns.length; i++) {\n                    context = context[ns[i]];\n                }\n                return context[func].apply(this, args);\n            }\n        },\n\n        /**\n         * Format a string\n         * It's used to format the error message\n         * format('The field must between %s and %s', [10, 20]) = 'The field must between 10 and 20'\n         *\n         * @param {String} message\n         * @param {Array} parameters\n         * @returns {String}\n         */\n        format: function(message, parameters) {\n            if (!$.isArray(parameters)) {\n                parameters = [parameters];\n            }\n\n            for (var i in parameters) {\n                message = message.replace('%s', parameters[i]);\n            }\n\n            return message;\n        },\n\n        /**\n         * Validate a date\n         *\n         * @param {Number} year The full year in 4 digits\n         * @param {Number} month The month number\n         * @param {Number} day The day number\n         * @param {Boolean} [notInFuture] If true, the date must not be in the future\n         * @returns {Boolean}\n         */\n        date: function(year, month, day, notInFuture) {\n            if (isNaN(year) || isNaN(month) || isNaN(day)) {\n                return false;\n            }\n\n            day   = parseInt(day, 10);\n            month = parseInt(month, 10);\n            year  = parseInt(year, 10);\n\n            if (year < 1000 || year > 9999 || month <= 0 || month > 12) {\n                return false;\n            }\n            var numDays = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n            // Update the number of days in Feb of leap year\n            if (year % 400 === 0 || (year % 100 !== 0 && year % 4 === 0)) {\n                numDays[1] = 29;\n            }\n\n            // Check the day\n            if (day <= 0 || day > numDays[month - 1]) {\n                return false;\n            }\n\n            if (notInFuture === true) {\n                var currentDate  = new Date(),\n                    currentYear  = currentDate.getFullYear(),\n                    currentMonth = currentDate.getMonth(),\n                    currentDay   = currentDate.getDate();\n                return (year < currentYear\n                        || (year === currentYear && month - 1 < currentMonth)\n                        || (year === currentYear && month - 1 === currentMonth && day < currentDay));\n            }\n\n            return true;\n        },\n\n        /**\n         * Implement Luhn validation algorithm\n         * Credit to https://gist.github.com/ShirtlessKirk/2134376\n         *\n         * @see http://en.wikipedia.org/wiki/Luhn\n         * @param {String} value\n         * @returns {Boolean}\n         */\n        luhn: function(value) {\n            var length  = value.length,\n                mul     = 0,\n                prodArr = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 2, 4, 6, 8, 1, 3, 5, 7, 9]],\n                sum     = 0;\n\n            while (length--) {\n                sum += prodArr[mul][parseInt(value.charAt(length), 10)];\n                mul ^= 1;\n            }\n\n            return (sum % 10 === 0 && sum > 0);\n        },\n\n        /**\n         * Implement modulus 11, 10 (ISO 7064) algorithm\n         *\n         * @param {String} value\n         * @returns {Boolean}\n         */\n        mod11And10: function(value) {\n            var check  = 5,\n                length = value.length;\n            for (var i = 0; i < length; i++) {\n                check = (((check || 10) * 2) % 11 + parseInt(value.charAt(i), 10)) % 10;\n            }\n            return (check === 1);\n        },\n\n        /**\n         * Implements Mod 37, 36 (ISO 7064) algorithm\n         * Usages:\n         * mod37And36('A12425GABC1234002M')\n         * mod37And36('002006673085', '0123456789')\n         *\n         * @param {String} value\n         * @param {String} [alphabet]\n         * @returns {Boolean}\n         */\n        mod37And36: function(value, alphabet) {\n            alphabet = alphabet || '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';\n            var modulus = alphabet.length,\n                length  = value.length,\n                check   = Math.floor(modulus / 2);\n            for (var i = 0; i < length; i++) {\n                check = (((check || modulus) * 2) % (modulus + 1) + alphabet.indexOf(value.charAt(i))) % modulus;\n            }\n            return (check === 1);\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.base64 = $.extend($.fn.bootstrapValidator.i18n.base64 || {}, {\n        'default': 'Please enter a valid base 64 encoded'\n    });\n\n    $.fn.bootstrapValidator.validators.base64 = {\n        /**\n         * Return true if the input value is a base 64 encoded string.\n         *\n         * @param {BootstrapValidator} validator The validator plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} options Can consist of the following keys:\n         * - message: The invalid message\n         * @returns {Boolean}\n         */\n        validate: function(validator, $field, options) {\n            var value = $field.val();\n            if (value === '') {\n                return true;\n            }\n\n            return /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{4})$/.test(value);\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.between = $.extend($.fn.bootstrapValidator.i18n.between || {}, {\n        'default': 'Please enter a value between %s and %s',\n        notInclusive: 'Please enter a value between %s and %s strictly'\n    });\n\n    $.fn.bootstrapValidator.validators.between = {\n        html5Attributes: {\n            message: 'message',\n            min: 'min',\n            max: 'max',\n            inclusive: 'inclusive'\n        },\n\n        enableByHtml5: function($field) {\n            if ('range' === $field.attr('type')) {\n                return {\n                    min: $field.attr('min'),\n                    max: $field.attr('max')\n                };\n            }\n\n            return false;\n        },\n\n        /**\n         * Return true if the input value is between (strictly or not) two given numbers\n         *\n         * @param {BootstrapValidator} validator The validator plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} options Can consist of the following keys:\n         * - min\n         * - max\n         *\n         * The min, max keys define the number which the field value compares to. min, max can be\n         *      - A number\n         *      - Name of field which its value defines the number\n         *      - Name of callback function that returns the number\n         *      - A callback function that returns the number\n         *\n         * - inclusive [optional]: Can be true or false. Default is true\n         * - message: The invalid message\n         * @returns {Boolean|Object}\n         */\n        validate: function(validator, $field, options) {\n            var value = $field.val();\n            if (value === '') {\n                return true;\n            }\n\n            var min = $.isNumeric(options.min) ? options.min : validator.getDynamicOption($field, options.min),\n                max = $.isNumeric(options.max) ? options.max : validator.getDynamicOption($field, options.max);\n\n            value = parseFloat(value);\n\t\t\treturn (options.inclusive === true || options.inclusive === undefined)\n                    ? {\n                        valid: value >= min && value <= max,\n                        message: $.fn.bootstrapValidator.helpers.format(options.message || $.fn.bootstrapValidator.i18n.between['default'], [min, max])\n                    }\n                    : {\n                        valid: value > min  && value <  max,\n                        message: $.fn.bootstrapValidator.helpers.format(options.message || $.fn.bootstrapValidator.i18n.between.notInclusive, [min, max])\n                    };\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.callback = $.extend($.fn.bootstrapValidator.i18n.callback || {}, {\n        'default': 'Please enter a valid value'\n    });\n\n    $.fn.bootstrapValidator.validators.callback = {\n        html5Attributes: {\n            message: 'message',\n            callback: 'callback'\n        },\n\n        /**\n         * Return result from the callback method\n         *\n         * @param {BootstrapValidator} validator The validator plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} options Can consist of the following keys:\n         * - callback: The callback method that passes 2 parameters:\n         *      callback: function(fieldValue, validator, $field) {\n         *          // fieldValue is the value of field\n         *          // validator is instance of BootstrapValidator\n         *          // $field is the field element\n         *      }\n         * - message: The invalid message\n         * @returns {Boolean|Deferred}\n         */\n        validate: function(validator, $field, options) {\n            var value = $field.val();\n\n            if (options.callback) {\n                var dfd      = new $.Deferred(),\n                    response = $.fn.bootstrapValidator.helpers.call(options.callback, [value, validator, $field]);\n                dfd.resolve($field, 'callback', 'boolean' === typeof response ? response : response.valid, 'object' === typeof response && response.message ? response.message : null);\n                return dfd;\n            }\n\n            return true;\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.choice = $.extend($.fn.bootstrapValidator.i18n.choice || {}, {\n        'default': 'Please enter a valid value',\n        less: 'Please choose %s options at minimum',\n        more: 'Please choose %s options at maximum',\n        between: 'Please choose %s - %s options'\n    });\n\n    $.fn.bootstrapValidator.validators.choice = {\n        html5Attributes: {\n            message: 'message',\n            min: 'min',\n            max: 'max'\n        },\n\n        /**\n         * Check if the number of checked boxes are less or more than a given number\n         *\n         * @param {BootstrapValidator} validator The validator plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} options Consists of following keys:\n         * - min\n         * - max\n         *\n         * At least one of two keys is required\n         * The min, max keys define the number which the field value compares to. min, max can be\n         *      - A number\n         *      - Name of field which its value defines the number\n         *      - Name of callback function that returns the number\n         *      - A callback function that returns the number\n         *\n         * - message: The invalid message\n         * @returns {Object}\n         */\n        validate: function(validator, $field, options) {\n            var numChoices = $field.is('select')\n                            ? validator.getFieldElements($field.attr('data-bv-field')).find('option').filter(':selected').length\n                            : validator.getFieldElements($field.attr('data-bv-field')).filter(':checked').length,\n                min        = options.min ? ($.isNumeric(options.min) ? options.min : validator.getDynamicOption($field, options.min)) : null,\n                max        = options.max ? ($.isNumeric(options.max) ? options.max : validator.getDynamicOption($field, options.max)) : null,\n                isValid    = true,\n                message    = options.message || $.fn.bootstrapValidator.i18n.choice['default'];\n\n            if ((min && numChoices < parseInt(min, 10)) || (max && numChoices > parseInt(max, 10))) {\n                isValid = false;\n            }\n\n            switch (true) {\n                case (!!min && !!max):\n                    message = $.fn.bootstrapValidator.helpers.format(options.message || $.fn.bootstrapValidator.i18n.choice.between, [parseInt(min, 10), parseInt(max, 10)]);\n                    break;\n\n                case (!!min):\n                    message = $.fn.bootstrapValidator.helpers.format(options.message || $.fn.bootstrapValidator.i18n.choice.less, parseInt(min, 10));\n                    break;\n\n                case (!!max):\n                    message = $.fn.bootstrapValidator.helpers.format(options.message || $.fn.bootstrapValidator.i18n.choice.more, parseInt(max, 10));\n                    break;\n\n                default:\n                    break;\n            }\n\n            return { valid: isValid, message: message };\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.creditCard = $.extend($.fn.bootstrapValidator.i18n.creditCard || {}, {\n        'default': 'Please enter a valid credit card number'\n    });\n\n    $.fn.bootstrapValidator.validators.creditCard = {\n        /**\n         * Return true if the input value is valid credit card number\n         * Based on https://gist.github.com/DiegoSalazar/4075533\n         *\n         * @param {BootstrapValidator} validator The validator plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} [options] Can consist of the following key:\n         * - message: The invalid message\n         * @returns {Boolean}\n         */\n        validate: function(validator, $field, options) {\n            var value = $field.val();\n            if (value === '') {\n                return true;\n            }\n\n            // Accept only digits, dashes or spaces\n            if (/[^0-9-\\s]+/.test(value)) {\n                return false;\n            }\n            value = value.replace(/\\D/g, '');\n\n            if (!$.fn.bootstrapValidator.helpers.luhn(value)) {\n                return false;\n            }\n\n            // Validate the card number based on prefix (IIN ranges) and length\n            var cards = {\n                AMERICAN_EXPRESS: {\n                    length: [15],\n                    prefix: ['34', '37']\n                },\n                DINERS_CLUB: {\n                    length: [14],\n                    prefix: ['300', '301', '302', '303', '304', '305', '36']\n                },\n                DINERS_CLUB_US: {\n                    length: [16],\n                    prefix: ['54', '55']\n                },\n                DISCOVER: {\n                    length: [16],\n                    prefix: ['6011', '622126', '622127', '622128', '622129', '62213',\n                             '62214', '62215', '62216', '62217', '62218', '62219',\n                             '6222', '6223', '6224', '6225', '6226', '6227', '6228',\n                             '62290', '62291', '622920', '622921', '622922', '622923',\n                             '622924', '622925', '644', '645', '646', '647', '648',\n                             '649', '65']\n                },\n                JCB: {\n                    length: [16],\n                    prefix: ['3528', '3529', '353', '354', '355', '356', '357', '358']\n                },\n                LASER: {\n                    length: [16, 17, 18, 19],\n                    prefix: ['6304', '6706', '6771', '6709']\n                },\n                MAESTRO: {\n                    length: [12, 13, 14, 15, 16, 17, 18, 19],\n                    prefix: ['5018', '5020', '5038', '6304', '6759', '6761', '6762', '6763', '6764', '6765', '6766']\n                },\n                MASTERCARD: {\n                    length: [16],\n                    prefix: ['51', '52', '53', '54', '55']\n                },\n                SOLO: {\n                    length: [16, 18, 19],\n                    prefix: ['6334', '6767']\n                },\n                UNIONPAY: {\n                    length: [16, 17, 18, 19],\n                    prefix: ['622126', '622127', '622128', '622129', '62213', '62214',\n                             '62215', '62216', '62217', '62218', '62219', '6222', '6223',\n                             '6224', '6225', '6226', '6227', '6228', '62290', '62291',\n                             '622920', '622921', '622922', '622923', '622924', '622925']\n                },\n                VISA: {\n                    length: [16],\n                    prefix: ['4']\n                }\n            };\n\n            var type, i;\n            for (type in cards) {\n                for (i in cards[type].prefix) {\n                    if (value.substr(0, cards[type].prefix[i].length) === cards[type].prefix[i]     // Check the prefix\n                        && $.inArray(value.length, cards[type].length) !== -1)                      // and length\n                    {\n                        return true;\n                    }\n                }\n            }\n\n            return false;\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.cusip = $.extend($.fn.bootstrapValidator.i18n.cusip || {}, {\n        'default': 'Please enter a valid CUSIP number'\n    });\n\n    $.fn.bootstrapValidator.validators.cusip = {\n        /**\n         * Validate a CUSIP\n         * Examples:\n         * - Valid: 037833100, 931142103, 14149YAR8, 126650BG6\n         * - Invalid: 31430F200, 022615AC2\n         *\n         * @see http://en.wikipedia.org/wiki/CUSIP\n         * @param {BootstrapValidator} validator The validator plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} [options] Can consist of the following keys:\n         * - message: The invalid message\n         * @returns {Boolean}\n         */\n        validate: function(validator, $field, options) {\n            var value = $field.val();\n            if (value === '') {\n                return true;\n            }\n\n            value = value.toUpperCase();\n            if (!/^[0-9A-Z]{9}$/.test(value)) {\n                return false;\n            }\n\n            var converted = $.map(value.split(''), function(item) {\n                                var code = item.charCodeAt(0);\n                                return (code >= 'A'.charCodeAt(0) && code <= 'Z'.charCodeAt(0))\n                                            // Replace A, B, C, ..., Z with 10, 11, ..., 35\n                                            ? (code - 'A'.charCodeAt(0) + 10)\n                                            : item;\n                            }),\n                length    = converted.length,\n                sum       = 0;\n            for (var i = 0; i < length - 1; i++) {\n                var num = parseInt(converted[i], 10);\n                if (i % 2 !== 0) {\n                    num *= 2;\n                }\n                if (num > 9) {\n                    num -= 9;\n                }\n                sum += num;\n            }\n\n            sum = (10 - (sum % 10)) % 10;\n            return sum === converted[length - 1];\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.cvv = $.extend($.fn.bootstrapValidator.i18n.cvv || {}, {\n        'default': 'Please enter a valid CVV number'\n    });\n\n    $.fn.bootstrapValidator.validators.cvv = {\n        html5Attributes: {\n            message: 'message',\n            ccfield: 'creditCardField'\n        },\n\n        /**\n         * Return true if the input value is a valid CVV number.\n         *\n         * @param {BootstrapValidator} validator The validator plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} options Can consist of the following keys:\n         * - creditCardField: The credit card number field. It can be null\n         * - message: The invalid message\n         * @returns {Boolean}\n         */\n        validate: function(validator, $field, options) {\n            var value = $field.val();\n            if (value === '') {\n                return true;\n            }\n\n            if (!/^[0-9]{3,4}$/.test(value)) {\n                return false;\n            }\n\n            if (!options.creditCardField) {\n                return true;\n            }\n\n            // Get the credit card number\n            var creditCard = validator.getFieldElements(options.creditCardField).val();\n            if (creditCard === '') {\n                return true;\n            }\n            \n            creditCard = creditCard.replace(/\\D/g, '');\n\n            // Supported credit card types\n            var cards = {\n                AMERICAN_EXPRESS: {\n                    length: [15],\n                    prefix: ['34', '37']\n                },\n                DINERS_CLUB: {\n                    length: [14],\n                    prefix: ['300', '301', '302', '303', '304', '305', '36']\n                },\n                DINERS_CLUB_US: {\n                    length: [16],\n                    prefix: ['54', '55']\n                },\n                DISCOVER: {\n                    length: [16],\n                    prefix: ['6011', '622126', '622127', '622128', '622129', '62213',\n                             '62214', '62215', '62216', '62217', '62218', '62219',\n                             '6222', '6223', '6224', '6225', '6226', '6227', '6228',\n                             '62290', '62291', '622920', '622921', '622922', '622923',\n                             '622924', '622925', '644', '645', '646', '647', '648',\n                             '649', '65']\n                },\n                JCB: {\n                    length: [16],\n                    prefix: ['3528', '3529', '353', '354', '355', '356', '357', '358']\n                },\n                LASER: {\n                    length: [16, 17, 18, 19],\n                    prefix: ['6304', '6706', '6771', '6709']\n                },\n                MAESTRO: {\n                    length: [12, 13, 14, 15, 16, 17, 18, 19],\n                    prefix: ['5018', '5020', '5038', '6304', '6759', '6761', '6762', '6763', '6764', '6765', '6766']\n                },\n                MASTERCARD: {\n                    length: [16],\n                    prefix: ['51', '52', '53', '54', '55']\n                },\n                SOLO: {\n                    length: [16, 18, 19],\n                    prefix: ['6334', '6767']\n                },\n                UNIONPAY: {\n                    length: [16, 17, 18, 19],\n                    prefix: ['622126', '622127', '622128', '622129', '62213', '62214',\n                             '62215', '62216', '62217', '62218', '62219', '6222', '6223',\n                             '6224', '6225', '6226', '6227', '6228', '62290', '62291',\n                             '622920', '622921', '622922', '622923', '622924', '622925']\n                },\n                VISA: {\n                    length: [16],\n                    prefix: ['4']\n                }\n            };\n            var type, i, creditCardType = null;\n            for (type in cards) {\n                for (i in cards[type].prefix) {\n                    if (creditCard.substr(0, cards[type].prefix[i].length) === cards[type].prefix[i]    // Check the prefix\n                        && $.inArray(creditCard.length, cards[type].length) !== -1)                     // and length\n                    {\n                        creditCardType = type;\n                        break;\n                    }\n                }\n            }\n\n            return (creditCardType === null)\n                        ? false\n                        : (('AMERICAN_EXPRESS' === creditCardType) ? (value.length === 4) : (value.length === 3));\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.date = $.extend($.fn.bootstrapValidator.i18n.date || {}, {\n        'default': 'Please enter a valid date'\n    });\n\n    $.fn.bootstrapValidator.validators.date = {\n        html5Attributes: {\n            message: 'message',\n            format: 'format',\n            separator: 'separator'\n        },\n\n        /**\n         * Return true if the input value is valid date\n         *\n         * @param {BootstrapValidator} validator The validator plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} options Can consist of the following keys:\n         * - message: The invalid message\n         * - separator: Use to separate the date, month, and year.\n         * By default, it is /\n         * - format: The date format. Default is MM/DD/YYYY\n         * The format can be:\n         *\n         * i) date: Consist of DD, MM, YYYY parts which are separated by the separator option\n         * ii) date and time:\n         * The time can consist of h, m, s parts which are separated by :\n         * ii) date, time and A (indicating AM or PM)\n         * @returns {Boolean}\n         */\n        validate: function(validator, $field, options) {\n            var value = $field.val();\n            if (value === '') {\n                return true;\n            }\n\n            options.format = options.format || 'MM/DD/YYYY';\n\n            var formats    = options.format.split(' '),\n                dateFormat = formats[0],\n                timeFormat = (formats.length > 1) ? formats[1] : null,\n                amOrPm     = (formats.length > 2) ? formats[2] : null,\n                sections   = value.split(' '),\n                date       = sections[0],\n                time       = (sections.length > 1) ? sections[1] : null;\n\n            if (formats.length !== sections.length) {\n                return false;\n            }\n\n            // Determine the separator\n            var separator = options.separator;\n            if (!separator) {\n                separator = (date.indexOf('/') !== -1) ? '/' : ((date.indexOf('-') !== -1) ? '-' : null);\n            }\n            if (separator === null || date.indexOf(separator) === -1) {\n                return false;\n            }\n\n            // Determine the date\n            date       = date.split(separator);\n            dateFormat = dateFormat.split(separator);\n            if (date.length !== dateFormat.length) {\n                return false;\n            }\n\n            var year  = date[$.inArray('YYYY', dateFormat)],\n                month = date[$.inArray('MM', dateFormat)],\n                day   = date[$.inArray('DD', dateFormat)];\n\n            if (!year || !month || !day) {\n                return false;\n            }\n\n            // Determine the time\n            var minutes = null, hours = null, seconds = null;\n            if (timeFormat) {\n                timeFormat = timeFormat.split(':');\n                time       = time.split(':');\n\n                if (timeFormat.length !== time.length) {\n                    return false;\n                }\n\n                hours   = time.length > 0 ? time[0] : null;\n                minutes = time.length > 1 ? time[1] : null;\n                seconds = time.length > 2 ? time[2] : null;\n\n                // Validate seconds\n                if (seconds) {\n                    seconds = parseInt(seconds, 10);\n                    if (isNaN(seconds) || seconds < 0 || seconds > 60) {\n                        return false;\n                    }\n                }\n\n                // Validate hours\n                if (hours) {\n                    hours = parseInt(hours, 10);\n                    if (isNaN(hours) || hours < 0 || hours >= 24 || (amOrPm && hours > 12)) {\n                        return false;\n                    }\n                }\n\n                // Validate minutes\n                if (minutes) {\n                    minutes = parseInt(minutes, 10);\n                    if (isNaN(minutes) || minutes < 0 || minutes > 59) {\n                        return false;\n                    }\n                }\n            }\n\n            // Validate day, month, and year\n            return $.fn.bootstrapValidator.helpers.date(year, month, day);\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.different = $.extend($.fn.bootstrapValidator.i18n.different || {}, {\n        'default': 'Please enter a different value'\n    });\n\n    $.fn.bootstrapValidator.validators.different = {\n        html5Attributes: {\n            message: 'message',\n            field: 'field'\n        },\n\n        /**\n         * Return true if the input value is different with given field's value\n         *\n         * @param {BootstrapValidator} validator The validator plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} options Consists of the following key:\n         * - field: The name of field that will be used to compare with current one\n         * - message: The invalid message\n         * @returns {Boolean}\n         */\n        validate: function(validator, $field, options) {\n            var value = $field.val();\n            if (value === '') {\n                return true;\n            }\n\n            var compareWith = validator.getFieldElements(options.field);\n            if (compareWith === null) {\n                return true;\n            }\n\n            if (value !== compareWith.val()) {\n                validator.updateStatus(options.field, validator.STATUS_VALID, 'different');\n                return true;\n            } else {\n                return false;\n            }\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.digits = $.extend($.fn.bootstrapValidator.i18n.digits || {}, {\n        'default': 'Please enter only digits'\n    });\n\n    $.fn.bootstrapValidator.validators.digits = {\n        /**\n         * Return true if the input value contains digits only\n         *\n         * @param {BootstrapValidator} validator Validate plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} [options]\n         * @returns {Boolean}\n         */\n        validate: function(validator, $field, options) {\n            var value = $field.val();\n            if (value === '') {\n                return true;\n            }\n\n            return /^\\d+$/.test(value);\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.ean = $.extend($.fn.bootstrapValidator.i18n.ean || {}, {\n        'default': 'Please enter a valid EAN number'\n    });\n\n    $.fn.bootstrapValidator.validators.ean = {\n        /**\n         * Validate EAN (International Article Number)\n         * Examples:\n         * - Valid: 73513537, 9780471117094, 4006381333931\n         * - Invalid: 73513536\n         *\n         * @see http://en.wikipedia.org/wiki/European_Article_Number\n         * @param {BootstrapValidator} validator The validator plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} options Can consist of the following keys:\n         * - message: The invalid message\n         * @returns {Boolean}\n         */\n        validate: function(validator, $field, options) {\n            var value = $field.val();\n            if (value === '') {\n                return true;\n            }\n\n            if (!/^(\\d{8}|\\d{12}|\\d{13})$/.test(value)) {\n                return false;\n            }\n\n            var length = value.length,\n                sum    = 0,\n                weight = (length === 8) ? [3, 1] : [1, 3];\n            for (var i = 0; i < length - 1; i++) {\n                sum += parseInt(value.charAt(i), 10) * weight[i % 2];\n            }\n            sum = (10 - sum % 10) % 10;\n            return (sum + '' === value.charAt(length - 1));\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.emailAddress = $.extend($.fn.bootstrapValidator.i18n.emailAddress || {}, {\n        'default': 'Please enter a valid email address'\n    });\n\n    $.fn.bootstrapValidator.validators.emailAddress = {\n        enableByHtml5: function($field) {\n            return ('email' === $field.attr('type'));\n        },\n\n        /**\n         * Return true if and only if the input value is a valid email address\n         *\n         * @param {BootstrapValidator} validator Validate plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} [options]\n         * @returns {Boolean}\n         */\n        validate: function(validator, $field, options) {\n            var value = $field.val();\n            if (value === '') {\n                return true;\n            }\n\n            // Email address regular expression\n            // http://stackoverflow.com/questions/46155/validate-email-address-in-javascript\n            var emailRegExp = /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n            return emailRegExp.test(value);\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.file = $.extend($.fn.bootstrapValidator.i18n.file || {}, {\n        'default': 'Please choose a valid file'\n    });\n\n    $.fn.bootstrapValidator.validators.file = {\n        html5Attributes: {\n            extension: 'extension',\n            maxsize: 'maxSize',\n            message: 'message',\n            type: 'type'\n        },\n\n        /**\n         * Validate upload file. Use HTML 5 API if the browser supports\n         *\n         * @param {BootstrapValidator} validator The validator plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} options Can consist of the following keys:\n         * - extension: The allowed extensions, separated by a comma\n         * - maxSize: The maximum size in bytes\n         * - message: The invalid message\n         * - type: The allowed MIME type, separated by a comma\n         * @returns {Boolean}\n         */\n        validate: function(validator, $field, options) {\n            var value = $field.val();\n            if (value === '') {\n                return true;\n            }\n\n            var ext,\n                extensions = options.extension ? options.extension.toLowerCase().split(',') : null,\n                types      = options.type      ? options.type.toLowerCase().split(',')      : null,\n                html5      = (window.File && window.FileList && window.FileReader);\n\n            if (html5) {\n                // Get FileList instance\n                var files = $field.get(0).files,\n                    total = files.length;\n                for (var i = 0; i < total; i++) {\n                    // Check file size\n                    if (options.maxSize && files[i].size > parseInt(options.maxSize, 10)) {\n                        return false;\n                    }\n\n                    // Check file extension\n                    ext = files[i].name.substr(files[i].name.lastIndexOf('.') + 1);\n                    if (extensions && $.inArray(ext.toLowerCase(), extensions) === -1) {\n                        return false;\n                    }\n\n                    // Check file type\n                    if (types && $.inArray(files[i].type.toLowerCase(), types) === -1) {\n                        return false;\n                    }\n                }\n            } else {\n                // Check file extension\n                ext = value.substr(value.lastIndexOf('.') + 1);\n                if (extensions && $.inArray(ext.toLowerCase(), extensions) === -1) {\n                    return false;\n                }\n            }\n\n            return true;\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.greaterThan = $.extend($.fn.bootstrapValidator.i18n.greaterThan || {}, {\n        'default': 'Please enter a value greater than or equal to %s',\n        notInclusive: 'Please enter a value greater than %s'\n    });\n\n    $.fn.bootstrapValidator.validators.greaterThan = {\n        html5Attributes: {\n            message: 'message',\n            value: 'value',\n            inclusive: 'inclusive'\n        },\n\n        enableByHtml5: function($field) {\n            var min = $field.attr('min');\n            if (min) {\n                return {\n                    value: min\n                };\n            }\n\n            return false;\n        },\n\n        /**\n         * Return true if the input value is greater than or equals to given number\n         *\n         * @param {BootstrapValidator} validator Validate plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} options Can consist of the following keys:\n         * - value: Define the number to compare with. It can be\n         *      - A number\n         *      - Name of field which its value defines the number\n         *      - Name of callback function that returns the number\n         *      - A callback function that returns the number\n         *\n         * - inclusive [optional]: Can be true or false. Default is true\n         * - message: The invalid message\n         * @returns {Boolean|Object}\n         */\n        validate: function(validator, $field, options) {\n            var value = $field.val();\n            if (value === '') {\n                return true;\n            }\n\n            var compareTo = $.isNumeric(options.value) ? options.value : validator.getDynamicOption($field, options.value);\n\n            value = parseFloat(value);\n\t\t\treturn (options.inclusive === true || options.inclusive === undefined)\n                    ? {\n                        valid: value >= compareTo,\n                        message: $.fn.bootstrapValidator.helpers.format(options.message || $.fn.bootstrapValidator.i18n.greaterThan['default'], compareTo)\n                    }\n                    : {\n                        valid: value > compareTo,\n                        message: $.fn.bootstrapValidator.helpers.format(options.message || $.fn.bootstrapValidator.i18n.greaterThan.notInclusive, compareTo)\n                    };\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.grid = $.extend($.fn.bootstrapValidator.i18n.grid || {}, {\n        'default': 'Please enter a valid GRId number'\n    });\n\n    $.fn.bootstrapValidator.validators.grid = {\n        /**\n         * Validate GRId (Global Release Identifier)\n         * Examples:\n         * - Valid: A12425GABC1234002M, A1-2425G-ABC1234002-M, A1 2425G ABC1234002 M, Grid:A1-2425G-ABC1234002-M\n         * - Invalid: A1-2425G-ABC1234002-Q\n         *\n         * @see http://en.wikipedia.org/wiki/Global_Release_Identifier\n         * @param {BootstrapValidator} validator The validator plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} options Can consist of the following keys:\n         * - message: The invalid message\n         * @returns {Boolean}\n         */\n        validate: function(validator, $field, options) {\n            var value = $field.val();\n            if (value === '') {\n                return true;\n            }\n\n            value = value.toUpperCase();\n            if (!/^[GRID:]*([0-9A-Z]{2})[-\\s]*([0-9A-Z]{5})[-\\s]*([0-9A-Z]{10})[-\\s]*([0-9A-Z]{1})$/g.test(value)) {\n                return false;\n            }\n            value = value.replace(/\\s/g, '').replace(/-/g, '');\n            if ('GRID:' === value.substr(0, 5)) {\n                value = value.substr(5);\n            }\n            return $.fn.bootstrapValidator.helpers.mod37And36(value);\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.hex = $.extend($.fn.bootstrapValidator.i18n.hex || {}, {\n        'default': 'Please enter a valid hexadecimal number'\n    });\n\n    $.fn.bootstrapValidator.validators.hex = {\n        /**\n         * Return true if and only if the input value is a valid hexadecimal number\n         *\n         * @param {BootstrapValidator} validator The validator plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} options Consist of key:\n         * - message: The invalid message\n         * @returns {Boolean}\n         */\n        validate: function(validator, $field, options) {\n            var value = $field.val();\n            if (value === '') {\n                return true;\n            }\n\n            return /^[0-9a-fA-F]+$/.test(value);\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.hexColor = $.extend($.fn.bootstrapValidator.i18n.hexColor || {}, {\n        'default': 'Please enter a valid hex color'\n    });\n\n    $.fn.bootstrapValidator.validators.hexColor = {\n        enableByHtml5: function($field) {\n            return ('color' === $field.attr('type'));\n        },\n\n        /**\n         * Return true if the input value is a valid hex color\n         *\n         * @param {BootstrapValidator} validator The validator plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} options Can consist of the following keys:\n         * - message: The invalid message\n         * @returns {Boolean}\n         */\n        validate: function(validator, $field, options) {\n            var value = $field.val();\n            if (value === '') {\n                return true;\n            }\n            return /(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(value);\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.iban = $.extend($.fn.bootstrapValidator.i18n.iban || {}, {\n        'default': 'Please enter a valid IBAN number',\n        countryNotSupported: 'The country code %s is not supported',\n        country: 'Please enter a valid IBAN number in %s',\n        countries: {\n            AD: 'Andorra',\n            AE: 'United Arab Emirates',\n            AL: 'Albania',\n            AO: 'Angola',\n            AT: 'Austria',\n            AZ: 'Azerbaijan',\n            BA: 'Bosnia and Herzegovina',\n            BE: 'Belgium',\n            BF: 'Burkina Faso',\n            BG: 'Bulgaria',\n            BH: 'Bahrain',\n            BI: 'Burundi',\n            BJ: 'Benin',\n            BR: 'Brazil',\n            CH: 'Switzerland',\n            CI: 'Ivory Coast',\n            CM: 'Cameroon',\n            CR: 'Costa Rica',\n            CV: 'Cape Verde',\n            CY: 'Cyprus',\n            CZ: 'Czech Republic',\n            DE: 'Germany',\n            DK: 'Denmark',\n            DO: 'Dominican Republic',\n            DZ: 'Algeria',\n            EE: 'Estonia',\n            ES: 'Spain',\n            FI: 'Finland',\n            FO: 'Faroe Islands',\n            FR: 'France',\n            GB: 'United Kingdom',\n            GE: 'Georgia',\n            GI: 'Gibraltar',\n            GL: 'Greenland',\n            GR: 'Greece',\n            GT: 'Guatemala',\n            HR: 'Croatia',\n            HU: 'Hungary',\n            IE: 'Ireland',\n            IL: 'Israel',\n            IR: 'Iran',\n            IS: 'Iceland',\n            IT: 'Italy',\n            JO: 'Jordan',\n            KW: 'Kuwait',\n            KZ: 'Kazakhstan',\n            LB: 'Lebanon',\n            LI: 'Liechtenstein',\n            LT: 'Lithuania',\n            LU: 'Luxembourg',\n            LV: 'Latvia',\n            MC: 'Monaco',\n            MD: 'Moldova',\n            ME: 'Montenegro',\n            MG: 'Madagascar',\n            MK: 'Macedonia',\n            ML: 'Mali',\n            MR: 'Mauritania',\n            MT: 'Malta',\n            MU: 'Mauritius',\n            MZ: 'Mozambique',\n            NL: 'Netherlands',\n            NO: 'Norway',\n            PK: 'Pakistan',\n            PL: 'Poland',\n            PS: 'Palestinian',\n            PT: 'Portugal',\n            QA: 'Qatar',\n            RO: 'Romania',\n            RS: 'Serbia',\n            SA: 'Saudi Arabia',\n            SE: 'Sweden',\n            SI: 'Slovenia',\n            SK: 'Slovakia',\n            SM: 'San Marino',\n            SN: 'Senegal',\n            TN: 'Tunisia',\n            TR: 'Turkey',\n            VG: 'Virgin Islands, British'\n        }\n    });\n\n    $.fn.bootstrapValidator.validators.iban = {\n        html5Attributes: {\n            message: 'message',\n            country: 'country'\n        },\n\n        // http://www.swift.com/dsp/resources/documents/IBAN_Registry.pdf\n        // http://en.wikipedia.org/wiki/International_Bank_Account_Number#IBAN_formats_by_country\n        REGEX: {\n            AD: 'AD[0-9]{2}[0-9]{4}[0-9]{4}[A-Z0-9]{12}',                       // Andorra\n            AE: 'AE[0-9]{2}[0-9]{3}[0-9]{16}',                                  // United Arab Emirates\n            AL: 'AL[0-9]{2}[0-9]{8}[A-Z0-9]{16}',                               // Albania\n            AO: 'AO[0-9]{2}[0-9]{21}',                                          // Angola\n            AT: 'AT[0-9]{2}[0-9]{5}[0-9]{11}',                                  // Austria\n            AZ: 'AZ[0-9]{2}[A-Z]{4}[A-Z0-9]{20}',                               // Azerbaijan\n            BA: 'BA[0-9]{2}[0-9]{3}[0-9]{3}[0-9]{8}[0-9]{2}',                   // Bosnia and Herzegovina\n            BE: 'BE[0-9]{2}[0-9]{3}[0-9]{7}[0-9]{2}',                           // Belgium\n            BF: 'BF[0-9]{2}[0-9]{23}',                                          // Burkina Faso\n            BG: 'BG[0-9]{2}[A-Z]{4}[0-9]{4}[0-9]{2}[A-Z0-9]{8}',                // Bulgaria\n            BH: 'BH[0-9]{2}[A-Z]{4}[A-Z0-9]{14}',                               // Bahrain\n            BI: 'BI[0-9]{2}[0-9]{12}',                                          // Burundi\n            BJ: 'BJ[0-9]{2}[A-Z]{1}[0-9]{23}',                                  // Benin\n            BR: 'BR[0-9]{2}[0-9]{8}[0-9]{5}[0-9]{10}[A-Z][A-Z0-9]',             // Brazil\n            CH: 'CH[0-9]{2}[0-9]{5}[A-Z0-9]{12}',                               // Switzerland\n            CI: 'CI[0-9]{2}[A-Z]{1}[0-9]{23}',                                  // Ivory Coast\n            CM: 'CM[0-9]{2}[0-9]{23}',                                          // Cameroon\n            CR: 'CR[0-9]{2}[0-9]{3}[0-9]{14}',                                  // Costa Rica\n            CV: 'CV[0-9]{2}[0-9]{21}',                                          // Cape Verde\n            CY: 'CY[0-9]{2}[0-9]{3}[0-9]{5}[A-Z0-9]{16}',                       // Cyprus\n            CZ: 'CZ[0-9]{2}[0-9]{20}',                                          // Czech Republic\n            DE: 'DE[0-9]{2}[0-9]{8}[0-9]{10}',                                  // Germany\n            DK: 'DK[0-9]{2}[0-9]{14}',                                          // Denmark\n            DO: 'DO[0-9]{2}[A-Z0-9]{4}[0-9]{20}',                               // Dominican Republic\n            DZ: 'DZ[0-9]{2}[0-9]{20}',                                          // Algeria\n            EE: 'EE[0-9]{2}[0-9]{2}[0-9]{2}[0-9]{11}[0-9]{1}',                  // Estonia\n            ES: 'ES[0-9]{2}[0-9]{4}[0-9]{4}[0-9]{1}[0-9]{1}[0-9]{10}',          // Spain\n            FI: 'FI[0-9]{2}[0-9]{6}[0-9]{7}[0-9]{1}',                           // Finland\n            FO: 'FO[0-9]{2}[0-9]{4}[0-9]{9}[0-9]{1}',                           // Faroe Islands\n            FR: 'FR[0-9]{2}[0-9]{5}[0-9]{5}[A-Z0-9]{11}[0-9]{2}',               // France\n            GB: 'GB[0-9]{2}[A-Z]{4}[0-9]{6}[0-9]{8}',                           // United Kingdom\n            GE: 'GE[0-9]{2}[A-Z]{2}[0-9]{16}',                                  // Georgia\n            GI: 'GI[0-9]{2}[A-Z]{4}[A-Z0-9]{15}',                               // Gibraltar\n            GL: 'GL[0-9]{2}[0-9]{4}[0-9]{9}[0-9]{1}',                           // Greenland\n            GR: 'GR[0-9]{2}[0-9]{3}[0-9]{4}[A-Z0-9]{16}',                       // Greece\n            GT: 'GT[0-9]{2}[A-Z0-9]{4}[A-Z0-9]{20}',                            // Guatemala\n            HR: 'HR[0-9]{2}[0-9]{7}[0-9]{10}',                                  // Croatia\n            HU: 'HU[0-9]{2}[0-9]{3}[0-9]{4}[0-9]{1}[0-9]{15}[0-9]{1}',          // Hungary\n            IE: 'IE[0-9]{2}[A-Z]{4}[0-9]{6}[0-9]{8}',                           // Ireland\n            IL: 'IL[0-9]{2}[0-9]{3}[0-9]{3}[0-9]{13}',                          // Israel\n            IR: 'IR[0-9]{2}[0-9]{22}',                                          // Iran\n            IS: 'IS[0-9]{2}[0-9]{4}[0-9]{2}[0-9]{6}[0-9]{10}',                  // Iceland\n            IT: 'IT[0-9]{2}[A-Z]{1}[0-9]{5}[0-9]{5}[A-Z0-9]{12}',               // Italy\n            JO: 'JO[0-9]{2}[A-Z]{4}[0-9]{4}[0]{8}[A-Z0-9]{10}',                 // Jordan\n            KW: 'KW[0-9]{2}[A-Z]{4}[0-9]{22}',                                  // Kuwait\n            KZ: 'KZ[0-9]{2}[0-9]{3}[A-Z0-9]{13}',                               // Kazakhstan\n            LB: 'LB[0-9]{2}[0-9]{4}[A-Z0-9]{20}',                               // Lebanon\n            LI: 'LI[0-9]{2}[0-9]{5}[A-Z0-9]{12}',                               // Liechtenstein\n            LT: 'LT[0-9]{2}[0-9]{5}[0-9]{11}',                                  // Lithuania\n            LU: 'LU[0-9]{2}[0-9]{3}[A-Z0-9]{13}',                               // Luxembourg\n            LV: 'LV[0-9]{2}[A-Z]{4}[A-Z0-9]{13}',                               // Latvia\n            MC: 'MC[0-9]{2}[0-9]{5}[0-9]{5}[A-Z0-9]{11}[0-9]{2}',               // Monaco\n            MD: 'MD[0-9]{2}[A-Z0-9]{20}',                                       // Moldova\n            ME: 'ME[0-9]{2}[0-9]{3}[0-9]{13}[0-9]{2}',                          // Montenegro\n            MG: 'MG[0-9]{2}[0-9]{23}',                                          // Madagascar\n            MK: 'MK[0-9]{2}[0-9]{3}[A-Z0-9]{10}[0-9]{2}',                       // Macedonia\n            ML: 'ML[0-9]{2}[A-Z]{1}[0-9]{23}',                                  // Mali\n            MR: 'MR13[0-9]{5}[0-9]{5}[0-9]{11}[0-9]{2}',                        // Mauritania\n            MT: 'MT[0-9]{2}[A-Z]{4}[0-9]{5}[A-Z0-9]{18}',                       // Malta\n            MU: 'MU[0-9]{2}[A-Z]{4}[0-9]{2}[0-9]{2}[0-9]{12}[0-9]{3}[A-Z]{3}',  // Mauritius\n            MZ: 'MZ[0-9]{2}[0-9]{21}',                                          // Mozambique\n            NL: 'NL[0-9]{2}[A-Z]{4}[0-9]{10}',                                  // Netherlands\n            NO: 'NO[0-9]{2}[0-9]{4}[0-9]{6}[0-9]{1}',                           // Norway\n            PK: 'PK[0-9]{2}[A-Z]{4}[A-Z0-9]{16}',                               // Pakistan\n            PL: 'PL[0-9]{2}[0-9]{8}[0-9]{16}',                                  // Poland\n            PS: 'PS[0-9]{2}[A-Z]{4}[A-Z0-9]{21}',                               // Palestinian\n            PT: 'PT[0-9]{2}[0-9]{4}[0-9]{4}[0-9]{11}[0-9]{2}',                  // Portugal\n            QA: 'QA[0-9]{2}[A-Z]{4}[A-Z0-9]{21}',                               // Qatar\n            RO: 'RO[0-9]{2}[A-Z]{4}[A-Z0-9]{16}',                               // Romania\n            RS: 'RS[0-9]{2}[0-9]{3}[0-9]{13}[0-9]{2}',                          // Serbia\n            SA: 'SA[0-9]{2}[0-9]{2}[A-Z0-9]{18}',                               // Saudi Arabia\n            SE: 'SE[0-9]{2}[0-9]{3}[0-9]{16}[0-9]{1}',                          // Sweden\n            SI: 'SI[0-9]{2}[0-9]{5}[0-9]{8}[0-9]{2}',                           // Slovenia\n            SK: 'SK[0-9]{2}[0-9]{4}[0-9]{6}[0-9]{10}',                          // Slovakia\n            SM: 'SM[0-9]{2}[A-Z]{1}[0-9]{5}[0-9]{5}[A-Z0-9]{12}',               // San Marino\n            SN: 'SN[0-9]{2}[A-Z]{1}[0-9]{23}',                                  // Senegal\n            TN: 'TN59[0-9]{2}[0-9]{3}[0-9]{13}[0-9]{2}',                        // Tunisia\n            TR: 'TR[0-9]{2}[0-9]{5}[A-Z0-9]{1}[A-Z0-9]{16}',                    // Turkey\n            VG: 'VG[0-9]{2}[A-Z]{4}[0-9]{16}'                                   // Virgin Islands, British\n        },\n\n        /**\n         * Validate an International Bank Account Number (IBAN)\n         * To test it, take the sample IBAN from\n         * http://www.nordea.com/Our+services/International+products+and+services/Cash+Management/IBAN+countries/908462.html\n         *\n         * @param {BootstrapValidator} validator The validator plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} options Can consist of the following keys:\n         * - message: The invalid message\n         * - country: The ISO 3166-1 country code. It can be\n         *      - A country code\n         *      - Name of field which its value defines the country code\n         *      - Name of callback function that returns the country code\n         *      - A callback function that returns the country code\n         * @returns {Boolean|Object}\n         */\n        validate: function(validator, $field, options) {\n            var value = $field.val();\n            if (value === '') {\n                return true;\n            }\n\n            value = value.replace(/[^a-zA-Z0-9]/g, '').toUpperCase();\n            var country = options.country;\n            if (!country) {\n                country = value.substr(0, 2);\n            } else if (typeof country !== 'string' || !this.REGEX[country]) {\n                // Determine the country code\n                country = validator.getDynamicOption($field, country);\n            }\n\n            if (!this.REGEX[country]) {\n                return {\n                    valid: false,\n                    message: $.fn.bootstrapValidator.helpers.format($.fn.bootstrapValidator.i18n.iban.countryNotSupported, country)\n                };\n            }\n\n            if (!(new RegExp('^' + this.REGEX[country] + '$')).test(value)) {\n                return {\n                    valid: false,\n                    message: $.fn.bootstrapValidator.helpers.format(options.message || $.fn.bootstrapValidator.i18n.iban.country, $.fn.bootstrapValidator.i18n.iban.countries[country])\n                };\n            }\n\n            value = value.substr(4) + value.substr(0, 4);\n            value = $.map(value.split(''), function(n) {\n                var code = n.charCodeAt(0);\n                return (code >= 'A'.charCodeAt(0) && code <= 'Z'.charCodeAt(0))\n                        // Replace A, B, C, ..., Z with 10, 11, ..., 35\n                        ? (code - 'A'.charCodeAt(0) + 10)\n                        : n;\n            });\n            value = value.join('');\n\n            var temp   = parseInt(value.substr(0, 1), 10),\n                length = value.length;\n            for (var i = 1; i < length; ++i) {\n                temp = (temp * 10 + parseInt(value.substr(i, 1), 10)) % 97;\n            }\n\n            return {\n                valid: (temp === 1),\n                message: $.fn.bootstrapValidator.helpers.format(options.message || $.fn.bootstrapValidator.i18n.iban.country, $.fn.bootstrapValidator.i18n.iban.countries[country])\n            };\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.id = $.extend($.fn.bootstrapValidator.i18n.id || {}, {\n        'default': 'Please enter a valid identification number',\n        countryNotSupported: 'The country code %s is not supported',\n        country: 'Please enter a valid %s identification number',\n        countries: {\n            BA: 'Bosnia and Herzegovina',\n            BG: 'Bulgarian',\n            BR: 'Brazilian',\n            CH: 'Swiss',\n            CL: 'Chilean',\n            CZ: 'Czech',\n            DK: 'Danish',\n            EE: 'Estonian',\n            ES: 'Spanish',\n            FI: 'Finnish',\n            HR: 'Croatian',\n            IE: 'Irish',\n            IS: 'Iceland',\n            LT: 'Lithuanian',\n            LV: 'Latvian',\n            ME: 'Montenegro',\n            MK: 'Macedonian',\n            NL: 'Dutch',\n            RO: 'Romanian',\n            RS: 'Serbian',\n            SE: 'Swedish',\n            SI: 'Slovenian',\n            SK: 'Slovak',\n            SM: 'San Marino',\n            ZA: 'South African'\n        }\n    });\n\n    $.fn.bootstrapValidator.validators.id = {\n        html5Attributes: {\n            message: 'message',\n            country: 'country'\n        },\n\n        // Supported country codes\n        COUNTRY_CODES: [\n            'BA', 'BG', 'BR', 'CH', 'CL', 'CZ', 'DK', 'EE', 'ES', 'FI', 'HR', 'IE', 'IS', 'LT', 'LV', 'ME', 'MK', 'NL',\n            'RO', 'RS', 'SE', 'SI', 'SK', 'SM', 'ZA'\n        ],\n\n        /**\n         * Validate identification number in different countries\n         *\n         * @see http://en.wikipedia.org/wiki/National_identification_number\n         * @param {BootstrapValidator} validator The validator plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} options Consist of key:\n         * - message: The invalid message\n         * - country: The ISO 3166-1 country code. It can be\n         *      - One of country code defined in COUNTRY_CODES\n         *      - Name of field which its value defines the country code\n         *      - Name of callback function that returns the country code\n         *      - A callback function that returns the country code\n         * @returns {Boolean|Object}\n         */\n        validate: function(validator, $field, options) {\n            var value = $field.val();\n            if (value === '') {\n                return true;\n            }\n\n            var country = options.country;\n            if (!country) {\n                country = value.substr(0, 2);\n            } else if (typeof country !== 'string' || $.inArray(country.toUpperCase(), this.COUNTRY_CODES) === -1) {\n                // Determine the country code\n                country = validator.getDynamicOption($field, country);\n            }\n\n            if ($.inArray(country, this.COUNTRY_CODES) === -1) {\n                return { valid: false, message: $.fn.bootstrapValidator.helpers.format($.fn.bootstrapValidator.i18n.id.countryNotSupported, country) };\n            }\n\n            var method  = ['_', country.toLowerCase()].join('');\n            return this[method](value)\n                    ? true\n                    : {\n                        valid: false,\n                        message: $.fn.bootstrapValidator.helpers.format(options.message || $.fn.bootstrapValidator.i18n.id.country, $.fn.bootstrapValidator.i18n.id.countries[country.toUpperCase()])\n                    };\n        },\n\n        /**\n         * Validate Unique Master Citizen Number which uses in\n         * - Bosnia and Herzegovina (country code: BA)\n         * - Macedonia (MK)\n         * - Montenegro (ME)\n         * - Serbia (RS)\n         * - Slovenia (SI)\n         *\n         * @see http://en.wikipedia.org/wiki/Unique_Master_Citizen_Number\n         * @param {String} value The ID\n         * @param {String} countryCode The ISO country code, can be BA, MK, ME, RS, SI\n         * @returns {Boolean}\n         */\n        _validateJMBG: function(value, countryCode) {\n            if (!/^\\d{13}$/.test(value)) {\n                return false;\n            }\n            var day   = parseInt(value.substr(0, 2), 10),\n                month = parseInt(value.substr(2, 2), 10),\n                year  = parseInt(value.substr(4, 3), 10),\n                rr    = parseInt(value.substr(7, 2), 10),\n                k     = parseInt(value.substr(12, 1), 10);\n\n            // Validate date of birth\n            // FIXME: Validate the year of birth\n            if (day > 31 || month > 12) {\n                return false;\n            }\n\n            // Validate checksum\n            var sum = 0;\n            for (var i = 0; i < 6; i++) {\n                sum += (7 - i) * (parseInt(value.charAt(i), 10) + parseInt(value.charAt(i + 6), 10));\n            }\n            sum = 11 - sum % 11;\n            if (sum === 10 || sum === 11) {\n                sum = 0;\n            }\n            if (sum !== k) {\n                return false;\n            }\n\n            // Validate political region\n            // rr is the political region of birth, which can be in ranges:\n            // 10-19: Bosnia and Herzegovina\n            // 20-29: Montenegro\n            // 30-39: Croatia (not used anymore)\n            // 41-49: Macedonia\n            // 50-59: Slovenia (only 50 is used)\n            // 70-79: Central Serbia\n            // 80-89: Serbian province of Vojvodina\n            // 90-99: Kosovo\n            switch (countryCode.toUpperCase()) {\n                case 'BA':\n                    return (10 <= rr && rr <= 19);\n                case 'MK':\n                    return (41 <= rr && rr <= 49);\n                case 'ME':\n                    return (20 <= rr && rr <= 29);\n                case 'RS':\n                    return (70 <= rr && rr <= 99);\n                case 'SI':\n                    return (50 <= rr && rr <= 59);\n                default:\n                    return true;\n            }\n        },\n\n        _ba: function(value) {\n            return this._validateJMBG(value, 'BA');\n        },\n        _mk: function(value) {\n            return this._validateJMBG(value, 'MK');\n        },\n        _me: function(value) {\n            return this._validateJMBG(value, 'ME');\n        },\n        _rs: function(value) {\n            return this._validateJMBG(value, 'RS');\n        },\n\n        /**\n         * Examples: 0101006500006\n         */\n        _si: function(value) {\n            return this._validateJMBG(value, 'SI');\n        },\n\n        /**\n         * Validate Bulgarian national identification number (EGN)\n         * Examples:\n         * - Valid: 7523169263, 8032056031, 803205 603 1, 8001010008, 7501020018, 7552010005, 7542011030\n         * - Invalid: 8019010008\n         *\n         * @see http://en.wikipedia.org/wiki/Uniform_civil_number\n         * @param {String} value The ID\n         * @returns {Boolean}\n         */\n        _bg: function(value) {\n            if (!/^\\d{10}$/.test(value) && !/^\\d{6}\\s\\d{3}\\s\\d{1}$/.test(value)) {\n                return false;\n            }\n            value = value.replace(/\\s/g, '');\n            // Check the birth date\n            var year  = parseInt(value.substr(0, 2), 10) + 1900,\n                month = parseInt(value.substr(2, 2), 10),\n                day   = parseInt(value.substr(4, 2), 10);\n            if (month > 40) {\n                year += 100;\n                month -= 40;\n            } else if (month > 20) {\n                year -= 100;\n                month -= 20;\n            }\n\n            if (!$.fn.bootstrapValidator.helpers.date(year, month, day)) {\n                return false;\n            }\n\n            var sum    = 0,\n                weight = [2, 4, 8, 5, 10, 9, 7, 3, 6];\n            for (var i = 0; i < 9; i++) {\n                sum += parseInt(value.charAt(i), 10) * weight[i];\n            }\n            sum = (sum % 11) % 10;\n            return (sum + '' === value.substr(9, 1));\n        },\n\n        /**\n         * Validate Brazilian national identification number (CPF)\n         * Examples:\n         * - Valid: 39053344705, 390.533.447-05, 111.444.777-35\n         * - Invalid: 231.002.999-00\n         *\n         * @see http://en.wikipedia.org/wiki/Cadastro_de_Pessoas_F%C3%ADsicas\n         * @param {String} value The ID\n         * @returns {Boolean}\n         */\n        _br: function(value) {\n            if (/^1{11}|2{11}|3{11}|4{11}|5{11}|6{11}|7{11}|8{11}|9{11}|0{11}$/.test(value)) {\n                return false;\n            }\n            if (!/^\\d{11}$/.test(value) && !/^\\d{3}\\.\\d{3}\\.\\d{3}-\\d{2}$/.test(value)) {\n                return false;\n            }\n            value = value.replace(/\\./g, '').replace(/-/g, '');\n\n            var d1 = 0;\n            for (var i = 0; i < 9; i++) {\n                d1 += (10 - i) * parseInt(value.charAt(i), 10);\n            }\n            d1 = 11 - d1 % 11;\n            if (d1 === 10 || d1 === 11) {\n                d1 = 0;\n            }\n            if (d1 + '' !== value.charAt(9)) {\n                return false;\n            }\n\n            var d2 = 0;\n            for (i = 0; i < 10; i++) {\n                d2 += (11 - i) * parseInt(value.charAt(i), 10);\n            }\n            d2 = 11 - d2 % 11;\n            if (d2 === 10 || d2 === 11) {\n                d2 = 0;\n            }\n\n            return (d2 + '' === value.charAt(10));\n        },\n\n        /**\n         * Validate Swiss Social Security Number (AHV-Nr/No AVS)\n         * Examples:\n         * - Valid: 756.1234.5678.95, 7561234567895\n         *\n         * @see http://en.wikipedia.org/wiki/National_identification_number#Switzerland\n         * @see http://www.bsv.admin.ch/themen/ahv/00011/02185/index.html?lang=de\n         * @param {String} value The ID\n         * @returns {Boolean}\n         */\n        _ch: function(value) {\n            if (!/^756[\\.]{0,1}[0-9]{4}[\\.]{0,1}[0-9]{4}[\\.]{0,1}[0-9]{2}$/.test(value)) {\n                return false;\n            }\n            value = value.replace(/\\D/g, '').substr(3);\n            var length = value.length,\n                sum    = 0,\n                weight = (length === 8) ? [3, 1] : [1, 3];\n            for (var i = 0; i < length - 1; i++) {\n                sum += parseInt(value.charAt(i), 10) * weight[i % 2];\n            }\n            sum = 10 - sum % 10;\n            return (sum + '' === value.charAt(length - 1));\n        },\n\n        /**\n         * Validate Chilean national identification number (RUN/RUT)\n         * Examples:\n         * - Valid: 76086428-5, 22060449-7, 12531909-2\n         *\n         * @see http://en.wikipedia.org/wiki/National_identification_number#Chile\n         * @see https://palena.sii.cl/cvc/dte/ee_empresas_emisoras.html for samples\n         * @param {String} value The ID\n         * @returns {Boolean}\n         */\n        _cl: function(value) {\n            if (!/^\\d{7,8}[-]{0,1}[0-9K]$/i.test(value)) {\n                return false;\n            }\n            value = value.replace(/\\-/g, '');\n            while (value.length < 9) {\n                value = '0' + value;\n            }\n            var sum    = 0,\n                weight = [3, 2, 7, 6, 5, 4, 3, 2];\n            for (var i = 0; i < 8; i++) {\n                sum += parseInt(value.charAt(i), 10) * weight[i];\n            }\n            sum = 11 - sum % 11;\n            if (sum === 11) {\n                sum = 0;\n            } else if (sum === 10) {\n                sum = 'K';\n            }\n            return sum + '' === value.charAt(8).toUpperCase();\n        },\n\n        /**\n         * Validate Czech national identification number (RC)\n         * Examples:\n         * - Valid: 7103192745, 991231123\n         * - Invalid: 1103492745, 590312123\n         *\n         * @param {String} value The ID\n         * @returns {Boolean}\n         */\n        _cz: function(value) {\n            if (!/^\\d{9,10}$/.test(value)) {\n                return false;\n            }\n            var year  = 1900 + parseInt(value.substr(0, 2), 10),\n                month = parseInt(value.substr(2, 2), 10) % 50 % 20,\n                day   = parseInt(value.substr(4, 2), 10);\n            if (value.length === 9) {\n                if (year >= 1980) {\n                    year -= 100;\n                }\n                if (year > 1953) {\n                    return false;\n                }\n            } else if (year < 1954) {\n                year += 100;\n            }\n\n            if (!$.fn.bootstrapValidator.helpers.date(year, month, day)) {\n                return false;\n            }\n\n            // Check that the birth date is not in the future\n            if (value.length === 10) {\n                var check = parseInt(value.substr(0, 9), 10) % 11;\n                if (year < 1985) {\n                    check = check % 10;\n                }\n                return (check + '' === value.substr(9, 1));\n            }\n\n            return true;\n        },\n\n        /**\n         * Validate Danish Personal Identification number (CPR)\n         * Examples:\n         * - Valid: 2110625629, 211062-5629\n         * - Invalid: 511062-5629\n         *\n         * @see https://en.wikipedia.org/wiki/Personal_identification_number_(Denmark)\n         * @param {String} value The ID\n         * @returns {Boolean}\n         */\n        _dk: function(value) {\n            if (!/^[0-9]{6}[-]{0,1}[0-9]{4}$/.test(value)) {\n                return false;\n            }\n            value = value.replace(/-/g, '');\n            var day   = parseInt(value.substr(0, 2), 10),\n                month = parseInt(value.substr(2, 2), 10),\n                year  = parseInt(value.substr(4, 2), 10);\n\n            switch (true) {\n                case ('5678'.indexOf(value.charAt(6)) !== -1 && year >= 58):\n                    year += 1800;\n                    break;\n                case ('0123'.indexOf(value.charAt(6)) !== -1):\n                case ('49'.indexOf(value.charAt(6)) !== -1 && year >= 37):\n                    year += 1900;\n                    break;\n                default:\n                    year += 2000;\n                    break;\n            }\n\n            return $.fn.bootstrapValidator.helpers.date(year, month, day);\n        },\n\n        /**\n         * Validate Estonian Personal Identification Code (isikukood)\n         * Examples:\n         * - Valid: 37605030299\n         *\n         * @see http://et.wikipedia.org/wiki/Isikukood\n         * @param {String} value The ID\n         * @returns {Boolean}\n         */\n        _ee: function(value) {\n            // Use the same format as Lithuanian Personal Code\n            return this._lt(value);\n        },\n\n        /**\n         * Validate Spanish personal identity code (DNI)\n         * Support i) DNI (for Spanish citizens) and ii) NIE (for foreign people)\n         *\n         * Examples:\n         * - Valid: i) 54362315K, 54362315-K; ii) X2482300W, X-2482300W, X-2482300-W\n         * - Invalid: i) 54362315Z; ii) X-2482300A\n         *\n         * @see https://en.wikipedia.org/wiki/National_identification_number#Spain\n         * @param {String} value The ID\n         * @returns {Boolean}\n         */\n        _es: function(value) {\n            if (!/^[0-9A-Z]{8}[-]{0,1}[0-9A-Z]$/.test(value)                    // DNI\n                && !/^[XYZ][-]{0,1}[0-9]{7}[-]{0,1}[0-9A-Z]$/.test(value)) {    // NIE\n                return false;\n            }\n\n            value = value.replace(/-/g, '');\n            var index = 'XYZ'.indexOf(value.charAt(0));\n            if (index !== -1) {\n                // It is NIE number\n                value = index + value.substr(1) + '';\n            }\n\n            var check = parseInt(value.substr(0, 8), 10);\n            check = 'TRWAGMYFPDXBNJZSQVHLCKE'[check % 23];\n            return (check === value.substr(8, 1));\n        },\n\n        /**\n         * Validate Finnish Personal Identity Code (HETU)\n         * Examples:\n         * - Valid: 311280-888Y, 131052-308T\n         * - Invalid: 131052-308U, 310252-308Y\n         *\n         * @param {String} value The ID\n         * @returns {Boolean}\n         */\n        _fi: function(value) {\n            if (!/^[0-9]{6}[-+A][0-9]{3}[0-9ABCDEFHJKLMNPRSTUVWXY]$/.test(value)) {\n                return false;\n            }\n            var day       = parseInt(value.substr(0, 2), 10),\n                month     = parseInt(value.substr(2, 2), 10),\n                year      = parseInt(value.substr(4, 2), 10),\n                centuries = {\n                    '+': 1800,\n                    '-': 1900,\n                    'A': 2000\n                };\n            year = centuries[value.charAt(6)] + year;\n\n            if (!$.fn.bootstrapValidator.helpers.date(year, month, day)) {\n                return false;\n            }\n\n            var individual = parseInt(value.substr(7, 3), 10);\n            if (individual < 2) {\n                return false;\n            }\n            var n = value.substr(0, 6) + value.substr(7, 3) + '';\n            n = parseInt(n, 10);\n            return '0123456789ABCDEFHJKLMNPRSTUVWXY'.charAt(n % 31) === value.charAt(10);\n        },\n\n        /**\n         * Validate Croatian personal identification number (OIB)\n         * Examples:\n         * - Valid: 33392005961\n         * - Invalid: 33392005962\n         *\n         * @param {String} value The ID\n         * @returns {Boolean}\n         */\n        _hr: function(value) {\n            if (!/^[0-9]{11}$/.test(value)) {\n                return false;\n            }\n            return $.fn.bootstrapValidator.helpers.mod11And10(value);\n        },\n\n        /**\n         * Validate Irish Personal Public Service Number (PPS)\n         * Examples:\n         * - Valid: 6433435F, 6433435FT, 6433435FW, 6433435OA, 6433435IH, 1234567TW, 1234567FA\n         * - Invalid: 6433435E, 6433435VH\n         *\n         * @see https://en.wikipedia.org/wiki/Personal_Public_Service_Number\n         * @param {String} value The ID\n         * @returns {Boolean}\n         */\n        _ie: function(value) {\n            if (!/^\\d{7}[A-W][AHWTX]?$/.test(value)) {\n                return false;\n            }\n\n            var getCheckDigit = function(value) {\n                while (value.length < 7) {\n                    value = '0' + value;\n                }\n                var alphabet = 'WABCDEFGHIJKLMNOPQRSTUV',\n                    sum      = 0;\n                for (var i = 0; i < 7; i++) {\n                    sum += parseInt(value.charAt(i), 10) * (8 - i);\n                }\n                sum += 9 * alphabet.indexOf(value.substr(7));\n                return alphabet[sum % 23];\n            };\n\n            // 2013 format\n            if (value.length === 9 && ('A' === value.charAt(8) || 'H' === value.charAt(8))) {\n                return value.charAt(7) === getCheckDigit(value.substr(0, 7) + value.substr(8) + '');\n            }\n            // The old format\n            else {\n                return value.charAt(7) === getCheckDigit(value.substr(0, 7));\n            }\n        },\n\n        /**\n         * Validate Iceland national identification number (Kennitala)\n         * Examples:\n         * - Valid: 120174-3399, 1201743399, 0902862349\n         *\n         * @see http://en.wikipedia.org/wiki/Kennitala\n         * @param {String} value The ID\n         * @returns {Boolean}\n         */\n        _is: function(value) {\n            if (!/^[0-9]{6}[-]{0,1}[0-9]{4}$/.test(value)) {\n                return false;\n            }\n            value = value.replace(/-/g, '');\n            var day     = parseInt(value.substr(0, 2), 10),\n                month   = parseInt(value.substr(2, 2), 10),\n                year    = parseInt(value.substr(4, 2), 10),\n                century = parseInt(value.charAt(9), 10);\n\n            year = (century === 9) ? (1900 + year) : ((20 + century) * 100 + year);\n            if (!$.fn.bootstrapValidator.helpers.date(year, month, day, true)) {\n                return false;\n            }\n            // Validate the check digit\n            var sum    = 0,\n                weight = [3, 2, 7, 6, 5, 4, 3, 2];\n            for (var i = 0; i < 8; i++) {\n                sum += parseInt(value.charAt(i), 10) * weight[i];\n            }\n            sum = 11 - sum % 11;\n            return (sum + '' === value.charAt(8));\n        },\n\n        /**\n         * Validate Lithuanian Personal Code (Asmens kodas)\n         * Examples:\n         * - Valid: 38703181745\n         * - Invalid: 38703181746, 78703181745, 38703421745\n         *\n         * @see http://en.wikipedia.org/wiki/National_identification_number#Lithuania\n         * @see http://www.adomas.org/midi2007/pcode.html\n         * @param {String} value The ID\n         * @returns {Boolean}\n         */\n        _lt: function(value) {\n            if (!/^[0-9]{11}$/.test(value)) {\n                return false;\n            }\n            var gender  = parseInt(value.charAt(0), 10),\n                year    = parseInt(value.substr(1, 2), 10),\n                month   = parseInt(value.substr(3, 2), 10),\n                day     = parseInt(value.substr(5, 2), 10),\n                century = (gender % 2 === 0) ? (17 + gender / 2) : (17 + (gender + 1) / 2);\n            year = century * 100 + year;\n            if (!$.fn.bootstrapValidator.helpers.date(year, month, day, true)) {\n                return false;\n            }\n\n            // Validate the check digit\n            var sum    = 0,\n                weight = [1, 2, 3, 4, 5, 6, 7, 8, 9, 1];\n            for (var i = 0; i < 10; i++) {\n                sum += parseInt(value.charAt(i), 10) * weight[i];\n            }\n            sum = sum % 11;\n            if (sum !== 10) {\n                return sum + '' === value.charAt(10);\n            }\n\n            // Re-calculate the check digit\n            sum    = 0;\n            weight = [3, 4, 5, 6, 7, 8, 9, 1, 2, 3];\n            for (i = 0; i < 10; i++) {\n                sum += parseInt(value.charAt(i), 10) * weight[i];\n            }\n            sum = sum % 11;\n            if (sum === 10) {\n                sum = 0;\n            }\n            return (sum + '' === value.charAt(10));\n        },\n\n        /**\n         * Validate Latvian Personal Code (Personas kods)\n         * Examples:\n         * - Valid: 161175-19997, 16117519997\n         * - Invalid: 161375-19997\n         *\n         * @see http://laacz.lv/2006/11/25/pk-parbaudes-algoritms/\n         * @param {String} value The ID\n         * @returns {Boolean}\n         */\n        _lv: function(value) {\n            if (!/^[0-9]{6}[-]{0,1}[0-9]{5}$/.test(value)) {\n                return false;\n            }\n            value = value.replace(/\\D/g, '');\n            // Check birth date\n            var day   = parseInt(value.substr(0, 2), 10),\n                month = parseInt(value.substr(2, 2), 10),\n                year  = parseInt(value.substr(4, 2), 10);\n            year = year + 1800 + parseInt(value.charAt(6), 10) * 100;\n\n            if (!$.fn.bootstrapValidator.helpers.date(year, month, day, true)) {\n                return false;\n            }\n\n            // Check personal code\n            var sum    = 0,\n                weight = [10, 5, 8, 4, 2, 1, 6, 3, 7, 9];\n            for (var i = 0; i < 10; i++) {\n                sum += parseInt(value.charAt(i), 10) * weight[i];\n            }\n            sum = (sum + 1) % 11 % 10;\n            return (sum + '' === value.charAt(10));\n        },\n\n        /**\n         * Validate Dutch national identification number (BSN)\n         * Examples:\n         * - Valid: 111222333, 941331490, 9413.31.490\n         * - Invalid: 111252333\n         *\n         * @see https://nl.wikipedia.org/wiki/Burgerservicenummer\n         * @param {String} value The ID\n         * @returns {Boolean}\n         */\n        _nl: function(value) {\n            while (value.length < 9) {\n                value = '0' + value;\n            }\n            if (!/^[0-9]{4}[.]{0,1}[0-9]{2}[.]{0,1}[0-9]{3}$/.test(value)) {\n                return false;\n            }\n            value = value.replace(/\\./g, '');\n            if (parseInt(value, 10) === 0) {\n                return false;\n            }\n            var sum    = 0,\n                length = value.length;\n            for (var i = 0; i < length - 1; i++) {\n                sum += (9 - i) * parseInt(value.charAt(i), 10);\n            }\n            sum = sum % 11;\n            if (sum === 10) {\n                sum = 0;\n            }\n            return (sum + '' === value.charAt(length - 1));\n        },\n\n        /**\n         * Validate Romanian numerical personal code (CNP)\n         * Examples:\n         * - Valid: 1630615123457, 1800101221144\n         * - Invalid: 8800101221144, 1632215123457, 1630615123458\n         *\n         * @see http://en.wikipedia.org/wiki/National_identification_number#Romania\n         * @param {String} value The ID\n         * @returns {Boolean}\n         */\n        _ro: function(value) {\n            if (!/^[0-9]{13}$/.test(value)) {\n                return false;\n            }\n            var gender = parseInt(value.charAt(0), 10);\n            if (gender === 0 || gender === 7 || gender === 8) {\n                return false;\n            }\n\n            // Determine the date of birth\n            var year      = parseInt(value.substr(1, 2), 10),\n                month     = parseInt(value.substr(3, 2), 10),\n                day       = parseInt(value.substr(5, 2), 10),\n                // The year of date is determined base on the gender\n                centuries = {\n                    '1': 1900,  // Male born between 1900 and 1999\n                    '2': 1900,  // Female born between 1900 and 1999\n                    '3': 1800,  // Male born between 1800 and 1899\n                    '4': 1800,  // Female born between 1800 and 1899\n                    '5': 2000,  // Male born after 2000\n                    '6': 2000   // Female born after 2000\n                };\n            if (day > 31 && month > 12) {\n                return false;\n            }\n            if (gender !== 9) {\n                year = centuries[gender + ''] + year;\n                if (!$.fn.bootstrapValidator.helpers.date(year, month, day)) {\n                    return false;\n                }\n            }\n\n            // Validate the check digit\n            var sum    = 0,\n                weight = [2, 7, 9, 1, 4, 6, 3, 5, 8, 2, 7, 9],\n                length = value.length;\n            for (var i = 0; i < length - 1; i++) {\n                sum += parseInt(value.charAt(i), 10) * weight[i];\n            }\n            sum = sum % 11;\n            if (sum === 10) {\n                sum = 1;\n            }\n            return (sum + '' === value.charAt(length - 1));\n        },\n\n        /**\n         * Validate Swedish personal identity number (personnummer)\n         * Examples:\n         * - Valid: 8112289874, 811228-9874, 811228+9874\n         * - Invalid: 811228-9873\n         *\n         * @see http://en.wikipedia.org/wiki/Personal_identity_number_(Sweden)\n         * @param {String} value The ID\n         * @returns {Boolean}\n         */\n        _se: function(value) {\n            if (!/^[0-9]{10}$/.test(value) && !/^[0-9]{6}[-|+][0-9]{4}$/.test(value)) {\n                return false;\n            }\n            value = value.replace(/[^0-9]/g, '');\n\n            var year  = parseInt(value.substr(0, 2), 10) + 1900,\n                month = parseInt(value.substr(2, 2), 10),\n                day   = parseInt(value.substr(4, 2), 10);\n            if (!$.fn.bootstrapValidator.helpers.date(year, month, day)) {\n                return false;\n            }\n\n            // Validate the last check digit\n            return $.fn.bootstrapValidator.helpers.luhn(value);\n        },\n\n        /**\n         * Validate Slovak national identifier number (RC)\n         * Examples:\n         * - Valid: 7103192745, 991231123\n         * - Invalid: 7103192746, 1103492745\n         *\n         * @param {String} value The ID\n         * @returns {Boolean}\n         */\n        _sk: function(value) {\n            // Slovakia uses the same format as Czech Republic\n            return this._cz(value);\n        },\n\n        /**\n         * Validate San Marino citizen number\n         *\n         * @see http://en.wikipedia.org/wiki/National_identification_number#San_Marino\n         * @param {String} value The ID\n         * @returns {Boolean}\n         */\n        _sm: function(value) {\n            return /^\\d{5}$/.test(value);\n        },\n\n        /**\n         * Validate South African ID\n         * Example:\n         * - Valid: 8001015009087\n         * - Invalid: 8001015009287, 8001015009086\n         *\n         * @see http://en.wikipedia.org/wiki/National_identification_number#South_Africa\n         * @param {String} value The ID\n         * @returns {Boolean}\n         */\n        _za: function(value) {\n            if (!/^[0-9]{10}[0|1][8|9][0-9]$/.test(value)) {\n                return false;\n            }\n            var year        = parseInt(value.substr(0, 2), 10),\n                currentYear = new Date().getFullYear() % 100,\n                month       = parseInt(value.substr(2, 2), 10),\n                day         = parseInt(value.substr(4, 2), 10);\n            year = (year >= currentYear) ? (year + 1900) : (year + 2000);\n\n            if (!$.fn.bootstrapValidator.helpers.date(year, month, day)) {\n                return false;\n            }\n\n            // Validate the last check digit\n            return $.fn.bootstrapValidator.helpers.luhn(value);\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.identical = $.extend($.fn.bootstrapValidator.i18n.identical || {}, {\n        'default': 'Please enter the same value'\n    });\n\n    $.fn.bootstrapValidator.validators.identical = {\n        html5Attributes: {\n            message: 'message',\n            field: 'field'\n        },\n\n        /**\n         * Check if input value equals to value of particular one\n         *\n         * @param {BootstrapValidator} validator The validator plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} options Consists of the following key:\n         * - field: The name of field that will be used to compare with current one\n         * @returns {Boolean}\n         */\n        validate: function(validator, $field, options) {\n            var value = $field.val();\n            if (value === '') {\n                return true;\n            }\n\n            var compareWith = validator.getFieldElements(options.field);\n            if (compareWith === null) {\n                return true;\n            }\n\n            if (value === compareWith.val()) {\n                validator.updateStatus(options.field, validator.STATUS_VALID, 'identical');\n                return true;\n            } else {\n                return false;\n            }\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.imei = $.extend($.fn.bootstrapValidator.i18n.imei || {}, {\n        'default': 'Please enter a valid IMEI number'\n    });\n\n    $.fn.bootstrapValidator.validators.imei = {\n        /**\n         * Validate IMEI (International Mobile Station Equipment Identity)\n         * Examples:\n         * - Valid: 35-209900-176148-1, 35-209900-176148-23, 3568680000414120, 490154203237518\n         * - Invalid: 490154203237517\n         *\n         * @see http://en.wikipedia.org/wiki/International_Mobile_Station_Equipment_Identity\n         * @param {BootstrapValidator} validator The validator plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} options Can consist of the following keys:\n         * - message: The invalid message\n         * @returns {Boolean}\n         */\n        validate: function(validator, $field, options) {\n            var value = $field.val();\n            if (value === '') {\n                return true;\n            }\n\n            switch (true) {\n                case /^\\d{15}$/.test(value):\n                case /^\\d{2}-\\d{6}-\\d{6}-\\d{1}$/.test(value):\n                case /^\\d{2}\\s\\d{6}\\s\\d{6}\\s\\d{1}$/.test(value):\n                    value = value.replace(/[^0-9]/g, '');\n                    return $.fn.bootstrapValidator.helpers.luhn(value);\n\n                case /^\\d{14}$/.test(value):\n                case /^\\d{16}$/.test(value):\n                case /^\\d{2}-\\d{6}-\\d{6}(|-\\d{2})$/.test(value):\n                case /^\\d{2}\\s\\d{6}\\s\\d{6}(|\\s\\d{2})$/.test(value):\n                    return true;\n\n                default:\n                    return false;\n            }\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.imo = $.extend($.fn.bootstrapValidator.i18n.imo || {}, {\n        'default': 'Please enter a valid IMO number'\n    });\n\n    $.fn.bootstrapValidator.validators.imo = {\n        /**\n         * Validate IMO (International Maritime Organization)\n         * Examples:\n         * - Valid: IMO 8814275, IMO 9176187\n         * - Invalid: IMO 8814274\n         *\n         * @see http://en.wikipedia.org/wiki/IMO_Number\n         * @param {BootstrapValidator} validator The validator plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} options Can consist of the following keys:\n         * - message: The invalid message\n         * @returns {Boolean}\n         */\n        validate: function(validator, $field, options) {\n            var value = $field.val();\n            if (value === '') {\n                return true;\n            }\n\n            if (!/^IMO \\d{7}$/i.test(value)) {\n                return false;\n            }\n            \n            // Grab just the digits\n            var sum    = 0,\n                digits = value.replace(/^.*(\\d{7})$/, '$1');\n            \n            // Go over each char, multiplying by the inverse of it's position\n            // IMO 9176187\n            // (9 * 7) + (1 * 6) + (7 * 5) + (6 * 4) + (1 * 3) + (8 * 2) = 147\n            // Take the last digit of that, that's the check digit (7)\n            for (var i = 6; i >= 1; i--) {\n                sum += (digits.slice((6 - i), -i) * (i + 1));\n            }\n\n            return sum % 10 === parseInt(digits.charAt(6), 10);\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.integer = $.extend($.fn.bootstrapValidator.i18n.integer || {}, {\n        'default': 'Please enter a valid number'\n    });\n\n    $.fn.bootstrapValidator.validators.integer = {\n        enableByHtml5: function($field) {\n            return ('number' === $field.attr('type')) && ($field.attr('step') === undefined || $field.attr('step') % 1 === 0);\n        },\n\n        /**\n         * Return true if the input value is an integer\n         *\n         * @param {BootstrapValidator} validator The validator plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} options Can consist of the following key:\n         * - message: The invalid message\n         * @returns {Boolean}\n         */\n        validate: function(validator, $field, options) {\n            var value = $field.val();\n            if (value === '') {\n                return true;\n            }\n            return /^(?:-?(?:0|[1-9][0-9]*))$/.test(value);\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.ip = $.extend($.fn.bootstrapValidator.i18n.ip || {}, {\n        'default': 'Please enter a valid IP address',\n        ipv4: 'Please enter a valid IPv4 address',\n        ipv6: 'Please enter a valid IPv6 address'\n    });\n\n    $.fn.bootstrapValidator.validators.ip = {\n        html5Attributes: {\n            message: 'message',\n            ipv4: 'ipv4',\n            ipv6: 'ipv6'\n        },\n\n        /**\n         * Return true if the input value is a IP address.\n         *\n         * @param {BootstrapValidator} validator The validator plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} options Can consist of the following keys:\n         * - ipv4: Enable IPv4 validator, default to true\n         * - ipv6: Enable IPv6 validator, default to true\n         * - message: The invalid message\n         * @returns {Boolean|Object}\n         */\n        validate: function(validator, $field, options) {\n            var value = $field.val();\n            if (value === '') {\n                return true;\n            }\n            options = $.extend({}, { ipv4: true, ipv6: true }, options);\n\n            var ipv4Regex = /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/,\n                ipv6Regex = /^\\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))(%.+)?\\s*$/,\n                valid     = false,\n                message;\n\n            switch (true) {\n                case (options.ipv4 && !options.ipv6):\n                    valid   = ipv4Regex.test(value);\n                    message = options.message || $.fn.bootstrapValidator.i18n.ip.ipv4;\n                    break;\n\n                case (!options.ipv4 && options.ipv6):\n                    valid   = ipv6Regex.test(value);\n                    message = options.message || $.fn.bootstrapValidator.i18n.ip.ipv6;\n                    break;\n\n                case (options.ipv4 && options.ipv6):\n                /* falls through */\n                default:\n                    valid   = ipv4Regex.test(value) && ipv6Regex.test(value);\n                    message = options.message || $.fn.bootstrapValidator.i18n.ip.default;\n                    break;\n            }\n\n            return {\n                valid: valid,\n                message: message\n            };\n        }\n    };\n}(window.jQuery));;(function($) {\n    $.fn.bootstrapValidator.i18n.isbn = $.extend($.fn.bootstrapValidator.i18n.isbn || {}, {\n        'default': 'Please enter a valid ISBN number'\n    });\n\n    $.fn.bootstrapValidator.validators.isbn = {\n        /**\n         * Return true if the input value is a valid ISBN 10 or ISBN 13 number\n         * Examples:\n         * - Valid:\n         * ISBN 10: 99921-58-10-7, 9971-5-0210-0, 960-425-059-0, 80-902734-1-6, 85-359-0277-5, 1-84356-028-3, 0-684-84328-5, 0-8044-2957-X, 0-85131-041-9, 0-943396-04-2, 0-9752298-0-X\n         * ISBN 13: 978-0-306-40615-7\n         * - Invalid:\n         * ISBN 10: 99921-58-10-6\n         * ISBN 13: 978-0-306-40615-6\n         *\n         * @see http://en.wikipedia.org/wiki/International_Standard_Book_Number\n         * @param {BootstrapValidator} validator The validator plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} [options] Can consist of the following keys:\n         * - message: The invalid message\n         * @returns {Boolean}\n         */\n        validate: function(validator, $field, options) {\n            var value = $field.val();\n            if (value === '') {\n                return true;\n            }\n\n            // http://en.wikipedia.org/wiki/International_Standard_Book_Number#Overview\n            // Groups are separated by a hyphen or a space\n            var type;\n            switch (true) {\n                case /^\\d{9}[\\dX]$/.test(value):\n                case (value.length === 13 && /^(\\d+)-(\\d+)-(\\d+)-([\\dX])$/.test(value)):\n                case (value.length === 13 && /^(\\d+)\\s(\\d+)\\s(\\d+)\\s([\\dX])$/.test(value)):\n                    type = 'ISBN10';\n                    break;\n                case /^(978|979)\\d{9}[\\dX]$/.test(value):\n                case (value.length === 17 && /^(978|979)-(\\d+)-(\\d+)-(\\d+)-([\\dX])$/.test(value)):\n                case (value.length === 17 && /^(978|979)\\s(\\d+)\\s(\\d+)\\s(\\d+)\\s([\\dX])$/.test(value)):\n                    type = 'ISBN13';\n                    break;\n                default:\n                    return false;\n            }\n\n            // Replace all special characters except digits and X\n            value = value.replace(/[^0-9X]/gi, '');\n            var chars  = value.split(''),\n                length = chars.length,\n                sum    = 0,\n                i,\n                checksum;\n\n            switch (type) {\n                case 'ISBN10':\n                    sum = 0;\n                    for (i = 0; i < length - 1; i++) {\n                        sum += parseInt(chars[i], 10) * (10 - i);\n                    }\n                    checksum = 11 - (sum % 11);\n                    if (checksum === 11) {\n                        checksum = 0;\n                    } else if (checksum === 10) {\n                        checksum = 'X';\n                    }\n                    return (checksum + '' === chars[length - 1]);\n\n                case 'ISBN13':\n                    sum = 0;\n                    for (i = 0; i < length - 1; i++) {\n                        sum += ((i % 2 === 0) ? parseInt(chars[i], 10) : (parseInt(chars[i], 10) * 3));\n                    }\n                    checksum = 10 - (sum % 10);\n                    if (checksum === 10) {\n                        checksum = '0';\n                    }\n                    return (checksum + '' === chars[length - 1]);\n\n                default:\n                    return false;\n            }\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.isin = $.extend($.fn.bootstrapValidator.i18n.isin || {}, {\n        'default': 'Please enter a valid ISIN number'\n    });\n\n    $.fn.bootstrapValidator.validators.isin = {\n        // Available country codes\n        // See http://isin.net/country-codes/\n        COUNTRY_CODES: 'AF|AX|AL|DZ|AS|AD|AO|AI|AQ|AG|AR|AM|AW|AU|AT|AZ|BS|BH|BD|BB|BY|BE|BZ|BJ|BM|BT|BO|BQ|BA|BW|BV|BR|IO|BN|BG|BF|BI|KH|CM|CA|CV|KY|CF|TD|CL|CN|CX|CC|CO|KM|CG|CD|CK|CR|CI|HR|CU|CW|CY|CZ|DK|DJ|DM|DO|EC|EG|SV|GQ|ER|EE|ET|FK|FO|FJ|FI|FR|GF|PF|TF|GA|GM|GE|DE|GH|GI|GR|GL|GD|GP|GU|GT|GG|GN|GW|GY|HT|HM|VA|HN|HK|HU|IS|IN|ID|IR|IQ|IE|IM|IL|IT|JM|JP|JE|JO|KZ|KE|KI|KP|KR|KW|KG|LA|LV|LB|LS|LR|LY|LI|LT|LU|MO|MK|MG|MW|MY|MV|ML|MT|MH|MQ|MR|MU|YT|MX|FM|MD|MC|MN|ME|MS|MA|MZ|MM|NA|NR|NP|NL|NC|NZ|NI|NE|NG|NU|NF|MP|NO|OM|PK|PW|PS|PA|PG|PY|PE|PH|PN|PL|PT|PR|QA|RE|RO|RU|RW|BL|SH|KN|LC|MF|PM|VC|WS|SM|ST|SA|SN|RS|SC|SL|SG|SX|SK|SI|SB|SO|ZA|GS|SS|ES|LK|SD|SR|SJ|SZ|SE|CH|SY|TW|TJ|TZ|TH|TL|TG|TK|TO|TT|TN|TR|TM|TC|TV|UG|UA|AE|GB|US|UM|UY|UZ|VU|VE|VN|VG|VI|WF|EH|YE|ZM|ZW',\n\n        /**\n         * Validate an ISIN (International Securities Identification Number)\n         * Examples:\n         * - Valid: US0378331005, AU0000XVGZA3, GB0002634946\n         * - Invalid: US0378331004, AA0000XVGZA3\n         *\n         * @see http://en.wikipedia.org/wiki/International_Securities_Identifying_Number\n         * @param {BootstrapValidator} validator The validator plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} options Can consist of the following keys:\n         * - message: The invalid message\n         * @returns {Boolean}\n         */\n        validate: function(validator, $field, options) {\n            var value = $field.val();\n            if (value === '') {\n                return true;\n            }\n\n            value = value.toUpperCase();\n            var regex = new RegExp('^(' + this.COUNTRY_CODES + ')[0-9A-Z]{10}$');\n            if (!regex.test(value)) {\n                return false;\n            }\n\n            var converted = '',\n                length    = value.length;\n            // Convert letters to number\n            for (var i = 0; i < length - 1; i++) {\n                var c = value.charCodeAt(i);\n                converted += ((c > 57) ? (c - 55).toString() : value.charAt(i));\n            }\n\n            var digits = '',\n                n      = converted.length,\n                group  = (n % 2 !== 0) ? 0 : 1;\n            for (i = 0; i < n; i++) {\n                digits += (parseInt(converted[i], 10) * ((i % 2) === group ? 2 : 1) + '');\n            }\n\n            var sum = 0;\n            for (i = 0; i < digits.length; i++) {\n                sum += parseInt(digits.charAt(i), 10);\n            }\n            sum = (10 - (sum % 10)) % 10;\n            return sum + '' === value.charAt(length - 1);\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.ismn = $.extend($.fn.bootstrapValidator.i18n.ismn || {}, {\n        'default': 'Please enter a valid ISMN number'\n    });\n\n    $.fn.bootstrapValidator.validators.ismn = {\n        /**\n         * Validate ISMN (International Standard Music Number)\n         * Examples:\n         * - Valid: M230671187, 979-0-0601-1561-5, 979 0 3452 4680 5, 9790060115615\n         * - Invalid: 9790060115614\n         *\n         * @see http://en.wikipedia.org/wiki/International_Standard_Music_Number\n         * @param {BootstrapValidator} validator The validator plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} options Can consist of the following keys:\n         * - message: The invalid message\n         * @returns {Boolean}\n         */\n        validate: function(validator, $field, options) {\n            var value = $field.val();\n            if (value === '') {\n                return true;\n            }\n\n            // Groups are separated by a hyphen or a space\n            var type;\n            switch (true) {\n                case /^M\\d{9}$/.test(value):\n                case /^M-\\d{4}-\\d{4}-\\d{1}$/.test(value):\n                case /^M\\s\\d{4}\\s\\d{4}\\s\\d{1}$/.test(value):\n                    type = 'ISMN10';\n                    break;\n                case /^9790\\d{9}$/.test(value):\n                case /^979-0-\\d{4}-\\d{4}-\\d{1}$/.test(value):\n                case /^979\\s0\\s\\d{4}\\s\\d{4}\\s\\d{1}$/.test(value):\n                    type = 'ISMN13';\n                    break;\n                default:\n                    return false;\n            }\n\n            if ('ISMN10' === type) {\n                value = '9790' + value.substr(1);\n            }\n\n            // Replace all special characters except digits\n            value = value.replace(/[^0-9]/gi, '');\n            var length = value.length,\n                sum    = 0,\n                weight = [1, 3];\n            for (var i = 0; i < length - 1; i++) {\n                sum += parseInt(value.charAt(i), 10) * weight[i % 2];\n            }\n            sum = 10 - sum % 10;\n            return (sum + '' === value.charAt(length - 1));\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.issn = $.extend($.fn.bootstrapValidator.i18n.issn || {}, {\n        'default': 'Please enter a valid ISSN number'\n    });\n\n    $.fn.bootstrapValidator.validators.issn = {\n        /**\n         * Validate ISSN (International Standard Serial Number)\n         * Examples:\n         * - Valid: 0378-5955, 0024-9319, 0032-1478\n         * - Invalid: 0032-147X\n         *\n         * @see http://en.wikipedia.org/wiki/International_Standard_Serial_Number\n         * @param {BootstrapValidator} validator The validator plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} options Can consist of the following keys:\n         * - message: The invalid message\n         * @returns {Boolean}\n         */\n        validate: function(validator, $field, options) {\n            var value = $field.val();\n            if (value === '') {\n                return true;\n            }\n\n            // Groups are separated by a hyphen or a space\n            if (!/^\\d{4}\\-\\d{3}[\\dX]$/.test(value)) {\n                return false;\n            }\n\n            // Replace all special characters except digits and X\n            value = value.replace(/[^0-9X]/gi, '');\n            var chars  = value.split(''),\n                length = chars.length,\n                sum    = 0;\n\n            if (chars[7] === 'X') {\n                chars[7] = 10;\n            }\n            for (var i = 0; i < length; i++) {\n                sum += parseInt(chars[i], 10) * (8 - i);\n            }\n            return (sum % 11 === 0);\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.lessThan = $.extend($.fn.bootstrapValidator.i18n.lessThan || {}, {\n        'default': 'Please enter a value less than or equal to %s',\n        notInclusive: 'Please enter a value less than %s'\n    });\n\n    $.fn.bootstrapValidator.validators.lessThan = {\n        html5Attributes: {\n            message: 'message',\n            value: 'value',\n            inclusive: 'inclusive'\n        },\n\n        enableByHtml5: function($field) {\n            var max = $field.attr('max');\n            if (max) {\n                return {\n                    value: max\n                };\n            }\n\n            return false;\n        },\n\n        /**\n         * Return true if the input value is less than or equal to given number\n         *\n         * @param {BootstrapValidator} validator The validator plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} options Can consist of the following keys:\n         * - value: The number used to compare to. It can be\n         *      - A number\n         *      - Name of field which its value defines the number\n         *      - Name of callback function that returns the number\n         *      - A callback function that returns the number\n         *\n         * - inclusive [optional]: Can be true or false. Default is true\n         * - message: The invalid message\n         * @returns {Boolean|Object}\n         */\n        validate: function(validator, $field, options) {\n            var value = $field.val();\n            if (value === '') {\n                return true;\n            }\n\n            var compareTo = $.isNumeric(options.value) ? options.value : validator.getDynamicOption($field, options.value);\n\n            value = parseFloat(value);\n            return (options.inclusive === true || options.inclusive === undefined)\n                    ? {\n                        valid: value <= compareTo,\n                        message: $.fn.bootstrapValidator.helpers.format(options.message || $.fn.bootstrapValidator.i18n.lessThan['default'], compareTo)\n                    }\n                    : {\n                        valid: value < compareTo,\n                        message: $.fn.bootstrapValidator.helpers.format(options.message || $.fn.bootstrapValidator.i18n.lessThan.notInclusive, compareTo)\n                    };\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.mac = $.extend($.fn.bootstrapValidator.i18n.mac || {}, {\n        'default': 'Please enter a valid MAC address'\n    });\n\n    $.fn.bootstrapValidator.validators.mac = {\n        /**\n         * Return true if the input value is a MAC address.\n         *\n         * @param {BootstrapValidator} validator The validator plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} options Can consist of the following keys:\n         * - message: The invalid message\n         * @returns {Boolean}\n         */\n        validate: function(validator, $field, options) {\n            var value = $field.val();\n            if (value === '') {\n                return true;\n            }\n\n            return /^([0-9A-F]{2}[:-]){5}([0-9A-F]{2})$/.test(value);\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.meid = $.extend($.fn.bootstrapValidator.i18n.meid || {}, {\n        'default': 'Please enter a valid MEID number'\n    });\n\n    $.fn.bootstrapValidator.validators.meid = {\n        /**\n         * Validate MEID (Mobile Equipment Identifier)\n         * Examples:\n         * - Valid: 293608736500703710, 29360-87365-0070-3710, AF0123450ABCDE, AF-012345-0ABCDE\n         * - Invalid: 2936087365007037101\n         *\n         * @see http://en.wikipedia.org/wiki/Mobile_equipment_identifier\n         * @param {BootstrapValidator} validator The validator plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} options Can consist of the following keys:\n         * - message: The invalid message\n         * @returns {Boolean}\n         */\n        validate: function(validator, $field, options) {\n            var value = $field.val();\n            if (value === '') {\n                return true;\n            }\n\n            switch (true) {\n                // 14 digit hex representation (no check digit)\n                case /^[0-9A-F]{15}$/i.test(value):\n                // 14 digit hex representation + dashes or spaces (no check digit)\n                case /^[0-9A-F]{2}[- ][0-9A-F]{6}[- ][0-9A-F]{6}[- ][0-9A-F]$/i.test(value):\n                // 18 digit decimal representation (no check digit)\n                case /^\\d{19}$/.test(value):\n                // 18 digit decimal representation + dashes or spaces (no check digit)\n                case /^\\d{5}[- ]\\d{5}[- ]\\d{4}[- ]\\d{4}[- ]\\d$/.test(value):\n                    // Grab the check digit\n                    var cd = value.charAt(value.length - 1);\n\n                    // Strip any non-hex chars\n                    value = value.replace(/[- ]/g, '');\n\n                    // If it's all digits, luhn base 10 is used\n                    if (value.match(/^\\d*$/i)) {\n                        return $.fn.bootstrapValidator.helpers.luhn(value);\n                    }\n\n                    // Strip the check digit\n                    value = value.slice(0, -1);\n\n                    // Get every other char, and double it\n                    var cdCalc = '';\n                    for (var i = 1; i <= 13; i += 2) {\n                        cdCalc += (parseInt(value.charAt(i), 16) * 2).toString(16);\n                    }\n\n                    // Get the sum of each char in the string\n                    var sum = 0;\n                    for (i = 0; i < cdCalc.length; i++) {\n                        sum += parseInt(cdCalc.charAt(i), 16);\n                    }\n\n                    // If the last digit of the calc is 0, the check digit is 0\n                    return (sum % 10 === 0)\n                            ? (cd === '0')\n                            // Subtract it from the next highest 10s number (64 goes to 70) and subtract the sum\n                            // Double it and turn it into a hex char\n                            : (cd === ((Math.floor((sum + 10) / 10) * 10 - sum) * 2).toString(16));\n\n                // 14 digit hex representation (no check digit)\n                case /^[0-9A-F]{14}$/i.test(value):\n                // 14 digit hex representation + dashes or spaces (no check digit)\n                case /^[0-9A-F]{2}[- ][0-9A-F]{6}[- ][0-9A-F]{6}$/i.test(value):\n                // 18 digit decimal representation (no check digit)\n                case /^\\d{18}$/.test(value):\n                // 18 digit decimal representation + dashes or spaces (no check digit)\n                case /^\\d{5}[- ]\\d{5}[- ]\\d{4}[- ]\\d{4}$/.test(value):\n                    return true;\n\n                default:\n                    return false;\n            }\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.notEmpty = $.extend($.fn.bootstrapValidator.i18n.notEmpty || {}, {\n        'default': 'Please enter a value'\n    });\n\n    $.fn.bootstrapValidator.validators.notEmpty = {\n        enableByHtml5: function($field) {\n            var required = $field.attr('required') + '';\n            return ('required' === required || 'true' === required);\n        },\n\n        /**\n         * Check if input value is empty or not\n         *\n         * @param {BootstrapValidator} validator The validator plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} options\n         * @returns {Boolean}\n         */\n        validate: function(validator, $field, options) {\n            var type = $field.attr('type');\n            if ('radio' === type || 'checkbox' === type) {\n                return validator\n                            .getFieldElements($field.attr('data-bv-field'))\n                            .filter(':checked')\n                            .length > 0;\n            }\n\n            return $.trim($field.val()) !== '';\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.numeric = $.extend($.fn.bootstrapValidator.i18n.numeric || {}, {\n        'default': 'Please enter a valid float number'\n    });\n\n    $.fn.bootstrapValidator.validators.numeric = {\n        html5Attributes: {\n            message: 'message',\n            separator: 'separator'\n        },\n\n        enableByHtml5: function($field) {\n            return ('number' === $field.attr('type')) && ($field.attr('step') !== undefined) && ($field.attr('step') % 1 !== 0);\n        },\n\n        /**\n         * Validate decimal number\n         *\n         * @param {BootstrapValidator} validator The validator plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} options Consist of key:\n         * - message: The invalid message\n         * - separator: The decimal separator. Can be \".\" (default), \",\"\n         * @returns {Boolean}\n         */\n        validate: function(validator, $field, options) {\n            var value = $field.val();\n            if (value === '') {\n                return true;\n            }\n            var separator = options.separator || '.';\n            if (separator !== '.') {\n                value = value.replace(separator, '.');\n            }\n\n            return !isNaN(parseFloat(value)) && isFinite(value);\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.phone = $.extend($.fn.bootstrapValidator.i18n.phone || {}, {\n        'default': 'Please enter a valid phone number',\n        countryNotSupported: 'The country code %s is not supported',\n        country: 'Please enter a valid phone number in %s',\n        countries: {\n            ES: 'Spain',\n            FR: 'France',\n            GB: 'United Kingdom',\n            US: 'USA'\n        }\n    });\n\n    $.fn.bootstrapValidator.validators.phone = {\n        html5Attributes: {\n            message: 'message',\n            country: 'country'\n        },\n\n        // The supported countries\n        COUNTRY_CODES: ['ES', 'FR', 'GB', 'US'],\n\n        /**\n         * Return true if the input value contains a valid phone number for the country\n         * selected in the options\n         *\n         * @param {BootstrapValidator} validator Validate plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} options Consist of key:\n         * - message: The invalid message\n         * - country: The ISO-3166 country code. It can be\n         *      - A country code\n         *      - Name of field which its value defines the country code\n         *      - Name of callback function that returns the country code\n         *      - A callback function that returns the country code\n         *\n         * @returns {Boolean|Object}\n         */\n        validate: function(validator, $field, options) {\n            var value = $field.val();\n            if (value === '') {\n                return true;\n            }\n\n            var country = options.country;\n            if (typeof country !== 'string' || $.inArray(country, this.COUNTRY_CODES) === -1) {\n                // Try to determine the country\n                country = validator.getDynamicOption($field, country);\n            }\n\n            if (!country || $.inArray(country.toUpperCase(), this.COUNTRY_CODES) === -1) {\n                return {\n                    valid: false,\n                    message: $.fn.bootstrapValidator.helpers.format($.fn.bootstrapValidator.i18n.phone.countryNotSupported, country)\n                };\n            }\n\n            var isValid = true;\n            switch (country.toUpperCase()) {\n                case 'ES':\n                    // http://regex101.com/r/rB9mA9/1\n                    value   = $.trim(value);\n                    isValid = (/^(?:(?:(?:\\+|00)34\\D?))?(?:9|6)(?:\\d\\D?){8}$/).test(value);\n                    break;\n\n                case 'FR':\n                    // http://regexr.com/395dq\n                    value   = $.trim(value);\n                    isValid = (/^(?:(?:(?:\\+|00)33\\D?(?:\\D?\\(0\\)\\D?)?)|0){1}[1-9]{1}(?:\\D?\\d{2}){4}$/).test(value);\n                    break;\n\n            \tcase 'GB':\n            \t\t// http://aa-asterisk.org.uk/index.php/Regular_Expressions_for_Validating_and_Formatting_GB_Telephone_Numbers#Match_GB_telephone_number_in_any_format\n            \t\t// Test: http://regexr.com/38uhv\n            \t\tvalue   = $.trim(value);\n            \t\tisValid = (/^\\(?(?:(?:0(?:0|11)\\)?[\\s-]?\\(?|\\+)44\\)?[\\s-]?\\(?(?:0\\)?[\\s-]?\\(?)?|0)(?:\\d{2}\\)?[\\s-]?\\d{4}[\\s-]?\\d{4}|\\d{3}\\)?[\\s-]?\\d{3}[\\s-]?\\d{3,4}|\\d{4}\\)?[\\s-]?(?:\\d{5}|\\d{3}[\\s-]?\\d{3})|\\d{5}\\)?[\\s-]?\\d{4,5}|8(?:00[\\s-]?11[\\s-]?11|45[\\s-]?46[\\s-]?4\\d))(?:(?:[\\s-]?(?:x|ext\\.?\\s?|\\#)\\d+)?)$/).test(value);\n                    break;\n\n                case 'US':\n                /* falls through */\n                default:\n                    // Make sure US phone numbers have 10 digits\n                    // May start with 1, +1, or 1-; should discard\n                    // Area code may be delimited with (), & sections may be delimited with . or -\n                    // Test: http://regexr.com/38mqi\n                    value   = value.replace(/\\D/g, '');\n                    isValid = (/^(?:(1\\-?)|(\\+1 ?))?\\(?(\\d{3})[\\)\\-\\.]?(\\d{3})[\\-\\.]?(\\d{4})$/).test(value) && (value.length === 10);\n                    break;\n            }\n\n            return {\n                valid: isValid,\n                message: $.fn.bootstrapValidator.helpers.format(options.message || $.fn.bootstrapValidator.i18n.phone.country, $.fn.bootstrapValidator.i18n.phone.countries[country])\n            };\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.regexp = $.extend($.fn.bootstrapValidator.i18n.regexp || {}, {\n        'default': 'Please enter a value matching the pattern'\n    });\n\n    $.fn.bootstrapValidator.validators.regexp = {\n        html5Attributes: {\n            message: 'message',\n            regexp: 'regexp'\n        },\n\n        enableByHtml5: function($field) {\n            var pattern = $field.attr('pattern');\n            if (pattern) {\n                return {\n                    regexp: pattern\n                };\n            }\n\n            return false;\n        },\n\n        /**\n         * Check if the element value matches given regular expression\n         *\n         * @param {BootstrapValidator} validator The validator plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} options Consists of the following key:\n         * - regexp: The regular expression you need to check\n         * @returns {Boolean}\n         */\n        validate: function(validator, $field, options) {\n            var value = $field.val();\n            if (value === '') {\n                return true;\n            }\n\n            var regexp = ('string' === typeof options.regexp) ? new RegExp(options.regexp) : options.regexp;\n            return regexp.test(value);\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.remote = $.extend($.fn.bootstrapValidator.i18n.remote || {}, {\n        'default': 'Please enter a valid value'\n    });\n\n    $.fn.bootstrapValidator.validators.remote = {\n        html5Attributes: {\n            message: 'message',\n            url: 'url',\n            name: 'name'\n        },\n\n        /**\n         * Request a remote server to check the input value\n         *\n         * @param {BootstrapValidator} validator Plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} options Can consist of the following keys:\n         * - url {String|Function}\n         * - type {String} [optional] Can be GET or POST (default)\n         * - data {Object|Function} [optional]: By default, it will take the value\n         *  {\n         *      <fieldName>: <fieldValue>\n         *  }\n         * - name {String} [optional]: Override the field name for the request.\n         * - message: The invalid message\n         * @returns {Boolean|Deferred}\n         */\n        validate: function(validator, $field, options) {\n            var value = $field.val();\n            if (value === '') {\n                return true;\n            }\n\n            var name = $field.attr('data-bv-field'),\n                data = options.data || {},\n                url  = options.url,\n                type = options.type || 'POST';\n\n            // Support dynamic data\n            if ('function' === typeof data) {\n                data = data.call(this, validator);\n            }\n\n            // Support dynamic url\n            if ('function' === typeof url) {\n                url = url.call(this, validator);\n            }\n\n            data[options.name || name] = value;\n\n            var dfd = new $.Deferred();\n            var xhr = $.ajax({\n                type: type,\n                url: url,\n                dataType: 'json',\n                data: data\n            });\n            xhr.then(function(response) {\n                dfd.resolve($field, 'remote', response.valid === true || response.valid === 'true', response.message ? response.message : null);\n            });\n\n            dfd.fail(function() {\n                xhr.abort();\n            });\n\n            return dfd;\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.rtn = $.extend($.fn.bootstrapValidator.i18n.rtn || {}, {\n        'default': 'Please enter a valid RTN number'\n    });\n\n    $.fn.bootstrapValidator.validators.rtn = {\n        /**\n         * Validate a RTN (Routing transit number)\n         * Examples:\n         * - Valid: 021200025, 789456124\n         *\n         * @see http://en.wikipedia.org/wiki/Routing_transit_number\n         * @param {BootstrapValidator} validator The validator plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} options Can consist of the following keys:\n         * - message: The invalid message\n         * @returns {Boolean}\n         */\n        validate: function(validator, $field, options) {\n            var value = $field.val();\n            if (value === '') {\n                return true;\n            }\n\n            if (!/^\\d{9}$/.test(value)) {\n                return false;\n            }\n\n            var sum = 0;\n            for (var i = 0; i < value.length; i += 3) {\n                sum += parseInt(value.charAt(i),     10) * 3\n                    +  parseInt(value.charAt(i + 1), 10) * 7\n                    +  parseInt(value.charAt(i + 2), 10);\n            }\n            return (sum !== 0 && sum % 10 === 0);\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.sedol = $.extend($.fn.bootstrapValidator.i18n.sedol || {}, {\n        'default': 'Please enter a valid SEDOL number'\n    });\n\n    $.fn.bootstrapValidator.validators.sedol = {\n        /**\n         * Validate a SEDOL (Stock Exchange Daily Official List)\n         * Examples:\n         * - Valid: 0263494, B0WNLY7\n         *\n         * @see http://en.wikipedia.org/wiki/SEDOL\n         * @param {BootstrapValidator} validator The validator plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} options Can consist of the following keys:\n         * - message: The invalid message\n         * @returns {Boolean}\n         */\n        validate: function(validator, $field, options) {\n            var value = $field.val();\n            if (value === '') {\n                return true;\n            }\n\n            value = value.toUpperCase();\n            if (!/^[0-9A-Z]{7}$/.test(value)) {\n                return false;\n            }\n\n            var sum    = 0,\n                weight = [1, 3, 1, 7, 3, 9, 1],\n                length = value.length;\n            for (var i = 0; i < length - 1; i++) {\n\t            sum += weight[i] * parseInt(value.charAt(i), 36);\n\t        }\n\t        sum = (10 - sum % 10) % 10;\n            return sum + '' === value.charAt(length - 1);\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.siren = $.extend($.fn.bootstrapValidator.i18n.siren || {}, {\n        'default': 'Please enter a valid SIREN number'\n    });\n\n\t$.fn.bootstrapValidator.validators.siren = {\n\t\t/**\n\t\t * Check if a string is a siren number\n\t\t *\n\t\t * @param {BootstrapValidator} validator The validator plugin instance\n\t\t * @param {jQuery} $field Field element\n\t\t * @param {Object} options Consist of key:\n         * - message: The invalid message\n\t\t * @returns {Boolean}\n\t\t */\n\t\tvalidate: function(validator, $field, options) {\n\t\t\tvar value = $field.val();\n\t\t\tif (value === '') {\n\t\t\t\treturn true;\n\t\t\t}\n\n            if (!/^\\d{9}$/.test(value)) {\n                return false;\n            }\n            return $.fn.bootstrapValidator.helpers.luhn(value);\n\t\t}\n\t};\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.siret = $.extend($.fn.bootstrapValidator.i18n.siret || {}, {\n        'default': 'Please enter a valid SIRET number'\n    });\n\n\t$.fn.bootstrapValidator.validators.siret = {\n        /**\n         * Check if a string is a siret number\n         *\n         * @param {BootstrapValidator} validator The validator plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} options Consist of key:\n         * - message: The invalid message\n         * @returns {Boolean}\n         */\n\t\tvalidate: function(validator, $field, options) {\n\t\t\tvar value = $field.val();\n\t\t\tif (value === '') {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tvar sum    = 0,\n                length = value.length,\n                tmp;\n\t\t\tfor (var i = 0; i < length; i++) {\n                tmp = parseInt(value.charAt(i), 10);\n\t\t\t\tif ((i % 2) === 0) {\n\t\t\t\t\ttmp = tmp * 2;\n\t\t\t\t\tif (tmp > 9) {\n\t\t\t\t\t\ttmp -= 9;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tsum += tmp;\n\t\t\t}\n\t\t\treturn (sum % 10 === 0);\n\t\t}\n\t};\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.step = $.extend($.fn.bootstrapValidator.i18n.step || {}, {\n        'default': 'Please enter a valid step of %s'\n    });\n\n    $.fn.bootstrapValidator.validators.step = {\n        html5Attributes: {\n            message: 'message',\n            base: 'baseValue',\n            step: 'step'\n        },\n\n        /**\n         * Return true if the input value is valid step one\n         *\n         * @param {BootstrapValidator} validator The validator plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} options Can consist of the following keys:\n         * - baseValue: The base value\n         * - step: The step\n         * - message: The invalid message\n         * @returns {Boolean|Object}\n         */\n        validate: function(validator, $field, options) {\n            var value = $field.val();\n            if (value === '') {\n                return true;\n            }\n\n            options = $.extend({}, { baseValue: 0, step: 1 }, options);\n            value   = parseFloat(value);\n            if (!$.isNumeric(value)) {\n                return false;\n            }\n\n            var round = function(x, precision) {\n                    var m = Math.pow(10, precision);\n                    x = x * m;\n                    var sign   = (x > 0) | -(x < 0),\n                        isHalf = (x % 1 === 0.5 * sign);\n                    if (isHalf) {\n                        return (Math.floor(x) + (sign > 0)) / m;\n                    } else {\n                        return Math.round(x) / m;\n                    }\n                },\n                floatMod = function(x, y) {\n                    if (y === 0.0) {\n                        return 1.0;\n                    }\n                    var dotX      = (x + '').split('.'),\n                        dotY      = (y + '').split('.'),\n                        precision = ((dotX.length === 1) ? 0 : dotX[1].length) + ((dotY.length === 1) ? 0 : dotY[1].length);\n                    return round(x - y * Math.floor(x / y), precision);\n                };\n\n            var mod = floatMod(value - options.baseValue, options.step);\n            return {\n                valid: mod === 0.0 || mod === options.step,\n                message: $.fn.bootstrapValidator.helpers.format(options.message || $.fn.bootstrapValidator.i18n.step['default'], [options.step])\n            };\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.stringCase = $.extend($.fn.bootstrapValidator.i18n.stringCase || {}, {\n        'default': 'Please enter only lowercase characters',\n        upper: 'Please enter only uppercase characters'\n    });\n\n    $.fn.bootstrapValidator.validators.stringCase = {\n        html5Attributes: {\n            message: 'message',\n            'case': 'case'\n        },\n\n        /**\n         * Check if a string is a lower or upper case one\n         *\n         * @param {BootstrapValidator} validator The validator plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} options Consist of key:\n         * - message: The invalid message\n         * - case: Can be 'lower' (default) or 'upper'\n         * @returns {Object}\n         */\n        validate: function(validator, $field, options) {\n            var value = $field.val();\n            if (value === '') {\n                return true;\n            }\n\n            var stringCase = (options['case'] || 'lower').toLowerCase();\n            return {\n                valid: ('upper' === stringCase) ? value === value.toUpperCase() : value === value.toLowerCase(),\n                message: options.message || (('upper' === stringCase) ? $.fn.bootstrapValidator.i18n.stringCase.upper : $.fn.bootstrapValidator.i18n.stringCase['default'])\n            };\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.stringLength = $.extend($.fn.bootstrapValidator.i18n.stringLength || {}, {\n        'default': 'Please enter a value with valid length',\n        less: 'Please enter less than %s characters',\n        more: 'Please enter more than %s characters',\n        between: 'Please enter value between %s and %s characters long'\n    });\n\n    $.fn.bootstrapValidator.validators.stringLength = {\n        html5Attributes: {\n            message: 'message',\n            min: 'min',\n            max: 'max'\n        },\n\n        enableByHtml5: function($field) {\n            var maxLength = $field.attr('maxlength');\n            if (maxLength) {\n                return {\n                    max: parseInt(maxLength, 10)\n                };\n            }\n\n            return false;\n        },\n\n        /**\n         * Check if the length of element value is less or more than given number\n         *\n         * @param {BootstrapValidator} validator The validator plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} options Consists of following keys:\n         * - min\n         * - max\n         * At least one of two keys is required\n         * The min, max keys define the number which the field value compares to. min, max can be\n         *      - A number\n         *      - Name of field which its value defines the number\n         *      - Name of callback function that returns the number\n         *      - A callback function that returns the number\n         *\n         * - message: The invalid message\n         * @returns {Object}\n         */\n        validate: function(validator, $field, options) {\n            var value = $field.val();\n            if (value === '') {\n                return true;\n            }\n\n            var min     = $.isNumeric(options.min) ? options.min : validator.getDynamicOption($field, options.min),\n                max     = $.isNumeric(options.max) ? options.max : validator.getDynamicOption($field, options.max),\n                length  = value.length,\n                isValid = true,\n                message = options.message || $.fn.bootstrapValidator.i18n.stringLength['default'];\n\n            if ((min && length < parseInt(min, 10)) || (max && length > parseInt(max, 10))) {\n                isValid = false;\n            }\n\n            switch (true) {\n                case (!!min && !!max):\n                    message = $.fn.bootstrapValidator.helpers.format(options.message || $.fn.bootstrapValidator.i18n.stringLength.between, [parseInt(min, 10), parseInt(max, 10)]);\n                    break;\n\n                case (!!min):\n                    message = $.fn.bootstrapValidator.helpers.format(options.message || $.fn.bootstrapValidator.i18n.stringLength.more, parseInt(min, 10));\n                    break;\n\n                case (!!max):\n                    message = $.fn.bootstrapValidator.helpers.format(options.message || $.fn.bootstrapValidator.i18n.stringLength.less, parseInt(max, 10));\n                    break;\n\n                default:\n                    break;\n            }\n\n            return { valid: isValid, message: message };\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.uri = $.extend($.fn.bootstrapValidator.i18n.uri || {}, {\n        'default': 'Please enter a valid URI'\n    });\n\n    $.fn.bootstrapValidator.validators.uri = {\n        html5Attributes: {\n            message: 'message',\n            allowlocal: 'allowLocal'\n        },\n\n        enableByHtml5: function($field) {\n            return ('url' === $field.attr('type'));\n        },\n\n        /**\n         * Return true if the input value is a valid URL\n         *\n         * @param {BootstrapValidator} validator The validator plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} options\n         * - message: The error message\n         * - allowLocal: Allow the private and local network IP. Default to false\n         * @returns {Boolean}\n         */\n        validate: function(validator, $field, options) {\n            var value = $field.val();\n            if (value === '') {\n                return true;\n            }\n\n            // Credit to https://gist.github.com/dperini/729294\n            //\n            // Regular Expression for URL validation\n            //\n            // Author: Diego Perini\n            // Updated: 2010/12/05\n            //\n            // the regular expression composed & commented\n            // could be easily tweaked for RFC compliance,\n            // it was expressly modified to fit & satisfy\n            // these test for an URL shortener:\n            //\n            //   http://mathiasbynens.be/demo/url-regex\n            //\n            // Notes on possible differences from a standard/generic validation:\n            //\n            // - utf-8 char class take in consideration the full Unicode range\n            // - TLDs are mandatory unless `allowLocal` is true\n            // - protocols have been restricted to ftp, http and https only as requested\n            //\n            // Changes:\n            //\n            // - IP address dotted notation validation, range: 1.0.0.0 - 223.255.255.255\n            //   first and last IP address of each class is considered invalid\n            //   (since they are broadcast/network addresses)\n            //\n            // - Added exclusion of private, reserved and/or local networks ranges\n            //   unless `allowLocal` is true\n            //\n            var allowLocal = options.allowLocal === true || options.allowLocal === 'true',\n                urlExp     = new RegExp(\n                    \"^\" +\n                    // protocol identifier\n                    \"(?:(?:https?|ftp)://)\" +\n                    // user:pass authentication\n                    \"(?:\\\\S+(?::\\\\S*)?@)?\" +\n                    \"(?:\" +\n                    // IP address exclusion\n                    // private & local networks\n                    (allowLocal\n                        ? ''\n                        : (\"(?!(?:10|127)(?:\\\\.\\\\d{1,3}){3})\" +\n                           \"(?!(?:169\\\\.254|192\\\\.168)(?:\\\\.\\\\d{1,3}){2})\" +\n                           \"(?!172\\\\.(?:1[6-9]|2\\\\d|3[0-1])(?:\\\\.\\\\d{1,3}){2})\")) +\n                    // IP address dotted notation octets\n                    // excludes loopback network 0.0.0.0\n                    // excludes reserved space >= 224.0.0.0\n                    // excludes network & broadcast addresses\n                    // (first & last IP address of each class)\n                    \"(?:[1-9]\\\\d?|1\\\\d\\\\d|2[01]\\\\d|22[0-3])\" +\n                    \"(?:\\\\.(?:1?\\\\d{1,2}|2[0-4]\\\\d|25[0-5])){2}\" +\n                    \"(?:\\\\.(?:[1-9]\\\\d?|1\\\\d\\\\d|2[0-4]\\\\d|25[0-4]))\" +\n                    \"|\" +\n                    // host name\n                    \"(?:(?:[a-z\\\\u00a1-\\\\uffff0-9]+-?)*[a-z\\\\u00a1-\\\\uffff0-9]+)\" +\n                    // domain name\n                    \"(?:\\\\.(?:[a-z\\\\u00a1-\\\\uffff0-9]+-?)*[a-z\\\\u00a1-\\\\uffff0-9]+)*\" +\n                    // TLD identifier\n                    \"(?:\\\\.(?:[a-z\\\\u00a1-\\\\uffff]{2,}))\" +\n                    // Allow intranet sites (no TLD) if `allowLocal` is true\n                    (allowLocal ? '?' : '') +\n                    \")\" +\n                    // port number\n                    \"(?::\\\\d{2,5})?\" +\n                    // resource path\n                    \"(?:/[^\\\\s]*)?\" +\n                    \"$\", \"i\"\n                );\n\n            return urlExp.test(value);\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.uuid = $.extend($.fn.bootstrapValidator.i18n.uuid || {}, {\n        'default': 'Please enter a valid UUID number',\n        version: 'Please enter a valid UUID version %s number'\n    });\n\n    $.fn.bootstrapValidator.validators.uuid = {\n        html5Attributes: {\n            message: 'message',\n            version: 'version'\n        },\n\n        /**\n         * Return true if and only if the input value is a valid UUID string\n         *\n         * @see http://en.wikipedia.org/wiki/Universally_unique_identifier\n         * @param {BootstrapValidator} validator The validator plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} options Consist of key:\n         * - message: The invalid message\n         * - version: Can be 3, 4, 5, null\n         * @returns {Boolean|Object}\n         */\n        validate: function(validator, $field, options) {\n            var value = $field.val();\n            if (value === '') {\n                return true;\n            }\n\n            // See the format at http://en.wikipedia.org/wiki/Universally_unique_identifier#Variants_and_versions\n            var patterns = {\n                    '3': /^[0-9A-F]{8}-[0-9A-F]{4}-3[0-9A-F]{3}-[0-9A-F]{4}-[0-9A-F]{12}$/i,\n                    '4': /^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i,\n                    '5': /^[0-9A-F]{8}-[0-9A-F]{4}-5[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i,\n                    all: /^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i\n                },\n                version = options.version ? (options.version + '') : 'all';\n            return {\n                valid: (null === patterns[version]) ? true : patterns[version].test(value),\n                message: options.version\n                            ? $.fn.bootstrapValidator.helpers.format(options.message || $.fn.bootstrapValidator.i18n.uuid.version, options.version)\n                            : (options.message || $.fn.bootstrapValidator.i18n.uuid['default'])\n            };\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.vat = $.extend($.fn.bootstrapValidator.i18n.vat || {}, {\n        'default': 'Please enter a valid VAT number',\n        countryNotSupported: 'The country code %s is not supported',\n        country: 'Please enter a valid %s VAT number',\n        countries: {\n            AT: 'Austrian',\n            BE: 'Belgian',\n            BG: 'Bulgarian',\n            CH: 'Swiss',\n            CY: 'Cypriot',\n            CZ: 'Czech',\n            DE: 'German',\n            DK: 'Danish',\n            EE: 'Estonian',\n            ES: 'Spanish',\n            FI: 'Finnish',\n            FR: 'French',\n            GB: 'United Kingdom',\n            GR: 'Greek',\n            EL: 'Greek',\n            HU: 'Hungarian',\n            HR: 'Croatian',\n            IE: 'Irish',\n            IT: 'Italian',\n            LT: 'Lithuanian',\n            LU: 'Luxembourg',\n            LV: 'Latvian',\n            MT: 'Maltese',\n            NL: 'Dutch',\n            NO: 'Norwegian',\n            PL: 'Polish',\n            PT: 'Portuguese',\n            RO: 'Romanian',\n            RU: 'Russian',\n            RS: 'Serbian',\n            SE: 'Swedish',\n            SI: 'Slovenian',\n            SK: 'Slovak'\n        }\n    });\n\n    $.fn.bootstrapValidator.validators.vat = {\n        html5Attributes: {\n            message: 'message',\n            country: 'country'\n        },\n\n        // Supported country codes\n        COUNTRY_CODES: [\n            'AT', 'BE', 'BG', 'HR', 'CY', 'CZ', 'DK', 'EE', 'FI', 'FR', 'DE', 'GR', 'EL', 'HU', 'IE', 'IT',\n            'LV', 'LT', 'LU', 'MT', 'NL', 'NO', 'PL', 'PT', 'RO', 'RU', 'RS', 'SK', 'SI', 'ES', 'SE', 'CH', 'GB'\n        ],\n\n        /**\n         * Validate an European VAT number\n         *\n         * @param {BootstrapValidator} validator The validator plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} options Consist of key:\n         * - message: The invalid message\n         * - country: The ISO 3166-1 country code. It can be\n         *      - One of country code defined in COUNTRY_CODES\n         *      - Name of field which its value defines the country code\n         *      - Name of callback function that returns the country code\n         *      - A callback function that returns the country code\n         * @returns {Boolean|Object}\n         */\n        validate: function(validator, $field, options) {\n            var value = $field.val();\n            if (value === '') {\n                return true;\n            }\n\n            var country = options.country;\n            if (!country) {\n                country = value.substr(0, 2);\n            } else if (typeof country !== 'string' || $.inArray(country.toUpperCase(), this.COUNTRY_CODES) === -1) {\n                // Determine the country code\n                country = validator.getDynamicOption($field, country);\n            }\n\n            if ($.inArray(country, this.COUNTRY_CODES) === -1) {\n                return {\n                    valid: false,\n                    message: $.fn.bootstrapValidator.helpers.format($.fn.bootstrapValidator.i18n.vat.countryNotSupported, country)\n                };\n            }\n\n            var method  = ['_', country.toLowerCase()].join('');\n            return this[method](value)\n                ? true\n                : {\n                    valid: false,\n                    message: $.fn.bootstrapValidator.helpers.format(options.message || $.fn.bootstrapValidator.i18n.vat.country, $.fn.bootstrapValidator.i18n.vat.countries[country.toUpperCase()])\n                };\n        },\n\n        // VAT validators\n\n        /**\n         * Validate Austrian VAT number\n         * Example:\n         * - Valid: ATU13585627\n         * - Invalid: ATU13585626\n         *\n         * @param {String} value VAT number\n         * @returns {Boolean}\n         */\n        _at: function(value) {\n            if (!/^ATU[0-9]{8}$/.test(value)) {\n                return false;\n            }\n\n            value = value.substr(3);\n            var sum    = 0,\n                weight = [1, 2, 1, 2, 1, 2, 1],\n                temp   = 0;\n\n            for (var i = 0; i < 7; i++) {\n                temp = parseInt(value.charAt(i), 10) * weight[i];\n                if (temp > 9) {\n                    temp = Math.floor(temp / 10) + temp % 10;\n                }\n                sum += temp;\n            }\n\n            sum = 10 - (sum + 4) % 10;\n            if (sum === 10) {\n                sum = 0;\n            }\n\n            return (sum + '' === value.substr(7, 1));\n        },\n\n        /**\n         * Validate Belgian VAT number\n         * Example:\n         * - Valid: BE0428759497\n         * - Invalid: BE431150351\n         *\n         * @param {String} value VAT number\n         * @returns {Boolean}\n         */\n        _be: function(value) {\n            if (!/^BE[0]{0,1}[0-9]{9}$/.test(value)) {\n                return false;\n            }\n\n            value = value.substr(2);\n            if (value.length === 9) {\n                value = '0' + value;\n            }\n\n            if (value.substr(1, 1) === '0') {\n                return false;\n            }\n\n            var sum = parseInt(value.substr(0, 8), 10) + parseInt(value.substr(8, 2), 10);\n            return (sum % 97 === 0);\n        },\n\n        /**\n         * Validate Bulgarian VAT number\n         * Example:\n         * - Valid: BG175074752,\n         * BG7523169263, BG8032056031,\n         * BG7542011030,\n         * BG7111042925\n         * - Invalid: BG175074753, BG7552A10004, BG7111042922\n         *\n         * @param {String} value VAT number\n         * @returns {Boolean}\n         */\n        _bg: function(value) {\n            if (!/^BG[0-9]{9,10}$/.test(value)) {\n                return false;\n            }\n\n            value = value.substr(2);\n            var sum = 0, i = 0;\n\n            // Legal entities\n            if (value.length === 9) {\n                for (i = 0; i < 8; i++) {\n                    sum += parseInt(value.charAt(i), 10) * (i + 1);\n                }\n                sum = sum % 11;\n                if (sum === 10) {\n                    sum = 0;\n                    for (i = 0; i < 8; i++) {\n                        sum += parseInt(value.charAt(i), 10) * (i + 3);\n                    }\n                }\n                sum = sum % 10;\n                return (sum + '' === value.substr(8));\n            }\n            // Physical persons, foreigners and others\n            else if (value.length === 10) {\n                // Validate Bulgarian national identification numbers\n                var egn = function(value) {\n                        // Check the birth date\n                        var year  = parseInt(value.substr(0, 2), 10) + 1900,\n                            month = parseInt(value.substr(2, 2), 10),\n                            day   = parseInt(value.substr(4, 2), 10);\n                        if (month > 40) {\n                            year += 100;\n                            month -= 40;\n                        } else if (month > 20) {\n                            year -= 100;\n                            month -= 20;\n                        }\n\n                        if (!$.fn.bootstrapValidator.helpers.date(year, month, day)) {\n                            return false;\n                        }\n\n                        var sum    = 0,\n                            weight = [2, 4, 8, 5, 10, 9, 7, 3, 6];\n                        for (var i = 0; i < 9; i++) {\n                            sum += parseInt(value.charAt(i), 10) * weight[i];\n                        }\n                        sum = (sum % 11) % 10;\n                        return (sum + '' === value.substr(9, 1));\n                    },\n                    // Validate Bulgarian personal number of a foreigner\n                    pnf = function(value) {\n                        var sum    = 0,\n                            weight = [21, 19, 17, 13, 11, 9, 7, 3, 1];\n                        for (var i = 0; i < 9; i++) {\n                            sum += parseInt(value.charAt(i), 10) * weight[i];\n                        }\n                        sum = sum % 10;\n                        return (sum + '' === value.substr(9, 1));\n                    },\n                    // Finally, consider it as a VAT number\n                    vat = function(value) {\n                        var sum    = 0,\n                            weight = [4, 3, 2, 7, 6, 5, 4, 3, 2];\n                        for (var i = 0; i < 9; i++) {\n                            sum += parseInt(value.charAt(i), 10) * weight[i];\n                        }\n                        sum = 11 - sum % 11;\n                        if (sum === 10) {\n                            return false;\n                        }\n                        if (sum === 11) {\n                            sum = 0;\n                        }\n                        return (sum + '' === value.substr(9, 1));\n                    };\n                return (egn(value) || pnf(value) || vat(value));\n            }\n\n            return false;\n        },\n\n        /**\n         * Validate Swiss VAT number\n         *\n         * @param {String} value VAT number\n         * @returns {Boolean}\n         */\n        _ch: function(value) {\n            if (!/^CHE[0-9]{9}(MWST)?$/.test(value)) {\n                return false;\n            }\n\n            value = value.substr(3);\n            var sum    = 0,\n                weight = [5, 4, 3, 2, 7, 6, 5, 4];\n            for (var i = 0; i < 8; i++) {\n                sum += parseInt(value.charAt(i), 10) * weight[i];\n            }\n\n            sum = 11 - sum % 11;\n            if (sum === 10) {\n                return false;\n            }\n            if (sum === 11) {\n                sum = 0;\n            }\n\n            return (sum + '' === value.substr(8, 1));\n        },\n\n        /**\n         * Validate Cypriot VAT number\n         * Examples:\n         * - Valid: CY10259033P\n         * - Invalid: CY10259033Z\n         *\n         * @param {String} value VAT number\n         * @returns {Boolean}\n         */\n        _cy: function(value) {\n            if (!/^CY[0-5|9]{1}[0-9]{7}[A-Z]{1}$/.test(value)) {\n                return false;\n            }\n\n            value = value.substr(2);\n\n            // Do not allow to start with \"12\"\n            if (value.substr(0, 2) === '12') {\n                return false;\n            }\n\n            // Extract the next digit and multiply by the counter.\n            var sum         = 0,\n                translation = {\n                    '0': 1,  '1': 0,  '2': 5,  '3': 7,  '4': 9,\n                    '5': 13, '6': 15, '7': 17, '8': 19, '9': 21\n                };\n            for (var i = 0; i < 8; i++) {\n                var temp = parseInt(value.charAt(i), 10);\n                if (i % 2 === 0) {\n                    temp = translation[temp + ''];\n                }\n                sum += temp;\n            }\n\n            sum = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'[sum % 26];\n            return (sum + '' === value.substr(8, 1));\n        },\n\n        /**\n         * Validate Czech Republic VAT number\n         * Can be:\n         * i) Legal entities (8 digit numbers)\n         * ii) Individuals with a RC (the 9 or 10 digit Czech birth number)\n         * iii) Individuals without a RC (9 digit numbers beginning with 6)\n         *\n         * Examples:\n         * - Valid: i) CZ25123891; ii) CZ7103192745, CZ991231123; iii) CZ640903926\n         * - Invalid: i) CZ25123890; ii) CZ1103492745, CZ590312123\n         *\n         * @param {String} value VAT number\n         * @returns {Boolean}\n         */\n        _cz: function(value) {\n            if (!/^CZ[0-9]{8,10}$/.test(value)) {\n                return false;\n            }\n\n            value = value.substr(2);\n\n            var sum = 0,\n                i   = 0;\n            if (value.length === 8) {\n                // Do not allow to start with '9'\n                if (value.charAt(0) + '' === '9') {\n                    return false;\n                }\n\n                sum = 0;\n                for (i = 0; i < 7; i++) {\n                    sum += parseInt(value.charAt(i), 10) * (8 - i);\n                }\n                sum = 11 - sum % 11;\n                if (sum === 10) {\n                    sum = 0;\n                }\n                if (sum === 11) {\n                    sum = 1;\n                }\n\n                return (sum + '' === value.substr(7, 1));\n            } else if (value.length === 9 && (value.charAt(0) + '' === '6')) {\n                sum = 0;\n                // Skip the first (which is 6)\n                for (i = 0; i < 7; i++) {\n                    sum += parseInt(value.charAt(i + 1), 10) * (8 - i);\n                }\n                sum = 11 - sum % 11;\n                if (sum === 10) {\n                    sum = 0;\n                }\n                if (sum === 11) {\n                    sum = 1;\n                }\n                sum = [8, 7, 6, 5, 4, 3, 2, 1, 0, 9, 10][sum - 1];\n                return (sum + '' === value.substr(8, 1));\n            } else if (value.length === 9 || value.length === 10) {\n                // Validate Czech birth number (Rodné číslo), which is also national identifier\n                var year  = 1900 + parseInt(value.substr(0, 2), 10),\n                    month = parseInt(value.substr(2, 2), 10) % 50 % 20,\n                    day   = parseInt(value.substr(4, 2), 10);\n                if (value.length === 9) {\n                    if (year >= 1980) {\n                        year -= 100;\n                    }\n                    if (year > 1953) {\n                        return false;\n                    }\n                } else if (year < 1954) {\n                    year += 100;\n                }\n\n                if (!$.fn.bootstrapValidator.helpers.date(year, month, day)) {\n                    return false;\n                }\n\n                // Check that the birth date is not in the future\n                if (value.length === 10) {\n                    var check = parseInt(value.substr(0, 9), 10) % 11;\n                    if (year < 1985) {\n                        check = check % 10;\n                    }\n                    return (check + '' === value.substr(9, 1));\n                }\n\n                return true;\n            }\n\n            return false;\n        },\n\n        /**\n         * Validate German VAT number\n         * Examples:\n         * - Valid: DE136695976\n         * - Invalid: DE136695978\n         *\n         * @param {String} value VAT number\n         * @returns {Boolean}\n         */\n        _de: function(value) {\n            if (!/^DE[0-9]{9}$/.test(value)) {\n                return false;\n            }\n\n            value = value.substr(2);\n            return $.fn.bootstrapValidator.helpers.mod11And10(value);\n        },\n\n        /**\n         * Validate Danish VAT number\n         * Example:\n         * - Valid: DK13585628\n         * - Invalid: DK13585627\n         *\n         * @param {String} value VAT number\n         * @returns {Boolean}\n         */\n        _dk: function(value) {\n            if (!/^DK[0-9]{8}$/.test(value)) {\n                return false;\n            }\n\n            value = value.substr(2);\n            var sum    = 0,\n                weight = [2, 7, 6, 5, 4, 3, 2, 1];\n            for (var i = 0; i < 8; i++) {\n                sum += parseInt(value.charAt(i), 10) * weight[i];\n            }\n\n            return (sum % 11 === 0);\n        },\n\n        /**\n         * Validate Estonian VAT number\n         * Examples:\n         * - Valid: EE100931558, EE100594102\n         * - Invalid: EE100594103\n         *\n         * @param {String} value VAT number\n         * @returns {Boolean}\n         */\n        _ee: function(value) {\n            if (!/^EE[0-9]{9}$/.test(value)) {\n                return false;\n            }\n\n            value = value.substr(2);\n            var sum    = 0,\n                weight = [3, 7, 1, 3, 7, 1, 3, 7, 1];\n\n            for (var i = 0; i < 9; i++) {\n                sum += parseInt(value.charAt(i), 10) * weight[i];\n            }\n\n            return (sum % 10 === 0);\n        },\n\n        /**\n         * Validate Spanish VAT number (NIF - Número de Identificación Fiscal)\n         * Can be:\n         * i) DNI (Documento nacional de identidad), for Spaniards\n         * ii) NIE (Número de Identificación de Extranjeros), for foreigners\n         * iii) CIF (Certificado de Identificación Fiscal), for legal entities and others\n         *\n         * Examples:\n         * - Valid: i) ES54362315K; ii) ESX2482300W, ESX5253868R; iii) ESM1234567L, ESJ99216582, ESB58378431, ESB64717838\n         * - Invalid: i) ES54362315Z; ii) ESX2482300A; iii) ESJ99216583\n         *\n         * @param {String} value VAT number\n         * @returns {Boolean}\n         */\n        _es: function(value) {\n            if (!/^ES[0-9A-Z][0-9]{7}[0-9A-Z]$/.test(value)) {\n                return false;\n            }\n\n            value = value.substr(2);\n            var dni = function(value) {\n                    var check = parseInt(value.substr(0, 8), 10);\n                    check = 'TRWAGMYFPDXBNJZSQVHLCKE'[check % 23];\n                    return (check + '' === value.substr(8, 1));\n                },\n                nie = function(value) {\n                    var check = ['XYZ'.indexOf(value.charAt(0)), value.substr(1)].join('');\n                    check = parseInt(check, 10);\n                    check = 'TRWAGMYFPDXBNJZSQVHLCKE'[check % 23];\n                    return (check + '' === value.substr(8, 1));\n                },\n                cif = function(value) {\n                    var first = value.charAt(0), check;\n                    if ('KLM'.indexOf(first) !== -1) {\n                        // K: Spanish younger than 14 year old\n                        // L: Spanish living outside Spain without DNI\n                        // M: Granted the tax to foreigners who have no NIE\n                        check = parseInt(value.substr(1, 8), 10);\n                        check = 'TRWAGMYFPDXBNJZSQVHLCKE'[check % 23];\n                        return (check + '' === value.substr(8, 1));\n                    } else if ('ABCDEFGHJNPQRSUVW'.indexOf(first) !== -1) {\n                        var sum    = 0,\n                            weight = [2, 1, 2, 1, 2, 1, 2],\n                            temp   = 0;\n\n                        for (var i = 0; i < 7; i++) {\n                            temp = parseInt(value.charAt(i + 1), 10) * weight[i];\n                            if (temp > 9) {\n                                temp = Math.floor(temp / 10) + temp % 10;\n                            }\n                            sum += temp;\n                        }\n                        sum = 10 - sum % 10;\n                        return (sum + '' === value.substr(8, 1) || 'JABCDEFGHI'[sum] === value.substr(8, 1));\n                    }\n\n                    return false;\n                };\n\n            var first = value.charAt(0);\n            if (/^[0-9]$/.test(first)) {\n                return dni(value);\n            } else if (/^[XYZ]$/.test(first)) {\n                return nie(value);\n            } else {\n                return cif(value);\n            }\n        },\n\n        /**\n         * Validate Finnish VAT number\n         * Examples:\n         * - Valid: FI20774740\n         * - Invalid: FI20774741\n         *\n         * @param {String} value VAT number\n         * @returns {Boolean}\n         */\n        _fi: function(value) {\n            if (!/^FI[0-9]{8}$/.test(value)) {\n                return false;\n            }\n\n            value = value.substr(2);\n            var sum    = 0,\n                weight = [7, 9, 10, 5, 8, 4, 2, 1];\n\n            for (var i = 0; i < 8; i++) {\n                sum += parseInt(value.charAt(i), 10) * weight[i];\n            }\n\n            return (sum % 11 === 0);\n        },\n\n        /**\n         * Validate French VAT number (TVA - taxe sur la valeur ajoutée)\n         * It's constructed by a SIREN number, prefixed by two characters.\n         *\n         * Examples:\n         * - Valid: FR40303265045, FR23334175221, FRK7399859412, FR4Z123456782\n         * - Invalid: FR84323140391\n         *\n         * @param {String} value VAT number\n         * @returns {Boolean}\n         */\n        _fr: function(value) {\n            if (!/^FR[0-9A-Z]{2}[0-9]{9}$/.test(value)) {\n                return false;\n            }\n\n            value = value.substr(2);\n\n\t\t\tif (!$.fn.bootstrapValidator.helpers.luhn(value.substr(2))) {\n                return false;\n            }\n\n            if (/^[0-9]{2}$/.test(value.substr(0, 2))) {\n                // First two characters are digits\n                return value.substr(0, 2) === (parseInt(value.substr(2) + '12', 10) % 97 + '');\n            } else {\n                // The first characters cann't be O and I\n                var alphabet = '0123456789ABCDEFGHJKLMNPQRSTUVWXYZ',\n                    check;\n                // First one is digit\n                if (/^[0-9]{1}$/.test(value.charAt(0))) {\n                    check = alphabet.indexOf(value.charAt(0)) * 24 + alphabet.indexOf(value.charAt(1)) - 10;\n                } else {\n                    check = alphabet.indexOf(value.charAt(0)) * 34 + alphabet.indexOf(value.charAt(1)) - 100;\n                }\n                return ((parseInt(value.substr(2), 10) + 1 + Math.floor(check / 11)) % 11) === (check % 11);\n            }\n        },\n\n        /**\n         * Validate United Kingdom VAT number\n         * Example:\n         * - Valid: GB980780684\n         * - Invalid: GB802311781\n         *\n         * @param {String} value VAT number\n         * @returns {Boolean}\n         */\n        _gb: function(value) {\n            if (!/^GB[0-9]{9}$/.test(value)             /* Standard */\n                && !/^GB[0-9]{12}$/.test(value)         /* Branches */\n                && !/^GBGD[0-9]{3}$/.test(value)        /* Government department */\n                && !/^GBHA[0-9]{3}$/.test(value)        /* Health authority */\n                && !/^GB(GD|HA)8888[0-9]{5}$/.test(value))\n            {\n                return false;\n            }\n\n            value = value.substr(2);\n            var length = value.length;\n            if (length === 5) {\n                var firstTwo  = value.substr(0, 2),\n                    lastThree = parseInt(value.substr(2), 10);\n                return ('GD' === firstTwo && lastThree < 500) || ('HA' === firstTwo && lastThree >= 500);\n            } else if (length === 11 && ('GD8888' === value.substr(0, 6) || 'HA8888' === value.substr(0, 6))) {\n                if (('GD' === value.substr(0, 2) && parseInt(value.substr(6, 3), 10) >= 500)\n                    || ('HA' === value.substr(0, 2) && parseInt(value.substr(6, 3), 10) < 500))\n                {\n                    return false;\n                }\n                return (parseInt(value.substr(6, 3), 10) % 97 === parseInt(value.substr(9, 2), 10));\n            } else if (length === 9 || length === 12) {\n                var sum    = 0,\n                    weight = [8, 7, 6, 5, 4, 3, 2, 10, 1];\n                for (var i = 0; i < 9; i++) {\n                    sum += parseInt(value.charAt(i), 10) * weight[i];\n                }\n                sum = sum % 97;\n\n                if (parseInt(value.substr(0, 3), 10) >= 100) {\n                    return (sum === 0 || sum === 42 || sum === 55);\n                } else {\n                    return (sum === 0);\n                }\n            }\n\n            return true;\n        },\n\n        /**\n         * Validate Greek VAT number\n         * Examples:\n         * - Valid: GR023456780, EL094259216\n         * - Invalid: EL123456781\n         *\n         * @param {String} value VAT number\n         * @returns {Boolean}\n         */\n        _gr: function(value) {\n            if (!/^GR[0-9]{9}$/.test(value)) {\n                return false;\n            }\n\n            value = value.substr(2);\n            if (value.length === 8) {\n                value = '0' + value;\n            }\n\n            var sum    = 0,\n                weight = [256, 128, 64, 32, 16, 8, 4, 2];\n            for (var i = 0; i < 8; i++) {\n                sum += parseInt(value.charAt(i), 10) * weight[i];\n            }\n            sum = (sum % 11) % 10;\n\n            return (sum + '' === value.substr(8, 1));\n        },\n\n        // EL is traditionally prefix of Greek VAT numbers\n        _el: function(value) {\n            if (!/^EL[0-9]{9}$/.test(value)) {\n                return false;\n            }\n\n            value = 'GR' + value.substr(2);\n            return this._gr(value);\n        },\n\n        /**\n         * Validate Hungarian VAT number\n         * Examples:\n         * - Valid: HU12892312\n         * - Invalid: HU12892313\n         *\n         * @param {String} value VAT number\n         * @returns {Boolean}\n         */\n        _hu: function(value) {\n            if (!/^HU[0-9]{8}$/.test(value)) {\n                return false;\n            }\n\n            value = value.substr(2);\n            var sum    = 0,\n                weight = [9, 7, 3, 1, 9, 7, 3, 1];\n\n            for (var i = 0; i < 8; i++) {\n                sum += parseInt(value.charAt(i), 10) * weight[i];\n            }\n\n            return (sum % 10 === 0);\n        },\n\n        /**\n         * Validate Croatian VAT number\n         * Examples:\n         * - Valid: HR33392005961\n         * - Invalid: HR33392005962\n         *\n         * @param {String} value VAT number\n         * @returns {Boolean}\n         */\n        _hr: function(value) {\n            if (!/^HR[0-9]{11}$/.test(value)) {\n                return false;\n            }\n\n            value = value.substr(2);\n            return $.fn.bootstrapValidator.helpers.mod11And10(value);\n        },\n\n        /**\n         * Validate Irish VAT number\n         * Examples:\n         * - Valid: IE6433435F, IE6433435OA, IE8D79739I\n         * - Invalid: IE8D79738J\n         *\n         * @param {String} value VAT number\n         * @returns {Boolean}\n         */\n        _ie: function(value) {\n            if (!/^IE[0-9]{1}[0-9A-Z\\*\\+]{1}[0-9]{5}[A-Z]{1,2}$/.test(value)) {\n                return false;\n            }\n\n            value = value.substr(2);\n            var getCheckDigit = function(value) {\n                while (value.length < 7) {\n                    value = '0' + value;\n                }\n                var alphabet = 'WABCDEFGHIJKLMNOPQRSTUV',\n                    sum      = 0;\n                for (var i = 0; i < 7; i++) {\n                    sum += parseInt(value.charAt(i), 10) * (8 - i);\n                }\n                sum += 9 * alphabet.indexOf(value.substr(7));\n                return alphabet[sum % 23];\n            };\n\n            // The first 7 characters are digits\n            if (/^[0-9]+$/.test(value.substr(0, 7))) {\n                // New system\n                return value.charAt(7) === getCheckDigit(value.substr(0, 7) + value.substr(8) + '');\n            } else if ('ABCDEFGHIJKLMNOPQRSTUVWXYZ+*'.indexOf(value.charAt(1)) !== -1) {\n                // Old system\n                return value.charAt(7) === getCheckDigit(value.substr(2, 5) + value.substr(0, 1) + '');\n            }\n\n            return true;\n        },\n\n        /**\n         * Validate Italian VAT number, which consists of 11 digits.\n         * - First 7 digits are a company identifier\n         * - Next 3 are the province of residence\n         * - The last one is a check digit\n         *\n         * Examples:\n         * - Valid: IT00743110157\n         * - Invalid: IT00743110158\n         *\n         * @param {String} value VAT number\n         * @returns {Boolean}\n         */\n        _it: function(value) {\n            if (!/^IT[0-9]{11}$/.test(value)) {\n                return false;\n            }\n\n            value = value.substr(2);\n            if (parseInt(value.substr(0, 7), 10) === 0) {\n                return false;\n            }\n\n            var lastThree = parseInt(value.substr(7, 3), 10);\n            if ((lastThree < 1) || (lastThree > 201) && lastThree !== 999 && lastThree !== 888) {\n                return false;\n            }\n\n            return $.fn.bootstrapValidator.helpers.luhn(value);\n        },\n\n        /**\n         * Validate Lithuanian VAT number\n         * It can be:\n         * - 9 digits, for legal entities\n         * - 12 digits, for temporarily registered taxpayers\n         *\n         * Examples:\n         * - Valid: LT119511515, LT100001919017, LT100004801610\n         * - Invalid: LT100001919018\n         *\n         * @param {String} value VAT number\n         * @returns {Boolean}\n         */\n        _lt: function(value) {\n            if (!/^LT([0-9]{7}1[0-9]{1}|[0-9]{10}1[0-9]{1})$/.test(value)) {\n                return false;\n            }\n\n            value = value.substr(2);\n            var length = value.length,\n                sum    = 0,\n                i;\n            for (i = 0; i < length - 1; i++) {\n                sum += parseInt(value.charAt(i), 10) * (1 + i % 9);\n            }\n            var check = sum % 11;\n            if (check === 10) {\n                sum = 0;\n                for (i = 0; i < length - 1; i++) {\n                    sum += parseInt(value.charAt(i), 10) * (1 + (i + 2) % 9);\n                }\n            }\n            check = check % 11 % 10;\n            return (check + '' === value.charAt(length - 1));\n        },\n\n        /**\n         * Validate Luxembourg VAT number\n         * Examples:\n         * - Valid: LU15027442\n         * - Invalid: LU15027443\n         *\n         * @param {String} value VAT number\n         * @returns {Boolean}\n         */\n        _lu: function(value) {\n            if (!/^LU[0-9]{8}$/.test(value)) {\n                return false;\n            }\n\n            value = value.substr(2);\n            return ((parseInt(value.substr(0, 6), 10) % 89) + '' === value.substr(6, 2));\n        },\n\n        /**\n         * Validate Latvian VAT number\n         * Examples:\n         * - Valid: LV40003521600, LV16117519997\n         * - Invalid: LV40003521601, LV16137519997\n         *\n         * @param {String} value VAT number\n         * @returns {Boolean}\n         */\n        _lv: function(value) {\n            if (!/^LV[0-9]{11}$/.test(value)) {\n                return false;\n            }\n\n            value = value.substr(2);\n            var first  = parseInt(value.charAt(0), 10),\n                sum    = 0,\n                weight = [],\n                i,\n                length = value.length;\n            if (first > 3) {\n                // Legal entity\n                sum    = 0;\n                weight = [9, 1, 4, 8, 3, 10, 2, 5, 7, 6, 1];\n                for (i = 0; i < length; i++) {\n                    sum += parseInt(value.charAt(i), 10) * weight[i];\n                }\n                sum = sum % 11;\n                return (sum === 3);\n            } else {\n                // Check birth date\n                var day   = parseInt(value.substr(0, 2), 10),\n                    month = parseInt(value.substr(2, 2), 10),\n                    year  = parseInt(value.substr(4, 2), 10);\n                year = year + 1800 + parseInt(value.charAt(6), 10) * 100;\n\n                if (!$.fn.bootstrapValidator.helpers.date(year, month, day)) {\n                    return false;\n                }\n\n                // Check personal code\n                sum    = 0;\n                weight = [10, 5, 8, 4, 2, 1, 6, 3, 7, 9];\n                for (i = 0; i < length - 1; i++) {\n                    sum += parseInt(value.charAt(i), 10) * weight[i];\n                }\n                sum = (sum + 1) % 11 % 10;\n                return (sum + '' === value.charAt(length - 1));\n            }\n        },\n\n        /**\n         * Validate Maltese VAT number\n         * Examples:\n         * - Valid: MT11679112\n         * - Invalid: MT11679113\n         *\n         * @param {String} value VAT number\n         * @returns {Boolean}\n         */\n        _mt: function(value) {\n            if (!/^MT[0-9]{8}$/.test(value)) {\n                return false;\n            }\n\n            value = value.substr(2);\n            var sum    = 0,\n                weight = [3, 4, 6, 7, 8, 9, 10, 1];\n\n            for (var i = 0; i < 8; i++) {\n                sum += parseInt(value.charAt(i), 10) * weight[i];\n            }\n\n            return (sum % 37 === 0);\n        },\n\n        /**\n         * Validate Dutch VAT number\n         * Examples:\n         * - Valid: NL004495445B01\n         * - Invalid: NL123456789B90\n         *\n         * @param {String} value VAT number\n         * @returns {Boolean}\n         */\n        _nl: function(value) {\n            if (!/^NL[0-9]{9}B[0-9]{2}$/.test(value)) {\n               return false;\n            }\n            value = value.substr(2);\n            var sum    = 0,\n                weight = [9, 8, 7, 6, 5, 4, 3, 2];\n            for (var i = 0; i < 8; i++) {\n                sum += parseInt(value.charAt(i), 10) * weight[i];\n            }\n\n            sum = sum % 11;\n            if (sum > 9) {\n                sum = 0;\n            }\n            return (sum + '' === value.substr(8, 1));\n        },\n\n        /**\n         * Validate Norwegian VAT number\n         *\n         * @see http://www.brreg.no/english/coordination/number.html\n         * @param {String} value VAT number\n         * @returns {Boolean}\n         */\n        _no: function(value) {\n            if (!/^NO[0-9]{9}$/.test(value)) {\n               return false;\n            }\n            value = value.substr(2);\n            var sum    = 0,\n                weight = [3, 2, 7, 6, 5, 4, 3, 2];\n            for (var i = 0; i < 8; i++) {\n                sum += parseInt(value.charAt(i), 10) * weight[i];\n            }\n\n            sum = 11 - sum % 11;\n            if (sum === 11) {\n                sum = 0;\n            }\n            return (sum + '' === value.substr(8, 1));\n        },\n\n        /**\n         * Validate Polish VAT number\n         * Examples:\n         * - Valid: PL8567346215\n         * - Invalid: PL8567346216\n         *\n         * @param {String} value VAT number\n         * @returns {Boolean}\n         */\n        _pl: function(value) {\n            if (!/^PL[0-9]{10}$/.test(value)) {\n                return false;\n            }\n\n            value = value.substr(2);\n            var sum    = 0,\n                weight = [6, 5, 7, 2, 3, 4, 5, 6, 7, -1];\n\n            for (var i = 0; i < 10; i++) {\n                sum += parseInt(value.charAt(i), 10) * weight[i];\n            }\n\n            return (sum % 11 === 0);\n        },\n\n        /**\n         * Validate Portuguese VAT number\n         * Examples:\n         * - Valid: PT501964843\n         * - Invalid: PT501964842\n         *\n         * @param {String} value VAT number\n         * @returns {Boolean}\n         */\n        _pt: function(value) {\n            if (!/^PT[0-9]{9}$/.test(value)) {\n                return false;\n            }\n\n            value = value.substr(2);\n            var sum    = 0,\n                weight = [9, 8, 7, 6, 5, 4, 3, 2];\n\n            for (var i = 0; i < 8; i++) {\n                sum += parseInt(value.charAt(i), 10) * weight[i];\n            }\n            sum = 11 - sum % 11;\n            if (sum > 9) {\n                sum = 0;\n            }\n            return (sum + '' === value.substr(8, 1));\n        },\n\n        /**\n         * Validate Romanian VAT number\n         * Examples:\n         * - Valid: RO18547290\n         * - Invalid: RO18547291\n         *\n         * @param {String} value VAT number\n         * @returns {Boolean}\n         */\n        _ro: function(value) {\n            if (!/^RO[1-9][0-9]{1,9}$/.test(value)) {\n                return false;\n            }\n            value = value.substr(2);\n\n            var length = value.length,\n                weight = [7, 5, 3, 2, 1, 7, 5, 3, 2].slice(10 - length),\n                sum    = 0;\n            for (var i = 0; i < length - 1; i++) {\n                sum += parseInt(value.charAt(i), 10) * weight[i];\n            }\n\n            sum = (10 * sum) % 11 % 10;\n            return (sum + '' === value.substr(length - 1, 1));\n        },\n\n        /**\n         * Validate Russian VAT number (Taxpayer Identification Number - INN)\n         *\n         * @param {String} value VAT number\n         * @returns {Boolean}\n         */\n        _ru: function(value) {\n            if (!/^RU([0-9]{9}|[0-9]{12})$/.test(value)) {\n                return false;\n            }\n\n            value = value.substr(2);\n            var i = 0;\n            if (value.length === 10) {\n                var sum    = 0,\n                    weight = [2, 4, 10, 3, 5, 9, 4, 6, 8, 0];\n                for (i = 0; i < 10; i++) {\n                    sum += parseInt(value.charAt(i), 10) * weight[i];\n                }\n                sum = sum % 11;\n                if (sum > 9) {\n                    sum = sum % 10;\n                }\n\n                return (sum + '' === value.substr(9, 1));\n            } else if (value.length === 12) {\n                var sum1    = 0,\n                    weight1 = [7, 2, 4, 10, 3, 5, 9, 4, 6, 8, 0],\n                    sum2    = 0,\n                    weight2 = [3, 7, 2, 4, 10, 3, 5, 9, 4, 6, 8, 0];\n\n                for (i = 0; i < 11; i++) {\n                    sum1 += parseInt(value.charAt(i), 10) * weight1[i];\n                    sum2 += parseInt(value.charAt(i), 10) * weight2[i];\n                }\n                sum1 = sum1 % 11;\n                if (sum1 > 9) {\n                    sum1 = sum1 % 10;\n                }\n                sum2 = sum2 % 11;\n                if (sum2 > 9) {\n                    sum2 = sum2 % 10;\n                }\n\n                return (sum1 + '' === value.substr(10, 1) && sum2 + '' === value.substr(11, 1));\n            }\n\n            return false;\n        },\n\n        /**\n         * Validate Serbian VAT number\n         *\n         * @param {String} value VAT number\n         * @returns {Boolean}\n         */\n        _rs: function(value) {\n            if (!/^RS[0-9]{9}$/.test(value)) {\n                return false;\n            }\n\n            value = value.substr(2);\n            var sum  = 10,\n                temp = 0;\n            for (var i = 0; i < 8; i++) {\n                temp = (parseInt(value.charAt(i), 10) + sum) % 10;\n                if (temp === 0) {\n                    temp = 10;\n                }\n                sum = (2 * temp) % 11;\n            }\n\n            return ((sum + parseInt(value.substr(8, 1), 10)) % 10 === 1);\n        },\n\n        /**\n         * Validate Swedish VAT number\n         * Examples:\n         * - Valid: SE123456789701\n         * - Invalid: SE123456789101\n         *\n         * @param {String} value VAT number\n         * @returns {Boolean}\n         */\n        _se: function(value) {\n            if (!/^SE[0-9]{10}01$/.test(value)) {\n                return false;\n            }\n\n            value = value.substr(2, 10);\n            return $.fn.bootstrapValidator.helpers.luhn(value);\n        },\n\n        /**\n         * Validate Slovenian VAT number\n         * Examples:\n         * - Valid: SI50223054\n         * - Invalid: SI50223055\n         *\n         * @param {String} value VAT number\n         * @returns {Boolean}\n         */\n        _si: function(value) {\n            if (!/^SI[0-9]{8}$/.test(value)) {\n                return false;\n            }\n\n            value = value.substr(2);\n            var sum    = 0,\n                weight = [8, 7, 6, 5, 4, 3, 2];\n\n            for (var i = 0; i < 7; i++) {\n                sum += parseInt(value.charAt(i), 10) * weight[i];\n            }\n            sum = 11 - sum % 11;\n            if (sum === 10) {\n                sum = 0;\n            }\n            return (sum + '' === value.substr(7, 1));\n        },\n\n        /**\n         * Validate Slovak VAT number\n         * Examples:\n         * - Valid: SK2022749619\n         * - Invalid: SK2022749618\n         *\n         * @param {String} value VAT number\n         * @returns {Boolean}\n         */\n        _sk: function(value) {\n            if (!/^SK[1-9][0-9][(2-4)|(6-9)][0-9]{7}$/.test(value)) {\n                return false;\n            }\n\n            return (parseInt(value.substr(2), 10) % 11 === 0);\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.vin = $.extend($.fn.bootstrapValidator.i18n.vin || {}, {\n        'default': 'Please enter a valid VIN number'\n    });\n\n    $.fn.bootstrapValidator.validators.vin = {\n        /**\n         * Validate an US VIN (Vehicle Identification Number)\n         *\n         * @param {BootstrapValidator} validator The validator plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} options Consist of key:\n         * - message: The invalid message\n         * @returns {Boolean}\n         */\n        validate: function(validator, $field, options) {\n            var value = $field.val();\n            if (value === '') {\n                return true;\n            }\n\n            // Don't accept I, O, Q characters\n            if (!/^[a-hj-npr-z0-9]{8}[0-9xX][a-hj-npr-z0-9]{8}$/i.test(value)) {\n                return false;\n            }\n\n            value = value.toUpperCase();\n            var chars   = {\n                    A: 1,   B: 2,   C: 3,   D: 4,   E: 5,   F: 6,   G: 7,   H: 8,\n                    J: 1,   K: 2,   L: 3,   M: 4,   N: 5,           P: 7,           R: 9,\n                            S: 2,   T: 3,   U: 4,   V: 5,   W: 6,   X: 7,   Y: 8,   Z: 9,\n                    '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9, '0': 0\n                },\n                weights = [8, 7, 6, 5, 4, 3, 2, 10, 0, 9, 8, 7, 6, 5, 4, 3, 2],\n                sum     = 0,\n                length  = value.length;\n            for (var i = 0; i < length; i++) {\n                sum += chars[value.charAt(i) + ''] * weights[i];\n            }\n\n            var reminder = sum % 11;\n            if (reminder === 10) {\n                reminder = 'X';\n            }\n\n            return (reminder + '') === value.charAt(8);\n        }\n    };\n}(window.jQuery));\n;(function($) {\n    $.fn.bootstrapValidator.i18n.zipCode = $.extend($.fn.bootstrapValidator.i18n.zipCode || {}, {\n        'default': 'Please enter a valid zip code',\n        countryNotSupported: 'The country code %s is not supported',\n        country: 'Please enter a valid %s',\n        countries: {\n            CA: 'Canadian postal code',\n            DK: 'Danish postal code',\n            GB: 'United Kingdom postal code',\n            IT: 'Italian postal code',\n            NL: 'Dutch postal code',\n            SE: 'Swiss postal code',\n            SG: 'Singapore postal code',\n            US: 'US zip code'\n        }\n    });\n\n    $.fn.bootstrapValidator.validators.zipCode = {\n        html5Attributes: {\n            message: 'message',\n            country: 'country'\n        },\n\n        COUNTRY_CODES: ['CA', 'DK', 'GB', 'IT', 'NL', 'SE', 'SG', 'US'],\n\n        /**\n         * Return true if and only if the input value is a valid country zip code\n         *\n         * @param {BootstrapValidator} validator The validator plugin instance\n         * @param {jQuery} $field Field element\n         * @param {Object} options Consist of key:\n         * - message: The invalid message\n         * - country: The country\n         *\n         * The country can be defined by:\n         * - An ISO 3166 country code\n         * Currently it supports the following countries:\n         *      - US (United States)\n         *      - CA (Canada)\n         *      - DK (Denmark)\n         *      - GB (United Kingdom)\n         *      - IT (Italy)\n         *      - NL (Netherlands)\n         *      - SE (Sweden)\n         *      - SG (Singapore)\n         *\n         * - Name of field which its value defines the country code\n         * - Name of callback function that returns the country code\n         * - A callback function that returns the country code\n         *\n         * callback: function(value, validator, $field) {\n         *      // value is the value of field\n         *      // validator is the BootstrapValidator instance\n         *      // $field is jQuery element representing the field\n         * }\n         *\n         * @returns {Boolean|Object}\n         */\n        validate: function(validator, $field, options) {\n            var value = $field.val();\n            if (value === '' || !options.country) {\n                return true;\n            }\n\n            var country = options.country;\n            if (typeof country !== 'string' || $.inArray(country, this.COUNTRY_CODES) === -1) {\n                // Try to determine the country\n                country = validator.getDynamicOption($field, country);\n            }\n\n            if (!country || $.inArray(country.toUpperCase(), this.COUNTRY_CODES) === -1) {\n                return { valid: false, message: $.fn.bootstrapValidator.helpers.format($.fn.bootstrapValidator.i18n.zipCode.countryNotSupported, country) };\n            }\n\n            var isValid = false;\n            country = country.toUpperCase();\n            switch (country) {\n                case 'CA':\n                    isValid = /^(?:A|B|C|E|G|H|J|K|L|M|N|P|R|S|T|V|X|Y){1}[0-9]{1}(?:A|B|C|E|G|H|J|K|L|M|N|P|R|S|T|V|W|X|Y|Z){1}\\s?[0-9]{1}(?:A|B|C|E|G|H|J|K|L|M|N|P|R|S|T|V|W|X|Y|Z){1}[0-9]{1}$/i.test(value);\n                    break;\n\n                case 'DK':\n                    isValid = /^(DK(-|\\s)?)?\\d{4}$/i.test(value);\n                    break;\n\n                case 'GB':\n                    isValid = this._gb(value);\n                    break;\n\n                // http://en.wikipedia.org/wiki/List_of_postal_codes_in_Italy\n                case 'IT':\n                    isValid = /^(I-|IT-)?\\d{5}$/i.test(value);\n                    break;\n\n                // http://en.wikipedia.org/wiki/Postal_codes_in_the_Netherlands\n                case 'NL':\n                    isValid = /^[1-9][0-9]{3} ?(?!sa|sd|ss)[a-z]{2}$/i.test(value);\n                    break;\n\n                case 'SE':\n                    isValid = /^(S-)?\\d{3}\\s?\\d{2}$/i.test(value);\n                    break;\n\n                case 'SG':\n                    isValid = /^([0][1-9]|[1-6][0-9]|[7]([0-3]|[5-9])|[8][0-2])(\\d{4})$/i.test(value);\n                    break;\n\n                case 'US':\n                /* falls through */\n                default:\n                    isValid = /^\\d{4,5}([\\-]?\\d{4})?$/.test(value);\n                    break;\n            }\n\n            return {\n                valid: isValid,\n                message: $.fn.bootstrapValidator.helpers.format(options.message || $.fn.bootstrapValidator.i18n.zipCode.country, $.fn.bootstrapValidator.i18n.zipCode.countries[country])\n            };\n        },\n\n        /**\n         * Validate United Kingdom postcode\n         * Examples:\n         * - Standard: EC1A 1BB, W1A 1HQ, M1 1AA, B33 8TH, CR2 6XH, DN55 1PT\n         * - Special cases:\n         * AI-2640, ASCN 1ZZ, GIR 0AA\n         *\n         * @see http://en.wikipedia.org/wiki/Postcodes_in_the_United_Kingdom\n         * @param {String} value The postcode\n         * @returns {Boolean}\n         */\n        _gb: function(value) {\n            var firstChar  = '[ABCDEFGHIJKLMNOPRSTUWYZ]',     // Does not accept QVX\n                secondChar = '[ABCDEFGHKLMNOPQRSTUVWXY]',     // Does not accept IJZ\n                thirdChar  = '[ABCDEFGHJKPMNRSTUVWXY]',\n                fourthChar = '[ABEHMNPRVWXY]',\n                fifthChar  = '[ABDEFGHJLNPQRSTUWXYZ]',\n                regexps    = [\n                    // AN NAA, ANN NAA, AAN NAA, AANN NAA format\n                    new RegExp('^(' + firstChar + '{1}' + secondChar + '?[0-9]{1,2})(\\\\s*)([0-9]{1}' + fifthChar + '{2})$', 'i'),\n                    // ANA NAA\n                    new RegExp('^(' + firstChar + '{1}[0-9]{1}' + thirdChar + '{1})(\\\\s*)([0-9]{1}' + fifthChar + '{2})$', 'i'),\n                    // AANA NAA\n                    new RegExp('^(' + firstChar + '{1}' + secondChar + '{1}?[0-9]{1}' + fourthChar + '{1})(\\\\s*)([0-9]{1}' + fifthChar + '{2})$', 'i'),\n\n                    new RegExp('^(BF1)(\\\\s*)([0-6]{1}[ABDEFGHJLNPQRST]{1}[ABDEFGHJLNPQRSTUWZYZ]{1})$', 'i'),        // BFPO postcodes\n                    /^(GIR)(\\s*)(0AA)$/i,                       // Special postcode GIR 0AA\n                    /^(BFPO)(\\s*)([0-9]{1,4})$/i,               // Standard BFPO numbers\n                    /^(BFPO)(\\s*)(c\\/o\\s*[0-9]{1,3})$/i,        // c/o BFPO numbers\n                    /^([A-Z]{4})(\\s*)(1ZZ)$/i,                  // Overseas Territories\n                    /^(AI-2640)$/i                              // Anguilla\n                ];\n            for (var i = 0; i < regexps.length; i++) {\n                if (regexps[i].test(value)) {\n                    return true;\n                }\n            }\n\n            return false;\n        }\n    };\n}(window.jQuery));\n"
  },
  {
    "path": "automatic/static/js/casemanage.js",
    "content": "/**\n * Created by ray on 16-11-2.\n */\n\nvar keywordlist = []\n$(document).ready(function(){\n    /*  根据项目查询元素进行模糊搜索匹配   */\n    if($(\"#selprojectid\").val() != \"\"){\n        var s1SelectedVal = $('#selprojectid').val();\n        //通过 project 查询对应 element  进行模糊搜索匹配\n        $.ajax({\n        type:\"GET\",\n        data:{'projectid':s1SelectedVal},\n        url: \"/func/element/get/\", //后台处理函数的url 这里用的是static url 需要与urls.py中的name一致\n        cache: false,\n        dataType:'json',\n        async:false,\n\n        success: function(result,TextStatus) {\n            if (result.length > 0) {\n                elementTags = result;\n\n                $('input[name=\"autocomplete\"]').each(function() {\n                    $(this).autocomplete({\n                        minLength: 0,\n                        source: elementTags,\n                        focus: function (event, ui) {\n                            return false;\n                        },\n                        select: function (event, ui) {\n                            $(this).val(ui.item.value);\n                            $(this).next().val(ui.item.key);\n\n                            return false;\n                        },\n\n                    }).data(\"ui-autocomplete\")._renderItem = function (ul, item) {\n                        return $(\"<li>\")\n                                .append('<div class=\"ui-menu-item-wrapper\" title=\"' + item.location.replace(/\"/g, \"'\") + '\">' + item.value + '</div>')\n                                .appendTo(ul);\n                    };\n                })\n            }\n        }\n    });\n    }\n\n    /* 根据产品名称查询关键字列表 */\n    if($('[name=\"caseproductname\"]').val() != \"\"){\n        var productid = $('[name=\"caseproductname\"]').val();\n        $.ajax({\n            type: \"GET\",\n            data: {'productid': productid},\n            url: \"/func/keyword/get/\", //后台处理函数的url 这里用的是static url 需要与urls.py中的name一致\n            cache: false,\n            dataType: 'json',\n\n            success: function (result, TextStatus) {\n                keywordlist = result;\n                if ($('#case_add').length > 0){\n                    $('#keyword_1').empty();\n                    $('#keyword_1').append('<option value=\"\">请选择关键字</option>');\n                    if (result.length > 0) {\n                        for (i = 0; i < result.length; i++) {\n                            $('select[name=\"keyword\"]').append('<option value=\"' + result[i].key + '\">'+'['+ result[i].productid +']'+ result[i].kwdescr + '</option>');\n                        }\n                    }\n                }\n            },\n            error:function (result) {\n                alert(result);\n            }\n        });\n    }\n});\n\n\n\n\n/*    通过project关联对应 element   */\n$(\"#selprojectid\").bind(\"change\",function(){\n    var s1SelectedVal = $('#selprojectid').val();\n    /*  根据项目查询元素进行模糊搜索匹配   */\n    if($(\"#selprojectid\").val() != \"\"){\n        //通过 project 查询对应 element  进行模糊搜索匹配\n        $.ajax({\n            type:\"GET\",\n            data:{'projectid':s1SelectedVal},\n            url: \"/func/element/get/\", //后台处理函数的url 这里用的是static url 需要与urls.py中的name一致\n            cache: false,\n            dataType:'json',\n            async:false,\n\n            success: function(result,TextStatus) {\n                if (result.length > 0) {\n                    elementTags = result;\n                    $('input[name=\"autocomplete\"]').each(function() {\n                        $(this).autocomplete({\n                            minLength: 0,\n                            source: elementTags,\n                            focus: function (event, ui) {\n                                return false;\n                            },\n                            select: function (event, ui) {\n                                $(this).val(ui.item.value);\n                                $(this).next().val(ui.item.key);\n\n                                return false;\n                            },\n\n                        }).data(\"ui-autocomplete\")._renderItem = function (ul, item) {\n                            return $(\"<li>\")\n           .append('<div class=\"ui-menu-item-wrapper\" title=\"' + item.location.replace(/\"/g, \"'\") + '\">' + item.value + '</div>')\n           .appendTo(ul);\n                        };\n                    })\n                }\n            }\n        });\n    }\n});\n\n//行添加\nfunction case_step_addtr() {\n    rowid = $('#rowid').val();\n    var len = parseInt($(\"#linecounter\").val())+1;\n\n    $(\"#tab tbody\").append('<tr id=row'+len+' name=\"rowstep\">'\n        +'<td>'+len+'</td>'\n        +'<td><input name=\"descr\" class=\"ac-acaseedit-input\" placeholder=\"请输入步骤描述\" type=\"input\"></td>'\n        +'<td><select id=\"keyword_'+len+'\" name=\"keyword\" class=\"ak-left ac-aselect col01\"></select></td>'\n        +'<td><input id=\"autocomplete_'+len+'\" name=\"autocomplete\" class=\"ui-autocomplete-input ac-element-input\" type=\"input\"><input type=\"hidden\" id=\"elementid_'+len+'\" name=\"elementid\" value=\"None\"></td>'\n        +'<td><input name=\"inputtext\" class=\"ac-keywordtext-input\" placeholder=\"\" type=\"input\"></td>'\n        +'<td><a  title=\"上移\" class=\"ke-ablock\" onclick=\"up(this)\"><i class=\"glyphicon glyphicon-chevron-up\"></i></a>' +\n        '<a  title=\"下移\" class=\"ke-ablock\" onclick=\"down(this)\"><i class=\"glyphicon glyphicon-chevron-down\"></i></a>' +\n        '<a  title=\"删除\" class=\"ke-ablock\" onclick=\"deltr('+len+')\"><i class=\"glyphicon glyphicon-trash\"></i></a>' +\n        '<a  title=\"复制\" class=\"ke-ablock\" onclick=\"case_step_copytr(this)\"><i class=\"glyphicon glyphicon-copy\"></i></a></td>'\n        +'</tr>');\n    $(\"#linecounter\").val(len);\n    if(rowid != ''){\n        $('#row'+len).insertAfter('#row'+rowid);\n    }\n    $('#rowid').val('');\n    $('#keyword_'+len).empty();\n    if (keywordlist.length > 0) {\n                for (i = 0; i < keywordlist.length; i++) {\n                    $('#keyword_'+len).append('<option value=\"' + keywordlist[i].key + '\">'+'['+ keywordlist[i].productid +']'+ keywordlist[i].kwdescr + '</option>');\n                }\n            }\n\n    $( \"#autocomplete_\" +len ).autocomplete({\n        minLength: 0,\n        source: elementTags,\n        focus: function( event, ui ) {\n            return false;\n        },\n        select: function( event, ui ) {\n            $( \"#autocomplete_\"+len ).val( ui.item.value );\n            $( \"#elementid_\"+len ).val( ui.item.key );\n            return false;\n        },\n    })\n        .data( \"ui-autocomplete\" )._renderItem = function( ul, item ) {\n        return $( \"<li>\" )\n            .append('<div class=\"ui-menu-item-wrapper\" title=\"'+item.location.replace(/\"/g,\"'\")+'\">' + item.value + '</div>')\n            .appendTo( ul );\n    };\n}\n\n//行复制\nfunction case_step_copytr(obj) {\n   // row_num = $('#rowid_copy').val();\n   // var len = parseInt($(\"#linecounter\").val())+1;\n   // copy_rowid= '#row'+row_num\n    var objParentTR = $(obj).parent().parent();\n    copy_rowid = '#'+objParentTR[0].id\n    var len = parseInt($(\"#linecounter\").val())+1;\n    var descr=$(copy_rowid).find($(\"input[name='descr']\"))[0].value;\n    var keyword_selectedIndex=$(copy_rowid).find($(\"select[name='keyword']\"))[0].selectedIndex;\n    var element=$(copy_rowid).find($(\"input[name='autocomplete']\"))[0].value;\n    var element_num=$(copy_rowid).find($(\"input[name='elementid']\"))[0].value;\n    var inputtext=$(copy_rowid).find($(\"input[name='inputtext']\"))[0].value;\n\n    $(\"#tab tbody\").append('<tr id=row'+len+' name=\"rowstep\">'\n        +'<td>'+len+'</td>'\n        +'<td><input name=\"descr\" class=\"ac-acaseedit-input\" placeholder=\"请输入步骤描述\" type=\"input\" ></td>'\n        +'<td><select id=\"keyword_'+len+'\" name=\"keyword\" class=\"ak-left ac-aselect col01\"></select></td>'\n        +'<td><input id=\"autocomplete_'+len+'\" name=\"autocomplete\" class=\"ui-autocomplete-input ac-element-input\" type=\"input\" value='+element+'><input type=\"hidden\" id=\"elementid_'+len+'\" name=\"elementid\" value='+element_num+'></td>'\n        +'<td><input name=\"inputtext\" class=\"ac-keywordtext-input\" placeholder=\"\" type=\"input\" value=\"'+inputtext+'\"></td>'\n        +'<td><a  title=\"上移\" class=\"ke-ablock\" onclick=\"up(this)\"><i class=\"glyphicon glyphicon-chevron-up\"></i></a>' +\n        '<a  title=\"下移\" class=\"ke-ablock\" onclick=\"down(this)\"><i class=\"glyphicon glyphicon-chevron-down\"></i></a>' +\n        '<a  title=\"删除\" class=\"ke-ablock\" onclick=\"deltr('+len+')\"><i class=\"glyphicon glyphicon-trash\"></i></a>' +\n        '<a  title=\"复制\" class=\"ke-ablock\" onclick=\"case_step_copytr(this)\"><i class=\"glyphicon glyphicon-copy\"></i></a></td>'\n        +'</tr>');\n    $(\"#linecounter\").val(len);\n    $(\"#row\"+len).find($(\"input[name='descr']\"))[0].value=descr\n    if(copy_rowid != ''){\n        $('#row'+len).insertAfter('#row'+len);\n    }\n    $('#copy_rowid').val('');\n    $('#keyword_'+len).empty();\n    if (keywordlist.length > 0) {\n                for (i = 0; i < keywordlist.length; i++) {\n                    if(i==keyword_selectedIndex)\n                        $('#keyword_'+len).append('<option value=\"' + keywordlist[i].key + '\" selected=\"selected\">'+'['+ keywordlist[i].productid +']'+ keywordlist[i].kwdescr + '</option>');\n                    else\n                        $('#keyword_'+len).append('<option value=\"' + keywordlist[i].key + '\">'+'['+ keywordlist[i].productid +']'+ keywordlist[i].kwdescr + '</option>');\n                }\n            }\n\n    $( \"#autocomplete_\" +len ).autocomplete({\n        minLength: 0,\n        source: elementTags,\n        focus: function( event, ui ) {\n            return false;\n        },\n        select: function( event, ui ) {\n            $( \"#autocomplete_\"+len ).val( ui.item.value );\n            $( \"#elementid_\"+len ).val( ui.item.key );\n            return false;\n        },\n    })\n        .data( \"ui-autocomplete\" )._renderItem = function( ul, item ) {\n        return $( \"<li>\" )\n            .append('<div class=\"ui-menu-item-wrapper\" title=\"'+item.location.replace(/\"/g,\"'\")+'\">' + item.value + '</div>')\n            .appendTo( ul );\n    };\n}\n//行删除\nfunction deltr(index) {\n    $(\"tr[id='row\"+index+\"']\").remove();//删除当前行\n}"
  },
  {
    "path": "automatic/static/js/common.js",
    "content": "/*\n *\n *   RENAISSANCE - Responsive Admin Theme\n *   version 1.3.0\n *\n*/\n\nvar datetime = null,\n        date = null;\n\nvar update = function () {\n    date = moment(new Date())\n    datetime.html(date.format('h:mm A'));\n};\n\n$(window).on('load', function(){\n    //Preloader\n    setTimeout(function(){\n        $('.preloader').fadeOut(100);\n    }, 500);\n});\n\n\n// check if browser support HTML5 local storage\nfunction localStorageSupport() {\n    return (('localStorage' in window) && window['localStorage'] !== null)\n}\n\n\n  //Personal working platform Sidebar\n\n$(\"li.perwork-btn\").click(function(){\n\n     $(this).toggleClass(\"active\").siblings().removeClass(\"active\");\n\n    var currentEle=$(this);\n    \n    var siblingsElel=currentEle.siblings(\"li.members-btn\");\n\n    $.each(siblingsElel,function(index,ele){\n       $(\"#\"+$(ele).data(\"href\")).removeClass('members-sidebar-open');\n       if($(\"#\"+$(ele).data(\"href\")).hasClass('dropdown-menu')){\n          $(\"#\"+$(ele).data(\"href\")).attr(\"aria-expanded\",\"false\");\n          $(ele).removeClass(\"open\").removeClass(\"active\");\n       }\n    });\n\n    cta($(this)[0], $(\"#\"+currentEle.data(\"href\"))[0], {relativeToWindow: true}, function () {\n      if($(\"#\"+currentEle.data(\"href\")).hasClass('dropdown-menu')){\n        $(\"#\"+currentEle.data(\"href\")).attr(\"aria-expanded\",\"true\");\n        currentEle.toggleClass(\"open\");\n      }else{\n          $(\"#\"+currentEle.data(\"href\")).toggleClass('members-sidebar-open');\n      }\n    });\n\n    $(currentEle.data(\"close\")).click(function(){\n      $(\"#\"+currentEle.data(\"href\")).removeClass('members-sidebar-open');\n      currentEle.removeClass('active');\n    });\n  return false;\n\n});\n\n"
  },
  {
    "path": "automatic/static/js/jquery-ui.js",
    "content": "/*! jQuery UI - v1.12.1 - 2016-09-14\n* http://jqueryui.com\n* Includes: widget.js, position.js, data.js, disable-selection.js, effect.js, effects/effect-blind.js, effects/effect-bounce.js, effects/effect-clip.js, effects/effect-drop.js, effects/effect-explode.js, effects/effect-fade.js, effects/effect-fold.js, effects/effect-highlight.js, effects/effect-puff.js, effects/effect-pulsate.js, effects/effect-scale.js, effects/effect-shake.js, effects/effect-size.js, effects/effect-slide.js, effects/effect-transfer.js, focusable.js, form-reset-mixin.js, jquery-1-7.js, keycode.js, labels.js, scroll-parent.js, tabbable.js, unique-id.js, widgets/accordion.js, widgets/autocomplete.js, widgets/button.js, widgets/checkboxradio.js, widgets/controlgroup.js, widgets/datepicker.js, widgets/dialog.js, widgets/draggable.js, widgets/droppable.js, widgets/menu.js, widgets/mouse.js, widgets/progressbar.js, widgets/resizable.js, widgets/selectable.js, widgets/selectmenu.js, widgets/slider.js, widgets/sortable.js, widgets/spinner.js, widgets/tabs.js, widgets/tooltip.js\n* Copyright jQuery Foundation and other contributors; Licensed MIT */\n\n(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine([ \"jquery\" ], factory );\n\t} else {\n\n\t\t// Browser globals\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n$.ui = $.ui || {};\n\nvar version = $.ui.version = \"1.12.1\";\n\n\n/*!\n * jQuery UI Widget 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Widget\n//>>group: Core\n//>>description: Provides a factory for creating stateful widgets with a common API.\n//>>docs: http://api.jqueryui.com/jQuery.widget/\n//>>demos: http://jqueryui.com/widget/\n\n\n\nvar widgetUuid = 0;\nvar widgetSlice = Array.prototype.slice;\n\n$.cleanData = ( function( orig ) {\n\treturn function( elems ) {\n\t\tvar events, elem, i;\n\t\tfor ( i = 0; ( elem = elems[ i ] ) != null; i++ ) {\n\t\t\ttry {\n\n\t\t\t\t// Only trigger remove when necessary to save time\n\t\t\t\tevents = $._data( elem, \"events\" );\n\t\t\t\tif ( events && events.remove ) {\n\t\t\t\t\t$( elem ).triggerHandler( \"remove\" );\n\t\t\t\t}\n\n\t\t\t// Http://bugs.jquery.com/ticket/8235\n\t\t\t} catch ( e ) {}\n\t\t}\n\t\torig( elems );\n\t};\n} )( $.cleanData );\n\n$.widget = function( name, base, prototype ) {\n\tvar existingConstructor, constructor, basePrototype;\n\n\t// ProxiedPrototype allows the provided prototype to remain unmodified\n\t// so that it can be used as a mixin for multiple widgets (#8876)\n\tvar proxiedPrototype = {};\n\n\tvar namespace = name.split( \".\" )[ 0 ];\n\tname = name.split( \".\" )[ 1 ];\n\tvar fullName = namespace + \"-\" + name;\n\n\tif ( !prototype ) {\n\t\tprototype = base;\n\t\tbase = $.Widget;\n\t}\n\n\tif ( $.isArray( prototype ) ) {\n\t\tprototype = $.extend.apply( null, [ {} ].concat( prototype ) );\n\t}\n\n\t// Create selector for plugin\n\t$.expr[ \":\" ][ fullName.toLowerCase() ] = function( elem ) {\n\t\treturn !!$.data( elem, fullName );\n\t};\n\n\t$[ namespace ] = $[ namespace ] || {};\n\texistingConstructor = $[ namespace ][ name ];\n\tconstructor = $[ namespace ][ name ] = function( options, element ) {\n\n\t\t// Allow instantiation without \"new\" keyword\n\t\tif ( !this._createWidget ) {\n\t\t\treturn new constructor( options, element );\n\t\t}\n\n\t\t// Allow instantiation without initializing for simple inheritance\n\t\t// must use \"new\" keyword (the code above always passes args)\n\t\tif ( arguments.length ) {\n\t\t\tthis._createWidget( options, element );\n\t\t}\n\t};\n\n\t// Extend with the existing constructor to carry over any static properties\n\t$.extend( constructor, existingConstructor, {\n\t\tversion: prototype.version,\n\n\t\t// Copy the object used to create the prototype in case we need to\n\t\t// redefine the widget later\n\t\t_proto: $.extend( {}, prototype ),\n\n\t\t// Track widgets that inherit from this widget in case this widget is\n\t\t// redefined after a widget inherits from it\n\t\t_childConstructors: []\n\t} );\n\n\tbasePrototype = new base();\n\n\t// We need to make the options hash a property directly on the new instance\n\t// otherwise we'll modify the options hash on the prototype that we're\n\t// inheriting from\n\tbasePrototype.options = $.widget.extend( {}, basePrototype.options );\n\t$.each( prototype, function( prop, value ) {\n\t\tif ( !$.isFunction( value ) ) {\n\t\t\tproxiedPrototype[ prop ] = value;\n\t\t\treturn;\n\t\t}\n\t\tproxiedPrototype[ prop ] = ( function() {\n\t\t\tfunction _super() {\n\t\t\t\treturn base.prototype[ prop ].apply( this, arguments );\n\t\t\t}\n\n\t\t\tfunction _superApply( args ) {\n\t\t\t\treturn base.prototype[ prop ].apply( this, args );\n\t\t\t}\n\n\t\t\treturn function() {\n\t\t\t\tvar __super = this._super;\n\t\t\t\tvar __superApply = this._superApply;\n\t\t\t\tvar returnValue;\n\n\t\t\t\tthis._super = _super;\n\t\t\t\tthis._superApply = _superApply;\n\n\t\t\t\treturnValue = value.apply( this, arguments );\n\n\t\t\t\tthis._super = __super;\n\t\t\t\tthis._superApply = __superApply;\n\n\t\t\t\treturn returnValue;\n\t\t\t};\n\t\t} )();\n\t} );\n\tconstructor.prototype = $.widget.extend( basePrototype, {\n\n\t\t// TODO: remove support for widgetEventPrefix\n\t\t// always use the name + a colon as the prefix, e.g., draggable:start\n\t\t// don't prefix for widgets that aren't DOM-based\n\t\twidgetEventPrefix: existingConstructor ? ( basePrototype.widgetEventPrefix || name ) : name\n\t}, proxiedPrototype, {\n\t\tconstructor: constructor,\n\t\tnamespace: namespace,\n\t\twidgetName: name,\n\t\twidgetFullName: fullName\n\t} );\n\n\t// If this widget is being redefined then we need to find all widgets that\n\t// are inheriting from it and redefine all of them so that they inherit from\n\t// the new version of this widget. We're essentially trying to replace one\n\t// level in the prototype chain.\n\tif ( existingConstructor ) {\n\t\t$.each( existingConstructor._childConstructors, function( i, child ) {\n\t\t\tvar childPrototype = child.prototype;\n\n\t\t\t// Redefine the child widget using the same prototype that was\n\t\t\t// originally used, but inherit from the new version of the base\n\t\t\t$.widget( childPrototype.namespace + \".\" + childPrototype.widgetName, constructor,\n\t\t\t\tchild._proto );\n\t\t} );\n\n\t\t// Remove the list of existing child constructors from the old constructor\n\t\t// so the old child constructors can be garbage collected\n\t\tdelete existingConstructor._childConstructors;\n\t} else {\n\t\tbase._childConstructors.push( constructor );\n\t}\n\n\t$.widget.bridge( name, constructor );\n\n\treturn constructor;\n};\n\n$.widget.extend = function( target ) {\n\tvar input = widgetSlice.call( arguments, 1 );\n\tvar inputIndex = 0;\n\tvar inputLength = input.length;\n\tvar key;\n\tvar value;\n\n\tfor ( ; inputIndex < inputLength; inputIndex++ ) {\n\t\tfor ( key in input[ inputIndex ] ) {\n\t\t\tvalue = input[ inputIndex ][ key ];\n\t\t\tif ( input[ inputIndex ].hasOwnProperty( key ) && value !== undefined ) {\n\n\t\t\t\t// Clone objects\n\t\t\t\tif ( $.isPlainObject( value ) ) {\n\t\t\t\t\ttarget[ key ] = $.isPlainObject( target[ key ] ) ?\n\t\t\t\t\t\t$.widget.extend( {}, target[ key ], value ) :\n\n\t\t\t\t\t\t// Don't extend strings, arrays, etc. with objects\n\t\t\t\t\t\t$.widget.extend( {}, value );\n\n\t\t\t\t// Copy everything else by reference\n\t\t\t\t} else {\n\t\t\t\t\ttarget[ key ] = value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn target;\n};\n\n$.widget.bridge = function( name, object ) {\n\tvar fullName = object.prototype.widgetFullName || name;\n\t$.fn[ name ] = function( options ) {\n\t\tvar isMethodCall = typeof options === \"string\";\n\t\tvar args = widgetSlice.call( arguments, 1 );\n\t\tvar returnValue = this;\n\n\t\tif ( isMethodCall ) {\n\n\t\t\t// If this is an empty collection, we need to have the instance method\n\t\t\t// return undefined instead of the jQuery instance\n\t\t\tif ( !this.length && options === \"instance\" ) {\n\t\t\t\treturnValue = undefined;\n\t\t\t} else {\n\t\t\t\tthis.each( function() {\n\t\t\t\t\tvar methodValue;\n\t\t\t\t\tvar instance = $.data( this, fullName );\n\n\t\t\t\t\tif ( options === \"instance\" ) {\n\t\t\t\t\t\treturnValue = instance;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( !instance ) {\n\t\t\t\t\t\treturn $.error( \"cannot call methods on \" + name +\n\t\t\t\t\t\t\t\" prior to initialization; \" +\n\t\t\t\t\t\t\t\"attempted to call method '\" + options + \"'\" );\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( !$.isFunction( instance[ options ] ) || options.charAt( 0 ) === \"_\" ) {\n\t\t\t\t\t\treturn $.error( \"no such method '\" + options + \"' for \" + name +\n\t\t\t\t\t\t\t\" widget instance\" );\n\t\t\t\t\t}\n\n\t\t\t\t\tmethodValue = instance[ options ].apply( instance, args );\n\n\t\t\t\t\tif ( methodValue !== instance && methodValue !== undefined ) {\n\t\t\t\t\t\treturnValue = methodValue && methodValue.jquery ?\n\t\t\t\t\t\t\treturnValue.pushStack( methodValue.get() ) :\n\t\t\t\t\t\t\tmethodValue;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\t\t} else {\n\n\t\t\t// Allow multiple hashes to be passed on init\n\t\t\tif ( args.length ) {\n\t\t\t\toptions = $.widget.extend.apply( null, [ options ].concat( args ) );\n\t\t\t}\n\n\t\t\tthis.each( function() {\n\t\t\t\tvar instance = $.data( this, fullName );\n\t\t\t\tif ( instance ) {\n\t\t\t\t\tinstance.option( options || {} );\n\t\t\t\t\tif ( instance._init ) {\n\t\t\t\t\t\tinstance._init();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t$.data( this, fullName, new object( options, this ) );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn returnValue;\n\t};\n};\n\n$.Widget = function( /* options, element */ ) {};\n$.Widget._childConstructors = [];\n\n$.Widget.prototype = {\n\twidgetName: \"widget\",\n\twidgetEventPrefix: \"\",\n\tdefaultElement: \"<div>\",\n\n\toptions: {\n\t\tclasses: {},\n\t\tdisabled: false,\n\n\t\t// Callbacks\n\t\tcreate: null\n\t},\n\n\t_createWidget: function( options, element ) {\n\t\telement = $( element || this.defaultElement || this )[ 0 ];\n\t\tthis.element = $( element );\n\t\tthis.uuid = widgetUuid++;\n\t\tthis.eventNamespace = \".\" + this.widgetName + this.uuid;\n\n\t\tthis.bindings = $();\n\t\tthis.hoverable = $();\n\t\tthis.focusable = $();\n\t\tthis.classesElementLookup = {};\n\n\t\tif ( element !== this ) {\n\t\t\t$.data( element, this.widgetFullName, this );\n\t\t\tthis._on( true, this.element, {\n\t\t\t\tremove: function( event ) {\n\t\t\t\t\tif ( event.target === element ) {\n\t\t\t\t\t\tthis.destroy();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t\tthis.document = $( element.style ?\n\n\t\t\t\t// Element within the document\n\t\t\t\telement.ownerDocument :\n\n\t\t\t\t// Element is window or document\n\t\t\t\telement.document || element );\n\t\t\tthis.window = $( this.document[ 0 ].defaultView || this.document[ 0 ].parentWindow );\n\t\t}\n\n\t\tthis.options = $.widget.extend( {},\n\t\t\tthis.options,\n\t\t\tthis._getCreateOptions(),\n\t\t\toptions );\n\n\t\tthis._create();\n\n\t\tif ( this.options.disabled ) {\n\t\t\tthis._setOptionDisabled( this.options.disabled );\n\t\t}\n\n\t\tthis._trigger( \"create\", null, this._getCreateEventData() );\n\t\tthis._init();\n\t},\n\n\t_getCreateOptions: function() {\n\t\treturn {};\n\t},\n\n\t_getCreateEventData: $.noop,\n\n\t_create: $.noop,\n\n\t_init: $.noop,\n\n\tdestroy: function() {\n\t\tvar that = this;\n\n\t\tthis._destroy();\n\t\t$.each( this.classesElementLookup, function( key, value ) {\n\t\t\tthat._removeClass( value, key );\n\t\t} );\n\n\t\t// We can probably remove the unbind calls in 2.0\n\t\t// all event bindings should go through this._on()\n\t\tthis.element\n\t\t\t.off( this.eventNamespace )\n\t\t\t.removeData( this.widgetFullName );\n\t\tthis.widget()\n\t\t\t.off( this.eventNamespace )\n\t\t\t.removeAttr( \"aria-disabled\" );\n\n\t\t// Clean up events and states\n\t\tthis.bindings.off( this.eventNamespace );\n\t},\n\n\t_destroy: $.noop,\n\n\twidget: function() {\n\t\treturn this.element;\n\t},\n\n\toption: function( key, value ) {\n\t\tvar options = key;\n\t\tvar parts;\n\t\tvar curOption;\n\t\tvar i;\n\n\t\tif ( arguments.length === 0 ) {\n\n\t\t\t// Don't return a reference to the internal hash\n\t\t\treturn $.widget.extend( {}, this.options );\n\t\t}\n\n\t\tif ( typeof key === \"string\" ) {\n\n\t\t\t// Handle nested keys, e.g., \"foo.bar\" => { foo: { bar: ___ } }\n\t\t\toptions = {};\n\t\t\tparts = key.split( \".\" );\n\t\t\tkey = parts.shift();\n\t\t\tif ( parts.length ) {\n\t\t\t\tcurOption = options[ key ] = $.widget.extend( {}, this.options[ key ] );\n\t\t\t\tfor ( i = 0; i < parts.length - 1; i++ ) {\n\t\t\t\t\tcurOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {};\n\t\t\t\t\tcurOption = curOption[ parts[ i ] ];\n\t\t\t\t}\n\t\t\t\tkey = parts.pop();\n\t\t\t\tif ( arguments.length === 1 ) {\n\t\t\t\t\treturn curOption[ key ] === undefined ? null : curOption[ key ];\n\t\t\t\t}\n\t\t\t\tcurOption[ key ] = value;\n\t\t\t} else {\n\t\t\t\tif ( arguments.length === 1 ) {\n\t\t\t\t\treturn this.options[ key ] === undefined ? null : this.options[ key ];\n\t\t\t\t}\n\t\t\t\toptions[ key ] = value;\n\t\t\t}\n\t\t}\n\n\t\tthis._setOptions( options );\n\n\t\treturn this;\n\t},\n\n\t_setOptions: function( options ) {\n\t\tvar key;\n\n\t\tfor ( key in options ) {\n\t\t\tthis._setOption( key, options[ key ] );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tif ( key === \"classes\" ) {\n\t\t\tthis._setOptionClasses( value );\n\t\t}\n\n\t\tthis.options[ key ] = value;\n\n\t\tif ( key === \"disabled\" ) {\n\t\t\tthis._setOptionDisabled( value );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\t_setOptionClasses: function( value ) {\n\t\tvar classKey, elements, currentElements;\n\n\t\tfor ( classKey in value ) {\n\t\t\tcurrentElements = this.classesElementLookup[ classKey ];\n\t\t\tif ( value[ classKey ] === this.options.classes[ classKey ] ||\n\t\t\t\t\t!currentElements ||\n\t\t\t\t\t!currentElements.length ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// We are doing this to create a new jQuery object because the _removeClass() call\n\t\t\t// on the next line is going to destroy the reference to the current elements being\n\t\t\t// tracked. We need to save a copy of this collection so that we can add the new classes\n\t\t\t// below.\n\t\t\telements = $( currentElements.get() );\n\t\t\tthis._removeClass( currentElements, classKey );\n\n\t\t\t// We don't use _addClass() here, because that uses this.options.classes\n\t\t\t// for generating the string of classes. We want to use the value passed in from\n\t\t\t// _setOption(), this is the new value of the classes option which was passed to\n\t\t\t// _setOption(). We pass this value directly to _classes().\n\t\t\telements.addClass( this._classes( {\n\t\t\t\telement: elements,\n\t\t\t\tkeys: classKey,\n\t\t\t\tclasses: value,\n\t\t\t\tadd: true\n\t\t\t} ) );\n\t\t}\n\t},\n\n\t_setOptionDisabled: function( value ) {\n\t\tthis._toggleClass( this.widget(), this.widgetFullName + \"-disabled\", null, !!value );\n\n\t\t// If the widget is becoming disabled, then nothing is interactive\n\t\tif ( value ) {\n\t\t\tthis._removeClass( this.hoverable, null, \"ui-state-hover\" );\n\t\t\tthis._removeClass( this.focusable, null, \"ui-state-focus\" );\n\t\t}\n\t},\n\n\tenable: function() {\n\t\treturn this._setOptions( { disabled: false } );\n\t},\n\n\tdisable: function() {\n\t\treturn this._setOptions( { disabled: true } );\n\t},\n\n\t_classes: function( options ) {\n\t\tvar full = [];\n\t\tvar that = this;\n\n\t\toptions = $.extend( {\n\t\t\telement: this.element,\n\t\t\tclasses: this.options.classes || {}\n\t\t}, options );\n\n\t\tfunction processClassString( classes, checkOption ) {\n\t\t\tvar current, i;\n\t\t\tfor ( i = 0; i < classes.length; i++ ) {\n\t\t\t\tcurrent = that.classesElementLookup[ classes[ i ] ] || $();\n\t\t\t\tif ( options.add ) {\n\t\t\t\t\tcurrent = $( $.unique( current.get().concat( options.element.get() ) ) );\n\t\t\t\t} else {\n\t\t\t\t\tcurrent = $( current.not( options.element ).get() );\n\t\t\t\t}\n\t\t\t\tthat.classesElementLookup[ classes[ i ] ] = current;\n\t\t\t\tfull.push( classes[ i ] );\n\t\t\t\tif ( checkOption && options.classes[ classes[ i ] ] ) {\n\t\t\t\t\tfull.push( options.classes[ classes[ i ] ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis._on( options.element, {\n\t\t\t\"remove\": \"_untrackClassesElement\"\n\t\t} );\n\n\t\tif ( options.keys ) {\n\t\t\tprocessClassString( options.keys.match( /\\S+/g ) || [], true );\n\t\t}\n\t\tif ( options.extra ) {\n\t\t\tprocessClassString( options.extra.match( /\\S+/g ) || [] );\n\t\t}\n\n\t\treturn full.join( \" \" );\n\t},\n\n\t_untrackClassesElement: function( event ) {\n\t\tvar that = this;\n\t\t$.each( that.classesElementLookup, function( key, value ) {\n\t\t\tif ( $.inArray( event.target, value ) !== -1 ) {\n\t\t\t\tthat.classesElementLookup[ key ] = $( value.not( event.target ).get() );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_removeClass: function( element, keys, extra ) {\n\t\treturn this._toggleClass( element, keys, extra, false );\n\t},\n\n\t_addClass: function( element, keys, extra ) {\n\t\treturn this._toggleClass( element, keys, extra, true );\n\t},\n\n\t_toggleClass: function( element, keys, extra, add ) {\n\t\tadd = ( typeof add === \"boolean\" ) ? add : extra;\n\t\tvar shift = ( typeof element === \"string\" || element === null ),\n\t\t\toptions = {\n\t\t\t\textra: shift ? keys : extra,\n\t\t\t\tkeys: shift ? element : keys,\n\t\t\t\telement: shift ? this.element : element,\n\t\t\t\tadd: add\n\t\t\t};\n\t\toptions.element.toggleClass( this._classes( options ), add );\n\t\treturn this;\n\t},\n\n\t_on: function( suppressDisabledCheck, element, handlers ) {\n\t\tvar delegateElement;\n\t\tvar instance = this;\n\n\t\t// No suppressDisabledCheck flag, shuffle arguments\n\t\tif ( typeof suppressDisabledCheck !== \"boolean\" ) {\n\t\t\thandlers = element;\n\t\t\telement = suppressDisabledCheck;\n\t\t\tsuppressDisabledCheck = false;\n\t\t}\n\n\t\t// No element argument, shuffle and use this.element\n\t\tif ( !handlers ) {\n\t\t\thandlers = element;\n\t\t\telement = this.element;\n\t\t\tdelegateElement = this.widget();\n\t\t} else {\n\t\t\telement = delegateElement = $( element );\n\t\t\tthis.bindings = this.bindings.add( element );\n\t\t}\n\n\t\t$.each( handlers, function( event, handler ) {\n\t\t\tfunction handlerProxy() {\n\n\t\t\t\t// Allow widgets to customize the disabled handling\n\t\t\t\t// - disabled as an array instead of boolean\n\t\t\t\t// - disabled class as method for disabling individual parts\n\t\t\t\tif ( !suppressDisabledCheck &&\n\t\t\t\t\t\t( instance.options.disabled === true ||\n\t\t\t\t\t\t$( this ).hasClass( \"ui-state-disabled\" ) ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\treturn ( typeof handler === \"string\" ? instance[ handler ] : handler )\n\t\t\t\t\t.apply( instance, arguments );\n\t\t\t}\n\n\t\t\t// Copy the guid so direct unbinding works\n\t\t\tif ( typeof handler !== \"string\" ) {\n\t\t\t\thandlerProxy.guid = handler.guid =\n\t\t\t\t\thandler.guid || handlerProxy.guid || $.guid++;\n\t\t\t}\n\n\t\t\tvar match = event.match( /^([\\w:-]*)\\s*(.*)$/ );\n\t\t\tvar eventName = match[ 1 ] + instance.eventNamespace;\n\t\t\tvar selector = match[ 2 ];\n\n\t\t\tif ( selector ) {\n\t\t\t\tdelegateElement.on( eventName, selector, handlerProxy );\n\t\t\t} else {\n\t\t\t\telement.on( eventName, handlerProxy );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_off: function( element, eventName ) {\n\t\teventName = ( eventName || \"\" ).split( \" \" ).join( this.eventNamespace + \" \" ) +\n\t\t\tthis.eventNamespace;\n\t\telement.off( eventName ).off( eventName );\n\n\t\t// Clear the stack to avoid memory leaks (#10056)\n\t\tthis.bindings = $( this.bindings.not( element ).get() );\n\t\tthis.focusable = $( this.focusable.not( element ).get() );\n\t\tthis.hoverable = $( this.hoverable.not( element ).get() );\n\t},\n\n\t_delay: function( handler, delay ) {\n\t\tfunction handlerProxy() {\n\t\t\treturn ( typeof handler === \"string\" ? instance[ handler ] : handler )\n\t\t\t\t.apply( instance, arguments );\n\t\t}\n\t\tvar instance = this;\n\t\treturn setTimeout( handlerProxy, delay || 0 );\n\t},\n\n\t_hoverable: function( element ) {\n\t\tthis.hoverable = this.hoverable.add( element );\n\t\tthis._on( element, {\n\t\t\tmouseenter: function( event ) {\n\t\t\t\tthis._addClass( $( event.currentTarget ), null, \"ui-state-hover\" );\n\t\t\t},\n\t\t\tmouseleave: function( event ) {\n\t\t\t\tthis._removeClass( $( event.currentTarget ), null, \"ui-state-hover\" );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_focusable: function( element ) {\n\t\tthis.focusable = this.focusable.add( element );\n\t\tthis._on( element, {\n\t\t\tfocusin: function( event ) {\n\t\t\t\tthis._addClass( $( event.currentTarget ), null, \"ui-state-focus\" );\n\t\t\t},\n\t\t\tfocusout: function( event ) {\n\t\t\t\tthis._removeClass( $( event.currentTarget ), null, \"ui-state-focus\" );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_trigger: function( type, event, data ) {\n\t\tvar prop, orig;\n\t\tvar callback = this.options[ type ];\n\n\t\tdata = data || {};\n\t\tevent = $.Event( event );\n\t\tevent.type = ( type === this.widgetEventPrefix ?\n\t\t\ttype :\n\t\t\tthis.widgetEventPrefix + type ).toLowerCase();\n\n\t\t// The original event may come from any element\n\t\t// so we need to reset the target on the new event\n\t\tevent.target = this.element[ 0 ];\n\n\t\t// Copy original event properties over to the new event\n\t\torig = event.originalEvent;\n\t\tif ( orig ) {\n\t\t\tfor ( prop in orig ) {\n\t\t\t\tif ( !( prop in event ) ) {\n\t\t\t\t\tevent[ prop ] = orig[ prop ];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.element.trigger( event, data );\n\t\treturn !( $.isFunction( callback ) &&\n\t\t\tcallback.apply( this.element[ 0 ], [ event ].concat( data ) ) === false ||\n\t\t\tevent.isDefaultPrevented() );\n\t}\n};\n\n$.each( { show: \"fadeIn\", hide: \"fadeOut\" }, function( method, defaultEffect ) {\n\t$.Widget.prototype[ \"_\" + method ] = function( element, options, callback ) {\n\t\tif ( typeof options === \"string\" ) {\n\t\t\toptions = { effect: options };\n\t\t}\n\n\t\tvar hasOptions;\n\t\tvar effectName = !options ?\n\t\t\tmethod :\n\t\t\toptions === true || typeof options === \"number\" ?\n\t\t\t\tdefaultEffect :\n\t\t\t\toptions.effect || defaultEffect;\n\n\t\toptions = options || {};\n\t\tif ( typeof options === \"number\" ) {\n\t\t\toptions = { duration: options };\n\t\t}\n\n\t\thasOptions = !$.isEmptyObject( options );\n\t\toptions.complete = callback;\n\n\t\tif ( options.delay ) {\n\t\t\telement.delay( options.delay );\n\t\t}\n\n\t\tif ( hasOptions && $.effects && $.effects.effect[ effectName ] ) {\n\t\t\telement[ method ]( options );\n\t\t} else if ( effectName !== method && element[ effectName ] ) {\n\t\t\telement[ effectName ]( options.duration, options.easing, callback );\n\t\t} else {\n\t\t\telement.queue( function( next ) {\n\t\t\t\t$( this )[ method ]();\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback.call( element[ 0 ] );\n\t\t\t\t}\n\t\t\t\tnext();\n\t\t\t} );\n\t\t}\n\t};\n} );\n\nvar widget = $.widget;\n\n\n/*!\n * jQuery UI Position 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/position/\n */\n\n//>>label: Position\n//>>group: Core\n//>>description: Positions elements relative to other elements.\n//>>docs: http://api.jqueryui.com/position/\n//>>demos: http://jqueryui.com/position/\n\n\n( function() {\nvar cachedScrollbarWidth,\n\tmax = Math.max,\n\tabs = Math.abs,\n\trhorizontal = /left|center|right/,\n\trvertical = /top|center|bottom/,\n\troffset = /[\\+\\-]\\d+(\\.[\\d]+)?%?/,\n\trposition = /^\\w+/,\n\trpercent = /%$/,\n\t_position = $.fn.position;\n\nfunction getOffsets( offsets, width, height ) {\n\treturn [\n\t\tparseFloat( offsets[ 0 ] ) * ( rpercent.test( offsets[ 0 ] ) ? width / 100 : 1 ),\n\t\tparseFloat( offsets[ 1 ] ) * ( rpercent.test( offsets[ 1 ] ) ? height / 100 : 1 )\n\t];\n}\n\nfunction parseCss( element, property ) {\n\treturn parseInt( $.css( element, property ), 10 ) || 0;\n}\n\nfunction getDimensions( elem ) {\n\tvar raw = elem[ 0 ];\n\tif ( raw.nodeType === 9 ) {\n\t\treturn {\n\t\t\twidth: elem.width(),\n\t\t\theight: elem.height(),\n\t\t\toffset: { top: 0, left: 0 }\n\t\t};\n\t}\n\tif ( $.isWindow( raw ) ) {\n\t\treturn {\n\t\t\twidth: elem.width(),\n\t\t\theight: elem.height(),\n\t\t\toffset: { top: elem.scrollTop(), left: elem.scrollLeft() }\n\t\t};\n\t}\n\tif ( raw.preventDefault ) {\n\t\treturn {\n\t\t\twidth: 0,\n\t\t\theight: 0,\n\t\t\toffset: { top: raw.pageY, left: raw.pageX }\n\t\t};\n\t}\n\treturn {\n\t\twidth: elem.outerWidth(),\n\t\theight: elem.outerHeight(),\n\t\toffset: elem.offset()\n\t};\n}\n\n$.position = {\n\tscrollbarWidth: function() {\n\t\tif ( cachedScrollbarWidth !== undefined ) {\n\t\t\treturn cachedScrollbarWidth;\n\t\t}\n\t\tvar w1, w2,\n\t\t\tdiv = $( \"<div \" +\n\t\t\t\t\"style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'>\" +\n\t\t\t\t\"<div style='height:100px;width:auto;'></div></div>\" ),\n\t\t\tinnerDiv = div.children()[ 0 ];\n\n\t\t$( \"body\" ).append( div );\n\t\tw1 = innerDiv.offsetWidth;\n\t\tdiv.css( \"overflow\", \"scroll\" );\n\n\t\tw2 = innerDiv.offsetWidth;\n\n\t\tif ( w1 === w2 ) {\n\t\t\tw2 = div[ 0 ].clientWidth;\n\t\t}\n\n\t\tdiv.remove();\n\n\t\treturn ( cachedScrollbarWidth = w1 - w2 );\n\t},\n\tgetScrollInfo: function( within ) {\n\t\tvar overflowX = within.isWindow || within.isDocument ? \"\" :\n\t\t\t\twithin.element.css( \"overflow-x\" ),\n\t\t\toverflowY = within.isWindow || within.isDocument ? \"\" :\n\t\t\t\twithin.element.css( \"overflow-y\" ),\n\t\t\thasOverflowX = overflowX === \"scroll\" ||\n\t\t\t\t( overflowX === \"auto\" && within.width < within.element[ 0 ].scrollWidth ),\n\t\t\thasOverflowY = overflowY === \"scroll\" ||\n\t\t\t\t( overflowY === \"auto\" && within.height < within.element[ 0 ].scrollHeight );\n\t\treturn {\n\t\t\twidth: hasOverflowY ? $.position.scrollbarWidth() : 0,\n\t\t\theight: hasOverflowX ? $.position.scrollbarWidth() : 0\n\t\t};\n\t},\n\tgetWithinInfo: function( element ) {\n\t\tvar withinElement = $( element || window ),\n\t\t\tisWindow = $.isWindow( withinElement[ 0 ] ),\n\t\t\tisDocument = !!withinElement[ 0 ] && withinElement[ 0 ].nodeType === 9,\n\t\t\thasOffset = !isWindow && !isDocument;\n\t\treturn {\n\t\t\telement: withinElement,\n\t\t\tisWindow: isWindow,\n\t\t\tisDocument: isDocument,\n\t\t\toffset: hasOffset ? $( element ).offset() : { left: 0, top: 0 },\n\t\t\tscrollLeft: withinElement.scrollLeft(),\n\t\t\tscrollTop: withinElement.scrollTop(),\n\t\t\twidth: withinElement.outerWidth(),\n\t\t\theight: withinElement.outerHeight()\n\t\t};\n\t}\n};\n\n$.fn.position = function( options ) {\n\tif ( !options || !options.of ) {\n\t\treturn _position.apply( this, arguments );\n\t}\n\n\t// Make a copy, we don't want to modify arguments\n\toptions = $.extend( {}, options );\n\n\tvar atOffset, targetWidth, targetHeight, targetOffset, basePosition, dimensions,\n\t\ttarget = $( options.of ),\n\t\twithin = $.position.getWithinInfo( options.within ),\n\t\tscrollInfo = $.position.getScrollInfo( within ),\n\t\tcollision = ( options.collision || \"flip\" ).split( \" \" ),\n\t\toffsets = {};\n\n\tdimensions = getDimensions( target );\n\tif ( target[ 0 ].preventDefault ) {\n\n\t\t// Force left top to allow flipping\n\t\toptions.at = \"left top\";\n\t}\n\ttargetWidth = dimensions.width;\n\ttargetHeight = dimensions.height;\n\ttargetOffset = dimensions.offset;\n\n\t// Clone to reuse original targetOffset later\n\tbasePosition = $.extend( {}, targetOffset );\n\n\t// Force my and at to have valid horizontal and vertical positions\n\t// if a value is missing or invalid, it will be converted to center\n\t$.each( [ \"my\", \"at\" ], function() {\n\t\tvar pos = ( options[ this ] || \"\" ).split( \" \" ),\n\t\t\thorizontalOffset,\n\t\t\tverticalOffset;\n\n\t\tif ( pos.length === 1 ) {\n\t\t\tpos = rhorizontal.test( pos[ 0 ] ) ?\n\t\t\t\tpos.concat( [ \"center\" ] ) :\n\t\t\t\trvertical.test( pos[ 0 ] ) ?\n\t\t\t\t\t[ \"center\" ].concat( pos ) :\n\t\t\t\t\t[ \"center\", \"center\" ];\n\t\t}\n\t\tpos[ 0 ] = rhorizontal.test( pos[ 0 ] ) ? pos[ 0 ] : \"center\";\n\t\tpos[ 1 ] = rvertical.test( pos[ 1 ] ) ? pos[ 1 ] : \"center\";\n\n\t\t// Calculate offsets\n\t\thorizontalOffset = roffset.exec( pos[ 0 ] );\n\t\tverticalOffset = roffset.exec( pos[ 1 ] );\n\t\toffsets[ this ] = [\n\t\t\thorizontalOffset ? horizontalOffset[ 0 ] : 0,\n\t\t\tverticalOffset ? verticalOffset[ 0 ] : 0\n\t\t];\n\n\t\t// Reduce to just the positions without the offsets\n\t\toptions[ this ] = [\n\t\t\trposition.exec( pos[ 0 ] )[ 0 ],\n\t\t\trposition.exec( pos[ 1 ] )[ 0 ]\n\t\t];\n\t} );\n\n\t// Normalize collision option\n\tif ( collision.length === 1 ) {\n\t\tcollision[ 1 ] = collision[ 0 ];\n\t}\n\n\tif ( options.at[ 0 ] === \"right\" ) {\n\t\tbasePosition.left += targetWidth;\n\t} else if ( options.at[ 0 ] === \"center\" ) {\n\t\tbasePosition.left += targetWidth / 2;\n\t}\n\n\tif ( options.at[ 1 ] === \"bottom\" ) {\n\t\tbasePosition.top += targetHeight;\n\t} else if ( options.at[ 1 ] === \"center\" ) {\n\t\tbasePosition.top += targetHeight / 2;\n\t}\n\n\tatOffset = getOffsets( offsets.at, targetWidth, targetHeight );\n\tbasePosition.left += atOffset[ 0 ];\n\tbasePosition.top += atOffset[ 1 ];\n\n\treturn this.each( function() {\n\t\tvar collisionPosition, using,\n\t\t\telem = $( this ),\n\t\t\telemWidth = elem.outerWidth(),\n\t\t\telemHeight = elem.outerHeight(),\n\t\t\tmarginLeft = parseCss( this, \"marginLeft\" ),\n\t\t\tmarginTop = parseCss( this, \"marginTop\" ),\n\t\t\tcollisionWidth = elemWidth + marginLeft + parseCss( this, \"marginRight\" ) +\n\t\t\t\tscrollInfo.width,\n\t\t\tcollisionHeight = elemHeight + marginTop + parseCss( this, \"marginBottom\" ) +\n\t\t\t\tscrollInfo.height,\n\t\t\tposition = $.extend( {}, basePosition ),\n\t\t\tmyOffset = getOffsets( offsets.my, elem.outerWidth(), elem.outerHeight() );\n\n\t\tif ( options.my[ 0 ] === \"right\" ) {\n\t\t\tposition.left -= elemWidth;\n\t\t} else if ( options.my[ 0 ] === \"center\" ) {\n\t\t\tposition.left -= elemWidth / 2;\n\t\t}\n\n\t\tif ( options.my[ 1 ] === \"bottom\" ) {\n\t\t\tposition.top -= elemHeight;\n\t\t} else if ( options.my[ 1 ] === \"center\" ) {\n\t\t\tposition.top -= elemHeight / 2;\n\t\t}\n\n\t\tposition.left += myOffset[ 0 ];\n\t\tposition.top += myOffset[ 1 ];\n\n\t\tcollisionPosition = {\n\t\t\tmarginLeft: marginLeft,\n\t\t\tmarginTop: marginTop\n\t\t};\n\n\t\t$.each( [ \"left\", \"top\" ], function( i, dir ) {\n\t\t\tif ( $.ui.position[ collision[ i ] ] ) {\n\t\t\t\t$.ui.position[ collision[ i ] ][ dir ]( position, {\n\t\t\t\t\ttargetWidth: targetWidth,\n\t\t\t\t\ttargetHeight: targetHeight,\n\t\t\t\t\telemWidth: elemWidth,\n\t\t\t\t\telemHeight: elemHeight,\n\t\t\t\t\tcollisionPosition: collisionPosition,\n\t\t\t\t\tcollisionWidth: collisionWidth,\n\t\t\t\t\tcollisionHeight: collisionHeight,\n\t\t\t\t\toffset: [ atOffset[ 0 ] + myOffset[ 0 ], atOffset [ 1 ] + myOffset[ 1 ] ],\n\t\t\t\t\tmy: options.my,\n\t\t\t\t\tat: options.at,\n\t\t\t\t\twithin: within,\n\t\t\t\t\telem: elem\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\n\t\tif ( options.using ) {\n\n\t\t\t// Adds feedback as second argument to using callback, if present\n\t\t\tusing = function( props ) {\n\t\t\t\tvar left = targetOffset.left - position.left,\n\t\t\t\t\tright = left + targetWidth - elemWidth,\n\t\t\t\t\ttop = targetOffset.top - position.top,\n\t\t\t\t\tbottom = top + targetHeight - elemHeight,\n\t\t\t\t\tfeedback = {\n\t\t\t\t\t\ttarget: {\n\t\t\t\t\t\t\telement: target,\n\t\t\t\t\t\t\tleft: targetOffset.left,\n\t\t\t\t\t\t\ttop: targetOffset.top,\n\t\t\t\t\t\t\twidth: targetWidth,\n\t\t\t\t\t\t\theight: targetHeight\n\t\t\t\t\t\t},\n\t\t\t\t\t\telement: {\n\t\t\t\t\t\t\telement: elem,\n\t\t\t\t\t\t\tleft: position.left,\n\t\t\t\t\t\t\ttop: position.top,\n\t\t\t\t\t\t\twidth: elemWidth,\n\t\t\t\t\t\t\theight: elemHeight\n\t\t\t\t\t\t},\n\t\t\t\t\t\thorizontal: right < 0 ? \"left\" : left > 0 ? \"right\" : \"center\",\n\t\t\t\t\t\tvertical: bottom < 0 ? \"top\" : top > 0 ? \"bottom\" : \"middle\"\n\t\t\t\t\t};\n\t\t\t\tif ( targetWidth < elemWidth && abs( left + right ) < targetWidth ) {\n\t\t\t\t\tfeedback.horizontal = \"center\";\n\t\t\t\t}\n\t\t\t\tif ( targetHeight < elemHeight && abs( top + bottom ) < targetHeight ) {\n\t\t\t\t\tfeedback.vertical = \"middle\";\n\t\t\t\t}\n\t\t\t\tif ( max( abs( left ), abs( right ) ) > max( abs( top ), abs( bottom ) ) ) {\n\t\t\t\t\tfeedback.important = \"horizontal\";\n\t\t\t\t} else {\n\t\t\t\t\tfeedback.important = \"vertical\";\n\t\t\t\t}\n\t\t\t\toptions.using.call( this, props, feedback );\n\t\t\t};\n\t\t}\n\n\t\telem.offset( $.extend( position, { using: using } ) );\n\t} );\n};\n\n$.ui.position = {\n\tfit: {\n\t\tleft: function( position, data ) {\n\t\t\tvar within = data.within,\n\t\t\t\twithinOffset = within.isWindow ? within.scrollLeft : within.offset.left,\n\t\t\t\touterWidth = within.width,\n\t\t\t\tcollisionPosLeft = position.left - data.collisionPosition.marginLeft,\n\t\t\t\toverLeft = withinOffset - collisionPosLeft,\n\t\t\t\toverRight = collisionPosLeft + data.collisionWidth - outerWidth - withinOffset,\n\t\t\t\tnewOverRight;\n\n\t\t\t// Element is wider than within\n\t\t\tif ( data.collisionWidth > outerWidth ) {\n\n\t\t\t\t// Element is initially over the left side of within\n\t\t\t\tif ( overLeft > 0 && overRight <= 0 ) {\n\t\t\t\t\tnewOverRight = position.left + overLeft + data.collisionWidth - outerWidth -\n\t\t\t\t\t\twithinOffset;\n\t\t\t\t\tposition.left += overLeft - newOverRight;\n\n\t\t\t\t// Element is initially over right side of within\n\t\t\t\t} else if ( overRight > 0 && overLeft <= 0 ) {\n\t\t\t\t\tposition.left = withinOffset;\n\n\t\t\t\t// Element is initially over both left and right sides of within\n\t\t\t\t} else {\n\t\t\t\t\tif ( overLeft > overRight ) {\n\t\t\t\t\t\tposition.left = withinOffset + outerWidth - data.collisionWidth;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tposition.left = withinOffset;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Too far left -> align with left edge\n\t\t\t} else if ( overLeft > 0 ) {\n\t\t\t\tposition.left += overLeft;\n\n\t\t\t// Too far right -> align with right edge\n\t\t\t} else if ( overRight > 0 ) {\n\t\t\t\tposition.left -= overRight;\n\n\t\t\t// Adjust based on position and margin\n\t\t\t} else {\n\t\t\t\tposition.left = max( position.left - collisionPosLeft, position.left );\n\t\t\t}\n\t\t},\n\t\ttop: function( position, data ) {\n\t\t\tvar within = data.within,\n\t\t\t\twithinOffset = within.isWindow ? within.scrollTop : within.offset.top,\n\t\t\t\touterHeight = data.within.height,\n\t\t\t\tcollisionPosTop = position.top - data.collisionPosition.marginTop,\n\t\t\t\toverTop = withinOffset - collisionPosTop,\n\t\t\t\toverBottom = collisionPosTop + data.collisionHeight - outerHeight - withinOffset,\n\t\t\t\tnewOverBottom;\n\n\t\t\t// Element is taller than within\n\t\t\tif ( data.collisionHeight > outerHeight ) {\n\n\t\t\t\t// Element is initially over the top of within\n\t\t\t\tif ( overTop > 0 && overBottom <= 0 ) {\n\t\t\t\t\tnewOverBottom = position.top + overTop + data.collisionHeight - outerHeight -\n\t\t\t\t\t\twithinOffset;\n\t\t\t\t\tposition.top += overTop - newOverBottom;\n\n\t\t\t\t// Element is initially over bottom of within\n\t\t\t\t} else if ( overBottom > 0 && overTop <= 0 ) {\n\t\t\t\t\tposition.top = withinOffset;\n\n\t\t\t\t// Element is initially over both top and bottom of within\n\t\t\t\t} else {\n\t\t\t\t\tif ( overTop > overBottom ) {\n\t\t\t\t\t\tposition.top = withinOffset + outerHeight - data.collisionHeight;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tposition.top = withinOffset;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Too far up -> align with top\n\t\t\t} else if ( overTop > 0 ) {\n\t\t\t\tposition.top += overTop;\n\n\t\t\t// Too far down -> align with bottom edge\n\t\t\t} else if ( overBottom > 0 ) {\n\t\t\t\tposition.top -= overBottom;\n\n\t\t\t// Adjust based on position and margin\n\t\t\t} else {\n\t\t\t\tposition.top = max( position.top - collisionPosTop, position.top );\n\t\t\t}\n\t\t}\n\t},\n\tflip: {\n\t\tleft: function( position, data ) {\n\t\t\tvar within = data.within,\n\t\t\t\twithinOffset = within.offset.left + within.scrollLeft,\n\t\t\t\touterWidth = within.width,\n\t\t\t\toffsetLeft = within.isWindow ? within.scrollLeft : within.offset.left,\n\t\t\t\tcollisionPosLeft = position.left - data.collisionPosition.marginLeft,\n\t\t\t\toverLeft = collisionPosLeft - offsetLeft,\n\t\t\t\toverRight = collisionPosLeft + data.collisionWidth - outerWidth - offsetLeft,\n\t\t\t\tmyOffset = data.my[ 0 ] === \"left\" ?\n\t\t\t\t\t-data.elemWidth :\n\t\t\t\t\tdata.my[ 0 ] === \"right\" ?\n\t\t\t\t\t\tdata.elemWidth :\n\t\t\t\t\t\t0,\n\t\t\t\tatOffset = data.at[ 0 ] === \"left\" ?\n\t\t\t\t\tdata.targetWidth :\n\t\t\t\t\tdata.at[ 0 ] === \"right\" ?\n\t\t\t\t\t\t-data.targetWidth :\n\t\t\t\t\t\t0,\n\t\t\t\toffset = -2 * data.offset[ 0 ],\n\t\t\t\tnewOverRight,\n\t\t\t\tnewOverLeft;\n\n\t\t\tif ( overLeft < 0 ) {\n\t\t\t\tnewOverRight = position.left + myOffset + atOffset + offset + data.collisionWidth -\n\t\t\t\t\touterWidth - withinOffset;\n\t\t\t\tif ( newOverRight < 0 || newOverRight < abs( overLeft ) ) {\n\t\t\t\t\tposition.left += myOffset + atOffset + offset;\n\t\t\t\t}\n\t\t\t} else if ( overRight > 0 ) {\n\t\t\t\tnewOverLeft = position.left - data.collisionPosition.marginLeft + myOffset +\n\t\t\t\t\tatOffset + offset - offsetLeft;\n\t\t\t\tif ( newOverLeft > 0 || abs( newOverLeft ) < overRight ) {\n\t\t\t\t\tposition.left += myOffset + atOffset + offset;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\ttop: function( position, data ) {\n\t\t\tvar within = data.within,\n\t\t\t\twithinOffset = within.offset.top + within.scrollTop,\n\t\t\t\touterHeight = within.height,\n\t\t\t\toffsetTop = within.isWindow ? within.scrollTop : within.offset.top,\n\t\t\t\tcollisionPosTop = position.top - data.collisionPosition.marginTop,\n\t\t\t\toverTop = collisionPosTop - offsetTop,\n\t\t\t\toverBottom = collisionPosTop + data.collisionHeight - outerHeight - offsetTop,\n\t\t\t\ttop = data.my[ 1 ] === \"top\",\n\t\t\t\tmyOffset = top ?\n\t\t\t\t\t-data.elemHeight :\n\t\t\t\t\tdata.my[ 1 ] === \"bottom\" ?\n\t\t\t\t\t\tdata.elemHeight :\n\t\t\t\t\t\t0,\n\t\t\t\tatOffset = data.at[ 1 ] === \"top\" ?\n\t\t\t\t\tdata.targetHeight :\n\t\t\t\t\tdata.at[ 1 ] === \"bottom\" ?\n\t\t\t\t\t\t-data.targetHeight :\n\t\t\t\t\t\t0,\n\t\t\t\toffset = -2 * data.offset[ 1 ],\n\t\t\t\tnewOverTop,\n\t\t\t\tnewOverBottom;\n\t\t\tif ( overTop < 0 ) {\n\t\t\t\tnewOverBottom = position.top + myOffset + atOffset + offset + data.collisionHeight -\n\t\t\t\t\touterHeight - withinOffset;\n\t\t\t\tif ( newOverBottom < 0 || newOverBottom < abs( overTop ) ) {\n\t\t\t\t\tposition.top += myOffset + atOffset + offset;\n\t\t\t\t}\n\t\t\t} else if ( overBottom > 0 ) {\n\t\t\t\tnewOverTop = position.top - data.collisionPosition.marginTop + myOffset + atOffset +\n\t\t\t\t\toffset - offsetTop;\n\t\t\t\tif ( newOverTop > 0 || abs( newOverTop ) < overBottom ) {\n\t\t\t\t\tposition.top += myOffset + atOffset + offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\tflipfit: {\n\t\tleft: function() {\n\t\t\t$.ui.position.flip.left.apply( this, arguments );\n\t\t\t$.ui.position.fit.left.apply( this, arguments );\n\t\t},\n\t\ttop: function() {\n\t\t\t$.ui.position.flip.top.apply( this, arguments );\n\t\t\t$.ui.position.fit.top.apply( this, arguments );\n\t\t}\n\t}\n};\n\n} )();\n\nvar position = $.ui.position;\n\n\n/*!\n * jQuery UI :data 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: :data Selector\n//>>group: Core\n//>>description: Selects elements which have data stored under the specified key.\n//>>docs: http://api.jqueryui.com/data-selector/\n\n\nvar data = $.extend( $.expr[ \":\" ], {\n\tdata: $.expr.createPseudo ?\n\t\t$.expr.createPseudo( function( dataName ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn !!$.data( elem, dataName );\n\t\t\t};\n\t\t} ) :\n\n\t\t// Support: jQuery <1.8\n\t\tfunction( elem, i, match ) {\n\t\t\treturn !!$.data( elem, match[ 3 ] );\n\t\t}\n} );\n\n/*!\n * jQuery UI Disable Selection 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: disableSelection\n//>>group: Core\n//>>description: Disable selection of text content within the set of matched elements.\n//>>docs: http://api.jqueryui.com/disableSelection/\n\n// This file is deprecated\n\n\nvar disableSelection = $.fn.extend( {\n\tdisableSelection: ( function() {\n\t\tvar eventType = \"onselectstart\" in document.createElement( \"div\" ) ?\n\t\t\t\"selectstart\" :\n\t\t\t\"mousedown\";\n\n\t\treturn function() {\n\t\t\treturn this.on( eventType + \".ui-disableSelection\", function( event ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t} );\n\t\t};\n\t} )(),\n\n\tenableSelection: function() {\n\t\treturn this.off( \".ui-disableSelection\" );\n\t}\n} );\n\n\n/*!\n * jQuery UI Effects 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Effects Core\n//>>group: Effects\n// jscs:disable maximumLineLength\n//>>description: Extends the internal jQuery effects. Includes morphing and easing. Required by all other effects.\n// jscs:enable maximumLineLength\n//>>docs: http://api.jqueryui.com/category/effects-core/\n//>>demos: http://jqueryui.com/effect/\n\n\n\nvar dataSpace = \"ui-effects-\",\n\tdataSpaceStyle = \"ui-effects-style\",\n\tdataSpaceAnimated = \"ui-effects-animated\",\n\n\t// Create a local jQuery because jQuery Color relies on it and the\n\t// global may not exist with AMD and a custom build (#10199)\n\tjQuery = $;\n\n$.effects = {\n\teffect: {}\n};\n\n/*!\n * jQuery Color Animations v2.1.2\n * https://github.com/jquery/jquery-color\n *\n * Copyright 2014 jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * Date: Wed Jan 16 08:47:09 2013 -0600\n */\n( function( jQuery, undefined ) {\n\n\tvar stepHooks = \"backgroundColor borderBottomColor borderLeftColor borderRightColor \" +\n\t\t\"borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor\",\n\n\t// Plusequals test for += 100 -= 100\n\trplusequals = /^([\\-+])=\\s*(\\d+\\.?\\d*)/,\n\n\t// A set of RE's that can match strings and generate color tuples.\n\tstringParsers = [ {\n\t\t\tre: /rgba?\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*(?:,\\s*(\\d?(?:\\.\\d+)?)\\s*)?\\)/,\n\t\t\tparse: function( execResult ) {\n\t\t\t\treturn [\n\t\t\t\t\texecResult[ 1 ],\n\t\t\t\t\texecResult[ 2 ],\n\t\t\t\t\texecResult[ 3 ],\n\t\t\t\t\texecResult[ 4 ]\n\t\t\t\t];\n\t\t\t}\n\t\t}, {\n\t\t\tre: /rgba?\\(\\s*(\\d+(?:\\.\\d+)?)\\%\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*(?:,\\s*(\\d?(?:\\.\\d+)?)\\s*)?\\)/,\n\t\t\tparse: function( execResult ) {\n\t\t\t\treturn [\n\t\t\t\t\texecResult[ 1 ] * 2.55,\n\t\t\t\t\texecResult[ 2 ] * 2.55,\n\t\t\t\t\texecResult[ 3 ] * 2.55,\n\t\t\t\t\texecResult[ 4 ]\n\t\t\t\t];\n\t\t\t}\n\t\t}, {\n\n\t\t\t// This regex ignores A-F because it's compared against an already lowercased string\n\t\t\tre: /#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,\n\t\t\tparse: function( execResult ) {\n\t\t\t\treturn [\n\t\t\t\t\tparseInt( execResult[ 1 ], 16 ),\n\t\t\t\t\tparseInt( execResult[ 2 ], 16 ),\n\t\t\t\t\tparseInt( execResult[ 3 ], 16 )\n\t\t\t\t];\n\t\t\t}\n\t\t}, {\n\n\t\t\t// This regex ignores A-F because it's compared against an already lowercased string\n\t\t\tre: /#([a-f0-9])([a-f0-9])([a-f0-9])/,\n\t\t\tparse: function( execResult ) {\n\t\t\t\treturn [\n\t\t\t\t\tparseInt( execResult[ 1 ] + execResult[ 1 ], 16 ),\n\t\t\t\t\tparseInt( execResult[ 2 ] + execResult[ 2 ], 16 ),\n\t\t\t\t\tparseInt( execResult[ 3 ] + execResult[ 3 ], 16 )\n\t\t\t\t];\n\t\t\t}\n\t\t}, {\n\t\t\tre: /hsla?\\(\\s*(\\d+(?:\\.\\d+)?)\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*(?:,\\s*(\\d?(?:\\.\\d+)?)\\s*)?\\)/,\n\t\t\tspace: \"hsla\",\n\t\t\tparse: function( execResult ) {\n\t\t\t\treturn [\n\t\t\t\t\texecResult[ 1 ],\n\t\t\t\t\texecResult[ 2 ] / 100,\n\t\t\t\t\texecResult[ 3 ] / 100,\n\t\t\t\t\texecResult[ 4 ]\n\t\t\t\t];\n\t\t\t}\n\t\t} ],\n\n\t// JQuery.Color( )\n\tcolor = jQuery.Color = function( color, green, blue, alpha ) {\n\t\treturn new jQuery.Color.fn.parse( color, green, blue, alpha );\n\t},\n\tspaces = {\n\t\trgba: {\n\t\t\tprops: {\n\t\t\t\tred: {\n\t\t\t\t\tidx: 0,\n\t\t\t\t\ttype: \"byte\"\n\t\t\t\t},\n\t\t\t\tgreen: {\n\t\t\t\t\tidx: 1,\n\t\t\t\t\ttype: \"byte\"\n\t\t\t\t},\n\t\t\t\tblue: {\n\t\t\t\t\tidx: 2,\n\t\t\t\t\ttype: \"byte\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\thsla: {\n\t\t\tprops: {\n\t\t\t\thue: {\n\t\t\t\t\tidx: 0,\n\t\t\t\t\ttype: \"degrees\"\n\t\t\t\t},\n\t\t\t\tsaturation: {\n\t\t\t\t\tidx: 1,\n\t\t\t\t\ttype: \"percent\"\n\t\t\t\t},\n\t\t\t\tlightness: {\n\t\t\t\t\tidx: 2,\n\t\t\t\t\ttype: \"percent\"\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\tpropTypes = {\n\t\t\"byte\": {\n\t\t\tfloor: true,\n\t\t\tmax: 255\n\t\t},\n\t\t\"percent\": {\n\t\t\tmax: 1\n\t\t},\n\t\t\"degrees\": {\n\t\t\tmod: 360,\n\t\t\tfloor: true\n\t\t}\n\t},\n\tsupport = color.support = {},\n\n\t// Element for support tests\n\tsupportElem = jQuery( \"<p>\" )[ 0 ],\n\n\t// Colors = jQuery.Color.names\n\tcolors,\n\n\t// Local aliases of functions called often\n\teach = jQuery.each;\n\n// Determine rgba support immediately\nsupportElem.style.cssText = \"background-color:rgba(1,1,1,.5)\";\nsupport.rgba = supportElem.style.backgroundColor.indexOf( \"rgba\" ) > -1;\n\n// Define cache name and alpha properties\n// for rgba and hsla spaces\neach( spaces, function( spaceName, space ) {\n\tspace.cache = \"_\" + spaceName;\n\tspace.props.alpha = {\n\t\tidx: 3,\n\t\ttype: \"percent\",\n\t\tdef: 1\n\t};\n} );\n\nfunction clamp( value, prop, allowEmpty ) {\n\tvar type = propTypes[ prop.type ] || {};\n\n\tif ( value == null ) {\n\t\treturn ( allowEmpty || !prop.def ) ? null : prop.def;\n\t}\n\n\t// ~~ is an short way of doing floor for positive numbers\n\tvalue = type.floor ? ~~value : parseFloat( value );\n\n\t// IE will pass in empty strings as value for alpha,\n\t// which will hit this case\n\tif ( isNaN( value ) ) {\n\t\treturn prop.def;\n\t}\n\n\tif ( type.mod ) {\n\n\t\t// We add mod before modding to make sure that negatives values\n\t\t// get converted properly: -10 -> 350\n\t\treturn ( value + type.mod ) % type.mod;\n\t}\n\n\t// For now all property types without mod have min and max\n\treturn 0 > value ? 0 : type.max < value ? type.max : value;\n}\n\nfunction stringParse( string ) {\n\tvar inst = color(),\n\t\trgba = inst._rgba = [];\n\n\tstring = string.toLowerCase();\n\n\teach( stringParsers, function( i, parser ) {\n\t\tvar parsed,\n\t\t\tmatch = parser.re.exec( string ),\n\t\t\tvalues = match && parser.parse( match ),\n\t\t\tspaceName = parser.space || \"rgba\";\n\n\t\tif ( values ) {\n\t\t\tparsed = inst[ spaceName ]( values );\n\n\t\t\t// If this was an rgba parse the assignment might happen twice\n\t\t\t// oh well....\n\t\t\tinst[ spaces[ spaceName ].cache ] = parsed[ spaces[ spaceName ].cache ];\n\t\t\trgba = inst._rgba = parsed._rgba;\n\n\t\t\t// Exit each( stringParsers ) here because we matched\n\t\t\treturn false;\n\t\t}\n\t} );\n\n\t// Found a stringParser that handled it\n\tif ( rgba.length ) {\n\n\t\t// If this came from a parsed string, force \"transparent\" when alpha is 0\n\t\t// chrome, (and maybe others) return \"transparent\" as rgba(0,0,0,0)\n\t\tif ( rgba.join() === \"0,0,0,0\" ) {\n\t\t\tjQuery.extend( rgba, colors.transparent );\n\t\t}\n\t\treturn inst;\n\t}\n\n\t// Named colors\n\treturn colors[ string ];\n}\n\ncolor.fn = jQuery.extend( color.prototype, {\n\tparse: function( red, green, blue, alpha ) {\n\t\tif ( red === undefined ) {\n\t\t\tthis._rgba = [ null, null, null, null ];\n\t\t\treturn this;\n\t\t}\n\t\tif ( red.jquery || red.nodeType ) {\n\t\t\tred = jQuery( red ).css( green );\n\t\t\tgreen = undefined;\n\t\t}\n\n\t\tvar inst = this,\n\t\t\ttype = jQuery.type( red ),\n\t\t\trgba = this._rgba = [];\n\n\t\t// More than 1 argument specified - assume ( red, green, blue, alpha )\n\t\tif ( green !== undefined ) {\n\t\t\tred = [ red, green, blue, alpha ];\n\t\t\ttype = \"array\";\n\t\t}\n\n\t\tif ( type === \"string\" ) {\n\t\t\treturn this.parse( stringParse( red ) || colors._default );\n\t\t}\n\n\t\tif ( type === \"array\" ) {\n\t\t\teach( spaces.rgba.props, function( key, prop ) {\n\t\t\t\trgba[ prop.idx ] = clamp( red[ prop.idx ], prop );\n\t\t\t} );\n\t\t\treturn this;\n\t\t}\n\n\t\tif ( type === \"object\" ) {\n\t\t\tif ( red instanceof color ) {\n\t\t\t\teach( spaces, function( spaceName, space ) {\n\t\t\t\t\tif ( red[ space.cache ] ) {\n\t\t\t\t\t\tinst[ space.cache ] = red[ space.cache ].slice();\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t} else {\n\t\t\t\teach( spaces, function( spaceName, space ) {\n\t\t\t\t\tvar cache = space.cache;\n\t\t\t\t\teach( space.props, function( key, prop ) {\n\n\t\t\t\t\t\t// If the cache doesn't exist, and we know how to convert\n\t\t\t\t\t\tif ( !inst[ cache ] && space.to ) {\n\n\t\t\t\t\t\t\t// If the value was null, we don't need to copy it\n\t\t\t\t\t\t\t// if the key was alpha, we don't need to copy it either\n\t\t\t\t\t\t\tif ( key === \"alpha\" || red[ key ] == null ) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tinst[ cache ] = space.to( inst._rgba );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// This is the only case where we allow nulls for ALL properties.\n\t\t\t\t\t\t// call clamp with alwaysAllowEmpty\n\t\t\t\t\t\tinst[ cache ][ prop.idx ] = clamp( red[ key ], prop, true );\n\t\t\t\t\t} );\n\n\t\t\t\t\t// Everything defined but alpha?\n\t\t\t\t\tif ( inst[ cache ] &&\n\t\t\t\t\t\t\tjQuery.inArray( null, inst[ cache ].slice( 0, 3 ) ) < 0 ) {\n\n\t\t\t\t\t\t// Use the default of 1\n\t\t\t\t\t\tinst[ cache ][ 3 ] = 1;\n\t\t\t\t\t\tif ( space.from ) {\n\t\t\t\t\t\t\tinst._rgba = space.from( inst[ cache ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t},\n\tis: function( compare ) {\n\t\tvar is = color( compare ),\n\t\t\tsame = true,\n\t\t\tinst = this;\n\n\t\teach( spaces, function( _, space ) {\n\t\t\tvar localCache,\n\t\t\t\tisCache = is[ space.cache ];\n\t\t\tif ( isCache ) {\n\t\t\t\tlocalCache = inst[ space.cache ] || space.to && space.to( inst._rgba ) || [];\n\t\t\t\teach( space.props, function( _, prop ) {\n\t\t\t\t\tif ( isCache[ prop.idx ] != null ) {\n\t\t\t\t\t\tsame = ( isCache[ prop.idx ] === localCache[ prop.idx ] );\n\t\t\t\t\t\treturn same;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\t\t\treturn same;\n\t\t} );\n\t\treturn same;\n\t},\n\t_space: function() {\n\t\tvar used = [],\n\t\t\tinst = this;\n\t\teach( spaces, function( spaceName, space ) {\n\t\t\tif ( inst[ space.cache ] ) {\n\t\t\t\tused.push( spaceName );\n\t\t\t}\n\t\t} );\n\t\treturn used.pop();\n\t},\n\ttransition: function( other, distance ) {\n\t\tvar end = color( other ),\n\t\t\tspaceName = end._space(),\n\t\t\tspace = spaces[ spaceName ],\n\t\t\tstartColor = this.alpha() === 0 ? color( \"transparent\" ) : this,\n\t\t\tstart = startColor[ space.cache ] || space.to( startColor._rgba ),\n\t\t\tresult = start.slice();\n\n\t\tend = end[ space.cache ];\n\t\teach( space.props, function( key, prop ) {\n\t\t\tvar index = prop.idx,\n\t\t\t\tstartValue = start[ index ],\n\t\t\t\tendValue = end[ index ],\n\t\t\t\ttype = propTypes[ prop.type ] || {};\n\n\t\t\t// If null, don't override start value\n\t\t\tif ( endValue === null ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If null - use end\n\t\t\tif ( startValue === null ) {\n\t\t\t\tresult[ index ] = endValue;\n\t\t\t} else {\n\t\t\t\tif ( type.mod ) {\n\t\t\t\t\tif ( endValue - startValue > type.mod / 2 ) {\n\t\t\t\t\t\tstartValue += type.mod;\n\t\t\t\t\t} else if ( startValue - endValue > type.mod / 2 ) {\n\t\t\t\t\t\tstartValue -= type.mod;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tresult[ index ] = clamp( ( endValue - startValue ) * distance + startValue, prop );\n\t\t\t}\n\t\t} );\n\t\treturn this[ spaceName ]( result );\n\t},\n\tblend: function( opaque ) {\n\n\t\t// If we are already opaque - return ourself\n\t\tif ( this._rgba[ 3 ] === 1 ) {\n\t\t\treturn this;\n\t\t}\n\n\t\tvar rgb = this._rgba.slice(),\n\t\t\ta = rgb.pop(),\n\t\t\tblend = color( opaque )._rgba;\n\n\t\treturn color( jQuery.map( rgb, function( v, i ) {\n\t\t\treturn ( 1 - a ) * blend[ i ] + a * v;\n\t\t} ) );\n\t},\n\ttoRgbaString: function() {\n\t\tvar prefix = \"rgba(\",\n\t\t\trgba = jQuery.map( this._rgba, function( v, i ) {\n\t\t\t\treturn v == null ? ( i > 2 ? 1 : 0 ) : v;\n\t\t\t} );\n\n\t\tif ( rgba[ 3 ] === 1 ) {\n\t\t\trgba.pop();\n\t\t\tprefix = \"rgb(\";\n\t\t}\n\n\t\treturn prefix + rgba.join() + \")\";\n\t},\n\ttoHslaString: function() {\n\t\tvar prefix = \"hsla(\",\n\t\t\thsla = jQuery.map( this.hsla(), function( v, i ) {\n\t\t\t\tif ( v == null ) {\n\t\t\t\t\tv = i > 2 ? 1 : 0;\n\t\t\t\t}\n\n\t\t\t\t// Catch 1 and 2\n\t\t\t\tif ( i && i < 3 ) {\n\t\t\t\t\tv = Math.round( v * 100 ) + \"%\";\n\t\t\t\t}\n\t\t\t\treturn v;\n\t\t\t} );\n\n\t\tif ( hsla[ 3 ] === 1 ) {\n\t\t\thsla.pop();\n\t\t\tprefix = \"hsl(\";\n\t\t}\n\t\treturn prefix + hsla.join() + \")\";\n\t},\n\ttoHexString: function( includeAlpha ) {\n\t\tvar rgba = this._rgba.slice(),\n\t\t\talpha = rgba.pop();\n\n\t\tif ( includeAlpha ) {\n\t\t\trgba.push( ~~( alpha * 255 ) );\n\t\t}\n\n\t\treturn \"#\" + jQuery.map( rgba, function( v ) {\n\n\t\t\t// Default to 0 when nulls exist\n\t\t\tv = ( v || 0 ).toString( 16 );\n\t\t\treturn v.length === 1 ? \"0\" + v : v;\n\t\t} ).join( \"\" );\n\t},\n\ttoString: function() {\n\t\treturn this._rgba[ 3 ] === 0 ? \"transparent\" : this.toRgbaString();\n\t}\n} );\ncolor.fn.parse.prototype = color.fn;\n\n// Hsla conversions adapted from:\n// https://code.google.com/p/maashaack/source/browse/packages/graphics/trunk/src/graphics/colors/HUE2RGB.as?r=5021\n\nfunction hue2rgb( p, q, h ) {\n\th = ( h + 1 ) % 1;\n\tif ( h * 6 < 1 ) {\n\t\treturn p + ( q - p ) * h * 6;\n\t}\n\tif ( h * 2 < 1 ) {\n\t\treturn q;\n\t}\n\tif ( h * 3 < 2 ) {\n\t\treturn p + ( q - p ) * ( ( 2 / 3 ) - h ) * 6;\n\t}\n\treturn p;\n}\n\nspaces.hsla.to = function( rgba ) {\n\tif ( rgba[ 0 ] == null || rgba[ 1 ] == null || rgba[ 2 ] == null ) {\n\t\treturn [ null, null, null, rgba[ 3 ] ];\n\t}\n\tvar r = rgba[ 0 ] / 255,\n\t\tg = rgba[ 1 ] / 255,\n\t\tb = rgba[ 2 ] / 255,\n\t\ta = rgba[ 3 ],\n\t\tmax = Math.max( r, g, b ),\n\t\tmin = Math.min( r, g, b ),\n\t\tdiff = max - min,\n\t\tadd = max + min,\n\t\tl = add * 0.5,\n\t\th, s;\n\n\tif ( min === max ) {\n\t\th = 0;\n\t} else if ( r === max ) {\n\t\th = ( 60 * ( g - b ) / diff ) + 360;\n\t} else if ( g === max ) {\n\t\th = ( 60 * ( b - r ) / diff ) + 120;\n\t} else {\n\t\th = ( 60 * ( r - g ) / diff ) + 240;\n\t}\n\n\t// Chroma (diff) == 0 means greyscale which, by definition, saturation = 0%\n\t// otherwise, saturation is based on the ratio of chroma (diff) to lightness (add)\n\tif ( diff === 0 ) {\n\t\ts = 0;\n\t} else if ( l <= 0.5 ) {\n\t\ts = diff / add;\n\t} else {\n\t\ts = diff / ( 2 - add );\n\t}\n\treturn [ Math.round( h ) % 360, s, l, a == null ? 1 : a ];\n};\n\nspaces.hsla.from = function( hsla ) {\n\tif ( hsla[ 0 ] == null || hsla[ 1 ] == null || hsla[ 2 ] == null ) {\n\t\treturn [ null, null, null, hsla[ 3 ] ];\n\t}\n\tvar h = hsla[ 0 ] / 360,\n\t\ts = hsla[ 1 ],\n\t\tl = hsla[ 2 ],\n\t\ta = hsla[ 3 ],\n\t\tq = l <= 0.5 ? l * ( 1 + s ) : l + s - l * s,\n\t\tp = 2 * l - q;\n\n\treturn [\n\t\tMath.round( hue2rgb( p, q, h + ( 1 / 3 ) ) * 255 ),\n\t\tMath.round( hue2rgb( p, q, h ) * 255 ),\n\t\tMath.round( hue2rgb( p, q, h - ( 1 / 3 ) ) * 255 ),\n\t\ta\n\t];\n};\n\neach( spaces, function( spaceName, space ) {\n\tvar props = space.props,\n\t\tcache = space.cache,\n\t\tto = space.to,\n\t\tfrom = space.from;\n\n\t// Makes rgba() and hsla()\n\tcolor.fn[ spaceName ] = function( value ) {\n\n\t\t// Generate a cache for this space if it doesn't exist\n\t\tif ( to && !this[ cache ] ) {\n\t\t\tthis[ cache ] = to( this._rgba );\n\t\t}\n\t\tif ( value === undefined ) {\n\t\t\treturn this[ cache ].slice();\n\t\t}\n\n\t\tvar ret,\n\t\t\ttype = jQuery.type( value ),\n\t\t\tarr = ( type === \"array\" || type === \"object\" ) ? value : arguments,\n\t\t\tlocal = this[ cache ].slice();\n\n\t\teach( props, function( key, prop ) {\n\t\t\tvar val = arr[ type === \"object\" ? key : prop.idx ];\n\t\t\tif ( val == null ) {\n\t\t\t\tval = local[ prop.idx ];\n\t\t\t}\n\t\t\tlocal[ prop.idx ] = clamp( val, prop );\n\t\t} );\n\n\t\tif ( from ) {\n\t\t\tret = color( from( local ) );\n\t\t\tret[ cache ] = local;\n\t\t\treturn ret;\n\t\t} else {\n\t\t\treturn color( local );\n\t\t}\n\t};\n\n\t// Makes red() green() blue() alpha() hue() saturation() lightness()\n\teach( props, function( key, prop ) {\n\n\t\t// Alpha is included in more than one space\n\t\tif ( color.fn[ key ] ) {\n\t\t\treturn;\n\t\t}\n\t\tcolor.fn[ key ] = function( value ) {\n\t\t\tvar vtype = jQuery.type( value ),\n\t\t\t\tfn = ( key === \"alpha\" ? ( this._hsla ? \"hsla\" : \"rgba\" ) : spaceName ),\n\t\t\t\tlocal = this[ fn ](),\n\t\t\t\tcur = local[ prop.idx ],\n\t\t\t\tmatch;\n\n\t\t\tif ( vtype === \"undefined\" ) {\n\t\t\t\treturn cur;\n\t\t\t}\n\n\t\t\tif ( vtype === \"function\" ) {\n\t\t\t\tvalue = value.call( this, cur );\n\t\t\t\tvtype = jQuery.type( value );\n\t\t\t}\n\t\t\tif ( value == null && prop.empty ) {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\tif ( vtype === \"string\" ) {\n\t\t\t\tmatch = rplusequals.exec( value );\n\t\t\t\tif ( match ) {\n\t\t\t\t\tvalue = cur + parseFloat( match[ 2 ] ) * ( match[ 1 ] === \"+\" ? 1 : -1 );\n\t\t\t\t}\n\t\t\t}\n\t\t\tlocal[ prop.idx ] = value;\n\t\t\treturn this[ fn ]( local );\n\t\t};\n\t} );\n} );\n\n// Add cssHook and .fx.step function for each named hook.\n// accept a space separated string of properties\ncolor.hook = function( hook ) {\n\tvar hooks = hook.split( \" \" );\n\teach( hooks, function( i, hook ) {\n\t\tjQuery.cssHooks[ hook ] = {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar parsed, curElem,\n\t\t\t\t\tbackgroundColor = \"\";\n\n\t\t\t\tif ( value !== \"transparent\" && ( jQuery.type( value ) !== \"string\" ||\n\t\t\t\t\t\t( parsed = stringParse( value ) ) ) ) {\n\t\t\t\t\tvalue = color( parsed || value );\n\t\t\t\t\tif ( !support.rgba && value._rgba[ 3 ] !== 1 ) {\n\t\t\t\t\t\tcurElem = hook === \"backgroundColor\" ? elem.parentNode : elem;\n\t\t\t\t\t\twhile (\n\t\t\t\t\t\t\t( backgroundColor === \"\" || backgroundColor === \"transparent\" ) &&\n\t\t\t\t\t\t\tcurElem && curElem.style\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tbackgroundColor = jQuery.css( curElem, \"backgroundColor\" );\n\t\t\t\t\t\t\t\tcurElem = curElem.parentNode;\n\t\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvalue = value.blend( backgroundColor && backgroundColor !== \"transparent\" ?\n\t\t\t\t\t\t\tbackgroundColor :\n\t\t\t\t\t\t\t\"_default\" );\n\t\t\t\t\t}\n\n\t\t\t\t\tvalue = value.toRgbaString();\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\telem.style[ hook ] = value;\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// Wrapped to prevent IE from throwing errors on \"invalid\" values like\n\t\t\t\t\t// 'auto' or 'inherit'\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tjQuery.fx.step[ hook ] = function( fx ) {\n\t\t\tif ( !fx.colorInit ) {\n\t\t\t\tfx.start = color( fx.elem, hook );\n\t\t\t\tfx.end = color( fx.end );\n\t\t\t\tfx.colorInit = true;\n\t\t\t}\n\t\t\tjQuery.cssHooks[ hook ].set( fx.elem, fx.start.transition( fx.end, fx.pos ) );\n\t\t};\n\t} );\n\n};\n\ncolor.hook( stepHooks );\n\njQuery.cssHooks.borderColor = {\n\texpand: function( value ) {\n\t\tvar expanded = {};\n\n\t\teach( [ \"Top\", \"Right\", \"Bottom\", \"Left\" ], function( i, part ) {\n\t\t\texpanded[ \"border\" + part + \"Color\" ] = value;\n\t\t} );\n\t\treturn expanded;\n\t}\n};\n\n// Basic color names only.\n// Usage of any of the other color names requires adding yourself or including\n// jquery.color.svg-names.js.\ncolors = jQuery.Color.names = {\n\n\t// 4.1. Basic color keywords\n\taqua: \"#00ffff\",\n\tblack: \"#000000\",\n\tblue: \"#0000ff\",\n\tfuchsia: \"#ff00ff\",\n\tgray: \"#808080\",\n\tgreen: \"#008000\",\n\tlime: \"#00ff00\",\n\tmaroon: \"#800000\",\n\tnavy: \"#000080\",\n\tolive: \"#808000\",\n\tpurple: \"#800080\",\n\tred: \"#ff0000\",\n\tsilver: \"#c0c0c0\",\n\tteal: \"#008080\",\n\twhite: \"#ffffff\",\n\tyellow: \"#ffff00\",\n\n\t// 4.2.3. \"transparent\" color keyword\n\ttransparent: [ null, null, null, 0 ],\n\n\t_default: \"#ffffff\"\n};\n\n} )( jQuery );\n\n/******************************************************************************/\n/****************************** CLASS ANIMATIONS ******************************/\n/******************************************************************************/\n( function() {\n\nvar classAnimationActions = [ \"add\", \"remove\", \"toggle\" ],\n\tshorthandStyles = {\n\t\tborder: 1,\n\t\tborderBottom: 1,\n\t\tborderColor: 1,\n\t\tborderLeft: 1,\n\t\tborderRight: 1,\n\t\tborderTop: 1,\n\t\tborderWidth: 1,\n\t\tmargin: 1,\n\t\tpadding: 1\n\t};\n\n$.each(\n\t[ \"borderLeftStyle\", \"borderRightStyle\", \"borderBottomStyle\", \"borderTopStyle\" ],\n\tfunction( _, prop ) {\n\t\t$.fx.step[ prop ] = function( fx ) {\n\t\t\tif ( fx.end !== \"none\" && !fx.setAttr || fx.pos === 1 && !fx.setAttr ) {\n\t\t\t\tjQuery.style( fx.elem, prop, fx.end );\n\t\t\t\tfx.setAttr = true;\n\t\t\t}\n\t\t};\n\t}\n);\n\nfunction getElementStyles( elem ) {\n\tvar key, len,\n\t\tstyle = elem.ownerDocument.defaultView ?\n\t\t\telem.ownerDocument.defaultView.getComputedStyle( elem, null ) :\n\t\t\telem.currentStyle,\n\t\tstyles = {};\n\n\tif ( style && style.length && style[ 0 ] && style[ style[ 0 ] ] ) {\n\t\tlen = style.length;\n\t\twhile ( len-- ) {\n\t\t\tkey = style[ len ];\n\t\t\tif ( typeof style[ key ] === \"string\" ) {\n\t\t\t\tstyles[ $.camelCase( key ) ] = style[ key ];\n\t\t\t}\n\t\t}\n\n\t// Support: Opera, IE <9\n\t} else {\n\t\tfor ( key in style ) {\n\t\t\tif ( typeof style[ key ] === \"string\" ) {\n\t\t\t\tstyles[ key ] = style[ key ];\n\t\t\t}\n\t\t}\n\t}\n\n\treturn styles;\n}\n\nfunction styleDifference( oldStyle, newStyle ) {\n\tvar diff = {},\n\t\tname, value;\n\n\tfor ( name in newStyle ) {\n\t\tvalue = newStyle[ name ];\n\t\tif ( oldStyle[ name ] !== value ) {\n\t\t\tif ( !shorthandStyles[ name ] ) {\n\t\t\t\tif ( $.fx.step[ name ] || !isNaN( parseFloat( value ) ) ) {\n\t\t\t\t\tdiff[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn diff;\n}\n\n// Support: jQuery <1.8\nif ( !$.fn.addBack ) {\n\t$.fn.addBack = function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t};\n}\n\n$.effects.animateClass = function( value, duration, easing, callback ) {\n\tvar o = $.speed( duration, easing, callback );\n\n\treturn this.queue( function() {\n\t\tvar animated = $( this ),\n\t\t\tbaseClass = animated.attr( \"class\" ) || \"\",\n\t\t\tapplyClassChange,\n\t\t\tallAnimations = o.children ? animated.find( \"*\" ).addBack() : animated;\n\n\t\t// Map the animated objects to store the original styles.\n\t\tallAnimations = allAnimations.map( function() {\n\t\t\tvar el = $( this );\n\t\t\treturn {\n\t\t\t\tel: el,\n\t\t\t\tstart: getElementStyles( this )\n\t\t\t};\n\t\t} );\n\n\t\t// Apply class change\n\t\tapplyClassChange = function() {\n\t\t\t$.each( classAnimationActions, function( i, action ) {\n\t\t\t\tif ( value[ action ] ) {\n\t\t\t\t\tanimated[ action + \"Class\" ]( value[ action ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t};\n\t\tapplyClassChange();\n\n\t\t// Map all animated objects again - calculate new styles and diff\n\t\tallAnimations = allAnimations.map( function() {\n\t\t\tthis.end = getElementStyles( this.el[ 0 ] );\n\t\t\tthis.diff = styleDifference( this.start, this.end );\n\t\t\treturn this;\n\t\t} );\n\n\t\t// Apply original class\n\t\tanimated.attr( \"class\", baseClass );\n\n\t\t// Map all animated objects again - this time collecting a promise\n\t\tallAnimations = allAnimations.map( function() {\n\t\t\tvar styleInfo = this,\n\t\t\t\tdfd = $.Deferred(),\n\t\t\t\topts = $.extend( {}, o, {\n\t\t\t\t\tqueue: false,\n\t\t\t\t\tcomplete: function() {\n\t\t\t\t\t\tdfd.resolve( styleInfo );\n\t\t\t\t\t}\n\t\t\t\t} );\n\n\t\t\tthis.el.animate( this.diff, opts );\n\t\t\treturn dfd.promise();\n\t\t} );\n\n\t\t// Once all animations have completed:\n\t\t$.when.apply( $, allAnimations.get() ).done( function() {\n\n\t\t\t// Set the final class\n\t\t\tapplyClassChange();\n\n\t\t\t// For each animated element,\n\t\t\t// clear all css properties that were animated\n\t\t\t$.each( arguments, function() {\n\t\t\t\tvar el = this.el;\n\t\t\t\t$.each( this.diff, function( key ) {\n\t\t\t\t\tel.css( key, \"\" );\n\t\t\t\t} );\n\t\t\t} );\n\n\t\t\t// This is guarnteed to be there if you use jQuery.speed()\n\t\t\t// it also handles dequeuing the next anim...\n\t\t\to.complete.call( animated[ 0 ] );\n\t\t} );\n\t} );\n};\n\n$.fn.extend( {\n\taddClass: ( function( orig ) {\n\t\treturn function( classNames, speed, easing, callback ) {\n\t\t\treturn speed ?\n\t\t\t\t$.effects.animateClass.call( this,\n\t\t\t\t\t{ add: classNames }, speed, easing, callback ) :\n\t\t\t\torig.apply( this, arguments );\n\t\t};\n\t} )( $.fn.addClass ),\n\n\tremoveClass: ( function( orig ) {\n\t\treturn function( classNames, speed, easing, callback ) {\n\t\t\treturn arguments.length > 1 ?\n\t\t\t\t$.effects.animateClass.call( this,\n\t\t\t\t\t{ remove: classNames }, speed, easing, callback ) :\n\t\t\t\torig.apply( this, arguments );\n\t\t};\n\t} )( $.fn.removeClass ),\n\n\ttoggleClass: ( function( orig ) {\n\t\treturn function( classNames, force, speed, easing, callback ) {\n\t\t\tif ( typeof force === \"boolean\" || force === undefined ) {\n\t\t\t\tif ( !speed ) {\n\n\t\t\t\t\t// Without speed parameter\n\t\t\t\t\treturn orig.apply( this, arguments );\n\t\t\t\t} else {\n\t\t\t\t\treturn $.effects.animateClass.call( this,\n\t\t\t\t\t\t( force ? { add: classNames } : { remove: classNames } ),\n\t\t\t\t\t\tspeed, easing, callback );\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Without force parameter\n\t\t\t\treturn $.effects.animateClass.call( this,\n\t\t\t\t\t{ toggle: classNames }, force, speed, easing );\n\t\t\t}\n\t\t};\n\t} )( $.fn.toggleClass ),\n\n\tswitchClass: function( remove, add, speed, easing, callback ) {\n\t\treturn $.effects.animateClass.call( this, {\n\t\t\tadd: add,\n\t\t\tremove: remove\n\t\t}, speed, easing, callback );\n\t}\n} );\n\n} )();\n\n/******************************************************************************/\n/*********************************** EFFECTS **********************************/\n/******************************************************************************/\n\n( function() {\n\nif ( $.expr && $.expr.filters && $.expr.filters.animated ) {\n\t$.expr.filters.animated = ( function( orig ) {\n\t\treturn function( elem ) {\n\t\t\treturn !!$( elem ).data( dataSpaceAnimated ) || orig( elem );\n\t\t};\n\t} )( $.expr.filters.animated );\n}\n\nif ( $.uiBackCompat !== false ) {\n\t$.extend( $.effects, {\n\n\t\t// Saves a set of properties in a data storage\n\t\tsave: function( element, set ) {\n\t\t\tvar i = 0, length = set.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( set[ i ] !== null ) {\n\t\t\t\t\telement.data( dataSpace + set[ i ], element[ 0 ].style[ set[ i ] ] );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Restores a set of previously saved properties from a data storage\n\t\trestore: function( element, set ) {\n\t\t\tvar val, i = 0, length = set.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( set[ i ] !== null ) {\n\t\t\t\t\tval = element.data( dataSpace + set[ i ] );\n\t\t\t\t\telement.css( set[ i ], val );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tsetMode: function( el, mode ) {\n\t\t\tif ( mode === \"toggle\" ) {\n\t\t\t\tmode = el.is( \":hidden\" ) ? \"show\" : \"hide\";\n\t\t\t}\n\t\t\treturn mode;\n\t\t},\n\n\t\t// Wraps the element around a wrapper that copies position properties\n\t\tcreateWrapper: function( element ) {\n\n\t\t\t// If the element is already wrapped, return it\n\t\t\tif ( element.parent().is( \".ui-effects-wrapper\" ) ) {\n\t\t\t\treturn element.parent();\n\t\t\t}\n\n\t\t\t// Wrap the element\n\t\t\tvar props = {\n\t\t\t\t\twidth: element.outerWidth( true ),\n\t\t\t\t\theight: element.outerHeight( true ),\n\t\t\t\t\t\"float\": element.css( \"float\" )\n\t\t\t\t},\n\t\t\t\twrapper = $( \"<div></div>\" )\n\t\t\t\t\t.addClass( \"ui-effects-wrapper\" )\n\t\t\t\t\t.css( {\n\t\t\t\t\t\tfontSize: \"100%\",\n\t\t\t\t\t\tbackground: \"transparent\",\n\t\t\t\t\t\tborder: \"none\",\n\t\t\t\t\t\tmargin: 0,\n\t\t\t\t\t\tpadding: 0\n\t\t\t\t\t} ),\n\n\t\t\t\t// Store the size in case width/height are defined in % - Fixes #5245\n\t\t\t\tsize = {\n\t\t\t\t\twidth: element.width(),\n\t\t\t\t\theight: element.height()\n\t\t\t\t},\n\t\t\t\tactive = document.activeElement;\n\n\t\t\t// Support: Firefox\n\t\t\t// Firefox incorrectly exposes anonymous content\n\t\t\t// https://bugzilla.mozilla.org/show_bug.cgi?id=561664\n\t\t\ttry {\n\t\t\t\tactive.id;\n\t\t\t} catch ( e ) {\n\t\t\t\tactive = document.body;\n\t\t\t}\n\n\t\t\telement.wrap( wrapper );\n\n\t\t\t// Fixes #7595 - Elements lose focus when wrapped.\n\t\t\tif ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {\n\t\t\t\t$( active ).trigger( \"focus\" );\n\t\t\t}\n\n\t\t\t// Hotfix for jQuery 1.4 since some change in wrap() seems to actually\n\t\t\t// lose the reference to the wrapped element\n\t\t\twrapper = element.parent();\n\n\t\t\t// Transfer positioning properties to the wrapper\n\t\t\tif ( element.css( \"position\" ) === \"static\" ) {\n\t\t\t\twrapper.css( { position: \"relative\" } );\n\t\t\t\telement.css( { position: \"relative\" } );\n\t\t\t} else {\n\t\t\t\t$.extend( props, {\n\t\t\t\t\tposition: element.css( \"position\" ),\n\t\t\t\t\tzIndex: element.css( \"z-index\" )\n\t\t\t\t} );\n\t\t\t\t$.each( [ \"top\", \"left\", \"bottom\", \"right\" ], function( i, pos ) {\n\t\t\t\t\tprops[ pos ] = element.css( pos );\n\t\t\t\t\tif ( isNaN( parseInt( props[ pos ], 10 ) ) ) {\n\t\t\t\t\t\tprops[ pos ] = \"auto\";\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\telement.css( {\n\t\t\t\t\tposition: \"relative\",\n\t\t\t\t\ttop: 0,\n\t\t\t\t\tleft: 0,\n\t\t\t\t\tright: \"auto\",\n\t\t\t\t\tbottom: \"auto\"\n\t\t\t\t} );\n\t\t\t}\n\t\t\telement.css( size );\n\n\t\t\treturn wrapper.css( props ).show();\n\t\t},\n\n\t\tremoveWrapper: function( element ) {\n\t\t\tvar active = document.activeElement;\n\n\t\t\tif ( element.parent().is( \".ui-effects-wrapper\" ) ) {\n\t\t\t\telement.parent().replaceWith( element );\n\n\t\t\t\t// Fixes #7595 - Elements lose focus when wrapped.\n\t\t\t\tif ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {\n\t\t\t\t\t$( active ).trigger( \"focus\" );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn element;\n\t\t}\n\t} );\n}\n\n$.extend( $.effects, {\n\tversion: \"1.12.1\",\n\n\tdefine: function( name, mode, effect ) {\n\t\tif ( !effect ) {\n\t\t\teffect = mode;\n\t\t\tmode = \"effect\";\n\t\t}\n\n\t\t$.effects.effect[ name ] = effect;\n\t\t$.effects.effect[ name ].mode = mode;\n\n\t\treturn effect;\n\t},\n\n\tscaledDimensions: function( element, percent, direction ) {\n\t\tif ( percent === 0 ) {\n\t\t\treturn {\n\t\t\t\theight: 0,\n\t\t\t\twidth: 0,\n\t\t\t\touterHeight: 0,\n\t\t\t\touterWidth: 0\n\t\t\t};\n\t\t}\n\n\t\tvar x = direction !== \"horizontal\" ? ( ( percent || 100 ) / 100 ) : 1,\n\t\t\ty = direction !== \"vertical\" ? ( ( percent || 100 ) / 100 ) : 1;\n\n\t\treturn {\n\t\t\theight: element.height() * y,\n\t\t\twidth: element.width() * x,\n\t\t\touterHeight: element.outerHeight() * y,\n\t\t\touterWidth: element.outerWidth() * x\n\t\t};\n\n\t},\n\n\tclipToBox: function( animation ) {\n\t\treturn {\n\t\t\twidth: animation.clip.right - animation.clip.left,\n\t\t\theight: animation.clip.bottom - animation.clip.top,\n\t\t\tleft: animation.clip.left,\n\t\t\ttop: animation.clip.top\n\t\t};\n\t},\n\n\t// Injects recently queued functions to be first in line (after \"inprogress\")\n\tunshift: function( element, queueLength, count ) {\n\t\tvar queue = element.queue();\n\n\t\tif ( queueLength > 1 ) {\n\t\t\tqueue.splice.apply( queue,\n\t\t\t\t[ 1, 0 ].concat( queue.splice( queueLength, count ) ) );\n\t\t}\n\t\telement.dequeue();\n\t},\n\n\tsaveStyle: function( element ) {\n\t\telement.data( dataSpaceStyle, element[ 0 ].style.cssText );\n\t},\n\n\trestoreStyle: function( element ) {\n\t\telement[ 0 ].style.cssText = element.data( dataSpaceStyle ) || \"\";\n\t\telement.removeData( dataSpaceStyle );\n\t},\n\n\tmode: function( element, mode ) {\n\t\tvar hidden = element.is( \":hidden\" );\n\n\t\tif ( mode === \"toggle\" ) {\n\t\t\tmode = hidden ? \"show\" : \"hide\";\n\t\t}\n\t\tif ( hidden ? mode === \"hide\" : mode === \"show\" ) {\n\t\t\tmode = \"none\";\n\t\t}\n\t\treturn mode;\n\t},\n\n\t// Translates a [top,left] array into a baseline value\n\tgetBaseline: function( origin, original ) {\n\t\tvar y, x;\n\n\t\tswitch ( origin[ 0 ] ) {\n\t\tcase \"top\":\n\t\t\ty = 0;\n\t\t\tbreak;\n\t\tcase \"middle\":\n\t\t\ty = 0.5;\n\t\t\tbreak;\n\t\tcase \"bottom\":\n\t\t\ty = 1;\n\t\t\tbreak;\n\t\tdefault:\n\t\t\ty = origin[ 0 ] / original.height;\n\t\t}\n\n\t\tswitch ( origin[ 1 ] ) {\n\t\tcase \"left\":\n\t\t\tx = 0;\n\t\t\tbreak;\n\t\tcase \"center\":\n\t\t\tx = 0.5;\n\t\t\tbreak;\n\t\tcase \"right\":\n\t\t\tx = 1;\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tx = origin[ 1 ] / original.width;\n\t\t}\n\n\t\treturn {\n\t\t\tx: x,\n\t\t\ty: y\n\t\t};\n\t},\n\n\t// Creates a placeholder element so that the original element can be made absolute\n\tcreatePlaceholder: function( element ) {\n\t\tvar placeholder,\n\t\t\tcssPosition = element.css( \"position\" ),\n\t\t\tposition = element.position();\n\n\t\t// Lock in margins first to account for form elements, which\n\t\t// will change margin if you explicitly set height\n\t\t// see: http://jsfiddle.net/JZSMt/3/ https://bugs.webkit.org/show_bug.cgi?id=107380\n\t\t// Support: Safari\n\t\telement.css( {\n\t\t\tmarginTop: element.css( \"marginTop\" ),\n\t\t\tmarginBottom: element.css( \"marginBottom\" ),\n\t\t\tmarginLeft: element.css( \"marginLeft\" ),\n\t\t\tmarginRight: element.css( \"marginRight\" )\n\t\t} )\n\t\t.outerWidth( element.outerWidth() )\n\t\t.outerHeight( element.outerHeight() );\n\n\t\tif ( /^(static|relative)/.test( cssPosition ) ) {\n\t\t\tcssPosition = \"absolute\";\n\n\t\t\tplaceholder = $( \"<\" + element[ 0 ].nodeName + \">\" ).insertAfter( element ).css( {\n\n\t\t\t\t// Convert inline to inline block to account for inline elements\n\t\t\t\t// that turn to inline block based on content (like img)\n\t\t\t\tdisplay: /^(inline|ruby)/.test( element.css( \"display\" ) ) ?\n\t\t\t\t\t\"inline-block\" :\n\t\t\t\t\t\"block\",\n\t\t\t\tvisibility: \"hidden\",\n\n\t\t\t\t// Margins need to be set to account for margin collapse\n\t\t\t\tmarginTop: element.css( \"marginTop\" ),\n\t\t\t\tmarginBottom: element.css( \"marginBottom\" ),\n\t\t\t\tmarginLeft: element.css( \"marginLeft\" ),\n\t\t\t\tmarginRight: element.css( \"marginRight\" ),\n\t\t\t\t\"float\": element.css( \"float\" )\n\t\t\t} )\n\t\t\t.outerWidth( element.outerWidth() )\n\t\t\t.outerHeight( element.outerHeight() )\n\t\t\t.addClass( \"ui-effects-placeholder\" );\n\n\t\t\telement.data( dataSpace + \"placeholder\", placeholder );\n\t\t}\n\n\t\telement.css( {\n\t\t\tposition: cssPosition,\n\t\t\tleft: position.left,\n\t\t\ttop: position.top\n\t\t} );\n\n\t\treturn placeholder;\n\t},\n\n\tremovePlaceholder: function( element ) {\n\t\tvar dataKey = dataSpace + \"placeholder\",\n\t\t\t\tplaceholder = element.data( dataKey );\n\n\t\tif ( placeholder ) {\n\t\t\tplaceholder.remove();\n\t\t\telement.removeData( dataKey );\n\t\t}\n\t},\n\n\t// Removes a placeholder if it exists and restores\n\t// properties that were modified during placeholder creation\n\tcleanUp: function( element ) {\n\t\t$.effects.restoreStyle( element );\n\t\t$.effects.removePlaceholder( element );\n\t},\n\n\tsetTransition: function( element, list, factor, value ) {\n\t\tvalue = value || {};\n\t\t$.each( list, function( i, x ) {\n\t\t\tvar unit = element.cssUnit( x );\n\t\t\tif ( unit[ 0 ] > 0 ) {\n\t\t\t\tvalue[ x ] = unit[ 0 ] * factor + unit[ 1 ];\n\t\t\t}\n\t\t} );\n\t\treturn value;\n\t}\n} );\n\n// Return an effect options object for the given parameters:\nfunction _normalizeArguments( effect, options, speed, callback ) {\n\n\t// Allow passing all options as the first parameter\n\tif ( $.isPlainObject( effect ) ) {\n\t\toptions = effect;\n\t\teffect = effect.effect;\n\t}\n\n\t// Convert to an object\n\teffect = { effect: effect };\n\n\t// Catch (effect, null, ...)\n\tif ( options == null ) {\n\t\toptions = {};\n\t}\n\n\t// Catch (effect, callback)\n\tif ( $.isFunction( options ) ) {\n\t\tcallback = options;\n\t\tspeed = null;\n\t\toptions = {};\n\t}\n\n\t// Catch (effect, speed, ?)\n\tif ( typeof options === \"number\" || $.fx.speeds[ options ] ) {\n\t\tcallback = speed;\n\t\tspeed = options;\n\t\toptions = {};\n\t}\n\n\t// Catch (effect, options, callback)\n\tif ( $.isFunction( speed ) ) {\n\t\tcallback = speed;\n\t\tspeed = null;\n\t}\n\n\t// Add options to effect\n\tif ( options ) {\n\t\t$.extend( effect, options );\n\t}\n\n\tspeed = speed || options.duration;\n\teffect.duration = $.fx.off ? 0 :\n\t\ttypeof speed === \"number\" ? speed :\n\t\tspeed in $.fx.speeds ? $.fx.speeds[ speed ] :\n\t\t$.fx.speeds._default;\n\n\teffect.complete = callback || options.complete;\n\n\treturn effect;\n}\n\nfunction standardAnimationOption( option ) {\n\n\t// Valid standard speeds (nothing, number, named speed)\n\tif ( !option || typeof option === \"number\" || $.fx.speeds[ option ] ) {\n\t\treturn true;\n\t}\n\n\t// Invalid strings - treat as \"normal\" speed\n\tif ( typeof option === \"string\" && !$.effects.effect[ option ] ) {\n\t\treturn true;\n\t}\n\n\t// Complete callback\n\tif ( $.isFunction( option ) ) {\n\t\treturn true;\n\t}\n\n\t// Options hash (but not naming an effect)\n\tif ( typeof option === \"object\" && !option.effect ) {\n\t\treturn true;\n\t}\n\n\t// Didn't match any standard API\n\treturn false;\n}\n\n$.fn.extend( {\n\teffect: function( /* effect, options, speed, callback */ ) {\n\t\tvar args = _normalizeArguments.apply( this, arguments ),\n\t\t\teffectMethod = $.effects.effect[ args.effect ],\n\t\t\tdefaultMode = effectMethod.mode,\n\t\t\tqueue = args.queue,\n\t\t\tqueueName = queue || \"fx\",\n\t\t\tcomplete = args.complete,\n\t\t\tmode = args.mode,\n\t\t\tmodes = [],\n\t\t\tprefilter = function( next ) {\n\t\t\t\tvar el = $( this ),\n\t\t\t\t\tnormalizedMode = $.effects.mode( el, mode ) || defaultMode;\n\n\t\t\t\t// Sentinel for duck-punching the :animated psuedo-selector\n\t\t\t\tel.data( dataSpaceAnimated, true );\n\n\t\t\t\t// Save effect mode for later use,\n\t\t\t\t// we can't just call $.effects.mode again later,\n\t\t\t\t// as the .show() below destroys the initial state\n\t\t\t\tmodes.push( normalizedMode );\n\n\t\t\t\t// See $.uiBackCompat inside of run() for removal of defaultMode in 1.13\n\t\t\t\tif ( defaultMode && ( normalizedMode === \"show\" ||\n\t\t\t\t\t\t( normalizedMode === defaultMode && normalizedMode === \"hide\" ) ) ) {\n\t\t\t\t\tel.show();\n\t\t\t\t}\n\n\t\t\t\tif ( !defaultMode || normalizedMode !== \"none\" ) {\n\t\t\t\t\t$.effects.saveStyle( el );\n\t\t\t\t}\n\n\t\t\t\tif ( $.isFunction( next ) ) {\n\t\t\t\t\tnext();\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( $.fx.off || !effectMethod ) {\n\n\t\t\t// Delegate to the original method (e.g., .show()) if possible\n\t\t\tif ( mode ) {\n\t\t\t\treturn this[ mode ]( args.duration, complete );\n\t\t\t} else {\n\t\t\t\treturn this.each( function() {\n\t\t\t\t\tif ( complete ) {\n\t\t\t\t\t\tcomplete.call( this );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\n\t\tfunction run( next ) {\n\t\t\tvar elem = $( this );\n\n\t\t\tfunction cleanup() {\n\t\t\t\telem.removeData( dataSpaceAnimated );\n\n\t\t\t\t$.effects.cleanUp( elem );\n\n\t\t\t\tif ( args.mode === \"hide\" ) {\n\t\t\t\t\telem.hide();\n\t\t\t\t}\n\n\t\t\t\tdone();\n\t\t\t}\n\n\t\t\tfunction done() {\n\t\t\t\tif ( $.isFunction( complete ) ) {\n\t\t\t\t\tcomplete.call( elem[ 0 ] );\n\t\t\t\t}\n\n\t\t\t\tif ( $.isFunction( next ) ) {\n\t\t\t\t\tnext();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override mode option on a per element basis,\n\t\t\t// as toggle can be either show or hide depending on element state\n\t\t\targs.mode = modes.shift();\n\n\t\t\tif ( $.uiBackCompat !== false && !defaultMode ) {\n\t\t\t\tif ( elem.is( \":hidden\" ) ? mode === \"hide\" : mode === \"show\" ) {\n\n\t\t\t\t\t// Call the core method to track \"olddisplay\" properly\n\t\t\t\t\telem[ mode ]();\n\t\t\t\t\tdone();\n\t\t\t\t} else {\n\t\t\t\t\teffectMethod.call( elem[ 0 ], args, done );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ( args.mode === \"none\" ) {\n\n\t\t\t\t\t// Call the core method to track \"olddisplay\" properly\n\t\t\t\t\telem[ mode ]();\n\t\t\t\t\tdone();\n\t\t\t\t} else {\n\t\t\t\t\teffectMethod.call( elem[ 0 ], args, cleanup );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Run prefilter on all elements first to ensure that\n\t\t// any showing or hiding happens before placeholder creation,\n\t\t// which ensures that any layout changes are correctly captured.\n\t\treturn queue === false ?\n\t\t\tthis.each( prefilter ).each( run ) :\n\t\t\tthis.queue( queueName, prefilter ).queue( queueName, run );\n\t},\n\n\tshow: ( function( orig ) {\n\t\treturn function( option ) {\n\t\t\tif ( standardAnimationOption( option ) ) {\n\t\t\t\treturn orig.apply( this, arguments );\n\t\t\t} else {\n\t\t\t\tvar args = _normalizeArguments.apply( this, arguments );\n\t\t\t\targs.mode = \"show\";\n\t\t\t\treturn this.effect.call( this, args );\n\t\t\t}\n\t\t};\n\t} )( $.fn.show ),\n\n\thide: ( function( orig ) {\n\t\treturn function( option ) {\n\t\t\tif ( standardAnimationOption( option ) ) {\n\t\t\t\treturn orig.apply( this, arguments );\n\t\t\t} else {\n\t\t\t\tvar args = _normalizeArguments.apply( this, arguments );\n\t\t\t\targs.mode = \"hide\";\n\t\t\t\treturn this.effect.call( this, args );\n\t\t\t}\n\t\t};\n\t} )( $.fn.hide ),\n\n\ttoggle: ( function( orig ) {\n\t\treturn function( option ) {\n\t\t\tif ( standardAnimationOption( option ) || typeof option === \"boolean\" ) {\n\t\t\t\treturn orig.apply( this, arguments );\n\t\t\t} else {\n\t\t\t\tvar args = _normalizeArguments.apply( this, arguments );\n\t\t\t\targs.mode = \"toggle\";\n\t\t\t\treturn this.effect.call( this, args );\n\t\t\t}\n\t\t};\n\t} )( $.fn.toggle ),\n\n\tcssUnit: function( key ) {\n\t\tvar style = this.css( key ),\n\t\t\tval = [];\n\n\t\t$.each( [ \"em\", \"px\", \"%\", \"pt\" ], function( i, unit ) {\n\t\t\tif ( style.indexOf( unit ) > 0 ) {\n\t\t\t\tval = [ parseFloat( style ), unit ];\n\t\t\t}\n\t\t} );\n\t\treturn val;\n\t},\n\n\tcssClip: function( clipObj ) {\n\t\tif ( clipObj ) {\n\t\t\treturn this.css( \"clip\", \"rect(\" + clipObj.top + \"px \" + clipObj.right + \"px \" +\n\t\t\t\tclipObj.bottom + \"px \" + clipObj.left + \"px)\" );\n\t\t}\n\t\treturn parseClip( this.css( \"clip\" ), this );\n\t},\n\n\ttransfer: function( options, done ) {\n\t\tvar element = $( this ),\n\t\t\ttarget = $( options.to ),\n\t\t\ttargetFixed = target.css( \"position\" ) === \"fixed\",\n\t\t\tbody = $( \"body\" ),\n\t\t\tfixTop = targetFixed ? body.scrollTop() : 0,\n\t\t\tfixLeft = targetFixed ? body.scrollLeft() : 0,\n\t\t\tendPosition = target.offset(),\n\t\t\tanimation = {\n\t\t\t\ttop: endPosition.top - fixTop,\n\t\t\t\tleft: endPosition.left - fixLeft,\n\t\t\t\theight: target.innerHeight(),\n\t\t\t\twidth: target.innerWidth()\n\t\t\t},\n\t\t\tstartPosition = element.offset(),\n\t\t\ttransfer = $( \"<div class='ui-effects-transfer'></div>\" )\n\t\t\t\t.appendTo( \"body\" )\n\t\t\t\t.addClass( options.className )\n\t\t\t\t.css( {\n\t\t\t\t\ttop: startPosition.top - fixTop,\n\t\t\t\t\tleft: startPosition.left - fixLeft,\n\t\t\t\t\theight: element.innerHeight(),\n\t\t\t\t\twidth: element.innerWidth(),\n\t\t\t\t\tposition: targetFixed ? \"fixed\" : \"absolute\"\n\t\t\t\t} )\n\t\t\t\t.animate( animation, options.duration, options.easing, function() {\n\t\t\t\t\ttransfer.remove();\n\t\t\t\t\tif ( $.isFunction( done ) ) {\n\t\t\t\t\t\tdone();\n\t\t\t\t\t}\n\t\t\t\t} );\n\t}\n} );\n\nfunction parseClip( str, element ) {\n\t\tvar outerWidth = element.outerWidth(),\n\t\t\touterHeight = element.outerHeight(),\n\t\t\tclipRegex = /^rect\\((-?\\d*\\.?\\d*px|-?\\d+%|auto),?\\s*(-?\\d*\\.?\\d*px|-?\\d+%|auto),?\\s*(-?\\d*\\.?\\d*px|-?\\d+%|auto),?\\s*(-?\\d*\\.?\\d*px|-?\\d+%|auto)\\)$/,\n\t\t\tvalues = clipRegex.exec( str ) || [ \"\", 0, outerWidth, outerHeight, 0 ];\n\n\t\treturn {\n\t\t\ttop: parseFloat( values[ 1 ] ) || 0,\n\t\t\tright: values[ 2 ] === \"auto\" ? outerWidth : parseFloat( values[ 2 ] ),\n\t\t\tbottom: values[ 3 ] === \"auto\" ? outerHeight : parseFloat( values[ 3 ] ),\n\t\t\tleft: parseFloat( values[ 4 ] ) || 0\n\t\t};\n}\n\n$.fx.step.clip = function( fx ) {\n\tif ( !fx.clipInit ) {\n\t\tfx.start = $( fx.elem ).cssClip();\n\t\tif ( typeof fx.end === \"string\" ) {\n\t\t\tfx.end = parseClip( fx.end, fx.elem );\n\t\t}\n\t\tfx.clipInit = true;\n\t}\n\n\t$( fx.elem ).cssClip( {\n\t\ttop: fx.pos * ( fx.end.top - fx.start.top ) + fx.start.top,\n\t\tright: fx.pos * ( fx.end.right - fx.start.right ) + fx.start.right,\n\t\tbottom: fx.pos * ( fx.end.bottom - fx.start.bottom ) + fx.start.bottom,\n\t\tleft: fx.pos * ( fx.end.left - fx.start.left ) + fx.start.left\n\t} );\n};\n\n} )();\n\n/******************************************************************************/\n/*********************************** EASING ***********************************/\n/******************************************************************************/\n\n( function() {\n\n// Based on easing equations from Robert Penner (http://www.robertpenner.com/easing)\n\nvar baseEasings = {};\n\n$.each( [ \"Quad\", \"Cubic\", \"Quart\", \"Quint\", \"Expo\" ], function( i, name ) {\n\tbaseEasings[ name ] = function( p ) {\n\t\treturn Math.pow( p, i + 2 );\n\t};\n} );\n\n$.extend( baseEasings, {\n\tSine: function( p ) {\n\t\treturn 1 - Math.cos( p * Math.PI / 2 );\n\t},\n\tCirc: function( p ) {\n\t\treturn 1 - Math.sqrt( 1 - p * p );\n\t},\n\tElastic: function( p ) {\n\t\treturn p === 0 || p === 1 ? p :\n\t\t\t-Math.pow( 2, 8 * ( p - 1 ) ) * Math.sin( ( ( p - 1 ) * 80 - 7.5 ) * Math.PI / 15 );\n\t},\n\tBack: function( p ) {\n\t\treturn p * p * ( 3 * p - 2 );\n\t},\n\tBounce: function( p ) {\n\t\tvar pow2,\n\t\t\tbounce = 4;\n\n\t\twhile ( p < ( ( pow2 = Math.pow( 2, --bounce ) ) - 1 ) / 11 ) {}\n\t\treturn 1 / Math.pow( 4, 3 - bounce ) - 7.5625 * Math.pow( ( pow2 * 3 - 2 ) / 22 - p, 2 );\n\t}\n} );\n\n$.each( baseEasings, function( name, easeIn ) {\n\t$.easing[ \"easeIn\" + name ] = easeIn;\n\t$.easing[ \"easeOut\" + name ] = function( p ) {\n\t\treturn 1 - easeIn( 1 - p );\n\t};\n\t$.easing[ \"easeInOut\" + name ] = function( p ) {\n\t\treturn p < 0.5 ?\n\t\t\teaseIn( p * 2 ) / 2 :\n\t\t\t1 - easeIn( p * -2 + 2 ) / 2;\n\t};\n} );\n\n} )();\n\nvar effect = $.effects;\n\n\n/*!\n * jQuery UI Effects Blind 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Blind Effect\n//>>group: Effects\n//>>description: Blinds the element.\n//>>docs: http://api.jqueryui.com/blind-effect/\n//>>demos: http://jqueryui.com/effect/\n\n\n\nvar effectsEffectBlind = $.effects.define( \"blind\", \"hide\", function( options, done ) {\n\tvar map = {\n\t\t\tup: [ \"bottom\", \"top\" ],\n\t\t\tvertical: [ \"bottom\", \"top\" ],\n\t\t\tdown: [ \"top\", \"bottom\" ],\n\t\t\tleft: [ \"right\", \"left\" ],\n\t\t\thorizontal: [ \"right\", \"left\" ],\n\t\t\tright: [ \"left\", \"right\" ]\n\t\t},\n\t\telement = $( this ),\n\t\tdirection = options.direction || \"up\",\n\t\tstart = element.cssClip(),\n\t\tanimate = { clip: $.extend( {}, start ) },\n\t\tplaceholder = $.effects.createPlaceholder( element );\n\n\tanimate.clip[ map[ direction ][ 0 ] ] = animate.clip[ map[ direction ][ 1 ] ];\n\n\tif ( options.mode === \"show\" ) {\n\t\telement.cssClip( animate.clip );\n\t\tif ( placeholder ) {\n\t\t\tplaceholder.css( $.effects.clipToBox( animate ) );\n\t\t}\n\n\t\tanimate.clip = start;\n\t}\n\n\tif ( placeholder ) {\n\t\tplaceholder.animate( $.effects.clipToBox( animate ), options.duration, options.easing );\n\t}\n\n\telement.animate( animate, {\n\t\tqueue: false,\n\t\tduration: options.duration,\n\t\teasing: options.easing,\n\t\tcomplete: done\n\t} );\n} );\n\n\n/*!\n * jQuery UI Effects Bounce 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Bounce Effect\n//>>group: Effects\n//>>description: Bounces an element horizontally or vertically n times.\n//>>docs: http://api.jqueryui.com/bounce-effect/\n//>>demos: http://jqueryui.com/effect/\n\n\n\nvar effectsEffectBounce = $.effects.define( \"bounce\", function( options, done ) {\n\tvar upAnim, downAnim, refValue,\n\t\telement = $( this ),\n\n\t\t// Defaults:\n\t\tmode = options.mode,\n\t\thide = mode === \"hide\",\n\t\tshow = mode === \"show\",\n\t\tdirection = options.direction || \"up\",\n\t\tdistance = options.distance,\n\t\ttimes = options.times || 5,\n\n\t\t// Number of internal animations\n\t\tanims = times * 2 + ( show || hide ? 1 : 0 ),\n\t\tspeed = options.duration / anims,\n\t\teasing = options.easing,\n\n\t\t// Utility:\n\t\tref = ( direction === \"up\" || direction === \"down\" ) ? \"top\" : \"left\",\n\t\tmotion = ( direction === \"up\" || direction === \"left\" ),\n\t\ti = 0,\n\n\t\tqueuelen = element.queue().length;\n\n\t$.effects.createPlaceholder( element );\n\n\trefValue = element.css( ref );\n\n\t// Default distance for the BIGGEST bounce is the outer Distance / 3\n\tif ( !distance ) {\n\t\tdistance = element[ ref === \"top\" ? \"outerHeight\" : \"outerWidth\" ]() / 3;\n\t}\n\n\tif ( show ) {\n\t\tdownAnim = { opacity: 1 };\n\t\tdownAnim[ ref ] = refValue;\n\n\t\t// If we are showing, force opacity 0 and set the initial position\n\t\t// then do the \"first\" animation\n\t\telement\n\t\t\t.css( \"opacity\", 0 )\n\t\t\t.css( ref, motion ? -distance * 2 : distance * 2 )\n\t\t\t.animate( downAnim, speed, easing );\n\t}\n\n\t// Start at the smallest distance if we are hiding\n\tif ( hide ) {\n\t\tdistance = distance / Math.pow( 2, times - 1 );\n\t}\n\n\tdownAnim = {};\n\tdownAnim[ ref ] = refValue;\n\n\t// Bounces up/down/left/right then back to 0 -- times * 2 animations happen here\n\tfor ( ; i < times; i++ ) {\n\t\tupAnim = {};\n\t\tupAnim[ ref ] = ( motion ? \"-=\" : \"+=\" ) + distance;\n\n\t\telement\n\t\t\t.animate( upAnim, speed, easing )\n\t\t\t.animate( downAnim, speed, easing );\n\n\t\tdistance = hide ? distance * 2 : distance / 2;\n\t}\n\n\t// Last Bounce when Hiding\n\tif ( hide ) {\n\t\tupAnim = { opacity: 0 };\n\t\tupAnim[ ref ] = ( motion ? \"-=\" : \"+=\" ) + distance;\n\n\t\telement.animate( upAnim, speed, easing );\n\t}\n\n\telement.queue( done );\n\n\t$.effects.unshift( element, queuelen, anims + 1 );\n} );\n\n\n/*!\n * jQuery UI Effects Clip 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Clip Effect\n//>>group: Effects\n//>>description: Clips the element on and off like an old TV.\n//>>docs: http://api.jqueryui.com/clip-effect/\n//>>demos: http://jqueryui.com/effect/\n\n\n\nvar effectsEffectClip = $.effects.define( \"clip\", \"hide\", function( options, done ) {\n\tvar start,\n\t\tanimate = {},\n\t\telement = $( this ),\n\t\tdirection = options.direction || \"vertical\",\n\t\tboth = direction === \"both\",\n\t\thorizontal = both || direction === \"horizontal\",\n\t\tvertical = both || direction === \"vertical\";\n\n\tstart = element.cssClip();\n\tanimate.clip = {\n\t\ttop: vertical ? ( start.bottom - start.top ) / 2 : start.top,\n\t\tright: horizontal ? ( start.right - start.left ) / 2 : start.right,\n\t\tbottom: vertical ? ( start.bottom - start.top ) / 2 : start.bottom,\n\t\tleft: horizontal ? ( start.right - start.left ) / 2 : start.left\n\t};\n\n\t$.effects.createPlaceholder( element );\n\n\tif ( options.mode === \"show\" ) {\n\t\telement.cssClip( animate.clip );\n\t\tanimate.clip = start;\n\t}\n\n\telement.animate( animate, {\n\t\tqueue: false,\n\t\tduration: options.duration,\n\t\teasing: options.easing,\n\t\tcomplete: done\n\t} );\n\n} );\n\n\n/*!\n * jQuery UI Effects Drop 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Drop Effect\n//>>group: Effects\n//>>description: Moves an element in one direction and hides it at the same time.\n//>>docs: http://api.jqueryui.com/drop-effect/\n//>>demos: http://jqueryui.com/effect/\n\n\n\nvar effectsEffectDrop = $.effects.define( \"drop\", \"hide\", function( options, done ) {\n\n\tvar distance,\n\t\telement = $( this ),\n\t\tmode = options.mode,\n\t\tshow = mode === \"show\",\n\t\tdirection = options.direction || \"left\",\n\t\tref = ( direction === \"up\" || direction === \"down\" ) ? \"top\" : \"left\",\n\t\tmotion = ( direction === \"up\" || direction === \"left\" ) ? \"-=\" : \"+=\",\n\t\toppositeMotion = ( motion === \"+=\" ) ? \"-=\" : \"+=\",\n\t\tanimation = {\n\t\t\topacity: 0\n\t\t};\n\n\t$.effects.createPlaceholder( element );\n\n\tdistance = options.distance ||\n\t\telement[ ref === \"top\" ? \"outerHeight\" : \"outerWidth\" ]( true ) / 2;\n\n\tanimation[ ref ] = motion + distance;\n\n\tif ( show ) {\n\t\telement.css( animation );\n\n\t\tanimation[ ref ] = oppositeMotion + distance;\n\t\tanimation.opacity = 1;\n\t}\n\n\t// Animate\n\telement.animate( animation, {\n\t\tqueue: false,\n\t\tduration: options.duration,\n\t\teasing: options.easing,\n\t\tcomplete: done\n\t} );\n} );\n\n\n/*!\n * jQuery UI Effects Explode 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Explode Effect\n//>>group: Effects\n// jscs:disable maximumLineLength\n//>>description: Explodes an element in all directions into n pieces. Implodes an element to its original wholeness.\n// jscs:enable maximumLineLength\n//>>docs: http://api.jqueryui.com/explode-effect/\n//>>demos: http://jqueryui.com/effect/\n\n\n\nvar effectsEffectExplode = $.effects.define( \"explode\", \"hide\", function( options, done ) {\n\n\tvar i, j, left, top, mx, my,\n\t\trows = options.pieces ? Math.round( Math.sqrt( options.pieces ) ) : 3,\n\t\tcells = rows,\n\t\telement = $( this ),\n\t\tmode = options.mode,\n\t\tshow = mode === \"show\",\n\n\t\t// Show and then visibility:hidden the element before calculating offset\n\t\toffset = element.show().css( \"visibility\", \"hidden\" ).offset(),\n\n\t\t// Width and height of a piece\n\t\twidth = Math.ceil( element.outerWidth() / cells ),\n\t\theight = Math.ceil( element.outerHeight() / rows ),\n\t\tpieces = [];\n\n\t// Children animate complete:\n\tfunction childComplete() {\n\t\tpieces.push( this );\n\t\tif ( pieces.length === rows * cells ) {\n\t\t\tanimComplete();\n\t\t}\n\t}\n\n\t// Clone the element for each row and cell.\n\tfor ( i = 0; i < rows; i++ ) { // ===>\n\t\ttop = offset.top + i * height;\n\t\tmy = i - ( rows - 1 ) / 2;\n\n\t\tfor ( j = 0; j < cells; j++ ) { // |||\n\t\t\tleft = offset.left + j * width;\n\t\t\tmx = j - ( cells - 1 ) / 2;\n\n\t\t\t// Create a clone of the now hidden main element that will be absolute positioned\n\t\t\t// within a wrapper div off the -left and -top equal to size of our pieces\n\t\t\telement\n\t\t\t\t.clone()\n\t\t\t\t.appendTo( \"body\" )\n\t\t\t\t.wrap( \"<div></div>\" )\n\t\t\t\t.css( {\n\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\tvisibility: \"visible\",\n\t\t\t\t\tleft: -j * width,\n\t\t\t\t\ttop: -i * height\n\t\t\t\t} )\n\n\t\t\t\t// Select the wrapper - make it overflow: hidden and absolute positioned based on\n\t\t\t\t// where the original was located +left and +top equal to the size of pieces\n\t\t\t\t.parent()\n\t\t\t\t\t.addClass( \"ui-effects-explode\" )\n\t\t\t\t\t.css( {\n\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\toverflow: \"hidden\",\n\t\t\t\t\t\twidth: width,\n\t\t\t\t\t\theight: height,\n\t\t\t\t\t\tleft: left + ( show ? mx * width : 0 ),\n\t\t\t\t\t\ttop: top + ( show ? my * height : 0 ),\n\t\t\t\t\t\topacity: show ? 0 : 1\n\t\t\t\t\t} )\n\t\t\t\t\t.animate( {\n\t\t\t\t\t\tleft: left + ( show ? 0 : mx * width ),\n\t\t\t\t\t\ttop: top + ( show ? 0 : my * height ),\n\t\t\t\t\t\topacity: show ? 1 : 0\n\t\t\t\t\t}, options.duration || 500, options.easing, childComplete );\n\t\t}\n\t}\n\n\tfunction animComplete() {\n\t\telement.css( {\n\t\t\tvisibility: \"visible\"\n\t\t} );\n\t\t$( pieces ).remove();\n\t\tdone();\n\t}\n} );\n\n\n/*!\n * jQuery UI Effects Fade 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Fade Effect\n//>>group: Effects\n//>>description: Fades the element.\n//>>docs: http://api.jqueryui.com/fade-effect/\n//>>demos: http://jqueryui.com/effect/\n\n\n\nvar effectsEffectFade = $.effects.define( \"fade\", \"toggle\", function( options, done ) {\n\tvar show = options.mode === \"show\";\n\n\t$( this )\n\t\t.css( \"opacity\", show ? 0 : 1 )\n\t\t.animate( {\n\t\t\topacity: show ? 1 : 0\n\t\t}, {\n\t\t\tqueue: false,\n\t\t\tduration: options.duration,\n\t\t\teasing: options.easing,\n\t\t\tcomplete: done\n\t\t} );\n} );\n\n\n/*!\n * jQuery UI Effects Fold 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Fold Effect\n//>>group: Effects\n//>>description: Folds an element first horizontally and then vertically.\n//>>docs: http://api.jqueryui.com/fold-effect/\n//>>demos: http://jqueryui.com/effect/\n\n\n\nvar effectsEffectFold = $.effects.define( \"fold\", \"hide\", function( options, done ) {\n\n\t// Create element\n\tvar element = $( this ),\n\t\tmode = options.mode,\n\t\tshow = mode === \"show\",\n\t\thide = mode === \"hide\",\n\t\tsize = options.size || 15,\n\t\tpercent = /([0-9]+)%/.exec( size ),\n\t\thorizFirst = !!options.horizFirst,\n\t\tref = horizFirst ? [ \"right\", \"bottom\" ] : [ \"bottom\", \"right\" ],\n\t\tduration = options.duration / 2,\n\n\t\tplaceholder = $.effects.createPlaceholder( element ),\n\n\t\tstart = element.cssClip(),\n\t\tanimation1 = { clip: $.extend( {}, start ) },\n\t\tanimation2 = { clip: $.extend( {}, start ) },\n\n\t\tdistance = [ start[ ref[ 0 ] ], start[ ref[ 1 ] ] ],\n\n\t\tqueuelen = element.queue().length;\n\n\tif ( percent ) {\n\t\tsize = parseInt( percent[ 1 ], 10 ) / 100 * distance[ hide ? 0 : 1 ];\n\t}\n\tanimation1.clip[ ref[ 0 ] ] = size;\n\tanimation2.clip[ ref[ 0 ] ] = size;\n\tanimation2.clip[ ref[ 1 ] ] = 0;\n\n\tif ( show ) {\n\t\telement.cssClip( animation2.clip );\n\t\tif ( placeholder ) {\n\t\t\tplaceholder.css( $.effects.clipToBox( animation2 ) );\n\t\t}\n\n\t\tanimation2.clip = start;\n\t}\n\n\t// Animate\n\telement\n\t\t.queue( function( next ) {\n\t\t\tif ( placeholder ) {\n\t\t\t\tplaceholder\n\t\t\t\t\t.animate( $.effects.clipToBox( animation1 ), duration, options.easing )\n\t\t\t\t\t.animate( $.effects.clipToBox( animation2 ), duration, options.easing );\n\t\t\t}\n\n\t\t\tnext();\n\t\t} )\n\t\t.animate( animation1, duration, options.easing )\n\t\t.animate( animation2, duration, options.easing )\n\t\t.queue( done );\n\n\t$.effects.unshift( element, queuelen, 4 );\n} );\n\n\n/*!\n * jQuery UI Effects Highlight 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Highlight Effect\n//>>group: Effects\n//>>description: Highlights the background of an element in a defined color for a custom duration.\n//>>docs: http://api.jqueryui.com/highlight-effect/\n//>>demos: http://jqueryui.com/effect/\n\n\n\nvar effectsEffectHighlight = $.effects.define( \"highlight\", \"show\", function( options, done ) {\n\tvar element = $( this ),\n\t\tanimation = {\n\t\t\tbackgroundColor: element.css( \"backgroundColor\" )\n\t\t};\n\n\tif ( options.mode === \"hide\" ) {\n\t\tanimation.opacity = 0;\n\t}\n\n\t$.effects.saveStyle( element );\n\n\telement\n\t\t.css( {\n\t\t\tbackgroundImage: \"none\",\n\t\t\tbackgroundColor: options.color || \"#ffff99\"\n\t\t} )\n\t\t.animate( animation, {\n\t\t\tqueue: false,\n\t\t\tduration: options.duration,\n\t\t\teasing: options.easing,\n\t\t\tcomplete: done\n\t\t} );\n} );\n\n\n/*!\n * jQuery UI Effects Size 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Size Effect\n//>>group: Effects\n//>>description: Resize an element to a specified width and height.\n//>>docs: http://api.jqueryui.com/size-effect/\n//>>demos: http://jqueryui.com/effect/\n\n\n\nvar effectsEffectSize = $.effects.define( \"size\", function( options, done ) {\n\n\t// Create element\n\tvar baseline, factor, temp,\n\t\telement = $( this ),\n\n\t\t// Copy for children\n\t\tcProps = [ \"fontSize\" ],\n\t\tvProps = [ \"borderTopWidth\", \"borderBottomWidth\", \"paddingTop\", \"paddingBottom\" ],\n\t\thProps = [ \"borderLeftWidth\", \"borderRightWidth\", \"paddingLeft\", \"paddingRight\" ],\n\n\t\t// Set options\n\t\tmode = options.mode,\n\t\trestore = mode !== \"effect\",\n\t\tscale = options.scale || \"both\",\n\t\torigin = options.origin || [ \"middle\", \"center\" ],\n\t\tposition = element.css( \"position\" ),\n\t\tpos = element.position(),\n\t\toriginal = $.effects.scaledDimensions( element ),\n\t\tfrom = options.from || original,\n\t\tto = options.to || $.effects.scaledDimensions( element, 0 );\n\n\t$.effects.createPlaceholder( element );\n\n\tif ( mode === \"show\" ) {\n\t\ttemp = from;\n\t\tfrom = to;\n\t\tto = temp;\n\t}\n\n\t// Set scaling factor\n\tfactor = {\n\t\tfrom: {\n\t\t\ty: from.height / original.height,\n\t\t\tx: from.width / original.width\n\t\t},\n\t\tto: {\n\t\t\ty: to.height / original.height,\n\t\t\tx: to.width / original.width\n\t\t}\n\t};\n\n\t// Scale the css box\n\tif ( scale === \"box\" || scale === \"both\" ) {\n\n\t\t// Vertical props scaling\n\t\tif ( factor.from.y !== factor.to.y ) {\n\t\t\tfrom = $.effects.setTransition( element, vProps, factor.from.y, from );\n\t\t\tto = $.effects.setTransition( element, vProps, factor.to.y, to );\n\t\t}\n\n\t\t// Horizontal props scaling\n\t\tif ( factor.from.x !== factor.to.x ) {\n\t\t\tfrom = $.effects.setTransition( element, hProps, factor.from.x, from );\n\t\t\tto = $.effects.setTransition( element, hProps, factor.to.x, to );\n\t\t}\n\t}\n\n\t// Scale the content\n\tif ( scale === \"content\" || scale === \"both\" ) {\n\n\t\t// Vertical props scaling\n\t\tif ( factor.from.y !== factor.to.y ) {\n\t\t\tfrom = $.effects.setTransition( element, cProps, factor.from.y, from );\n\t\t\tto = $.effects.setTransition( element, cProps, factor.to.y, to );\n\t\t}\n\t}\n\n\t// Adjust the position properties based on the provided origin points\n\tif ( origin ) {\n\t\tbaseline = $.effects.getBaseline( origin, original );\n\t\tfrom.top = ( original.outerHeight - from.outerHeight ) * baseline.y + pos.top;\n\t\tfrom.left = ( original.outerWidth - from.outerWidth ) * baseline.x + pos.left;\n\t\tto.top = ( original.outerHeight - to.outerHeight ) * baseline.y + pos.top;\n\t\tto.left = ( original.outerWidth - to.outerWidth ) * baseline.x + pos.left;\n\t}\n\telement.css( from );\n\n\t// Animate the children if desired\n\tif ( scale === \"content\" || scale === \"both\" ) {\n\n\t\tvProps = vProps.concat( [ \"marginTop\", \"marginBottom\" ] ).concat( cProps );\n\t\thProps = hProps.concat( [ \"marginLeft\", \"marginRight\" ] );\n\n\t\t// Only animate children with width attributes specified\n\t\t// TODO: is this right? should we include anything with css width specified as well\n\t\telement.find( \"*[width]\" ).each( function() {\n\t\t\tvar child = $( this ),\n\t\t\t\tchildOriginal = $.effects.scaledDimensions( child ),\n\t\t\t\tchildFrom = {\n\t\t\t\t\theight: childOriginal.height * factor.from.y,\n\t\t\t\t\twidth: childOriginal.width * factor.from.x,\n\t\t\t\t\touterHeight: childOriginal.outerHeight * factor.from.y,\n\t\t\t\t\touterWidth: childOriginal.outerWidth * factor.from.x\n\t\t\t\t},\n\t\t\t\tchildTo = {\n\t\t\t\t\theight: childOriginal.height * factor.to.y,\n\t\t\t\t\twidth: childOriginal.width * factor.to.x,\n\t\t\t\t\touterHeight: childOriginal.height * factor.to.y,\n\t\t\t\t\touterWidth: childOriginal.width * factor.to.x\n\t\t\t\t};\n\n\t\t\t// Vertical props scaling\n\t\t\tif ( factor.from.y !== factor.to.y ) {\n\t\t\t\tchildFrom = $.effects.setTransition( child, vProps, factor.from.y, childFrom );\n\t\t\t\tchildTo = $.effects.setTransition( child, vProps, factor.to.y, childTo );\n\t\t\t}\n\n\t\t\t// Horizontal props scaling\n\t\t\tif ( factor.from.x !== factor.to.x ) {\n\t\t\t\tchildFrom = $.effects.setTransition( child, hProps, factor.from.x, childFrom );\n\t\t\t\tchildTo = $.effects.setTransition( child, hProps, factor.to.x, childTo );\n\t\t\t}\n\n\t\t\tif ( restore ) {\n\t\t\t\t$.effects.saveStyle( child );\n\t\t\t}\n\n\t\t\t// Animate children\n\t\t\tchild.css( childFrom );\n\t\t\tchild.animate( childTo, options.duration, options.easing, function() {\n\n\t\t\t\t// Restore children\n\t\t\t\tif ( restore ) {\n\t\t\t\t\t$.effects.restoreStyle( child );\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Animate\n\telement.animate( to, {\n\t\tqueue: false,\n\t\tduration: options.duration,\n\t\teasing: options.easing,\n\t\tcomplete: function() {\n\n\t\t\tvar offset = element.offset();\n\n\t\t\tif ( to.opacity === 0 ) {\n\t\t\t\telement.css( \"opacity\", from.opacity );\n\t\t\t}\n\n\t\t\tif ( !restore ) {\n\t\t\t\telement\n\t\t\t\t\t.css( \"position\", position === \"static\" ? \"relative\" : position )\n\t\t\t\t\t.offset( offset );\n\n\t\t\t\t// Need to save style here so that automatic style restoration\n\t\t\t\t// doesn't restore to the original styles from before the animation.\n\t\t\t\t$.effects.saveStyle( element );\n\t\t\t}\n\n\t\t\tdone();\n\t\t}\n\t} );\n\n} );\n\n\n/*!\n * jQuery UI Effects Scale 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Scale Effect\n//>>group: Effects\n//>>description: Grows or shrinks an element and its content.\n//>>docs: http://api.jqueryui.com/scale-effect/\n//>>demos: http://jqueryui.com/effect/\n\n\n\nvar effectsEffectScale = $.effects.define( \"scale\", function( options, done ) {\n\n\t// Create element\n\tvar el = $( this ),\n\t\tmode = options.mode,\n\t\tpercent = parseInt( options.percent, 10 ) ||\n\t\t\t( parseInt( options.percent, 10 ) === 0 ? 0 : ( mode !== \"effect\" ? 0 : 100 ) ),\n\n\t\tnewOptions = $.extend( true, {\n\t\t\tfrom: $.effects.scaledDimensions( el ),\n\t\t\tto: $.effects.scaledDimensions( el, percent, options.direction || \"both\" ),\n\t\t\torigin: options.origin || [ \"middle\", \"center\" ]\n\t\t}, options );\n\n\t// Fade option to support puff\n\tif ( options.fade ) {\n\t\tnewOptions.from.opacity = 1;\n\t\tnewOptions.to.opacity = 0;\n\t}\n\n\t$.effects.effect.size.call( this, newOptions, done );\n} );\n\n\n/*!\n * jQuery UI Effects Puff 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Puff Effect\n//>>group: Effects\n//>>description: Creates a puff effect by scaling the element up and hiding it at the same time.\n//>>docs: http://api.jqueryui.com/puff-effect/\n//>>demos: http://jqueryui.com/effect/\n\n\n\nvar effectsEffectPuff = $.effects.define( \"puff\", \"hide\", function( options, done ) {\n\tvar newOptions = $.extend( true, {}, options, {\n\t\tfade: true,\n\t\tpercent: parseInt( options.percent, 10 ) || 150\n\t} );\n\n\t$.effects.effect.scale.call( this, newOptions, done );\n} );\n\n\n/*!\n * jQuery UI Effects Pulsate 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Pulsate Effect\n//>>group: Effects\n//>>description: Pulsates an element n times by changing the opacity to zero and back.\n//>>docs: http://api.jqueryui.com/pulsate-effect/\n//>>demos: http://jqueryui.com/effect/\n\n\n\nvar effectsEffectPulsate = $.effects.define( \"pulsate\", \"show\", function( options, done ) {\n\tvar element = $( this ),\n\t\tmode = options.mode,\n\t\tshow = mode === \"show\",\n\t\thide = mode === \"hide\",\n\t\tshowhide = show || hide,\n\n\t\t// Showing or hiding leaves off the \"last\" animation\n\t\tanims = ( ( options.times || 5 ) * 2 ) + ( showhide ? 1 : 0 ),\n\t\tduration = options.duration / anims,\n\t\tanimateTo = 0,\n\t\ti = 1,\n\t\tqueuelen = element.queue().length;\n\n\tif ( show || !element.is( \":visible\" ) ) {\n\t\telement.css( \"opacity\", 0 ).show();\n\t\tanimateTo = 1;\n\t}\n\n\t// Anims - 1 opacity \"toggles\"\n\tfor ( ; i < anims; i++ ) {\n\t\telement.animate( { opacity: animateTo }, duration, options.easing );\n\t\tanimateTo = 1 - animateTo;\n\t}\n\n\telement.animate( { opacity: animateTo }, duration, options.easing );\n\n\telement.queue( done );\n\n\t$.effects.unshift( element, queuelen, anims + 1 );\n} );\n\n\n/*!\n * jQuery UI Effects Shake 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Shake Effect\n//>>group: Effects\n//>>description: Shakes an element horizontally or vertically n times.\n//>>docs: http://api.jqueryui.com/shake-effect/\n//>>demos: http://jqueryui.com/effect/\n\n\n\nvar effectsEffectShake = $.effects.define( \"shake\", function( options, done ) {\n\n\tvar i = 1,\n\t\telement = $( this ),\n\t\tdirection = options.direction || \"left\",\n\t\tdistance = options.distance || 20,\n\t\ttimes = options.times || 3,\n\t\tanims = times * 2 + 1,\n\t\tspeed = Math.round( options.duration / anims ),\n\t\tref = ( direction === \"up\" || direction === \"down\" ) ? \"top\" : \"left\",\n\t\tpositiveMotion = ( direction === \"up\" || direction === \"left\" ),\n\t\tanimation = {},\n\t\tanimation1 = {},\n\t\tanimation2 = {},\n\n\t\tqueuelen = element.queue().length;\n\n\t$.effects.createPlaceholder( element );\n\n\t// Animation\n\tanimation[ ref ] = ( positiveMotion ? \"-=\" : \"+=\" ) + distance;\n\tanimation1[ ref ] = ( positiveMotion ? \"+=\" : \"-=\" ) + distance * 2;\n\tanimation2[ ref ] = ( positiveMotion ? \"-=\" : \"+=\" ) + distance * 2;\n\n\t// Animate\n\telement.animate( animation, speed, options.easing );\n\n\t// Shakes\n\tfor ( ; i < times; i++ ) {\n\t\telement\n\t\t\t.animate( animation1, speed, options.easing )\n\t\t\t.animate( animation2, speed, options.easing );\n\t}\n\n\telement\n\t\t.animate( animation1, speed, options.easing )\n\t\t.animate( animation, speed / 2, options.easing )\n\t\t.queue( done );\n\n\t$.effects.unshift( element, queuelen, anims + 1 );\n} );\n\n\n/*!\n * jQuery UI Effects Slide 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Slide Effect\n//>>group: Effects\n//>>description: Slides an element in and out of the viewport.\n//>>docs: http://api.jqueryui.com/slide-effect/\n//>>demos: http://jqueryui.com/effect/\n\n\n\nvar effectsEffectSlide = $.effects.define( \"slide\", \"show\", function( options, done ) {\n\tvar startClip, startRef,\n\t\telement = $( this ),\n\t\tmap = {\n\t\t\tup: [ \"bottom\", \"top\" ],\n\t\t\tdown: [ \"top\", \"bottom\" ],\n\t\t\tleft: [ \"right\", \"left\" ],\n\t\t\tright: [ \"left\", \"right\" ]\n\t\t},\n\t\tmode = options.mode,\n\t\tdirection = options.direction || \"left\",\n\t\tref = ( direction === \"up\" || direction === \"down\" ) ? \"top\" : \"left\",\n\t\tpositiveMotion = ( direction === \"up\" || direction === \"left\" ),\n\t\tdistance = options.distance ||\n\t\t\telement[ ref === \"top\" ? \"outerHeight\" : \"outerWidth\" ]( true ),\n\t\tanimation = {};\n\n\t$.effects.createPlaceholder( element );\n\n\tstartClip = element.cssClip();\n\tstartRef = element.position()[ ref ];\n\n\t// Define hide animation\n\tanimation[ ref ] = ( positiveMotion ? -1 : 1 ) * distance + startRef;\n\tanimation.clip = element.cssClip();\n\tanimation.clip[ map[ direction ][ 1 ] ] = animation.clip[ map[ direction ][ 0 ] ];\n\n\t// Reverse the animation if we're showing\n\tif ( mode === \"show\" ) {\n\t\telement.cssClip( animation.clip );\n\t\telement.css( ref, animation[ ref ] );\n\t\tanimation.clip = startClip;\n\t\tanimation[ ref ] = startRef;\n\t}\n\n\t// Actually animate\n\telement.animate( animation, {\n\t\tqueue: false,\n\t\tduration: options.duration,\n\t\teasing: options.easing,\n\t\tcomplete: done\n\t} );\n} );\n\n\n/*!\n * jQuery UI Effects Transfer 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Transfer Effect\n//>>group: Effects\n//>>description: Displays a transfer effect from one element to another.\n//>>docs: http://api.jqueryui.com/transfer-effect/\n//>>demos: http://jqueryui.com/effect/\n\n\n\nvar effect;\nif ( $.uiBackCompat !== false ) {\n\teffect = $.effects.define( \"transfer\", function( options, done ) {\n\t\t$( this ).transfer( options, done );\n\t} );\n}\nvar effectsEffectTransfer = effect;\n\n\n/*!\n * jQuery UI Focusable 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: :focusable Selector\n//>>group: Core\n//>>description: Selects elements which can be focused.\n//>>docs: http://api.jqueryui.com/focusable-selector/\n\n\n\n// Selectors\n$.ui.focusable = function( element, hasTabindex ) {\n\tvar map, mapName, img, focusableIfVisible, fieldset,\n\t\tnodeName = element.nodeName.toLowerCase();\n\n\tif ( \"area\" === nodeName ) {\n\t\tmap = element.parentNode;\n\t\tmapName = map.name;\n\t\tif ( !element.href || !mapName || map.nodeName.toLowerCase() !== \"map\" ) {\n\t\t\treturn false;\n\t\t}\n\t\timg = $( \"img[usemap='#\" + mapName + \"']\" );\n\t\treturn img.length > 0 && img.is( \":visible\" );\n\t}\n\n\tif ( /^(input|select|textarea|button|object)$/.test( nodeName ) ) {\n\t\tfocusableIfVisible = !element.disabled;\n\n\t\tif ( focusableIfVisible ) {\n\n\t\t\t// Form controls within a disabled fieldset are disabled.\n\t\t\t// However, controls within the fieldset's legend do not get disabled.\n\t\t\t// Since controls generally aren't placed inside legends, we skip\n\t\t\t// this portion of the check.\n\t\t\tfieldset = $( element ).closest( \"fieldset\" )[ 0 ];\n\t\t\tif ( fieldset ) {\n\t\t\t\tfocusableIfVisible = !fieldset.disabled;\n\t\t\t}\n\t\t}\n\t} else if ( \"a\" === nodeName ) {\n\t\tfocusableIfVisible = element.href || hasTabindex;\n\t} else {\n\t\tfocusableIfVisible = hasTabindex;\n\t}\n\n\treturn focusableIfVisible && $( element ).is( \":visible\" ) && visible( $( element ) );\n};\n\n// Support: IE 8 only\n// IE 8 doesn't resolve inherit to visible/hidden for computed values\nfunction visible( element ) {\n\tvar visibility = element.css( \"visibility\" );\n\twhile ( visibility === \"inherit\" ) {\n\t\telement = element.parent();\n\t\tvisibility = element.css( \"visibility\" );\n\t}\n\treturn visibility !== \"hidden\";\n}\n\n$.extend( $.expr[ \":\" ], {\n\tfocusable: function( element ) {\n\t\treturn $.ui.focusable( element, $.attr( element, \"tabindex\" ) != null );\n\t}\n} );\n\nvar focusable = $.ui.focusable;\n\n\n\n\n// Support: IE8 Only\n// IE8 does not support the form attribute and when it is supplied. It overwrites the form prop\n// with a string, so we need to find the proper form.\nvar form = $.fn.form = function() {\n\treturn typeof this[ 0 ].form === \"string\" ? this.closest( \"form\" ) : $( this[ 0 ].form );\n};\n\n\n/*!\n * jQuery UI Form Reset Mixin 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Form Reset Mixin\n//>>group: Core\n//>>description: Refresh input widgets when their form is reset\n//>>docs: http://api.jqueryui.com/form-reset-mixin/\n\n\n\nvar formResetMixin = $.ui.formResetMixin = {\n\t_formResetHandler: function() {\n\t\tvar form = $( this );\n\n\t\t// Wait for the form reset to actually happen before refreshing\n\t\tsetTimeout( function() {\n\t\t\tvar instances = form.data( \"ui-form-reset-instances\" );\n\t\t\t$.each( instances, function() {\n\t\t\t\tthis.refresh();\n\t\t\t} );\n\t\t} );\n\t},\n\n\t_bindFormResetHandler: function() {\n\t\tthis.form = this.element.form();\n\t\tif ( !this.form.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar instances = this.form.data( \"ui-form-reset-instances\" ) || [];\n\t\tif ( !instances.length ) {\n\n\t\t\t// We don't use _on() here because we use a single event handler per form\n\t\t\tthis.form.on( \"reset.ui-form-reset\", this._formResetHandler );\n\t\t}\n\t\tinstances.push( this );\n\t\tthis.form.data( \"ui-form-reset-instances\", instances );\n\t},\n\n\t_unbindFormResetHandler: function() {\n\t\tif ( !this.form.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar instances = this.form.data( \"ui-form-reset-instances\" );\n\t\tinstances.splice( $.inArray( this, instances ), 1 );\n\t\tif ( instances.length ) {\n\t\t\tthis.form.data( \"ui-form-reset-instances\", instances );\n\t\t} else {\n\t\t\tthis.form\n\t\t\t\t.removeData( \"ui-form-reset-instances\" )\n\t\t\t\t.off( \"reset.ui-form-reset\" );\n\t\t}\n\t}\n};\n\n\n/*!\n * jQuery UI Support for jQuery core 1.7.x 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n */\n\n//>>label: jQuery 1.7 Support\n//>>group: Core\n//>>description: Support version 1.7.x of jQuery core\n\n\n\n// Support: jQuery 1.7 only\n// Not a great way to check versions, but since we only support 1.7+ and only\n// need to detect <1.8, this is a simple check that should suffice. Checking\n// for \"1.7.\" would be a bit safer, but the version string is 1.7, not 1.7.0\n// and we'll never reach 1.70.0 (if we do, we certainly won't be supporting\n// 1.7 anymore). See #11197 for why we're not using feature detection.\nif ( $.fn.jquery.substring( 0, 3 ) === \"1.7\" ) {\n\n\t// Setters for .innerWidth(), .innerHeight(), .outerWidth(), .outerHeight()\n\t// Unlike jQuery Core 1.8+, these only support numeric values to set the\n\t// dimensions in pixels\n\t$.each( [ \"Width\", \"Height\" ], function( i, name ) {\n\t\tvar side = name === \"Width\" ? [ \"Left\", \"Right\" ] : [ \"Top\", \"Bottom\" ],\n\t\t\ttype = name.toLowerCase(),\n\t\t\torig = {\n\t\t\t\tinnerWidth: $.fn.innerWidth,\n\t\t\t\tinnerHeight: $.fn.innerHeight,\n\t\t\t\touterWidth: $.fn.outerWidth,\n\t\t\t\touterHeight: $.fn.outerHeight\n\t\t\t};\n\n\t\tfunction reduce( elem, size, border, margin ) {\n\t\t\t$.each( side, function() {\n\t\t\t\tsize -= parseFloat( $.css( elem, \"padding\" + this ) ) || 0;\n\t\t\t\tif ( border ) {\n\t\t\t\t\tsize -= parseFloat( $.css( elem, \"border\" + this + \"Width\" ) ) || 0;\n\t\t\t\t}\n\t\t\t\tif ( margin ) {\n\t\t\t\t\tsize -= parseFloat( $.css( elem, \"margin\" + this ) ) || 0;\n\t\t\t\t}\n\t\t\t} );\n\t\t\treturn size;\n\t\t}\n\n\t\t$.fn[ \"inner\" + name ] = function( size ) {\n\t\t\tif ( size === undefined ) {\n\t\t\t\treturn orig[ \"inner\" + name ].call( this );\n\t\t\t}\n\n\t\t\treturn this.each( function() {\n\t\t\t\t$( this ).css( type, reduce( this, size ) + \"px\" );\n\t\t\t} );\n\t\t};\n\n\t\t$.fn[ \"outer\" + name ] = function( size, margin ) {\n\t\t\tif ( typeof size !== \"number\" ) {\n\t\t\t\treturn orig[ \"outer\" + name ].call( this, size );\n\t\t\t}\n\n\t\t\treturn this.each( function() {\n\t\t\t\t$( this ).css( type, reduce( this, size, true, margin ) + \"px\" );\n\t\t\t} );\n\t\t};\n\t} );\n\n\t$.fn.addBack = function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t};\n}\n\n;\n/*!\n * jQuery UI Keycode 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Keycode\n//>>group: Core\n//>>description: Provide keycodes as keynames\n//>>docs: http://api.jqueryui.com/jQuery.ui.keyCode/\n\n\nvar keycode = $.ui.keyCode = {\n\tBACKSPACE: 8,\n\tCOMMA: 188,\n\tDELETE: 46,\n\tDOWN: 40,\n\tEND: 35,\n\tENTER: 13,\n\tESCAPE: 27,\n\tHOME: 36,\n\tLEFT: 37,\n\tPAGE_DOWN: 34,\n\tPAGE_UP: 33,\n\tPERIOD: 190,\n\tRIGHT: 39,\n\tSPACE: 32,\n\tTAB: 9,\n\tUP: 38\n};\n\n\n\n\n// Internal use only\nvar escapeSelector = $.ui.escapeSelector = ( function() {\n\tvar selectorEscape = /([!\"#$%&'()*+,./:;<=>?@[\\]^`{|}~])/g;\n\treturn function( selector ) {\n\t\treturn selector.replace( selectorEscape, \"\\\\$1\" );\n\t};\n} )();\n\n\n/*!\n * jQuery UI Labels 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: labels\n//>>group: Core\n//>>description: Find all the labels associated with a given input\n//>>docs: http://api.jqueryui.com/labels/\n\n\n\nvar labels = $.fn.labels = function() {\n\tvar ancestor, selector, id, labels, ancestors;\n\n\t// Check control.labels first\n\tif ( this[ 0 ].labels && this[ 0 ].labels.length ) {\n\t\treturn this.pushStack( this[ 0 ].labels );\n\t}\n\n\t// Support: IE <= 11, FF <= 37, Android <= 2.3 only\n\t// Above browsers do not support control.labels. Everything below is to support them\n\t// as well as document fragments. control.labels does not work on document fragments\n\tlabels = this.eq( 0 ).parents( \"label\" );\n\n\t// Look for the label based on the id\n\tid = this.attr( \"id\" );\n\tif ( id ) {\n\n\t\t// We don't search against the document in case the element\n\t\t// is disconnected from the DOM\n\t\tancestor = this.eq( 0 ).parents().last();\n\n\t\t// Get a full set of top level ancestors\n\t\tancestors = ancestor.add( ancestor.length ? ancestor.siblings() : this.siblings() );\n\n\t\t// Create a selector for the label based on the id\n\t\tselector = \"label[for='\" + $.ui.escapeSelector( id ) + \"']\";\n\n\t\tlabels = labels.add( ancestors.find( selector ).addBack( selector ) );\n\n\t}\n\n\t// Return whatever we have found for labels\n\treturn this.pushStack( labels );\n};\n\n\n/*!\n * jQuery UI Scroll Parent 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: scrollParent\n//>>group: Core\n//>>description: Get the closest ancestor element that is scrollable.\n//>>docs: http://api.jqueryui.com/scrollParent/\n\n\n\nvar scrollParent = $.fn.scrollParent = function( includeHidden ) {\n\tvar position = this.css( \"position\" ),\n\t\texcludeStaticParent = position === \"absolute\",\n\t\toverflowRegex = includeHidden ? /(auto|scroll|hidden)/ : /(auto|scroll)/,\n\t\tscrollParent = this.parents().filter( function() {\n\t\t\tvar parent = $( this );\n\t\t\tif ( excludeStaticParent && parent.css( \"position\" ) === \"static\" ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn overflowRegex.test( parent.css( \"overflow\" ) + parent.css( \"overflow-y\" ) +\n\t\t\t\tparent.css( \"overflow-x\" ) );\n\t\t} ).eq( 0 );\n\n\treturn position === \"fixed\" || !scrollParent.length ?\n\t\t$( this[ 0 ].ownerDocument || document ) :\n\t\tscrollParent;\n};\n\n\n/*!\n * jQuery UI Tabbable 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: :tabbable Selector\n//>>group: Core\n//>>description: Selects elements which can be tabbed to.\n//>>docs: http://api.jqueryui.com/tabbable-selector/\n\n\n\nvar tabbable = $.extend( $.expr[ \":\" ], {\n\ttabbable: function( element ) {\n\t\tvar tabIndex = $.attr( element, \"tabindex\" ),\n\t\t\thasTabindex = tabIndex != null;\n\t\treturn ( !hasTabindex || tabIndex >= 0 ) && $.ui.focusable( element, hasTabindex );\n\t}\n} );\n\n\n/*!\n * jQuery UI Unique ID 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: uniqueId\n//>>group: Core\n//>>description: Functions to generate and remove uniqueId's\n//>>docs: http://api.jqueryui.com/uniqueId/\n\n\n\nvar uniqueId = $.fn.extend( {\n\tuniqueId: ( function() {\n\t\tvar uuid = 0;\n\n\t\treturn function() {\n\t\t\treturn this.each( function() {\n\t\t\t\tif ( !this.id ) {\n\t\t\t\t\tthis.id = \"ui-id-\" + ( ++uuid );\n\t\t\t\t}\n\t\t\t} );\n\t\t};\n\t} )(),\n\n\tremoveUniqueId: function() {\n\t\treturn this.each( function() {\n\t\t\tif ( /^ui-id-\\d+$/.test( this.id ) ) {\n\t\t\t\t$( this ).removeAttr( \"id\" );\n\t\t\t}\n\t\t} );\n\t}\n} );\n\n\n/*!\n * jQuery UI Accordion 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Accordion\n//>>group: Widgets\n// jscs:disable maximumLineLength\n//>>description: Displays collapsible content panels for presenting information in a limited amount of space.\n// jscs:enable maximumLineLength\n//>>docs: http://api.jqueryui.com/accordion/\n//>>demos: http://jqueryui.com/accordion/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/accordion.css\n//>>css.theme: ../../themes/base/theme.css\n\n\n\nvar widgetsAccordion = $.widget( \"ui.accordion\", {\n\tversion: \"1.12.1\",\n\toptions: {\n\t\tactive: 0,\n\t\tanimate: {},\n\t\tclasses: {\n\t\t\t\"ui-accordion-header\": \"ui-corner-top\",\n\t\t\t\"ui-accordion-header-collapsed\": \"ui-corner-all\",\n\t\t\t\"ui-accordion-content\": \"ui-corner-bottom\"\n\t\t},\n\t\tcollapsible: false,\n\t\tevent: \"click\",\n\t\theader: \"> li > :first-child, > :not(li):even\",\n\t\theightStyle: \"auto\",\n\t\ticons: {\n\t\t\tactiveHeader: \"ui-icon-triangle-1-s\",\n\t\t\theader: \"ui-icon-triangle-1-e\"\n\t\t},\n\n\t\t// Callbacks\n\t\tactivate: null,\n\t\tbeforeActivate: null\n\t},\n\n\thideProps: {\n\t\tborderTopWidth: \"hide\",\n\t\tborderBottomWidth: \"hide\",\n\t\tpaddingTop: \"hide\",\n\t\tpaddingBottom: \"hide\",\n\t\theight: \"hide\"\n\t},\n\n\tshowProps: {\n\t\tborderTopWidth: \"show\",\n\t\tborderBottomWidth: \"show\",\n\t\tpaddingTop: \"show\",\n\t\tpaddingBottom: \"show\",\n\t\theight: \"show\"\n\t},\n\n\t_create: function() {\n\t\tvar options = this.options;\n\n\t\tthis.prevShow = this.prevHide = $();\n\t\tthis._addClass( \"ui-accordion\", \"ui-widget ui-helper-reset\" );\n\t\tthis.element.attr( \"role\", \"tablist\" );\n\n\t\t// Don't allow collapsible: false and active: false / null\n\t\tif ( !options.collapsible && ( options.active === false || options.active == null ) ) {\n\t\t\toptions.active = 0;\n\t\t}\n\n\t\tthis._processPanels();\n\n\t\t// handle negative values\n\t\tif ( options.active < 0 ) {\n\t\t\toptions.active += this.headers.length;\n\t\t}\n\t\tthis._refresh();\n\t},\n\n\t_getCreateEventData: function() {\n\t\treturn {\n\t\t\theader: this.active,\n\t\t\tpanel: !this.active.length ? $() : this.active.next()\n\t\t};\n\t},\n\n\t_createIcons: function() {\n\t\tvar icon, children,\n\t\t\ticons = this.options.icons;\n\n\t\tif ( icons ) {\n\t\t\ticon = $( \"<span>\" );\n\t\t\tthis._addClass( icon, \"ui-accordion-header-icon\", \"ui-icon \" + icons.header );\n\t\t\ticon.prependTo( this.headers );\n\t\t\tchildren = this.active.children( \".ui-accordion-header-icon\" );\n\t\t\tthis._removeClass( children, icons.header )\n\t\t\t\t._addClass( children, null, icons.activeHeader )\n\t\t\t\t._addClass( this.headers, \"ui-accordion-icons\" );\n\t\t}\n\t},\n\n\t_destroyIcons: function() {\n\t\tthis._removeClass( this.headers, \"ui-accordion-icons\" );\n\t\tthis.headers.children( \".ui-accordion-header-icon\" ).remove();\n\t},\n\n\t_destroy: function() {\n\t\tvar contents;\n\n\t\t// Clean up main element\n\t\tthis.element.removeAttr( \"role\" );\n\n\t\t// Clean up headers\n\t\tthis.headers\n\t\t\t.removeAttr( \"role aria-expanded aria-selected aria-controls tabIndex\" )\n\t\t\t.removeUniqueId();\n\n\t\tthis._destroyIcons();\n\n\t\t// Clean up content panels\n\t\tcontents = this.headers.next()\n\t\t\t.css( \"display\", \"\" )\n\t\t\t.removeAttr( \"role aria-hidden aria-labelledby\" )\n\t\t\t.removeUniqueId();\n\n\t\tif ( this.options.heightStyle !== \"content\" ) {\n\t\t\tcontents.css( \"height\", \"\" );\n\t\t}\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tif ( key === \"active\" ) {\n\n\t\t\t// _activate() will handle invalid values and update this.options\n\t\t\tthis._activate( value );\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key === \"event\" ) {\n\t\t\tif ( this.options.event ) {\n\t\t\t\tthis._off( this.headers, this.options.event );\n\t\t\t}\n\t\t\tthis._setupEvents( value );\n\t\t}\n\n\t\tthis._super( key, value );\n\n\t\t// Setting collapsible: false while collapsed; open first panel\n\t\tif ( key === \"collapsible\" && !value && this.options.active === false ) {\n\t\t\tthis._activate( 0 );\n\t\t}\n\n\t\tif ( key === \"icons\" ) {\n\t\t\tthis._destroyIcons();\n\t\t\tif ( value ) {\n\t\t\t\tthis._createIcons();\n\t\t\t}\n\t\t}\n\t},\n\n\t_setOptionDisabled: function( value ) {\n\t\tthis._super( value );\n\n\t\tthis.element.attr( \"aria-disabled\", value );\n\n\t\t// Support: IE8 Only\n\t\t// #5332 / #6059 - opacity doesn't cascade to positioned elements in IE\n\t\t// so we need to add the disabled class to the headers and panels\n\t\tthis._toggleClass( null, \"ui-state-disabled\", !!value );\n\t\tthis._toggleClass( this.headers.add( this.headers.next() ), null, \"ui-state-disabled\",\n\t\t\t!!value );\n\t},\n\n\t_keydown: function( event ) {\n\t\tif ( event.altKey || event.ctrlKey ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar keyCode = $.ui.keyCode,\n\t\t\tlength = this.headers.length,\n\t\t\tcurrentIndex = this.headers.index( event.target ),\n\t\t\ttoFocus = false;\n\n\t\tswitch ( event.keyCode ) {\n\t\tcase keyCode.RIGHT:\n\t\tcase keyCode.DOWN:\n\t\t\ttoFocus = this.headers[ ( currentIndex + 1 ) % length ];\n\t\t\tbreak;\n\t\tcase keyCode.LEFT:\n\t\tcase keyCode.UP:\n\t\t\ttoFocus = this.headers[ ( currentIndex - 1 + length ) % length ];\n\t\t\tbreak;\n\t\tcase keyCode.SPACE:\n\t\tcase keyCode.ENTER:\n\t\t\tthis._eventHandler( event );\n\t\t\tbreak;\n\t\tcase keyCode.HOME:\n\t\t\ttoFocus = this.headers[ 0 ];\n\t\t\tbreak;\n\t\tcase keyCode.END:\n\t\t\ttoFocus = this.headers[ length - 1 ];\n\t\t\tbreak;\n\t\t}\n\n\t\tif ( toFocus ) {\n\t\t\t$( event.target ).attr( \"tabIndex\", -1 );\n\t\t\t$( toFocus ).attr( \"tabIndex\", 0 );\n\t\t\t$( toFocus ).trigger( \"focus\" );\n\t\t\tevent.preventDefault();\n\t\t}\n\t},\n\n\t_panelKeyDown: function( event ) {\n\t\tif ( event.keyCode === $.ui.keyCode.UP && event.ctrlKey ) {\n\t\t\t$( event.currentTarget ).prev().trigger( \"focus\" );\n\t\t}\n\t},\n\n\trefresh: function() {\n\t\tvar options = this.options;\n\t\tthis._processPanels();\n\n\t\t// Was collapsed or no panel\n\t\tif ( ( options.active === false && options.collapsible === true ) ||\n\t\t\t\t!this.headers.length ) {\n\t\t\toptions.active = false;\n\t\t\tthis.active = $();\n\n\t\t// active false only when collapsible is true\n\t\t} else if ( options.active === false ) {\n\t\t\tthis._activate( 0 );\n\n\t\t// was active, but active panel is gone\n\t\t} else if ( this.active.length && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) {\n\n\t\t\t// all remaining panel are disabled\n\t\t\tif ( this.headers.length === this.headers.find( \".ui-state-disabled\" ).length ) {\n\t\t\t\toptions.active = false;\n\t\t\t\tthis.active = $();\n\n\t\t\t// activate previous panel\n\t\t\t} else {\n\t\t\t\tthis._activate( Math.max( 0, options.active - 1 ) );\n\t\t\t}\n\n\t\t// was active, active panel still exists\n\t\t} else {\n\n\t\t\t// make sure active index is correct\n\t\t\toptions.active = this.headers.index( this.active );\n\t\t}\n\n\t\tthis._destroyIcons();\n\n\t\tthis._refresh();\n\t},\n\n\t_processPanels: function() {\n\t\tvar prevHeaders = this.headers,\n\t\t\tprevPanels = this.panels;\n\n\t\tthis.headers = this.element.find( this.options.header );\n\t\tthis._addClass( this.headers, \"ui-accordion-header ui-accordion-header-collapsed\",\n\t\t\t\"ui-state-default\" );\n\n\t\tthis.panels = this.headers.next().filter( \":not(.ui-accordion-content-active)\" ).hide();\n\t\tthis._addClass( this.panels, \"ui-accordion-content\", \"ui-helper-reset ui-widget-content\" );\n\n\t\t// Avoid memory leaks (#10056)\n\t\tif ( prevPanels ) {\n\t\t\tthis._off( prevHeaders.not( this.headers ) );\n\t\t\tthis._off( prevPanels.not( this.panels ) );\n\t\t}\n\t},\n\n\t_refresh: function() {\n\t\tvar maxHeight,\n\t\t\toptions = this.options,\n\t\t\theightStyle = options.heightStyle,\n\t\t\tparent = this.element.parent();\n\n\t\tthis.active = this._findActive( options.active );\n\t\tthis._addClass( this.active, \"ui-accordion-header-active\", \"ui-state-active\" )\n\t\t\t._removeClass( this.active, \"ui-accordion-header-collapsed\" );\n\t\tthis._addClass( this.active.next(), \"ui-accordion-content-active\" );\n\t\tthis.active.next().show();\n\n\t\tthis.headers\n\t\t\t.attr( \"role\", \"tab\" )\n\t\t\t.each( function() {\n\t\t\t\tvar header = $( this ),\n\t\t\t\t\theaderId = header.uniqueId().attr( \"id\" ),\n\t\t\t\t\tpanel = header.next(),\n\t\t\t\t\tpanelId = panel.uniqueId().attr( \"id\" );\n\t\t\t\theader.attr( \"aria-controls\", panelId );\n\t\t\t\tpanel.attr( \"aria-labelledby\", headerId );\n\t\t\t} )\n\t\t\t.next()\n\t\t\t\t.attr( \"role\", \"tabpanel\" );\n\n\t\tthis.headers\n\t\t\t.not( this.active )\n\t\t\t\t.attr( {\n\t\t\t\t\t\"aria-selected\": \"false\",\n\t\t\t\t\t\"aria-expanded\": \"false\",\n\t\t\t\t\ttabIndex: -1\n\t\t\t\t} )\n\t\t\t\t.next()\n\t\t\t\t\t.attr( {\n\t\t\t\t\t\t\"aria-hidden\": \"true\"\n\t\t\t\t\t} )\n\t\t\t\t\t.hide();\n\n\t\t// Make sure at least one header is in the tab order\n\t\tif ( !this.active.length ) {\n\t\t\tthis.headers.eq( 0 ).attr( \"tabIndex\", 0 );\n\t\t} else {\n\t\t\tthis.active.attr( {\n\t\t\t\t\"aria-selected\": \"true\",\n\t\t\t\t\"aria-expanded\": \"true\",\n\t\t\t\ttabIndex: 0\n\t\t\t} )\n\t\t\t\t.next()\n\t\t\t\t\t.attr( {\n\t\t\t\t\t\t\"aria-hidden\": \"false\"\n\t\t\t\t\t} );\n\t\t}\n\n\t\tthis._createIcons();\n\n\t\tthis._setupEvents( options.event );\n\n\t\tif ( heightStyle === \"fill\" ) {\n\t\t\tmaxHeight = parent.height();\n\t\t\tthis.element.siblings( \":visible\" ).each( function() {\n\t\t\t\tvar elem = $( this ),\n\t\t\t\t\tposition = elem.css( \"position\" );\n\n\t\t\t\tif ( position === \"absolute\" || position === \"fixed\" ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tmaxHeight -= elem.outerHeight( true );\n\t\t\t} );\n\n\t\t\tthis.headers.each( function() {\n\t\t\t\tmaxHeight -= $( this ).outerHeight( true );\n\t\t\t} );\n\n\t\t\tthis.headers.next()\n\t\t\t\t.each( function() {\n\t\t\t\t\t$( this ).height( Math.max( 0, maxHeight -\n\t\t\t\t\t\t$( this ).innerHeight() + $( this ).height() ) );\n\t\t\t\t} )\n\t\t\t\t.css( \"overflow\", \"auto\" );\n\t\t} else if ( heightStyle === \"auto\" ) {\n\t\t\tmaxHeight = 0;\n\t\t\tthis.headers.next()\n\t\t\t\t.each( function() {\n\t\t\t\t\tvar isVisible = $( this ).is( \":visible\" );\n\t\t\t\t\tif ( !isVisible ) {\n\t\t\t\t\t\t$( this ).show();\n\t\t\t\t\t}\n\t\t\t\t\tmaxHeight = Math.max( maxHeight, $( this ).css( \"height\", \"\" ).height() );\n\t\t\t\t\tif ( !isVisible ) {\n\t\t\t\t\t\t$( this ).hide();\n\t\t\t\t\t}\n\t\t\t\t} )\n\t\t\t\t.height( maxHeight );\n\t\t}\n\t},\n\n\t_activate: function( index ) {\n\t\tvar active = this._findActive( index )[ 0 ];\n\n\t\t// Trying to activate the already active panel\n\t\tif ( active === this.active[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Trying to collapse, simulate a click on the currently active header\n\t\tactive = active || this.active[ 0 ];\n\n\t\tthis._eventHandler( {\n\t\t\ttarget: active,\n\t\t\tcurrentTarget: active,\n\t\t\tpreventDefault: $.noop\n\t\t} );\n\t},\n\n\t_findActive: function( selector ) {\n\t\treturn typeof selector === \"number\" ? this.headers.eq( selector ) : $();\n\t},\n\n\t_setupEvents: function( event ) {\n\t\tvar events = {\n\t\t\tkeydown: \"_keydown\"\n\t\t};\n\t\tif ( event ) {\n\t\t\t$.each( event.split( \" \" ), function( index, eventName ) {\n\t\t\t\tevents[ eventName ] = \"_eventHandler\";\n\t\t\t} );\n\t\t}\n\n\t\tthis._off( this.headers.add( this.headers.next() ) );\n\t\tthis._on( this.headers, events );\n\t\tthis._on( this.headers.next(), { keydown: \"_panelKeyDown\" } );\n\t\tthis._hoverable( this.headers );\n\t\tthis._focusable( this.headers );\n\t},\n\n\t_eventHandler: function( event ) {\n\t\tvar activeChildren, clickedChildren,\n\t\t\toptions = this.options,\n\t\t\tactive = this.active,\n\t\t\tclicked = $( event.currentTarget ),\n\t\t\tclickedIsActive = clicked[ 0 ] === active[ 0 ],\n\t\t\tcollapsing = clickedIsActive && options.collapsible,\n\t\t\ttoShow = collapsing ? $() : clicked.next(),\n\t\t\ttoHide = active.next(),\n\t\t\teventData = {\n\t\t\t\toldHeader: active,\n\t\t\t\toldPanel: toHide,\n\t\t\t\tnewHeader: collapsing ? $() : clicked,\n\t\t\t\tnewPanel: toShow\n\t\t\t};\n\n\t\tevent.preventDefault();\n\n\t\tif (\n\n\t\t\t\t// click on active header, but not collapsible\n\t\t\t\t( clickedIsActive && !options.collapsible ) ||\n\n\t\t\t\t// allow canceling activation\n\t\t\t\t( this._trigger( \"beforeActivate\", event, eventData ) === false ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\toptions.active = collapsing ? false : this.headers.index( clicked );\n\n\t\t// When the call to ._toggle() comes after the class changes\n\t\t// it causes a very odd bug in IE 8 (see #6720)\n\t\tthis.active = clickedIsActive ? $() : clicked;\n\t\tthis._toggle( eventData );\n\n\t\t// Switch classes\n\t\t// corner classes on the previously active header stay after the animation\n\t\tthis._removeClass( active, \"ui-accordion-header-active\", \"ui-state-active\" );\n\t\tif ( options.icons ) {\n\t\t\tactiveChildren = active.children( \".ui-accordion-header-icon\" );\n\t\t\tthis._removeClass( activeChildren, null, options.icons.activeHeader )\n\t\t\t\t._addClass( activeChildren, null, options.icons.header );\n\t\t}\n\n\t\tif ( !clickedIsActive ) {\n\t\t\tthis._removeClass( clicked, \"ui-accordion-header-collapsed\" )\n\t\t\t\t._addClass( clicked, \"ui-accordion-header-active\", \"ui-state-active\" );\n\t\t\tif ( options.icons ) {\n\t\t\t\tclickedChildren = clicked.children( \".ui-accordion-header-icon\" );\n\t\t\t\tthis._removeClass( clickedChildren, null, options.icons.header )\n\t\t\t\t\t._addClass( clickedChildren, null, options.icons.activeHeader );\n\t\t\t}\n\n\t\t\tthis._addClass( clicked.next(), \"ui-accordion-content-active\" );\n\t\t}\n\t},\n\n\t_toggle: function( data ) {\n\t\tvar toShow = data.newPanel,\n\t\t\ttoHide = this.prevShow.length ? this.prevShow : data.oldPanel;\n\n\t\t// Handle activating a panel during the animation for another activation\n\t\tthis.prevShow.add( this.prevHide ).stop( true, true );\n\t\tthis.prevShow = toShow;\n\t\tthis.prevHide = toHide;\n\n\t\tif ( this.options.animate ) {\n\t\t\tthis._animate( toShow, toHide, data );\n\t\t} else {\n\t\t\ttoHide.hide();\n\t\t\ttoShow.show();\n\t\t\tthis._toggleComplete( data );\n\t\t}\n\n\t\ttoHide.attr( {\n\t\t\t\"aria-hidden\": \"true\"\n\t\t} );\n\t\ttoHide.prev().attr( {\n\t\t\t\"aria-selected\": \"false\",\n\t\t\t\"aria-expanded\": \"false\"\n\t\t} );\n\n\t\t// if we're switching panels, remove the old header from the tab order\n\t\t// if we're opening from collapsed state, remove the previous header from the tab order\n\t\t// if we're collapsing, then keep the collapsing header in the tab order\n\t\tif ( toShow.length && toHide.length ) {\n\t\t\ttoHide.prev().attr( {\n\t\t\t\t\"tabIndex\": -1,\n\t\t\t\t\"aria-expanded\": \"false\"\n\t\t\t} );\n\t\t} else if ( toShow.length ) {\n\t\t\tthis.headers.filter( function() {\n\t\t\t\treturn parseInt( $( this ).attr( \"tabIndex\" ), 10 ) === 0;\n\t\t\t} )\n\t\t\t\t.attr( \"tabIndex\", -1 );\n\t\t}\n\n\t\ttoShow\n\t\t\t.attr( \"aria-hidden\", \"false\" )\n\t\t\t.prev()\n\t\t\t\t.attr( {\n\t\t\t\t\t\"aria-selected\": \"true\",\n\t\t\t\t\t\"aria-expanded\": \"true\",\n\t\t\t\t\ttabIndex: 0\n\t\t\t\t} );\n\t},\n\n\t_animate: function( toShow, toHide, data ) {\n\t\tvar total, easing, duration,\n\t\t\tthat = this,\n\t\t\tadjust = 0,\n\t\t\tboxSizing = toShow.css( \"box-sizing\" ),\n\t\t\tdown = toShow.length &&\n\t\t\t\t( !toHide.length || ( toShow.index() < toHide.index() ) ),\n\t\t\tanimate = this.options.animate || {},\n\t\t\toptions = down && animate.down || animate,\n\t\t\tcomplete = function() {\n\t\t\t\tthat._toggleComplete( data );\n\t\t\t};\n\n\t\tif ( typeof options === \"number\" ) {\n\t\t\tduration = options;\n\t\t}\n\t\tif ( typeof options === \"string\" ) {\n\t\t\teasing = options;\n\t\t}\n\n\t\t// fall back from options to animation in case of partial down settings\n\t\teasing = easing || options.easing || animate.easing;\n\t\tduration = duration || options.duration || animate.duration;\n\n\t\tif ( !toHide.length ) {\n\t\t\treturn toShow.animate( this.showProps, duration, easing, complete );\n\t\t}\n\t\tif ( !toShow.length ) {\n\t\t\treturn toHide.animate( this.hideProps, duration, easing, complete );\n\t\t}\n\n\t\ttotal = toShow.show().outerHeight();\n\t\ttoHide.animate( this.hideProps, {\n\t\t\tduration: duration,\n\t\t\teasing: easing,\n\t\t\tstep: function( now, fx ) {\n\t\t\t\tfx.now = Math.round( now );\n\t\t\t}\n\t\t} );\n\t\ttoShow\n\t\t\t.hide()\n\t\t\t.animate( this.showProps, {\n\t\t\t\tduration: duration,\n\t\t\t\teasing: easing,\n\t\t\t\tcomplete: complete,\n\t\t\t\tstep: function( now, fx ) {\n\t\t\t\t\tfx.now = Math.round( now );\n\t\t\t\t\tif ( fx.prop !== \"height\" ) {\n\t\t\t\t\t\tif ( boxSizing === \"content-box\" ) {\n\t\t\t\t\t\t\tadjust += fx.now;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if ( that.options.heightStyle !== \"content\" ) {\n\t\t\t\t\t\tfx.now = Math.round( total - toHide.outerHeight() - adjust );\n\t\t\t\t\t\tadjust = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t},\n\n\t_toggleComplete: function( data ) {\n\t\tvar toHide = data.oldPanel,\n\t\t\tprev = toHide.prev();\n\n\t\tthis._removeClass( toHide, \"ui-accordion-content-active\" );\n\t\tthis._removeClass( prev, \"ui-accordion-header-active\" )\n\t\t\t._addClass( prev, \"ui-accordion-header-collapsed\" );\n\n\t\t// Work around for rendering bug in IE (#5421)\n\t\tif ( toHide.length ) {\n\t\t\ttoHide.parent()[ 0 ].className = toHide.parent()[ 0 ].className;\n\t\t}\n\t\tthis._trigger( \"activate\", null, data );\n\t}\n} );\n\n\n\nvar safeActiveElement = $.ui.safeActiveElement = function( document ) {\n\tvar activeElement;\n\n\t// Support: IE 9 only\n\t// IE9 throws an \"Unspecified error\" accessing document.activeElement from an <iframe>\n\ttry {\n\t\tactiveElement = document.activeElement;\n\t} catch ( error ) {\n\t\tactiveElement = document.body;\n\t}\n\n\t// Support: IE 9 - 11 only\n\t// IE may return null instead of an element\n\t// Interestingly, this only seems to occur when NOT in an iframe\n\tif ( !activeElement ) {\n\t\tactiveElement = document.body;\n\t}\n\n\t// Support: IE 11 only\n\t// IE11 returns a seemingly empty object in some cases when accessing\n\t// document.activeElement from an <iframe>\n\tif ( !activeElement.nodeName ) {\n\t\tactiveElement = document.body;\n\t}\n\n\treturn activeElement;\n};\n\n\n/*!\n * jQuery UI Menu 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Menu\n//>>group: Widgets\n//>>description: Creates nestable menus.\n//>>docs: http://api.jqueryui.com/menu/\n//>>demos: http://jqueryui.com/menu/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/menu.css\n//>>css.theme: ../../themes/base/theme.css\n\n\n\nvar widgetsMenu = $.widget( \"ui.menu\", {\n\tversion: \"1.12.1\",\n\tdefaultElement: \"<ul>\",\n\tdelay: 300,\n\toptions: {\n\t\ticons: {\n\t\t\tsubmenu: \"ui-icon-caret-1-e\"\n\t\t},\n\t\titems: \"> *\",\n\t\tmenus: \"ul\",\n\t\tposition: {\n\t\t\tmy: \"left top\",\n\t\t\tat: \"right top\"\n\t\t},\n\t\trole: \"menu\",\n\n\t\t// Callbacks\n\t\tblur: null,\n\t\tfocus: null,\n\t\tselect: null\n\t},\n\n\t_create: function() {\n\t\tthis.activeMenu = this.element;\n\n\t\t// Flag used to prevent firing of the click handler\n\t\t// as the event bubbles up through nested menus\n\t\tthis.mouseHandled = false;\n\t\tthis.element\n\t\t\t.uniqueId()\n\t\t\t.attr( {\n\t\t\t\trole: this.options.role,\n\t\t\t\ttabIndex: 0\n\t\t\t} );\n\n\t\tthis._addClass( \"ui-menu\", \"ui-widget ui-widget-content\" );\n\t\tthis._on( {\n\n\t\t\t// Prevent focus from sticking to links inside menu after clicking\n\t\t\t// them (focus should always stay on UL during navigation).\n\t\t\t\"mousedown .ui-menu-item\": function( event ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t},\n\t\t\t\"click .ui-menu-item\": function( event ) {\n\t\t\t\tvar target = $( event.target );\n\t\t\t\tvar active = $( $.ui.safeActiveElement( this.document[ 0 ] ) );\n\t\t\t\tif ( !this.mouseHandled && target.not( \".ui-state-disabled\" ).length ) {\n\t\t\t\t\tthis.select( event );\n\n\t\t\t\t\t// Only set the mouseHandled flag if the event will bubble, see #9469.\n\t\t\t\t\tif ( !event.isPropagationStopped() ) {\n\t\t\t\t\t\tthis.mouseHandled = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Open submenu on click\n\t\t\t\t\tif ( target.has( \".ui-menu\" ).length ) {\n\t\t\t\t\t\tthis.expand( event );\n\t\t\t\t\t} else if ( !this.element.is( \":focus\" ) &&\n\t\t\t\t\t\t\tactive.closest( \".ui-menu\" ).length ) {\n\n\t\t\t\t\t\t// Redirect focus to the menu\n\t\t\t\t\t\tthis.element.trigger( \"focus\", [ true ] );\n\n\t\t\t\t\t\t// If the active item is on the top level, let it stay active.\n\t\t\t\t\t\t// Otherwise, blur the active item since it is no longer visible.\n\t\t\t\t\t\tif ( this.active && this.active.parents( \".ui-menu\" ).length === 1 ) {\n\t\t\t\t\t\t\tclearTimeout( this.timer );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"mouseenter .ui-menu-item\": function( event ) {\n\n\t\t\t\t// Ignore mouse events while typeahead is active, see #10458.\n\t\t\t\t// Prevents focusing the wrong item when typeahead causes a scroll while the mouse\n\t\t\t\t// is over an item in the menu\n\t\t\t\tif ( this.previousFilter ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar actualTarget = $( event.target ).closest( \".ui-menu-item\" ),\n\t\t\t\t\ttarget = $( event.currentTarget );\n\n\t\t\t\t// Ignore bubbled events on parent items, see #11641\n\t\t\t\tif ( actualTarget[ 0 ] !== target[ 0 ] ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Remove ui-state-active class from siblings of the newly focused menu item\n\t\t\t\t// to avoid a jump caused by adjacent elements both having a class with a border\n\t\t\t\tthis._removeClass( target.siblings().children( \".ui-state-active\" ),\n\t\t\t\t\tnull, \"ui-state-active\" );\n\t\t\t\tthis.focus( event, target );\n\t\t\t},\n\t\t\tmouseleave: \"collapseAll\",\n\t\t\t\"mouseleave .ui-menu\": \"collapseAll\",\n\t\t\tfocus: function( event, keepActiveItem ) {\n\n\t\t\t\t// If there's already an active item, keep it active\n\t\t\t\t// If not, activate the first item\n\t\t\t\tvar item = this.active || this.element.find( this.options.items ).eq( 0 );\n\n\t\t\t\tif ( !keepActiveItem ) {\n\t\t\t\t\tthis.focus( event, item );\n\t\t\t\t}\n\t\t\t},\n\t\t\tblur: function( event ) {\n\t\t\t\tthis._delay( function() {\n\t\t\t\t\tvar notContained = !$.contains(\n\t\t\t\t\t\tthis.element[ 0 ],\n\t\t\t\t\t\t$.ui.safeActiveElement( this.document[ 0 ] )\n\t\t\t\t\t);\n\t\t\t\t\tif ( notContained ) {\n\t\t\t\t\t\tthis.collapseAll( event );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t},\n\t\t\tkeydown: \"_keydown\"\n\t\t} );\n\n\t\tthis.refresh();\n\n\t\t// Clicks outside of a menu collapse any open menus\n\t\tthis._on( this.document, {\n\t\t\tclick: function( event ) {\n\t\t\t\tif ( this._closeOnDocumentClick( event ) ) {\n\t\t\t\t\tthis.collapseAll( event );\n\t\t\t\t}\n\n\t\t\t\t// Reset the mouseHandled flag\n\t\t\t\tthis.mouseHandled = false;\n\t\t\t}\n\t\t} );\n\t},\n\n\t_destroy: function() {\n\t\tvar items = this.element.find( \".ui-menu-item\" )\n\t\t\t\t.removeAttr( \"role aria-disabled\" ),\n\t\t\tsubmenus = items.children( \".ui-menu-item-wrapper\" )\n\t\t\t\t.removeUniqueId()\n\t\t\t\t.removeAttr( \"tabIndex role aria-haspopup\" );\n\n\t\t// Destroy (sub)menus\n\t\tthis.element\n\t\t\t.removeAttr( \"aria-activedescendant\" )\n\t\t\t.find( \".ui-menu\" ).addBack()\n\t\t\t\t.removeAttr( \"role aria-labelledby aria-expanded aria-hidden aria-disabled \" +\n\t\t\t\t\t\"tabIndex\" )\n\t\t\t\t.removeUniqueId()\n\t\t\t\t.show();\n\n\t\tsubmenus.children().each( function() {\n\t\t\tvar elem = $( this );\n\t\t\tif ( elem.data( \"ui-menu-submenu-caret\" ) ) {\n\t\t\t\telem.remove();\n\t\t\t}\n\t\t} );\n\t},\n\n\t_keydown: function( event ) {\n\t\tvar match, prev, character, skip,\n\t\t\tpreventDefault = true;\n\n\t\tswitch ( event.keyCode ) {\n\t\tcase $.ui.keyCode.PAGE_UP:\n\t\t\tthis.previousPage( event );\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.PAGE_DOWN:\n\t\t\tthis.nextPage( event );\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.HOME:\n\t\t\tthis._move( \"first\", \"first\", event );\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.END:\n\t\t\tthis._move( \"last\", \"last\", event );\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.UP:\n\t\t\tthis.previous( event );\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.DOWN:\n\t\t\tthis.next( event );\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.LEFT:\n\t\t\tthis.collapse( event );\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.RIGHT:\n\t\t\tif ( this.active && !this.active.is( \".ui-state-disabled\" ) ) {\n\t\t\t\tthis.expand( event );\n\t\t\t}\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.ENTER:\n\t\tcase $.ui.keyCode.SPACE:\n\t\t\tthis._activate( event );\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.ESCAPE:\n\t\t\tthis.collapse( event );\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tpreventDefault = false;\n\t\t\tprev = this.previousFilter || \"\";\n\t\t\tskip = false;\n\n\t\t\t// Support number pad values\n\t\t\tcharacter = event.keyCode >= 96 && event.keyCode <= 105 ?\n\t\t\t\t( event.keyCode - 96 ).toString() : String.fromCharCode( event.keyCode );\n\n\t\t\tclearTimeout( this.filterTimer );\n\n\t\t\tif ( character === prev ) {\n\t\t\t\tskip = true;\n\t\t\t} else {\n\t\t\t\tcharacter = prev + character;\n\t\t\t}\n\n\t\t\tmatch = this._filterMenuItems( character );\n\t\t\tmatch = skip && match.index( this.active.next() ) !== -1 ?\n\t\t\t\tthis.active.nextAll( \".ui-menu-item\" ) :\n\t\t\t\tmatch;\n\n\t\t\t// If no matches on the current filter, reset to the last character pressed\n\t\t\t// to move down the menu to the first item that starts with that character\n\t\t\tif ( !match.length ) {\n\t\t\t\tcharacter = String.fromCharCode( event.keyCode );\n\t\t\t\tmatch = this._filterMenuItems( character );\n\t\t\t}\n\n\t\t\tif ( match.length ) {\n\t\t\t\tthis.focus( event, match );\n\t\t\t\tthis.previousFilter = character;\n\t\t\t\tthis.filterTimer = this._delay( function() {\n\t\t\t\t\tdelete this.previousFilter;\n\t\t\t\t}, 1000 );\n\t\t\t} else {\n\t\t\t\tdelete this.previousFilter;\n\t\t\t}\n\t\t}\n\n\t\tif ( preventDefault ) {\n\t\t\tevent.preventDefault();\n\t\t}\n\t},\n\n\t_activate: function( event ) {\n\t\tif ( this.active && !this.active.is( \".ui-state-disabled\" ) ) {\n\t\t\tif ( this.active.children( \"[aria-haspopup='true']\" ).length ) {\n\t\t\t\tthis.expand( event );\n\t\t\t} else {\n\t\t\t\tthis.select( event );\n\t\t\t}\n\t\t}\n\t},\n\n\trefresh: function() {\n\t\tvar menus, items, newSubmenus, newItems, newWrappers,\n\t\t\tthat = this,\n\t\t\ticon = this.options.icons.submenu,\n\t\t\tsubmenus = this.element.find( this.options.menus );\n\n\t\tthis._toggleClass( \"ui-menu-icons\", null, !!this.element.find( \".ui-icon\" ).length );\n\n\t\t// Initialize nested menus\n\t\tnewSubmenus = submenus.filter( \":not(.ui-menu)\" )\n\t\t\t.hide()\n\t\t\t.attr( {\n\t\t\t\trole: this.options.role,\n\t\t\t\t\"aria-hidden\": \"true\",\n\t\t\t\t\"aria-expanded\": \"false\"\n\t\t\t} )\n\t\t\t.each( function() {\n\t\t\t\tvar menu = $( this ),\n\t\t\t\t\titem = menu.prev(),\n\t\t\t\t\tsubmenuCaret = $( \"<span>\" ).data( \"ui-menu-submenu-caret\", true );\n\n\t\t\t\tthat._addClass( submenuCaret, \"ui-menu-icon\", \"ui-icon \" + icon );\n\t\t\t\titem\n\t\t\t\t\t.attr( \"aria-haspopup\", \"true\" )\n\t\t\t\t\t.prepend( submenuCaret );\n\t\t\t\tmenu.attr( \"aria-labelledby\", item.attr( \"id\" ) );\n\t\t\t} );\n\n\t\tthis._addClass( newSubmenus, \"ui-menu\", \"ui-widget ui-widget-content ui-front\" );\n\n\t\tmenus = submenus.add( this.element );\n\t\titems = menus.find( this.options.items );\n\n\t\t// Initialize menu-items containing spaces and/or dashes only as dividers\n\t\titems.not( \".ui-menu-item\" ).each( function() {\n\t\t\tvar item = $( this );\n\t\t\tif ( that._isDivider( item ) ) {\n\t\t\t\tthat._addClass( item, \"ui-menu-divider\", \"ui-widget-content\" );\n\t\t\t}\n\t\t} );\n\n\t\t// Don't refresh list items that are already adapted\n\t\tnewItems = items.not( \".ui-menu-item, .ui-menu-divider\" );\n\t\tnewWrappers = newItems.children()\n\t\t\t.not( \".ui-menu\" )\n\t\t\t\t.uniqueId()\n\t\t\t\t.attr( {\n\t\t\t\t\ttabIndex: -1,\n\t\t\t\t\trole: this._itemRole()\n\t\t\t\t} );\n\t\tthis._addClass( newItems, \"ui-menu-item\" )\n\t\t\t._addClass( newWrappers, \"ui-menu-item-wrapper\" );\n\n\t\t// Add aria-disabled attribute to any disabled menu item\n\t\titems.filter( \".ui-state-disabled\" ).attr( \"aria-disabled\", \"true\" );\n\n\t\t// If the active item has been removed, blur the menu\n\t\tif ( this.active && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) {\n\t\t\tthis.blur();\n\t\t}\n\t},\n\n\t_itemRole: function() {\n\t\treturn {\n\t\t\tmenu: \"menuitem\",\n\t\t\tlistbox: \"option\"\n\t\t}[ this.options.role ];\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tif ( key === \"icons\" ) {\n\t\t\tvar icons = this.element.find( \".ui-menu-icon\" );\n\t\t\tthis._removeClass( icons, null, this.options.icons.submenu )\n\t\t\t\t._addClass( icons, null, value.submenu );\n\t\t}\n\t\tthis._super( key, value );\n\t},\n\n\t_setOptionDisabled: function( value ) {\n\t\tthis._super( value );\n\n\t\tthis.element.attr( \"aria-disabled\", String( value ) );\n\t\tthis._toggleClass( null, \"ui-state-disabled\", !!value );\n\t},\n\n\tfocus: function( event, item ) {\n\t\tvar nested, focused, activeParent;\n\t\tthis.blur( event, event && event.type === \"focus\" );\n\n\t\tthis._scrollIntoView( item );\n\n\t\tthis.active = item.first();\n\n\t\tfocused = this.active.children( \".ui-menu-item-wrapper\" );\n\t\tthis._addClass( focused, null, \"ui-state-active\" );\n\n\t\t// Only update aria-activedescendant if there's a role\n\t\t// otherwise we assume focus is managed elsewhere\n\t\tif ( this.options.role ) {\n\t\t\tthis.element.attr( \"aria-activedescendant\", focused.attr( \"id\" ) );\n\t\t}\n\n\t\t// Highlight active parent menu item, if any\n\t\tactiveParent = this.active\n\t\t\t.parent()\n\t\t\t\t.closest( \".ui-menu-item\" )\n\t\t\t\t\t.children( \".ui-menu-item-wrapper\" );\n\t\tthis._addClass( activeParent, null, \"ui-state-active\" );\n\n\t\tif ( event && event.type === \"keydown\" ) {\n\t\t\tthis._close();\n\t\t} else {\n\t\t\tthis.timer = this._delay( function() {\n\t\t\t\tthis._close();\n\t\t\t}, this.delay );\n\t\t}\n\n\t\tnested = item.children( \".ui-menu\" );\n\t\tif ( nested.length && event && ( /^mouse/.test( event.type ) ) ) {\n\t\t\tthis._startOpening( nested );\n\t\t}\n\t\tthis.activeMenu = item.parent();\n\n\t\tthis._trigger( \"focus\", event, { item: item } );\n\t},\n\n\t_scrollIntoView: function( item ) {\n\t\tvar borderTop, paddingTop, offset, scroll, elementHeight, itemHeight;\n\t\tif ( this._hasScroll() ) {\n\t\t\tborderTop = parseFloat( $.css( this.activeMenu[ 0 ], \"borderTopWidth\" ) ) || 0;\n\t\t\tpaddingTop = parseFloat( $.css( this.activeMenu[ 0 ], \"paddingTop\" ) ) || 0;\n\t\t\toffset = item.offset().top - this.activeMenu.offset().top - borderTop - paddingTop;\n\t\t\tscroll = this.activeMenu.scrollTop();\n\t\t\telementHeight = this.activeMenu.height();\n\t\t\titemHeight = item.outerHeight();\n\n\t\t\tif ( offset < 0 ) {\n\t\t\t\tthis.activeMenu.scrollTop( scroll + offset );\n\t\t\t} else if ( offset + itemHeight > elementHeight ) {\n\t\t\t\tthis.activeMenu.scrollTop( scroll + offset - elementHeight + itemHeight );\n\t\t\t}\n\t\t}\n\t},\n\n\tblur: function( event, fromFocus ) {\n\t\tif ( !fromFocus ) {\n\t\t\tclearTimeout( this.timer );\n\t\t}\n\n\t\tif ( !this.active ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._removeClass( this.active.children( \".ui-menu-item-wrapper\" ),\n\t\t\tnull, \"ui-state-active\" );\n\n\t\tthis._trigger( \"blur\", event, { item: this.active } );\n\t\tthis.active = null;\n\t},\n\n\t_startOpening: function( submenu ) {\n\t\tclearTimeout( this.timer );\n\n\t\t// Don't open if already open fixes a Firefox bug that caused a .5 pixel\n\t\t// shift in the submenu position when mousing over the caret icon\n\t\tif ( submenu.attr( \"aria-hidden\" ) !== \"true\" ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.timer = this._delay( function() {\n\t\t\tthis._close();\n\t\t\tthis._open( submenu );\n\t\t}, this.delay );\n\t},\n\n\t_open: function( submenu ) {\n\t\tvar position = $.extend( {\n\t\t\tof: this.active\n\t\t}, this.options.position );\n\n\t\tclearTimeout( this.timer );\n\t\tthis.element.find( \".ui-menu\" ).not( submenu.parents( \".ui-menu\" ) )\n\t\t\t.hide()\n\t\t\t.attr( \"aria-hidden\", \"true\" );\n\n\t\tsubmenu\n\t\t\t.show()\n\t\t\t.removeAttr( \"aria-hidden\" )\n\t\t\t.attr( \"aria-expanded\", \"true\" )\n\t\t\t.position( position );\n\t},\n\n\tcollapseAll: function( event, all ) {\n\t\tclearTimeout( this.timer );\n\t\tthis.timer = this._delay( function() {\n\n\t\t\t// If we were passed an event, look for the submenu that contains the event\n\t\t\tvar currentMenu = all ? this.element :\n\t\t\t\t$( event && event.target ).closest( this.element.find( \".ui-menu\" ) );\n\n\t\t\t// If we found no valid submenu ancestor, use the main menu to close all\n\t\t\t// sub menus anyway\n\t\t\tif ( !currentMenu.length ) {\n\t\t\t\tcurrentMenu = this.element;\n\t\t\t}\n\n\t\t\tthis._close( currentMenu );\n\n\t\t\tthis.blur( event );\n\n\t\t\t// Work around active item staying active after menu is blurred\n\t\t\tthis._removeClass( currentMenu.find( \".ui-state-active\" ), null, \"ui-state-active\" );\n\n\t\t\tthis.activeMenu = currentMenu;\n\t\t}, this.delay );\n\t},\n\n\t// With no arguments, closes the currently active menu - if nothing is active\n\t// it closes all menus.  If passed an argument, it will search for menus BELOW\n\t_close: function( startMenu ) {\n\t\tif ( !startMenu ) {\n\t\t\tstartMenu = this.active ? this.active.parent() : this.element;\n\t\t}\n\n\t\tstartMenu.find( \".ui-menu\" )\n\t\t\t.hide()\n\t\t\t.attr( \"aria-hidden\", \"true\" )\n\t\t\t.attr( \"aria-expanded\", \"false\" );\n\t},\n\n\t_closeOnDocumentClick: function( event ) {\n\t\treturn !$( event.target ).closest( \".ui-menu\" ).length;\n\t},\n\n\t_isDivider: function( item ) {\n\n\t\t// Match hyphen, em dash, en dash\n\t\treturn !/[^\\-\\u2014\\u2013\\s]/.test( item.text() );\n\t},\n\n\tcollapse: function( event ) {\n\t\tvar newItem = this.active &&\n\t\t\tthis.active.parent().closest( \".ui-menu-item\", this.element );\n\t\tif ( newItem && newItem.length ) {\n\t\t\tthis._close();\n\t\t\tthis.focus( event, newItem );\n\t\t}\n\t},\n\n\texpand: function( event ) {\n\t\tvar newItem = this.active &&\n\t\t\tthis.active\n\t\t\t\t.children( \".ui-menu \" )\n\t\t\t\t\t.find( this.options.items )\n\t\t\t\t\t\t.first();\n\n\t\tif ( newItem && newItem.length ) {\n\t\t\tthis._open( newItem.parent() );\n\n\t\t\t// Delay so Firefox will not hide activedescendant change in expanding submenu from AT\n\t\t\tthis._delay( function() {\n\t\t\t\tthis.focus( event, newItem );\n\t\t\t} );\n\t\t}\n\t},\n\n\tnext: function( event ) {\n\t\tthis._move( \"next\", \"first\", event );\n\t},\n\n\tprevious: function( event ) {\n\t\tthis._move( \"prev\", \"last\", event );\n\t},\n\n\tisFirstItem: function() {\n\t\treturn this.active && !this.active.prevAll( \".ui-menu-item\" ).length;\n\t},\n\n\tisLastItem: function() {\n\t\treturn this.active && !this.active.nextAll( \".ui-menu-item\" ).length;\n\t},\n\n\t_move: function( direction, filter, event ) {\n\t\tvar next;\n\t\tif ( this.active ) {\n\t\t\tif ( direction === \"first\" || direction === \"last\" ) {\n\t\t\t\tnext = this.active\n\t\t\t\t\t[ direction === \"first\" ? \"prevAll\" : \"nextAll\" ]( \".ui-menu-item\" )\n\t\t\t\t\t.eq( -1 );\n\t\t\t} else {\n\t\t\t\tnext = this.active\n\t\t\t\t\t[ direction + \"All\" ]( \".ui-menu-item\" )\n\t\t\t\t\t.eq( 0 );\n\t\t\t}\n\t\t}\n\t\tif ( !next || !next.length || !this.active ) {\n\t\t\tnext = this.activeMenu.find( this.options.items )[ filter ]();\n\t\t}\n\n\t\tthis.focus( event, next );\n\t},\n\n\tnextPage: function( event ) {\n\t\tvar item, base, height;\n\n\t\tif ( !this.active ) {\n\t\t\tthis.next( event );\n\t\t\treturn;\n\t\t}\n\t\tif ( this.isLastItem() ) {\n\t\t\treturn;\n\t\t}\n\t\tif ( this._hasScroll() ) {\n\t\t\tbase = this.active.offset().top;\n\t\t\theight = this.element.height();\n\t\t\tthis.active.nextAll( \".ui-menu-item\" ).each( function() {\n\t\t\t\titem = $( this );\n\t\t\t\treturn item.offset().top - base - height < 0;\n\t\t\t} );\n\n\t\t\tthis.focus( event, item );\n\t\t} else {\n\t\t\tthis.focus( event, this.activeMenu.find( this.options.items )\n\t\t\t\t[ !this.active ? \"first\" : \"last\" ]() );\n\t\t}\n\t},\n\n\tpreviousPage: function( event ) {\n\t\tvar item, base, height;\n\t\tif ( !this.active ) {\n\t\t\tthis.next( event );\n\t\t\treturn;\n\t\t}\n\t\tif ( this.isFirstItem() ) {\n\t\t\treturn;\n\t\t}\n\t\tif ( this._hasScroll() ) {\n\t\t\tbase = this.active.offset().top;\n\t\t\theight = this.element.height();\n\t\t\tthis.active.prevAll( \".ui-menu-item\" ).each( function() {\n\t\t\t\titem = $( this );\n\t\t\t\treturn item.offset().top - base + height > 0;\n\t\t\t} );\n\n\t\t\tthis.focus( event, item );\n\t\t} else {\n\t\t\tthis.focus( event, this.activeMenu.find( this.options.items ).first() );\n\t\t}\n\t},\n\n\t_hasScroll: function() {\n\t\treturn this.element.outerHeight() < this.element.prop( \"scrollHeight\" );\n\t},\n\n\tselect: function( event ) {\n\n\t\t// TODO: It should never be possible to not have an active item at this\n\t\t// point, but the tests don't trigger mouseenter before click.\n\t\tthis.active = this.active || $( event.target ).closest( \".ui-menu-item\" );\n\t\tvar ui = { item: this.active };\n\t\tif ( !this.active.has( \".ui-menu\" ).length ) {\n\t\t\tthis.collapseAll( event, true );\n\t\t}\n\t\tthis._trigger( \"select\", event, ui );\n\t},\n\n\t_filterMenuItems: function( character ) {\n\t\tvar escapedCharacter = character.replace( /[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g, \"\\\\$&\" ),\n\t\t\tregex = new RegExp( \"^\" + escapedCharacter, \"i\" );\n\n\t\treturn this.activeMenu\n\t\t\t.find( this.options.items )\n\n\t\t\t\t// Only match on items, not dividers or other content (#10571)\n\t\t\t\t.filter( \".ui-menu-item\" )\n\t\t\t\t\t.filter( function() {\n\t\t\t\t\t\treturn regex.test(\n\t\t\t\t\t\t\t$.trim( $( this ).children( \".ui-menu-item-wrapper\" ).text() ) );\n\t\t\t\t\t} );\n\t}\n} );\n\n\n/*!\n * jQuery UI Autocomplete 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Autocomplete\n//>>group: Widgets\n//>>description: Lists suggested words as the user is typing.\n//>>docs: http://api.jqueryui.com/autocomplete/\n//>>demos: http://jqueryui.com/autocomplete/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/autocomplete.css\n//>>css.theme: ../../themes/base/theme.css\n\n\n\n$.widget( \"ui.autocomplete\", {\n\tversion: \"1.12.1\",\n\tdefaultElement: \"<input>\",\n\toptions: {\n\t\tappendTo: null,\n\t\tautoFocus: false,\n\t\tdelay: 300,\n\t\tminLength: 1,\n\t\tposition: {\n\t\t\tmy: \"left top\",\n\t\t\tat: \"left bottom\",\n\t\t\tcollision: \"none\"\n\t\t},\n\t\tsource: null,\n\n\t\t// Callbacks\n\t\tchange: null,\n\t\tclose: null,\n\t\tfocus: null,\n\t\topen: null,\n\t\tresponse: null,\n\t\tsearch: null,\n\t\tselect: null\n\t},\n\n\trequestIndex: 0,\n\tpending: 0,\n\n\t_create: function() {\n\n\t\t// Some browsers only repeat keydown events, not keypress events,\n\t\t// so we use the suppressKeyPress flag to determine if we've already\n\t\t// handled the keydown event. #7269\n\t\t// Unfortunately the code for & in keypress is the same as the up arrow,\n\t\t// so we use the suppressKeyPressRepeat flag to avoid handling keypress\n\t\t// events when we know the keydown event was used to modify the\n\t\t// search term. #7799\n\t\tvar suppressKeyPress, suppressKeyPressRepeat, suppressInput,\n\t\t\tnodeName = this.element[ 0 ].nodeName.toLowerCase(),\n\t\t\tisTextarea = nodeName === \"textarea\",\n\t\t\tisInput = nodeName === \"input\";\n\n\t\t// Textareas are always multi-line\n\t\t// Inputs are always single-line, even if inside a contentEditable element\n\t\t// IE also treats inputs as contentEditable\n\t\t// All other element types are determined by whether or not they're contentEditable\n\t\tthis.isMultiLine = isTextarea || !isInput && this._isContentEditable( this.element );\n\n\t\tthis.valueMethod = this.element[ isTextarea || isInput ? \"val\" : \"text\" ];\n\t\tthis.isNewMenu = true;\n\n\t\tthis._addClass( \"ui-autocomplete-input\" );\n\t\tthis.element.attr( \"autocomplete\", \"off\" );\n\n\t\tthis._on( this.element, {\n\t\t\tkeydown: function( event ) {\n\t\t\t\tif ( this.element.prop( \"readOnly\" ) ) {\n\t\t\t\t\tsuppressKeyPress = true;\n\t\t\t\t\tsuppressInput = true;\n\t\t\t\t\tsuppressKeyPressRepeat = true;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tsuppressKeyPress = false;\n\t\t\t\tsuppressInput = false;\n\t\t\t\tsuppressKeyPressRepeat = false;\n\t\t\t\tvar keyCode = $.ui.keyCode;\n\t\t\t\tswitch ( event.keyCode ) {\n\t\t\t\tcase keyCode.PAGE_UP:\n\t\t\t\t\tsuppressKeyPress = true;\n\t\t\t\t\tthis._move( \"previousPage\", event );\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.PAGE_DOWN:\n\t\t\t\t\tsuppressKeyPress = true;\n\t\t\t\t\tthis._move( \"nextPage\", event );\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.UP:\n\t\t\t\t\tsuppressKeyPress = true;\n\t\t\t\t\tthis._keyEvent( \"previous\", event );\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.DOWN:\n\t\t\t\t\tsuppressKeyPress = true;\n\t\t\t\t\tthis._keyEvent( \"next\", event );\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.ENTER:\n\n\t\t\t\t\t// when menu is open and has focus\n\t\t\t\t\tif ( this.menu.active ) {\n\n\t\t\t\t\t\t// #6055 - Opera still allows the keypress to occur\n\t\t\t\t\t\t// which causes forms to submit\n\t\t\t\t\t\tsuppressKeyPress = true;\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\tthis.menu.select( event );\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.TAB:\n\t\t\t\t\tif ( this.menu.active ) {\n\t\t\t\t\t\tthis.menu.select( event );\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.ESCAPE:\n\t\t\t\t\tif ( this.menu.element.is( \":visible\" ) ) {\n\t\t\t\t\t\tif ( !this.isMultiLine ) {\n\t\t\t\t\t\t\tthis._value( this.term );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.close( event );\n\n\t\t\t\t\t\t// Different browsers have different default behavior for escape\n\t\t\t\t\t\t// Single press can mean undo or clear\n\t\t\t\t\t\t// Double press in IE means clear the whole form\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tsuppressKeyPressRepeat = true;\n\n\t\t\t\t\t// search timeout should be triggered before the input value is changed\n\t\t\t\t\tthis._searchTimeout( event );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t},\n\t\t\tkeypress: function( event ) {\n\t\t\t\tif ( suppressKeyPress ) {\n\t\t\t\t\tsuppressKeyPress = false;\n\t\t\t\t\tif ( !this.isMultiLine || this.menu.element.is( \":visible\" ) ) {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif ( suppressKeyPressRepeat ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Replicate some key handlers to allow them to repeat in Firefox and Opera\n\t\t\t\tvar keyCode = $.ui.keyCode;\n\t\t\t\tswitch ( event.keyCode ) {\n\t\t\t\tcase keyCode.PAGE_UP:\n\t\t\t\t\tthis._move( \"previousPage\", event );\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.PAGE_DOWN:\n\t\t\t\t\tthis._move( \"nextPage\", event );\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.UP:\n\t\t\t\t\tthis._keyEvent( \"previous\", event );\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.DOWN:\n\t\t\t\t\tthis._keyEvent( \"next\", event );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t},\n\t\t\tinput: function( event ) {\n\t\t\t\tif ( suppressInput ) {\n\t\t\t\t\tsuppressInput = false;\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis._searchTimeout( event );\n\t\t\t},\n\t\t\tfocus: function() {\n\t\t\t\tthis.selectedItem = null;\n\t\t\t\tthis.previous = this._value();\n\t\t\t},\n\t\t\tblur: function( event ) {\n\t\t\t\tif ( this.cancelBlur ) {\n\t\t\t\t\tdelete this.cancelBlur;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tclearTimeout( this.searching );\n\t\t\t\tthis.close( event );\n\t\t\t\tthis._change( event );\n\t\t\t}\n\t\t} );\n\n\t\tthis._initSource();\n\t\tthis.menu = $( \"<ul>\" )\n\t\t\t.appendTo( this._appendTo() )\n\t\t\t.menu( {\n\n\t\t\t\t// disable ARIA support, the live region takes care of that\n\t\t\t\trole: null\n\t\t\t} )\n\t\t\t.hide()\n\t\t\t.menu( \"instance\" );\n\n\t\tthis._addClass( this.menu.element, \"ui-autocomplete\", \"ui-front\" );\n\t\tthis._on( this.menu.element, {\n\t\t\tmousedown: function( event ) {\n\n\t\t\t\t// prevent moving focus out of the text field\n\t\t\t\tevent.preventDefault();\n\n\t\t\t\t// IE doesn't prevent moving focus even with event.preventDefault()\n\t\t\t\t// so we set a flag to know when we should ignore the blur event\n\t\t\t\tthis.cancelBlur = true;\n\t\t\t\tthis._delay( function() {\n\t\t\t\t\tdelete this.cancelBlur;\n\n\t\t\t\t\t// Support: IE 8 only\n\t\t\t\t\t// Right clicking a menu item or selecting text from the menu items will\n\t\t\t\t\t// result in focus moving out of the input. However, we've already received\n\t\t\t\t\t// and ignored the blur event because of the cancelBlur flag set above. So\n\t\t\t\t\t// we restore focus to ensure that the menu closes properly based on the user's\n\t\t\t\t\t// next actions.\n\t\t\t\t\tif ( this.element[ 0 ] !== $.ui.safeActiveElement( this.document[ 0 ] ) ) {\n\t\t\t\t\t\tthis.element.trigger( \"focus\" );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t},\n\t\t\tmenufocus: function( event, ui ) {\n\t\t\t\tvar label, item;\n\n\t\t\t\t// support: Firefox\n\t\t\t\t// Prevent accidental activation of menu items in Firefox (#7024 #9118)\n\t\t\t\tif ( this.isNewMenu ) {\n\t\t\t\t\tthis.isNewMenu = false;\n\t\t\t\t\tif ( event.originalEvent && /^mouse/.test( event.originalEvent.type ) ) {\n\t\t\t\t\t\tthis.menu.blur();\n\n\t\t\t\t\t\tthis.document.one( \"mousemove\", function() {\n\t\t\t\t\t\t\t$( event.target ).trigger( event.originalEvent );\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\titem = ui.item.data( \"ui-autocomplete-item\" );\n\t\t\t\tif ( false !== this._trigger( \"focus\", event, { item: item } ) ) {\n\n\t\t\t\t\t// use value to match what will end up in the input, if it was a key event\n\t\t\t\t\tif ( event.originalEvent && /^key/.test( event.originalEvent.type ) ) {\n\t\t\t\t\t\tthis._value( item.value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Announce the value in the liveRegion\n\t\t\t\tlabel = ui.item.attr( \"aria-label\" ) || item.value;\n\t\t\t\tif ( label && $.trim( label ).length ) {\n\t\t\t\t\tthis.liveRegion.children().hide();\n\t\t\t\t\t$( \"<div>\" ).text( label ).appendTo( this.liveRegion );\n\t\t\t\t}\n\t\t\t},\n\t\t\tmenuselect: function( event, ui ) {\n\t\t\t\tvar item = ui.item.data( \"ui-autocomplete-item\" ),\n\t\t\t\t\tprevious = this.previous;\n\n\t\t\t\t// Only trigger when focus was lost (click on menu)\n\t\t\t\tif ( this.element[ 0 ] !== $.ui.safeActiveElement( this.document[ 0 ] ) ) {\n\t\t\t\t\tthis.element.trigger( \"focus\" );\n\t\t\t\t\tthis.previous = previous;\n\n\t\t\t\t\t// #6109 - IE triggers two focus events and the second\n\t\t\t\t\t// is asynchronous, so we need to reset the previous\n\t\t\t\t\t// term synchronously and asynchronously :-(\n\t\t\t\t\tthis._delay( function() {\n\t\t\t\t\t\tthis.previous = previous;\n\t\t\t\t\t\tthis.selectedItem = item;\n\t\t\t\t\t} );\n\t\t\t\t}\n\n\t\t\t\tif ( false !== this._trigger( \"select\", event, { item: item } ) ) {\n\t\t\t\t\tthis._value( item.value );\n\t\t\t\t}\n\n\t\t\t\t// reset the term after the select event\n\t\t\t\t// this allows custom select handling to work properly\n\t\t\t\tthis.term = this._value();\n\n\t\t\t\tthis.close( event );\n\t\t\t\tthis.selectedItem = item;\n\t\t\t}\n\t\t} );\n\n\t\tthis.liveRegion = $( \"<div>\", {\n\t\t\trole: \"status\",\n\t\t\t\"aria-live\": \"assertive\",\n\t\t\t\"aria-relevant\": \"additions\"\n\t\t} )\n\t\t\t.appendTo( this.document[ 0 ].body );\n\n\t\tthis._addClass( this.liveRegion, null, \"ui-helper-hidden-accessible\" );\n\n\t\t// Turning off autocomplete prevents the browser from remembering the\n\t\t// value when navigating through history, so we re-enable autocomplete\n\t\t// if the page is unloaded before the widget is destroyed. #7790\n\t\tthis._on( this.window, {\n\t\t\tbeforeunload: function() {\n\t\t\t\tthis.element.removeAttr( \"autocomplete\" );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_destroy: function() {\n\t\tclearTimeout( this.searching );\n\t\tthis.element.removeAttr( \"autocomplete\" );\n\t\tthis.menu.element.remove();\n\t\tthis.liveRegion.remove();\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tthis._super( key, value );\n\t\tif ( key === \"source\" ) {\n\t\t\tthis._initSource();\n\t\t}\n\t\tif ( key === \"appendTo\" ) {\n\t\t\tthis.menu.element.appendTo( this._appendTo() );\n\t\t}\n\t\tif ( key === \"disabled\" && value && this.xhr ) {\n\t\t\tthis.xhr.abort();\n\t\t}\n\t},\n\n\t_isEventTargetInWidget: function( event ) {\n\t\tvar menuElement = this.menu.element[ 0 ];\n\n\t\treturn event.target === this.element[ 0 ] ||\n\t\t\tevent.target === menuElement ||\n\t\t\t$.contains( menuElement, event.target );\n\t},\n\n\t_closeOnClickOutside: function( event ) {\n\t\tif ( !this._isEventTargetInWidget( event ) ) {\n\t\t\tthis.close();\n\t\t}\n\t},\n\n\t_appendTo: function() {\n\t\tvar element = this.options.appendTo;\n\n\t\tif ( element ) {\n\t\t\telement = element.jquery || element.nodeType ?\n\t\t\t\t$( element ) :\n\t\t\t\tthis.document.find( element ).eq( 0 );\n\t\t}\n\n\t\tif ( !element || !element[ 0 ] ) {\n\t\t\telement = this.element.closest( \".ui-front, dialog\" );\n\t\t}\n\n\t\tif ( !element.length ) {\n\t\t\telement = this.document[ 0 ].body;\n\t\t}\n\n\t\treturn element;\n\t},\n\n\t_initSource: function() {\n\t\tvar array, url,\n\t\t\tthat = this;\n\t\tif ( $.isArray( this.options.source ) ) {\n\t\t\tarray = this.options.source;\n\t\t\tthis.source = function( request, response ) {\n\t\t\t\tresponse( $.ui.autocomplete.filter( array, request.term ) );\n\t\t\t};\n\t\t} else if ( typeof this.options.source === \"string\" ) {\n\t\t\turl = this.options.source;\n\t\t\tthis.source = function( request, response ) {\n\t\t\t\tif ( that.xhr ) {\n\t\t\t\t\tthat.xhr.abort();\n\t\t\t\t}\n\t\t\t\tthat.xhr = $.ajax( {\n\t\t\t\t\turl: url,\n\t\t\t\t\tdata: request,\n\t\t\t\t\tdataType: \"json\",\n\t\t\t\t\tsuccess: function( data ) {\n\t\t\t\t\t\tresponse( data );\n\t\t\t\t\t},\n\t\t\t\t\terror: function() {\n\t\t\t\t\t\tresponse( [] );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t};\n\t\t} else {\n\t\t\tthis.source = this.options.source;\n\t\t}\n\t},\n\n\t_searchTimeout: function( event ) {\n\t\tclearTimeout( this.searching );\n\t\tthis.searching = this._delay( function() {\n\n\t\t\t// Search if the value has changed, or if the user retypes the same value (see #7434)\n\t\t\tvar equalValues = this.term === this._value(),\n\t\t\t\tmenuVisible = this.menu.element.is( \":visible\" ),\n\t\t\t\tmodifierKey = event.altKey || event.ctrlKey || event.metaKey || event.shiftKey;\n\n\t\t\tif ( !equalValues || ( equalValues && !menuVisible && !modifierKey ) ) {\n\t\t\t\tthis.selectedItem = null;\n\t\t\t\tthis.search( null, event );\n\t\t\t}\n\t\t}, this.options.delay );\n\t},\n\n\tsearch: function( value, event ) {\n\t\tvalue = value != null ? value : this._value();\n\n\t\t// Always save the actual value, not the one passed as an argument\n\t\tthis.term = this._value();\n\n\t\tif ( value.length < this.options.minLength ) {\n\t\t\treturn this.close( event );\n\t\t}\n\n\t\tif ( this._trigger( \"search\", event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\treturn this._search( value );\n\t},\n\n\t_search: function( value ) {\n\t\tthis.pending++;\n\t\tthis._addClass( \"ui-autocomplete-loading\" );\n\t\tthis.cancelSearch = false;\n\n\t\tthis.source( { term: value }, this._response() );\n\t},\n\n\t_response: function() {\n\t\tvar index = ++this.requestIndex;\n\n\t\treturn $.proxy( function( content ) {\n\t\t\tif ( index === this.requestIndex ) {\n\t\t\t\tthis.__response( content );\n\t\t\t}\n\n\t\t\tthis.pending--;\n\t\t\tif ( !this.pending ) {\n\t\t\t\tthis._removeClass( \"ui-autocomplete-loading\" );\n\t\t\t}\n\t\t}, this );\n\t},\n\n\t__response: function( content ) {\n\t\tif ( content ) {\n\t\t\tcontent = this._normalize( content );\n\t\t}\n\t\tthis._trigger( \"response\", null, { content: content } );\n\t\tif ( !this.options.disabled && content && content.length && !this.cancelSearch ) {\n\t\t\tthis._suggest( content );\n\t\t\tthis._trigger( \"open\" );\n\t\t} else {\n\n\t\t\t// use ._close() instead of .close() so we don't cancel future searches\n\t\t\tthis._close();\n\t\t}\n\t},\n\n\tclose: function( event ) {\n\t\tthis.cancelSearch = true;\n\t\tthis._close( event );\n\t},\n\n\t_close: function( event ) {\n\n\t\t// Remove the handler that closes the menu on outside clicks\n\t\tthis._off( this.document, \"mousedown\" );\n\n\t\tif ( this.menu.element.is( \":visible\" ) ) {\n\t\t\tthis.menu.element.hide();\n\t\t\tthis.menu.blur();\n\t\t\tthis.isNewMenu = true;\n\t\t\tthis._trigger( \"close\", event );\n\t\t}\n\t},\n\n\t_change: function( event ) {\n\t\tif ( this.previous !== this._value() ) {\n\t\t\tthis._trigger( \"change\", event, { item: this.selectedItem } );\n\t\t}\n\t},\n\n\t_normalize: function( items ) {\n\n\t\t// assume all items have the right format when the first item is complete\n\t\tif ( items.length && items[ 0 ].label && items[ 0 ].value ) {\n\t\t\treturn items;\n\t\t}\n\t\treturn $.map( items, function( item ) {\n\t\t\tif ( typeof item === \"string\" ) {\n\t\t\t\treturn {\n\t\t\t\t\tlabel: item,\n\t\t\t\t\tvalue: item\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn $.extend( {}, item, {\n\t\t\t\tlabel: item.label || item.value,\n\t\t\t\tvalue: item.value || item.label\n\t\t\t} );\n\t\t} );\n\t},\n\n\t_suggest: function( items ) {\n\t\tvar ul = this.menu.element.empty();\n\t\tthis._renderMenu( ul, items );\n\t\tthis.isNewMenu = true;\n\t\tthis.menu.refresh();\n\n\t\t// Size and position menu\n\t\tul.show();\n\t\tthis._resizeMenu();\n\t\tul.position( $.extend( {\n\t\t\tof: this.element\n\t\t}, this.options.position ) );\n\n\t\tif ( this.options.autoFocus ) {\n\t\t\tthis.menu.next();\n\t\t}\n\n\t\t// Listen for interactions outside of the widget (#6642)\n\t\tthis._on( this.document, {\n\t\t\tmousedown: \"_closeOnClickOutside\"\n\t\t} );\n\t},\n\n\t_resizeMenu: function() {\n\t\tvar ul = this.menu.element;\n\t\tul.outerWidth( Math.max(\n\n\t\t\t// Firefox wraps long text (possibly a rounding bug)\n\t\t\t// so we add 1px to avoid the wrapping (#7513)\n\t\t\tul.width( \"\" ).outerWidth() + 1,\n\t\t\tthis.element.outerWidth()\n\t\t) );\n\t},\n\n\t_renderMenu: function( ul, items ) {\n\t\tvar that = this;\n\t\t$.each( items, function( index, item ) {\n\t\t\tthat._renderItemData( ul, item );\n\t\t} );\n\t},\n\n\t_renderItemData: function( ul, item ) {\n\t\treturn this._renderItem( ul, item ).data( \"ui-autocomplete-item\", item );\n\t},\n\n\t_renderItem: function( ul, item ) {\n\t\treturn $( \"<li>\" )\n\t\t\t.append( $( \"<div>\" ).text( item.label ) )\n\t\t\t.appendTo( ul );\n\t},\n\n\t_move: function( direction, event ) {\n\t\tif ( !this.menu.element.is( \":visible\" ) ) {\n\t\t\tthis.search( null, event );\n\t\t\treturn;\n\t\t}\n\t\tif ( this.menu.isFirstItem() && /^previous/.test( direction ) ||\n\t\t\t\tthis.menu.isLastItem() && /^next/.test( direction ) ) {\n\n\t\t\tif ( !this.isMultiLine ) {\n\t\t\t\tthis._value( this.term );\n\t\t\t}\n\n\t\t\tthis.menu.blur();\n\t\t\treturn;\n\t\t}\n\t\tthis.menu[ direction ]( event );\n\t},\n\n\twidget: function() {\n\t\treturn this.menu.element;\n\t},\n\n\t_value: function() {\n\t\treturn this.valueMethod.apply( this.element, arguments );\n\t},\n\n\t_keyEvent: function( keyEvent, event ) {\n\t\tif ( !this.isMultiLine || this.menu.element.is( \":visible\" ) ) {\n\t\t\tthis._move( keyEvent, event );\n\n\t\t\t// Prevents moving cursor to beginning/end of the text field in some browsers\n\t\t\tevent.preventDefault();\n\t\t}\n\t},\n\n\t// Support: Chrome <=50\n\t// We should be able to just use this.element.prop( \"isContentEditable\" )\n\t// but hidden elements always report false in Chrome.\n\t// https://code.google.com/p/chromium/issues/detail?id=313082\n\t_isContentEditable: function( element ) {\n\t\tif ( !element.length ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar editable = element.prop( \"contentEditable\" );\n\n\t\tif ( editable === \"inherit\" ) {\n\t\t  return this._isContentEditable( element.parent() );\n\t\t}\n\n\t\treturn editable === \"true\";\n\t}\n} );\n\n$.extend( $.ui.autocomplete, {\n\tescapeRegex: function( value ) {\n\t\treturn value.replace( /[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g, \"\\\\$&\" );\n\t},\n\tfilter: function( array, term ) {\n\t\tvar matcher = new RegExp( $.ui.autocomplete.escapeRegex( term ), \"i\" );\n\t\treturn $.grep( array, function( value ) {\n\t\t\treturn matcher.test( value.label || value.value || value );\n\t\t} );\n\t}\n} );\n\n// Live region extension, adding a `messages` option\n// NOTE: This is an experimental API. We are still investigating\n// a full solution for string manipulation and internationalization.\n$.widget( \"ui.autocomplete\", $.ui.autocomplete, {\n\toptions: {\n\t\tmessages: {\n\t\t\tnoResults: \"No search results.\",\n\t\t\tresults: function( amount ) {\n\t\t\t\treturn amount + ( amount > 1 ? \" results are\" : \" result is\" ) +\n\t\t\t\t\t\" available, use up and down arrow keys to navigate.\";\n\t\t\t}\n\t\t}\n\t},\n\n\t__response: function( content ) {\n\t\tvar message;\n\t\tthis._superApply( arguments );\n\t\tif ( this.options.disabled || this.cancelSearch ) {\n\t\t\treturn;\n\t\t}\n\t\tif ( content && content.length ) {\n\t\t\tmessage = this.options.messages.results( content.length );\n\t\t} else {\n\t\t\tmessage = this.options.messages.noResults;\n\t\t}\n\t\tthis.liveRegion.children().hide();\n\t\t$( \"<div>\" ).text( message ).appendTo( this.liveRegion );\n\t}\n} );\n\nvar widgetsAutocomplete = $.ui.autocomplete;\n\n\n/*!\n * jQuery UI Controlgroup 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Controlgroup\n//>>group: Widgets\n//>>description: Visually groups form control widgets\n//>>docs: http://api.jqueryui.com/controlgroup/\n//>>demos: http://jqueryui.com/controlgroup/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/controlgroup.css\n//>>css.theme: ../../themes/base/theme.css\n\n\nvar controlgroupCornerRegex = /ui-corner-([a-z]){2,6}/g;\n\nvar widgetsControlgroup = $.widget( \"ui.controlgroup\", {\n\tversion: \"1.12.1\",\n\tdefaultElement: \"<div>\",\n\toptions: {\n\t\tdirection: \"horizontal\",\n\t\tdisabled: null,\n\t\tonlyVisible: true,\n\t\titems: {\n\t\t\t\"button\": \"input[type=button], input[type=submit], input[type=reset], button, a\",\n\t\t\t\"controlgroupLabel\": \".ui-controlgroup-label\",\n\t\t\t\"checkboxradio\": \"input[type='checkbox'], input[type='radio']\",\n\t\t\t\"selectmenu\": \"select\",\n\t\t\t\"spinner\": \".ui-spinner-input\"\n\t\t}\n\t},\n\n\t_create: function() {\n\t\tthis._enhance();\n\t},\n\n\t// To support the enhanced option in jQuery Mobile, we isolate DOM manipulation\n\t_enhance: function() {\n\t\tthis.element.attr( \"role\", \"toolbar\" );\n\t\tthis.refresh();\n\t},\n\n\t_destroy: function() {\n\t\tthis._callChildMethod( \"destroy\" );\n\t\tthis.childWidgets.removeData( \"ui-controlgroup-data\" );\n\t\tthis.element.removeAttr( \"role\" );\n\t\tif ( this.options.items.controlgroupLabel ) {\n\t\t\tthis.element\n\t\t\t\t.find( this.options.items.controlgroupLabel )\n\t\t\t\t.find( \".ui-controlgroup-label-contents\" )\n\t\t\t\t.contents().unwrap();\n\t\t}\n\t},\n\n\t_initWidgets: function() {\n\t\tvar that = this,\n\t\t\tchildWidgets = [];\n\n\t\t// First we iterate over each of the items options\n\t\t$.each( this.options.items, function( widget, selector ) {\n\t\t\tvar labels;\n\t\t\tvar options = {};\n\n\t\t\t// Make sure the widget has a selector set\n\t\t\tif ( !selector ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( widget === \"controlgroupLabel\" ) {\n\t\t\t\tlabels = that.element.find( selector );\n\t\t\t\tlabels.each( function() {\n\t\t\t\t\tvar element = $( this );\n\n\t\t\t\t\tif ( element.children( \".ui-controlgroup-label-contents\" ).length ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\telement.contents()\n\t\t\t\t\t\t.wrapAll( \"<span class='ui-controlgroup-label-contents'></span>\" );\n\t\t\t\t} );\n\t\t\t\tthat._addClass( labels, null, \"ui-widget ui-widget-content ui-state-default\" );\n\t\t\t\tchildWidgets = childWidgets.concat( labels.get() );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Make sure the widget actually exists\n\t\t\tif ( !$.fn[ widget ] ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// We assume everything is in the middle to start because we can't determine\n\t\t\t// first / last elements until all enhancments are done.\n\t\t\tif ( that[ \"_\" + widget + \"Options\" ] ) {\n\t\t\t\toptions = that[ \"_\" + widget + \"Options\" ]( \"middle\" );\n\t\t\t} else {\n\t\t\t\toptions = { classes: {} };\n\t\t\t}\n\n\t\t\t// Find instances of this widget inside controlgroup and init them\n\t\t\tthat.element\n\t\t\t\t.find( selector )\n\t\t\t\t.each( function() {\n\t\t\t\t\tvar element = $( this );\n\t\t\t\t\tvar instance = element[ widget ]( \"instance\" );\n\n\t\t\t\t\t// We need to clone the default options for this type of widget to avoid\n\t\t\t\t\t// polluting the variable options which has a wider scope than a single widget.\n\t\t\t\t\tvar instanceOptions = $.widget.extend( {}, options );\n\n\t\t\t\t\t// If the button is the child of a spinner ignore it\n\t\t\t\t\t// TODO: Find a more generic solution\n\t\t\t\t\tif ( widget === \"button\" && element.parent( \".ui-spinner\" ).length ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Create the widget if it doesn't exist\n\t\t\t\t\tif ( !instance ) {\n\t\t\t\t\t\tinstance = element[ widget ]()[ widget ]( \"instance\" );\n\t\t\t\t\t}\n\t\t\t\t\tif ( instance ) {\n\t\t\t\t\t\tinstanceOptions.classes =\n\t\t\t\t\t\t\tthat._resolveClassesValues( instanceOptions.classes, instance );\n\t\t\t\t\t}\n\t\t\t\t\telement[ widget ]( instanceOptions );\n\n\t\t\t\t\t// Store an instance of the controlgroup to be able to reference\n\t\t\t\t\t// from the outermost element for changing options and refresh\n\t\t\t\t\tvar widgetElement = element[ widget ]( \"widget\" );\n\t\t\t\t\t$.data( widgetElement[ 0 ], \"ui-controlgroup-data\",\n\t\t\t\t\t\tinstance ? instance : element[ widget ]( \"instance\" ) );\n\n\t\t\t\t\tchildWidgets.push( widgetElement[ 0 ] );\n\t\t\t\t} );\n\t\t} );\n\n\t\tthis.childWidgets = $( $.unique( childWidgets ) );\n\t\tthis._addClass( this.childWidgets, \"ui-controlgroup-item\" );\n\t},\n\n\t_callChildMethod: function( method ) {\n\t\tthis.childWidgets.each( function() {\n\t\t\tvar element = $( this ),\n\t\t\t\tdata = element.data( \"ui-controlgroup-data\" );\n\t\t\tif ( data && data[ method ] ) {\n\t\t\t\tdata[ method ]();\n\t\t\t}\n\t\t} );\n\t},\n\n\t_updateCornerClass: function( element, position ) {\n\t\tvar remove = \"ui-corner-top ui-corner-bottom ui-corner-left ui-corner-right ui-corner-all\";\n\t\tvar add = this._buildSimpleOptions( position, \"label\" ).classes.label;\n\n\t\tthis._removeClass( element, null, remove );\n\t\tthis._addClass( element, null, add );\n\t},\n\n\t_buildSimpleOptions: function( position, key ) {\n\t\tvar direction = this.options.direction === \"vertical\";\n\t\tvar result = {\n\t\t\tclasses: {}\n\t\t};\n\t\tresult.classes[ key ] = {\n\t\t\t\"middle\": \"\",\n\t\t\t\"first\": \"ui-corner-\" + ( direction ? \"top\" : \"left\" ),\n\t\t\t\"last\": \"ui-corner-\" + ( direction ? \"bottom\" : \"right\" ),\n\t\t\t\"only\": \"ui-corner-all\"\n\t\t}[ position ];\n\n\t\treturn result;\n\t},\n\n\t_spinnerOptions: function( position ) {\n\t\tvar options = this._buildSimpleOptions( position, \"ui-spinner\" );\n\n\t\toptions.classes[ \"ui-spinner-up\" ] = \"\";\n\t\toptions.classes[ \"ui-spinner-down\" ] = \"\";\n\n\t\treturn options;\n\t},\n\n\t_buttonOptions: function( position ) {\n\t\treturn this._buildSimpleOptions( position, \"ui-button\" );\n\t},\n\n\t_checkboxradioOptions: function( position ) {\n\t\treturn this._buildSimpleOptions( position, \"ui-checkboxradio-label\" );\n\t},\n\n\t_selectmenuOptions: function( position ) {\n\t\tvar direction = this.options.direction === \"vertical\";\n\t\treturn {\n\t\t\twidth: direction ? \"auto\" : false,\n\t\t\tclasses: {\n\t\t\t\tmiddle: {\n\t\t\t\t\t\"ui-selectmenu-button-open\": \"\",\n\t\t\t\t\t\"ui-selectmenu-button-closed\": \"\"\n\t\t\t\t},\n\t\t\t\tfirst: {\n\t\t\t\t\t\"ui-selectmenu-button-open\": \"ui-corner-\" + ( direction ? \"top\" : \"tl\" ),\n\t\t\t\t\t\"ui-selectmenu-button-closed\": \"ui-corner-\" + ( direction ? \"top\" : \"left\" )\n\t\t\t\t},\n\t\t\t\tlast: {\n\t\t\t\t\t\"ui-selectmenu-button-open\": direction ? \"\" : \"ui-corner-tr\",\n\t\t\t\t\t\"ui-selectmenu-button-closed\": \"ui-corner-\" + ( direction ? \"bottom\" : \"right\" )\n\t\t\t\t},\n\t\t\t\tonly: {\n\t\t\t\t\t\"ui-selectmenu-button-open\": \"ui-corner-top\",\n\t\t\t\t\t\"ui-selectmenu-button-closed\": \"ui-corner-all\"\n\t\t\t\t}\n\n\t\t\t}[ position ]\n\t\t};\n\t},\n\n\t_resolveClassesValues: function( classes, instance ) {\n\t\tvar result = {};\n\t\t$.each( classes, function( key ) {\n\t\t\tvar current = instance.options.classes[ key ] || \"\";\n\t\t\tcurrent = $.trim( current.replace( controlgroupCornerRegex, \"\" ) );\n\t\t\tresult[ key ] = ( current + \" \" + classes[ key ] ).replace( /\\s+/g, \" \" );\n\t\t} );\n\t\treturn result;\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tif ( key === \"direction\" ) {\n\t\t\tthis._removeClass( \"ui-controlgroup-\" + this.options.direction );\n\t\t}\n\n\t\tthis._super( key, value );\n\t\tif ( key === \"disabled\" ) {\n\t\t\tthis._callChildMethod( value ? \"disable\" : \"enable\" );\n\t\t\treturn;\n\t\t}\n\n\t\tthis.refresh();\n\t},\n\n\trefresh: function() {\n\t\tvar children,\n\t\t\tthat = this;\n\n\t\tthis._addClass( \"ui-controlgroup ui-controlgroup-\" + this.options.direction );\n\n\t\tif ( this.options.direction === \"horizontal\" ) {\n\t\t\tthis._addClass( null, \"ui-helper-clearfix\" );\n\t\t}\n\t\tthis._initWidgets();\n\n\t\tchildren = this.childWidgets;\n\n\t\t// We filter here because we need to track all childWidgets not just the visible ones\n\t\tif ( this.options.onlyVisible ) {\n\t\t\tchildren = children.filter( \":visible\" );\n\t\t}\n\n\t\tif ( children.length ) {\n\n\t\t\t// We do this last because we need to make sure all enhancment is done\n\t\t\t// before determining first and last\n\t\t\t$.each( [ \"first\", \"last\" ], function( index, value ) {\n\t\t\t\tvar instance = children[ value ]().data( \"ui-controlgroup-data\" );\n\n\t\t\t\tif ( instance && that[ \"_\" + instance.widgetName + \"Options\" ] ) {\n\t\t\t\t\tvar options = that[ \"_\" + instance.widgetName + \"Options\" ](\n\t\t\t\t\t\tchildren.length === 1 ? \"only\" : value\n\t\t\t\t\t);\n\t\t\t\t\toptions.classes = that._resolveClassesValues( options.classes, instance );\n\t\t\t\t\tinstance.element[ instance.widgetName ]( options );\n\t\t\t\t} else {\n\t\t\t\t\tthat._updateCornerClass( children[ value ](), value );\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\t// Finally call the refresh method on each of the child widgets.\n\t\t\tthis._callChildMethod( \"refresh\" );\n\t\t}\n\t}\n} );\n\n/*!\n * jQuery UI Checkboxradio 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Checkboxradio\n//>>group: Widgets\n//>>description: Enhances a form with multiple themeable checkboxes or radio buttons.\n//>>docs: http://api.jqueryui.com/checkboxradio/\n//>>demos: http://jqueryui.com/checkboxradio/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/button.css\n//>>css.structure: ../../themes/base/checkboxradio.css\n//>>css.theme: ../../themes/base/theme.css\n\n\n\n$.widget( \"ui.checkboxradio\", [ $.ui.formResetMixin, {\n\tversion: \"1.12.1\",\n\toptions: {\n\t\tdisabled: null,\n\t\tlabel: null,\n\t\ticon: true,\n\t\tclasses: {\n\t\t\t\"ui-checkboxradio-label\": \"ui-corner-all\",\n\t\t\t\"ui-checkboxradio-icon\": \"ui-corner-all\"\n\t\t}\n\t},\n\n\t_getCreateOptions: function() {\n\t\tvar disabled, labels;\n\t\tvar that = this;\n\t\tvar options = this._super() || {};\n\n\t\t// We read the type here, because it makes more sense to throw a element type error first,\n\t\t// rather then the error for lack of a label. Often if its the wrong type, it\n\t\t// won't have a label (e.g. calling on a div, btn, etc)\n\t\tthis._readType();\n\n\t\tlabels = this.element.labels();\n\n\t\t// If there are multiple labels, use the last one\n\t\tthis.label = $( labels[ labels.length - 1 ] );\n\t\tif ( !this.label.length ) {\n\t\t\t$.error( \"No label found for checkboxradio widget\" );\n\t\t}\n\n\t\tthis.originalLabel = \"\";\n\n\t\t// We need to get the label text but this may also need to make sure it does not contain the\n\t\t// input itself.\n\t\tthis.label.contents().not( this.element[ 0 ] ).each( function() {\n\n\t\t\t// The label contents could be text, html, or a mix. We concat each element to get a\n\t\t\t// string representation of the label, without the input as part of it.\n\t\t\tthat.originalLabel += this.nodeType === 3 ? $( this ).text() : this.outerHTML;\n\t\t} );\n\n\t\t// Set the label option if we found label text\n\t\tif ( this.originalLabel ) {\n\t\t\toptions.label = this.originalLabel;\n\t\t}\n\n\t\tdisabled = this.element[ 0 ].disabled;\n\t\tif ( disabled != null ) {\n\t\t\toptions.disabled = disabled;\n\t\t}\n\t\treturn options;\n\t},\n\n\t_create: function() {\n\t\tvar checked = this.element[ 0 ].checked;\n\n\t\tthis._bindFormResetHandler();\n\n\t\tif ( this.options.disabled == null ) {\n\t\t\tthis.options.disabled = this.element[ 0 ].disabled;\n\t\t}\n\n\t\tthis._setOption( \"disabled\", this.options.disabled );\n\t\tthis._addClass( \"ui-checkboxradio\", \"ui-helper-hidden-accessible\" );\n\t\tthis._addClass( this.label, \"ui-checkboxradio-label\", \"ui-button ui-widget\" );\n\n\t\tif ( this.type === \"radio\" ) {\n\t\t\tthis._addClass( this.label, \"ui-checkboxradio-radio-label\" );\n\t\t}\n\n\t\tif ( this.options.label && this.options.label !== this.originalLabel ) {\n\t\t\tthis._updateLabel();\n\t\t} else if ( this.originalLabel ) {\n\t\t\tthis.options.label = this.originalLabel;\n\t\t}\n\n\t\tthis._enhance();\n\n\t\tif ( checked ) {\n\t\t\tthis._addClass( this.label, \"ui-checkboxradio-checked\", \"ui-state-active\" );\n\t\t\tif ( this.icon ) {\n\t\t\t\tthis._addClass( this.icon, null, \"ui-state-hover\" );\n\t\t\t}\n\t\t}\n\n\t\tthis._on( {\n\t\t\tchange: \"_toggleClasses\",\n\t\t\tfocus: function() {\n\t\t\t\tthis._addClass( this.label, null, \"ui-state-focus ui-visual-focus\" );\n\t\t\t},\n\t\t\tblur: function() {\n\t\t\t\tthis._removeClass( this.label, null, \"ui-state-focus ui-visual-focus\" );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_readType: function() {\n\t\tvar nodeName = this.element[ 0 ].nodeName.toLowerCase();\n\t\tthis.type = this.element[ 0 ].type;\n\t\tif ( nodeName !== \"input\" || !/radio|checkbox/.test( this.type ) ) {\n\t\t\t$.error( \"Can't create checkboxradio on element.nodeName=\" + nodeName +\n\t\t\t\t\" and element.type=\" + this.type );\n\t\t}\n\t},\n\n\t// Support jQuery Mobile enhanced option\n\t_enhance: function() {\n\t\tthis._updateIcon( this.element[ 0 ].checked );\n\t},\n\n\twidget: function() {\n\t\treturn this.label;\n\t},\n\n\t_getRadioGroup: function() {\n\t\tvar group;\n\t\tvar name = this.element[ 0 ].name;\n\t\tvar nameSelector = \"input[name='\" + $.ui.escapeSelector( name ) + \"']\";\n\n\t\tif ( !name ) {\n\t\t\treturn $( [] );\n\t\t}\n\n\t\tif ( this.form.length ) {\n\t\t\tgroup = $( this.form[ 0 ].elements ).filter( nameSelector );\n\t\t} else {\n\n\t\t\t// Not inside a form, check all inputs that also are not inside a form\n\t\t\tgroup = $( nameSelector ).filter( function() {\n\t\t\t\treturn $( this ).form().length === 0;\n\t\t\t} );\n\t\t}\n\n\t\treturn group.not( this.element );\n\t},\n\n\t_toggleClasses: function() {\n\t\tvar checked = this.element[ 0 ].checked;\n\t\tthis._toggleClass( this.label, \"ui-checkboxradio-checked\", \"ui-state-active\", checked );\n\n\t\tif ( this.options.icon && this.type === \"checkbox\" ) {\n\t\t\tthis._toggleClass( this.icon, null, \"ui-icon-check ui-state-checked\", checked )\n\t\t\t\t._toggleClass( this.icon, null, \"ui-icon-blank\", !checked );\n\t\t}\n\n\t\tif ( this.type === \"radio\" ) {\n\t\t\tthis._getRadioGroup()\n\t\t\t\t.each( function() {\n\t\t\t\t\tvar instance = $( this ).checkboxradio( \"instance\" );\n\n\t\t\t\t\tif ( instance ) {\n\t\t\t\t\t\tinstance._removeClass( instance.label,\n\t\t\t\t\t\t\t\"ui-checkboxradio-checked\", \"ui-state-active\" );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}\n\t},\n\n\t_destroy: function() {\n\t\tthis._unbindFormResetHandler();\n\n\t\tif ( this.icon ) {\n\t\t\tthis.icon.remove();\n\t\t\tthis.iconSpace.remove();\n\t\t}\n\t},\n\n\t_setOption: function( key, value ) {\n\n\t\t// We don't allow the value to be set to nothing\n\t\tif ( key === \"label\" && !value ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._super( key, value );\n\n\t\tif ( key === \"disabled\" ) {\n\t\t\tthis._toggleClass( this.label, null, \"ui-state-disabled\", value );\n\t\t\tthis.element[ 0 ].disabled = value;\n\n\t\t\t// Don't refresh when setting disabled\n\t\t\treturn;\n\t\t}\n\t\tthis.refresh();\n\t},\n\n\t_updateIcon: function( checked ) {\n\t\tvar toAdd = \"ui-icon ui-icon-background \";\n\n\t\tif ( this.options.icon ) {\n\t\t\tif ( !this.icon ) {\n\t\t\t\tthis.icon = $( \"<span>\" );\n\t\t\t\tthis.iconSpace = $( \"<span> </span>\" );\n\t\t\t\tthis._addClass( this.iconSpace, \"ui-checkboxradio-icon-space\" );\n\t\t\t}\n\n\t\t\tif ( this.type === \"checkbox\" ) {\n\t\t\t\ttoAdd += checked ? \"ui-icon-check ui-state-checked\" : \"ui-icon-blank\";\n\t\t\t\tthis._removeClass( this.icon, null, checked ? \"ui-icon-blank\" : \"ui-icon-check\" );\n\t\t\t} else {\n\t\t\t\ttoAdd += \"ui-icon-blank\";\n\t\t\t}\n\t\t\tthis._addClass( this.icon, \"ui-checkboxradio-icon\", toAdd );\n\t\t\tif ( !checked ) {\n\t\t\t\tthis._removeClass( this.icon, null, \"ui-icon-check ui-state-checked\" );\n\t\t\t}\n\t\t\tthis.icon.prependTo( this.label ).after( this.iconSpace );\n\t\t} else if ( this.icon !== undefined ) {\n\t\t\tthis.icon.remove();\n\t\t\tthis.iconSpace.remove();\n\t\t\tdelete this.icon;\n\t\t}\n\t},\n\n\t_updateLabel: function() {\n\n\t\t// Remove the contents of the label ( minus the icon, icon space, and input )\n\t\tvar contents = this.label.contents().not( this.element[ 0 ] );\n\t\tif ( this.icon ) {\n\t\t\tcontents = contents.not( this.icon[ 0 ] );\n\t\t}\n\t\tif ( this.iconSpace ) {\n\t\t\tcontents = contents.not( this.iconSpace[ 0 ] );\n\t\t}\n\t\tcontents.remove();\n\n\t\tthis.label.append( this.options.label );\n\t},\n\n\trefresh: function() {\n\t\tvar checked = this.element[ 0 ].checked,\n\t\t\tisDisabled = this.element[ 0 ].disabled;\n\n\t\tthis._updateIcon( checked );\n\t\tthis._toggleClass( this.label, \"ui-checkboxradio-checked\", \"ui-state-active\", checked );\n\t\tif ( this.options.label !== null ) {\n\t\t\tthis._updateLabel();\n\t\t}\n\n\t\tif ( isDisabled !== this.options.disabled ) {\n\t\t\tthis._setOptions( { \"disabled\": isDisabled } );\n\t\t}\n\t}\n\n} ] );\n\nvar widgetsCheckboxradio = $.ui.checkboxradio;\n\n\n/*!\n * jQuery UI Button 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Button\n//>>group: Widgets\n//>>description: Enhances a form with themeable buttons.\n//>>docs: http://api.jqueryui.com/button/\n//>>demos: http://jqueryui.com/button/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/button.css\n//>>css.theme: ../../themes/base/theme.css\n\n\n\n$.widget( \"ui.button\", {\n\tversion: \"1.12.1\",\n\tdefaultElement: \"<button>\",\n\toptions: {\n\t\tclasses: {\n\t\t\t\"ui-button\": \"ui-corner-all\"\n\t\t},\n\t\tdisabled: null,\n\t\ticon: null,\n\t\ticonPosition: \"beginning\",\n\t\tlabel: null,\n\t\tshowLabel: true\n\t},\n\n\t_getCreateOptions: function() {\n\t\tvar disabled,\n\n\t\t\t// This is to support cases like in jQuery Mobile where the base widget does have\n\t\t\t// an implementation of _getCreateOptions\n\t\t\toptions = this._super() || {};\n\n\t\tthis.isInput = this.element.is( \"input\" );\n\n\t\tdisabled = this.element[ 0 ].disabled;\n\t\tif ( disabled != null ) {\n\t\t\toptions.disabled = disabled;\n\t\t}\n\n\t\tthis.originalLabel = this.isInput ? this.element.val() : this.element.html();\n\t\tif ( this.originalLabel ) {\n\t\t\toptions.label = this.originalLabel;\n\t\t}\n\n\t\treturn options;\n\t},\n\n\t_create: function() {\n\t\tif ( !this.option.showLabel & !this.options.icon ) {\n\t\t\tthis.options.showLabel = true;\n\t\t}\n\n\t\t// We have to check the option again here even though we did in _getCreateOptions,\n\t\t// because null may have been passed on init which would override what was set in\n\t\t// _getCreateOptions\n\t\tif ( this.options.disabled == null ) {\n\t\t\tthis.options.disabled = this.element[ 0 ].disabled || false;\n\t\t}\n\n\t\tthis.hasTitle = !!this.element.attr( \"title\" );\n\n\t\t// Check to see if the label needs to be set or if its already correct\n\t\tif ( this.options.label && this.options.label !== this.originalLabel ) {\n\t\t\tif ( this.isInput ) {\n\t\t\t\tthis.element.val( this.options.label );\n\t\t\t} else {\n\t\t\t\tthis.element.html( this.options.label );\n\t\t\t}\n\t\t}\n\t\tthis._addClass( \"ui-button\", \"ui-widget\" );\n\t\tthis._setOption( \"disabled\", this.options.disabled );\n\t\tthis._enhance();\n\n\t\tif ( this.element.is( \"a\" ) ) {\n\t\t\tthis._on( {\n\t\t\t\t\"keyup\": function( event ) {\n\t\t\t\t\tif ( event.keyCode === $.ui.keyCode.SPACE ) {\n\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t// Support: PhantomJS <= 1.9, IE 8 Only\n\t\t\t\t\t\t// If a native click is available use it so we actually cause navigation\n\t\t\t\t\t\t// otherwise just trigger a click event\n\t\t\t\t\t\tif ( this.element[ 0 ].click ) {\n\t\t\t\t\t\t\tthis.element[ 0 ].click();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.element.trigger( \"click\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\t},\n\n\t_enhance: function() {\n\t\tif ( !this.element.is( \"button\" ) ) {\n\t\t\tthis.element.attr( \"role\", \"button\" );\n\t\t}\n\n\t\tif ( this.options.icon ) {\n\t\t\tthis._updateIcon( \"icon\", this.options.icon );\n\t\t\tthis._updateTooltip();\n\t\t}\n\t},\n\n\t_updateTooltip: function() {\n\t\tthis.title = this.element.attr( \"title\" );\n\n\t\tif ( !this.options.showLabel && !this.title ) {\n\t\t\tthis.element.attr( \"title\", this.options.label );\n\t\t}\n\t},\n\n\t_updateIcon: function( option, value ) {\n\t\tvar icon = option !== \"iconPosition\",\n\t\t\tposition = icon ? this.options.iconPosition : value,\n\t\t\tdisplayBlock = position === \"top\" || position === \"bottom\";\n\n\t\t// Create icon\n\t\tif ( !this.icon ) {\n\t\t\tthis.icon = $( \"<span>\" );\n\n\t\t\tthis._addClass( this.icon, \"ui-button-icon\", \"ui-icon\" );\n\n\t\t\tif ( !this.options.showLabel ) {\n\t\t\t\tthis._addClass( \"ui-button-icon-only\" );\n\t\t\t}\n\t\t} else if ( icon ) {\n\n\t\t\t// If we are updating the icon remove the old icon class\n\t\t\tthis._removeClass( this.icon, null, this.options.icon );\n\t\t}\n\n\t\t// If we are updating the icon add the new icon class\n\t\tif ( icon ) {\n\t\t\tthis._addClass( this.icon, null, value );\n\t\t}\n\n\t\tthis._attachIcon( position );\n\n\t\t// If the icon is on top or bottom we need to add the ui-widget-icon-block class and remove\n\t\t// the iconSpace if there is one.\n\t\tif ( displayBlock ) {\n\t\t\tthis._addClass( this.icon, null, \"ui-widget-icon-block\" );\n\t\t\tif ( this.iconSpace ) {\n\t\t\t\tthis.iconSpace.remove();\n\t\t\t}\n\t\t} else {\n\n\t\t\t// Position is beginning or end so remove the ui-widget-icon-block class and add the\n\t\t\t// space if it does not exist\n\t\t\tif ( !this.iconSpace ) {\n\t\t\t\tthis.iconSpace = $( \"<span> </span>\" );\n\t\t\t\tthis._addClass( this.iconSpace, \"ui-button-icon-space\" );\n\t\t\t}\n\t\t\tthis._removeClass( this.icon, null, \"ui-wiget-icon-block\" );\n\t\t\tthis._attachIconSpace( position );\n\t\t}\n\t},\n\n\t_destroy: function() {\n\t\tthis.element.removeAttr( \"role\" );\n\n\t\tif ( this.icon ) {\n\t\t\tthis.icon.remove();\n\t\t}\n\t\tif ( this.iconSpace ) {\n\t\t\tthis.iconSpace.remove();\n\t\t}\n\t\tif ( !this.hasTitle ) {\n\t\t\tthis.element.removeAttr( \"title\" );\n\t\t}\n\t},\n\n\t_attachIconSpace: function( iconPosition ) {\n\t\tthis.icon[ /^(?:end|bottom)/.test( iconPosition ) ? \"before\" : \"after\" ]( this.iconSpace );\n\t},\n\n\t_attachIcon: function( iconPosition ) {\n\t\tthis.element[ /^(?:end|bottom)/.test( iconPosition ) ? \"append\" : \"prepend\" ]( this.icon );\n\t},\n\n\t_setOptions: function( options ) {\n\t\tvar newShowLabel = options.showLabel === undefined ?\n\t\t\t\tthis.options.showLabel :\n\t\t\t\toptions.showLabel,\n\t\t\tnewIcon = options.icon === undefined ? this.options.icon : options.icon;\n\n\t\tif ( !newShowLabel && !newIcon ) {\n\t\t\toptions.showLabel = true;\n\t\t}\n\t\tthis._super( options );\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tif ( key === \"icon\" ) {\n\t\t\tif ( value ) {\n\t\t\t\tthis._updateIcon( key, value );\n\t\t\t} else if ( this.icon ) {\n\t\t\t\tthis.icon.remove();\n\t\t\t\tif ( this.iconSpace ) {\n\t\t\t\t\tthis.iconSpace.remove();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( key === \"iconPosition\" ) {\n\t\t\tthis._updateIcon( key, value );\n\t\t}\n\n\t\t// Make sure we can't end up with a button that has neither text nor icon\n\t\tif ( key === \"showLabel\" ) {\n\t\t\t\tthis._toggleClass( \"ui-button-icon-only\", null, !value );\n\t\t\t\tthis._updateTooltip();\n\t\t}\n\n\t\tif ( key === \"label\" ) {\n\t\t\tif ( this.isInput ) {\n\t\t\t\tthis.element.val( value );\n\t\t\t} else {\n\n\t\t\t\t// If there is an icon, append it, else nothing then append the value\n\t\t\t\t// this avoids removal of the icon when setting label text\n\t\t\t\tthis.element.html( value );\n\t\t\t\tif ( this.icon ) {\n\t\t\t\t\tthis._attachIcon( this.options.iconPosition );\n\t\t\t\t\tthis._attachIconSpace( this.options.iconPosition );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis._super( key, value );\n\n\t\tif ( key === \"disabled\" ) {\n\t\t\tthis._toggleClass( null, \"ui-state-disabled\", value );\n\t\t\tthis.element[ 0 ].disabled = value;\n\t\t\tif ( value ) {\n\t\t\t\tthis.element.blur();\n\t\t\t}\n\t\t}\n\t},\n\n\trefresh: function() {\n\n\t\t// Make sure to only check disabled if its an element that supports this otherwise\n\t\t// check for the disabled class to determine state\n\t\tvar isDisabled = this.element.is( \"input, button\" ) ?\n\t\t\tthis.element[ 0 ].disabled : this.element.hasClass( \"ui-button-disabled\" );\n\n\t\tif ( isDisabled !== this.options.disabled ) {\n\t\t\tthis._setOptions( { disabled: isDisabled } );\n\t\t}\n\n\t\tthis._updateTooltip();\n\t}\n} );\n\n// DEPRECATED\nif ( $.uiBackCompat !== false ) {\n\n\t// Text and Icons options\n\t$.widget( \"ui.button\", $.ui.button, {\n\t\toptions: {\n\t\t\ttext: true,\n\t\t\ticons: {\n\t\t\t\tprimary: null,\n\t\t\t\tsecondary: null\n\t\t\t}\n\t\t},\n\n\t\t_create: function() {\n\t\t\tif ( this.options.showLabel && !this.options.text ) {\n\t\t\t\tthis.options.showLabel = this.options.text;\n\t\t\t}\n\t\t\tif ( !this.options.showLabel && this.options.text ) {\n\t\t\t\tthis.options.text = this.options.showLabel;\n\t\t\t}\n\t\t\tif ( !this.options.icon && ( this.options.icons.primary ||\n\t\t\t\t\tthis.options.icons.secondary ) ) {\n\t\t\t\tif ( this.options.icons.primary ) {\n\t\t\t\t\tthis.options.icon = this.options.icons.primary;\n\t\t\t\t} else {\n\t\t\t\t\tthis.options.icon = this.options.icons.secondary;\n\t\t\t\t\tthis.options.iconPosition = \"end\";\n\t\t\t\t}\n\t\t\t} else if ( this.options.icon ) {\n\t\t\t\tthis.options.icons.primary = this.options.icon;\n\t\t\t}\n\t\t\tthis._super();\n\t\t},\n\n\t\t_setOption: function( key, value ) {\n\t\t\tif ( key === \"text\" ) {\n\t\t\t\tthis._super( \"showLabel\", value );\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( key === \"showLabel\" ) {\n\t\t\t\tthis.options.text = value;\n\t\t\t}\n\t\t\tif ( key === \"icon\" ) {\n\t\t\t\tthis.options.icons.primary = value;\n\t\t\t}\n\t\t\tif ( key === \"icons\" ) {\n\t\t\t\tif ( value.primary ) {\n\t\t\t\t\tthis._super( \"icon\", value.primary );\n\t\t\t\t\tthis._super( \"iconPosition\", \"beginning\" );\n\t\t\t\t} else if ( value.secondary ) {\n\t\t\t\t\tthis._super( \"icon\", value.secondary );\n\t\t\t\t\tthis._super( \"iconPosition\", \"end\" );\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._superApply( arguments );\n\t\t}\n\t} );\n\n\t$.fn.button = ( function( orig ) {\n\t\treturn function() {\n\t\t\tif ( !this.length || ( this.length && this[ 0 ].tagName !== \"INPUT\" ) ||\n\t\t\t\t\t( this.length && this[ 0 ].tagName === \"INPUT\" && (\n\t\t\t\t\t\tthis.attr( \"type\" ) !== \"checkbox\" && this.attr( \"type\" ) !== \"radio\"\n\t\t\t\t\t) ) ) {\n\t\t\t\treturn orig.apply( this, arguments );\n\t\t\t}\n\t\t\tif ( !$.ui.checkboxradio ) {\n\t\t\t\t$.error( \"Checkboxradio widget missing\" );\n\t\t\t}\n\t\t\tif ( arguments.length === 0 ) {\n\t\t\t\treturn this.checkboxradio( {\n\t\t\t\t\t\"icon\": false\n\t\t\t\t} );\n\t\t\t}\n\t\t\treturn this.checkboxradio.apply( this, arguments );\n\t\t};\n\t} )( $.fn.button );\n\n\t$.fn.buttonset = function() {\n\t\tif ( !$.ui.controlgroup ) {\n\t\t\t$.error( \"Controlgroup widget missing\" );\n\t\t}\n\t\tif ( arguments[ 0 ] === \"option\" && arguments[ 1 ] === \"items\" && arguments[ 2 ] ) {\n\t\t\treturn this.controlgroup.apply( this,\n\t\t\t\t[ arguments[ 0 ], \"items.button\", arguments[ 2 ] ] );\n\t\t}\n\t\tif ( arguments[ 0 ] === \"option\" && arguments[ 1 ] === \"items\" ) {\n\t\t\treturn this.controlgroup.apply( this, [ arguments[ 0 ], \"items.button\" ] );\n\t\t}\n\t\tif ( typeof arguments[ 0 ] === \"object\" && arguments[ 0 ].items ) {\n\t\t\targuments[ 0 ].items = {\n\t\t\t\tbutton: arguments[ 0 ].items\n\t\t\t};\n\t\t}\n\t\treturn this.controlgroup.apply( this, arguments );\n\t};\n}\n\nvar widgetsButton = $.ui.button;\n\n\n// jscs:disable maximumLineLength\n/* jscs:disable requireCamelCaseOrUpperCaseIdentifiers */\n/*!\n * jQuery UI Datepicker 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Datepicker\n//>>group: Widgets\n//>>description: Displays a calendar from an input or inline for selecting dates.\n//>>docs: http://api.jqueryui.com/datepicker/\n//>>demos: http://jqueryui.com/datepicker/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/datepicker.css\n//>>css.theme: ../../themes/base/theme.css\n\n\n\n$.extend( $.ui, { datepicker: { version: \"1.12.1\" } } );\n\nvar datepicker_instActive;\n\nfunction datepicker_getZindex( elem ) {\n\tvar position, value;\n\twhile ( elem.length && elem[ 0 ] !== document ) {\n\n\t\t// Ignore z-index if position is set to a value where z-index is ignored by the browser\n\t\t// This makes behavior of this function consistent across browsers\n\t\t// WebKit always returns auto if the element is positioned\n\t\tposition = elem.css( \"position\" );\n\t\tif ( position === \"absolute\" || position === \"relative\" || position === \"fixed\" ) {\n\n\t\t\t// IE returns 0 when zIndex is not specified\n\t\t\t// other browsers return a string\n\t\t\t// we ignore the case of nested elements with an explicit value of 0\n\t\t\t// <div style=\"z-index: -10;\"><div style=\"z-index: 0;\"></div></div>\n\t\t\tvalue = parseInt( elem.css( \"zIndex\" ), 10 );\n\t\t\tif ( !isNaN( value ) && value !== 0 ) {\n\t\t\t\treturn value;\n\t\t\t}\n\t\t}\n\t\telem = elem.parent();\n\t}\n\n\treturn 0;\n}\n/* Date picker manager.\n   Use the singleton instance of this class, $.datepicker, to interact with the date picker.\n   Settings for (groups of) date pickers are maintained in an instance object,\n   allowing multiple different settings on the same page. */\n\nfunction Datepicker() {\n\tthis._curInst = null; // The current instance in use\n\tthis._keyEvent = false; // If the last event was a key event\n\tthis._disabledInputs = []; // List of date picker inputs that have been disabled\n\tthis._datepickerShowing = false; // True if the popup picker is showing , false if not\n\tthis._inDialog = false; // True if showing within a \"dialog\", false if not\n\tthis._mainDivId = \"ui-datepicker-div\"; // The ID of the main datepicker division\n\tthis._inlineClass = \"ui-datepicker-inline\"; // The name of the inline marker class\n\tthis._appendClass = \"ui-datepicker-append\"; // The name of the append marker class\n\tthis._triggerClass = \"ui-datepicker-trigger\"; // The name of the trigger marker class\n\tthis._dialogClass = \"ui-datepicker-dialog\"; // The name of the dialog marker class\n\tthis._disableClass = \"ui-datepicker-disabled\"; // The name of the disabled covering marker class\n\tthis._unselectableClass = \"ui-datepicker-unselectable\"; // The name of the unselectable cell marker class\n\tthis._currentClass = \"ui-datepicker-current-day\"; // The name of the current day marker class\n\tthis._dayOverClass = \"ui-datepicker-days-cell-over\"; // The name of the day hover marker class\n\tthis.regional = []; // Available regional settings, indexed by language code\n\tthis.regional[ \"\" ] = { // Default regional settings\n\t\tcloseText: \"Done\", // Display text for close link\n\t\tprevText: \"Prev\", // Display text for previous month link\n\t\tnextText: \"Next\", // Display text for next month link\n\t\tcurrentText: \"Today\", // Display text for current month link\n\t\tmonthNames: [ \"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\n\t\t\t\"July\",\"August\",\"September\",\"October\",\"November\",\"December\" ], // Names of months for drop-down and formatting\n\t\tmonthNamesShort: [ \"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\" ], // For formatting\n\t\tdayNames: [ \"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\" ], // For formatting\n\t\tdayNamesShort: [ \"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\" ], // For formatting\n\t\tdayNamesMin: [ \"Su\",\"Mo\",\"Tu\",\"We\",\"Th\",\"Fr\",\"Sa\" ], // Column headings for days starting at Sunday\n\t\tweekHeader: \"Wk\", // Column header for week of the year\n\t\tdateFormat: \"mm/dd/yy\", // See format options on parseDate\n\t\tfirstDay: 0, // The first day of the week, Sun = 0, Mon = 1, ...\n\t\tisRTL: false, // True if right-to-left language, false if left-to-right\n\t\tshowMonthAfterYear: false, // True if the year select precedes month, false for month then year\n\t\tyearSuffix: \"\" // Additional text to append to the year in the month headers\n\t};\n\tthis._defaults = { // Global defaults for all the date picker instances\n\t\tshowOn: \"focus\", // \"focus\" for popup on focus,\n\t\t\t// \"button\" for trigger button, or \"both\" for either\n\t\tshowAnim: \"fadeIn\", // Name of jQuery animation for popup\n\t\tshowOptions: {}, // Options for enhanced animations\n\t\tdefaultDate: null, // Used when field is blank: actual date,\n\t\t\t// +/-number for offset from today, null for today\n\t\tappendText: \"\", // Display text following the input box, e.g. showing the format\n\t\tbuttonText: \"...\", // Text for trigger button\n\t\tbuttonImage: \"\", // URL for trigger button image\n\t\tbuttonImageOnly: false, // True if the image appears alone, false if it appears on a button\n\t\thideIfNoPrevNext: false, // True to hide next/previous month links\n\t\t\t// if not applicable, false to just disable them\n\t\tnavigationAsDateFormat: false, // True if date formatting applied to prev/today/next links\n\t\tgotoCurrent: false, // True if today link goes back to current selection instead\n\t\tchangeMonth: false, // True if month can be selected directly, false if only prev/next\n\t\tchangeYear: false, // True if year can be selected directly, false if only prev/next\n\t\tyearRange: \"c-10:c+10\", // Range of years to display in drop-down,\n\t\t\t// either relative to today's year (-nn:+nn), relative to currently displayed year\n\t\t\t// (c-nn:c+nn), absolute (nnnn:nnnn), or a combination of the above (nnnn:-n)\n\t\tshowOtherMonths: false, // True to show dates in other months, false to leave blank\n\t\tselectOtherMonths: false, // True to allow selection of dates in other months, false for unselectable\n\t\tshowWeek: false, // True to show week of the year, false to not show it\n\t\tcalculateWeek: this.iso8601Week, // How to calculate the week of the year,\n\t\t\t// takes a Date and returns the number of the week for it\n\t\tshortYearCutoff: \"+10\", // Short year values < this are in the current century,\n\t\t\t// > this are in the previous century,\n\t\t\t// string value starting with \"+\" for current year + value\n\t\tminDate: null, // The earliest selectable date, or null for no limit\n\t\tmaxDate: null, // The latest selectable date, or null for no limit\n\t\tduration: \"fast\", // Duration of display/closure\n\t\tbeforeShowDay: null, // Function that takes a date and returns an array with\n\t\t\t// [0] = true if selectable, false if not, [1] = custom CSS class name(s) or \"\",\n\t\t\t// [2] = cell title (optional), e.g. $.datepicker.noWeekends\n\t\tbeforeShow: null, // Function that takes an input field and\n\t\t\t// returns a set of custom settings for the date picker\n\t\tonSelect: null, // Define a callback function when a date is selected\n\t\tonChangeMonthYear: null, // Define a callback function when the month or year is changed\n\t\tonClose: null, // Define a callback function when the datepicker is closed\n\t\tnumberOfMonths: 1, // Number of months to show at a time\n\t\tshowCurrentAtPos: 0, // The position in multipe months at which to show the current month (starting at 0)\n\t\tstepMonths: 1, // Number of months to step back/forward\n\t\tstepBigMonths: 12, // Number of months to step back/forward for the big links\n\t\taltField: \"\", // Selector for an alternate field to store selected dates into\n\t\taltFormat: \"\", // The date format to use for the alternate field\n\t\tconstrainInput: true, // The input is constrained by the current date format\n\t\tshowButtonPanel: false, // True to show button panel, false to not show it\n\t\tautoSize: false, // True to size the input for the date format, false to leave as is\n\t\tdisabled: false // The initial disabled state\n\t};\n\t$.extend( this._defaults, this.regional[ \"\" ] );\n\tthis.regional.en = $.extend( true, {}, this.regional[ \"\" ] );\n\tthis.regional[ \"en-US\" ] = $.extend( true, {}, this.regional.en );\n\tthis.dpDiv = datepicker_bindHover( $( \"<div id='\" + this._mainDivId + \"' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>\" ) );\n}\n\n$.extend( Datepicker.prototype, {\n\t/* Class name added to elements to indicate already configured with a date picker. */\n\tmarkerClassName: \"hasDatepicker\",\n\n\t//Keep track of the maximum number of rows displayed (see #7043)\n\tmaxRows: 4,\n\n\t// TODO rename to \"widget\" when switching to widget factory\n\t_widgetDatepicker: function() {\n\t\treturn this.dpDiv;\n\t},\n\n\t/* Override the default settings for all instances of the date picker.\n\t * @param  settings  object - the new settings to use as defaults (anonymous object)\n\t * @return the manager object\n\t */\n\tsetDefaults: function( settings ) {\n\t\tdatepicker_extendRemove( this._defaults, settings || {} );\n\t\treturn this;\n\t},\n\n\t/* Attach the date picker to a jQuery selection.\n\t * @param  target\telement - the target input field or division or span\n\t * @param  settings  object - the new settings to use for this date picker instance (anonymous)\n\t */\n\t_attachDatepicker: function( target, settings ) {\n\t\tvar nodeName, inline, inst;\n\t\tnodeName = target.nodeName.toLowerCase();\n\t\tinline = ( nodeName === \"div\" || nodeName === \"span\" );\n\t\tif ( !target.id ) {\n\t\t\tthis.uuid += 1;\n\t\t\ttarget.id = \"dp\" + this.uuid;\n\t\t}\n\t\tinst = this._newInst( $( target ), inline );\n\t\tinst.settings = $.extend( {}, settings || {} );\n\t\tif ( nodeName === \"input\" ) {\n\t\t\tthis._connectDatepicker( target, inst );\n\t\t} else if ( inline ) {\n\t\t\tthis._inlineDatepicker( target, inst );\n\t\t}\n\t},\n\n\t/* Create a new instance object. */\n\t_newInst: function( target, inline ) {\n\t\tvar id = target[ 0 ].id.replace( /([^A-Za-z0-9_\\-])/g, \"\\\\\\\\$1\" ); // escape jQuery meta chars\n\t\treturn { id: id, input: target, // associated target\n\t\t\tselectedDay: 0, selectedMonth: 0, selectedYear: 0, // current selection\n\t\t\tdrawMonth: 0, drawYear: 0, // month being drawn\n\t\t\tinline: inline, // is datepicker inline or not\n\t\t\tdpDiv: ( !inline ? this.dpDiv : // presentation div\n\t\t\tdatepicker_bindHover( $( \"<div class='\" + this._inlineClass + \" ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>\" ) ) ) };\n\t},\n\n\t/* Attach the date picker to an input field. */\n\t_connectDatepicker: function( target, inst ) {\n\t\tvar input = $( target );\n\t\tinst.append = $( [] );\n\t\tinst.trigger = $( [] );\n\t\tif ( input.hasClass( this.markerClassName ) ) {\n\t\t\treturn;\n\t\t}\n\t\tthis._attachments( input, inst );\n\t\tinput.addClass( this.markerClassName ).on( \"keydown\", this._doKeyDown ).\n\t\t\ton( \"keypress\", this._doKeyPress ).on( \"keyup\", this._doKeyUp );\n\t\tthis._autoSize( inst );\n\t\t$.data( target, \"datepicker\", inst );\n\n\t\t//If disabled option is true, disable the datepicker once it has been attached to the input (see ticket #5665)\n\t\tif ( inst.settings.disabled ) {\n\t\t\tthis._disableDatepicker( target );\n\t\t}\n\t},\n\n\t/* Make attachments based on settings. */\n\t_attachments: function( input, inst ) {\n\t\tvar showOn, buttonText, buttonImage,\n\t\t\tappendText = this._get( inst, \"appendText\" ),\n\t\t\tisRTL = this._get( inst, \"isRTL\" );\n\n\t\tif ( inst.append ) {\n\t\t\tinst.append.remove();\n\t\t}\n\t\tif ( appendText ) {\n\t\t\tinst.append = $( \"<span class='\" + this._appendClass + \"'>\" + appendText + \"</span>\" );\n\t\t\tinput[ isRTL ? \"before\" : \"after\" ]( inst.append );\n\t\t}\n\n\t\tinput.off( \"focus\", this._showDatepicker );\n\n\t\tif ( inst.trigger ) {\n\t\t\tinst.trigger.remove();\n\t\t}\n\n\t\tshowOn = this._get( inst, \"showOn\" );\n\t\tif ( showOn === \"focus\" || showOn === \"both\" ) { // pop-up date picker when in the marked field\n\t\t\tinput.on( \"focus\", this._showDatepicker );\n\t\t}\n\t\tif ( showOn === \"button\" || showOn === \"both\" ) { // pop-up date picker when button clicked\n\t\t\tbuttonText = this._get( inst, \"buttonText\" );\n\t\t\tbuttonImage = this._get( inst, \"buttonImage\" );\n\t\t\tinst.trigger = $( this._get( inst, \"buttonImageOnly\" ) ?\n\t\t\t\t$( \"<img/>\" ).addClass( this._triggerClass ).\n\t\t\t\t\tattr( { src: buttonImage, alt: buttonText, title: buttonText } ) :\n\t\t\t\t$( \"<button type='button'></button>\" ).addClass( this._triggerClass ).\n\t\t\t\t\thtml( !buttonImage ? buttonText : $( \"<img/>\" ).attr(\n\t\t\t\t\t{ src:buttonImage, alt:buttonText, title:buttonText } ) ) );\n\t\t\tinput[ isRTL ? \"before\" : \"after\" ]( inst.trigger );\n\t\t\tinst.trigger.on( \"click\", function() {\n\t\t\t\tif ( $.datepicker._datepickerShowing && $.datepicker._lastInput === input[ 0 ] ) {\n\t\t\t\t\t$.datepicker._hideDatepicker();\n\t\t\t\t} else if ( $.datepicker._datepickerShowing && $.datepicker._lastInput !== input[ 0 ] ) {\n\t\t\t\t\t$.datepicker._hideDatepicker();\n\t\t\t\t\t$.datepicker._showDatepicker( input[ 0 ] );\n\t\t\t\t} else {\n\t\t\t\t\t$.datepicker._showDatepicker( input[ 0 ] );\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t} );\n\t\t}\n\t},\n\n\t/* Apply the maximum length for the date format. */\n\t_autoSize: function( inst ) {\n\t\tif ( this._get( inst, \"autoSize\" ) && !inst.inline ) {\n\t\t\tvar findMax, max, maxI, i,\n\t\t\t\tdate = new Date( 2009, 12 - 1, 20 ), // Ensure double digits\n\t\t\t\tdateFormat = this._get( inst, \"dateFormat\" );\n\n\t\t\tif ( dateFormat.match( /[DM]/ ) ) {\n\t\t\t\tfindMax = function( names ) {\n\t\t\t\t\tmax = 0;\n\t\t\t\t\tmaxI = 0;\n\t\t\t\t\tfor ( i = 0; i < names.length; i++ ) {\n\t\t\t\t\t\tif ( names[ i ].length > max ) {\n\t\t\t\t\t\t\tmax = names[ i ].length;\n\t\t\t\t\t\t\tmaxI = i;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn maxI;\n\t\t\t\t};\n\t\t\t\tdate.setMonth( findMax( this._get( inst, ( dateFormat.match( /MM/ ) ?\n\t\t\t\t\t\"monthNames\" : \"monthNamesShort\" ) ) ) );\n\t\t\t\tdate.setDate( findMax( this._get( inst, ( dateFormat.match( /DD/ ) ?\n\t\t\t\t\t\"dayNames\" : \"dayNamesShort\" ) ) ) + 20 - date.getDay() );\n\t\t\t}\n\t\t\tinst.input.attr( \"size\", this._formatDate( inst, date ).length );\n\t\t}\n\t},\n\n\t/* Attach an inline date picker to a div. */\n\t_inlineDatepicker: function( target, inst ) {\n\t\tvar divSpan = $( target );\n\t\tif ( divSpan.hasClass( this.markerClassName ) ) {\n\t\t\treturn;\n\t\t}\n\t\tdivSpan.addClass( this.markerClassName ).append( inst.dpDiv );\n\t\t$.data( target, \"datepicker\", inst );\n\t\tthis._setDate( inst, this._getDefaultDate( inst ), true );\n\t\tthis._updateDatepicker( inst );\n\t\tthis._updateAlternate( inst );\n\n\t\t//If disabled option is true, disable the datepicker before showing it (see ticket #5665)\n\t\tif ( inst.settings.disabled ) {\n\t\t\tthis._disableDatepicker( target );\n\t\t}\n\n\t\t// Set display:block in place of inst.dpDiv.show() which won't work on disconnected elements\n\t\t// http://bugs.jqueryui.com/ticket/7552 - A Datepicker created on a detached div has zero height\n\t\tinst.dpDiv.css( \"display\", \"block\" );\n\t},\n\n\t/* Pop-up the date picker in a \"dialog\" box.\n\t * @param  input element - ignored\n\t * @param  date\tstring or Date - the initial date to display\n\t * @param  onSelect  function - the function to call when a date is selected\n\t * @param  settings  object - update the dialog date picker instance's settings (anonymous object)\n\t * @param  pos int[2] - coordinates for the dialog's position within the screen or\n\t *\t\t\t\t\tevent - with x/y coordinates or\n\t *\t\t\t\t\tleave empty for default (screen centre)\n\t * @return the manager object\n\t */\n\t_dialogDatepicker: function( input, date, onSelect, settings, pos ) {\n\t\tvar id, browserWidth, browserHeight, scrollX, scrollY,\n\t\t\tinst = this._dialogInst; // internal instance\n\n\t\tif ( !inst ) {\n\t\t\tthis.uuid += 1;\n\t\t\tid = \"dp\" + this.uuid;\n\t\t\tthis._dialogInput = $( \"<input type='text' id='\" + id +\n\t\t\t\t\"' style='position: absolute; top: -100px; width: 0px;'/>\" );\n\t\t\tthis._dialogInput.on( \"keydown\", this._doKeyDown );\n\t\t\t$( \"body\" ).append( this._dialogInput );\n\t\t\tinst = this._dialogInst = this._newInst( this._dialogInput, false );\n\t\t\tinst.settings = {};\n\t\t\t$.data( this._dialogInput[ 0 ], \"datepicker\", inst );\n\t\t}\n\t\tdatepicker_extendRemove( inst.settings, settings || {} );\n\t\tdate = ( date && date.constructor === Date ? this._formatDate( inst, date ) : date );\n\t\tthis._dialogInput.val( date );\n\n\t\tthis._pos = ( pos ? ( pos.length ? pos : [ pos.pageX, pos.pageY ] ) : null );\n\t\tif ( !this._pos ) {\n\t\t\tbrowserWidth = document.documentElement.clientWidth;\n\t\t\tbrowserHeight = document.documentElement.clientHeight;\n\t\t\tscrollX = document.documentElement.scrollLeft || document.body.scrollLeft;\n\t\t\tscrollY = document.documentElement.scrollTop || document.body.scrollTop;\n\t\t\tthis._pos = // should use actual width/height below\n\t\t\t\t[ ( browserWidth / 2 ) - 100 + scrollX, ( browserHeight / 2 ) - 150 + scrollY ];\n\t\t}\n\n\t\t// Move input on screen for focus, but hidden behind dialog\n\t\tthis._dialogInput.css( \"left\", ( this._pos[ 0 ] + 20 ) + \"px\" ).css( \"top\", this._pos[ 1 ] + \"px\" );\n\t\tinst.settings.onSelect = onSelect;\n\t\tthis._inDialog = true;\n\t\tthis.dpDiv.addClass( this._dialogClass );\n\t\tthis._showDatepicker( this._dialogInput[ 0 ] );\n\t\tif ( $.blockUI ) {\n\t\t\t$.blockUI( this.dpDiv );\n\t\t}\n\t\t$.data( this._dialogInput[ 0 ], \"datepicker\", inst );\n\t\treturn this;\n\t},\n\n\t/* Detach a datepicker from its control.\n\t * @param  target\telement - the target input field or division or span\n\t */\n\t_destroyDatepicker: function( target ) {\n\t\tvar nodeName,\n\t\t\t$target = $( target ),\n\t\t\tinst = $.data( target, \"datepicker\" );\n\n\t\tif ( !$target.hasClass( this.markerClassName ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tnodeName = target.nodeName.toLowerCase();\n\t\t$.removeData( target, \"datepicker\" );\n\t\tif ( nodeName === \"input\" ) {\n\t\t\tinst.append.remove();\n\t\t\tinst.trigger.remove();\n\t\t\t$target.removeClass( this.markerClassName ).\n\t\t\t\toff( \"focus\", this._showDatepicker ).\n\t\t\t\toff( \"keydown\", this._doKeyDown ).\n\t\t\t\toff( \"keypress\", this._doKeyPress ).\n\t\t\t\toff( \"keyup\", this._doKeyUp );\n\t\t} else if ( nodeName === \"div\" || nodeName === \"span\" ) {\n\t\t\t$target.removeClass( this.markerClassName ).empty();\n\t\t}\n\n\t\tif ( datepicker_instActive === inst ) {\n\t\t\tdatepicker_instActive = null;\n\t\t}\n\t},\n\n\t/* Enable the date picker to a jQuery selection.\n\t * @param  target\telement - the target input field or division or span\n\t */\n\t_enableDatepicker: function( target ) {\n\t\tvar nodeName, inline,\n\t\t\t$target = $( target ),\n\t\t\tinst = $.data( target, \"datepicker\" );\n\n\t\tif ( !$target.hasClass( this.markerClassName ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tnodeName = target.nodeName.toLowerCase();\n\t\tif ( nodeName === \"input\" ) {\n\t\t\ttarget.disabled = false;\n\t\t\tinst.trigger.filter( \"button\" ).\n\t\t\t\teach( function() { this.disabled = false; } ).end().\n\t\t\t\tfilter( \"img\" ).css( { opacity: \"1.0\", cursor: \"\" } );\n\t\t} else if ( nodeName === \"div\" || nodeName === \"span\" ) {\n\t\t\tinline = $target.children( \".\" + this._inlineClass );\n\t\t\tinline.children().removeClass( \"ui-state-disabled\" );\n\t\t\tinline.find( \"select.ui-datepicker-month, select.ui-datepicker-year\" ).\n\t\t\t\tprop( \"disabled\", false );\n\t\t}\n\t\tthis._disabledInputs = $.map( this._disabledInputs,\n\t\t\tfunction( value ) { return ( value === target ? null : value ); } ); // delete entry\n\t},\n\n\t/* Disable the date picker to a jQuery selection.\n\t * @param  target\telement - the target input field or division or span\n\t */\n\t_disableDatepicker: function( target ) {\n\t\tvar nodeName, inline,\n\t\t\t$target = $( target ),\n\t\t\tinst = $.data( target, \"datepicker\" );\n\n\t\tif ( !$target.hasClass( this.markerClassName ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tnodeName = target.nodeName.toLowerCase();\n\t\tif ( nodeName === \"input\" ) {\n\t\t\ttarget.disabled = true;\n\t\t\tinst.trigger.filter( \"button\" ).\n\t\t\t\teach( function() { this.disabled = true; } ).end().\n\t\t\t\tfilter( \"img\" ).css( { opacity: \"0.5\", cursor: \"default\" } );\n\t\t} else if ( nodeName === \"div\" || nodeName === \"span\" ) {\n\t\t\tinline = $target.children( \".\" + this._inlineClass );\n\t\t\tinline.children().addClass( \"ui-state-disabled\" );\n\t\t\tinline.find( \"select.ui-datepicker-month, select.ui-datepicker-year\" ).\n\t\t\t\tprop( \"disabled\", true );\n\t\t}\n\t\tthis._disabledInputs = $.map( this._disabledInputs,\n\t\t\tfunction( value ) { return ( value === target ? null : value ); } ); // delete entry\n\t\tthis._disabledInputs[ this._disabledInputs.length ] = target;\n\t},\n\n\t/* Is the first field in a jQuery collection disabled as a datepicker?\n\t * @param  target\telement - the target input field or division or span\n\t * @return boolean - true if disabled, false if enabled\n\t */\n\t_isDisabledDatepicker: function( target ) {\n\t\tif ( !target ) {\n\t\t\treturn false;\n\t\t}\n\t\tfor ( var i = 0; i < this._disabledInputs.length; i++ ) {\n\t\t\tif ( this._disabledInputs[ i ] === target ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t},\n\n\t/* Retrieve the instance data for the target control.\n\t * @param  target  element - the target input field or division or span\n\t * @return  object - the associated instance data\n\t * @throws  error if a jQuery problem getting data\n\t */\n\t_getInst: function( target ) {\n\t\ttry {\n\t\t\treturn $.data( target, \"datepicker\" );\n\t\t}\n\t\tcatch ( err ) {\n\t\t\tthrow \"Missing instance data for this datepicker\";\n\t\t}\n\t},\n\n\t/* Update or retrieve the settings for a date picker attached to an input field or division.\n\t * @param  target  element - the target input field or division or span\n\t * @param  name\tobject - the new settings to update or\n\t *\t\t\t\tstring - the name of the setting to change or retrieve,\n\t *\t\t\t\twhen retrieving also \"all\" for all instance settings or\n\t *\t\t\t\t\"defaults\" for all global defaults\n\t * @param  value   any - the new value for the setting\n\t *\t\t\t\t(omit if above is an object or to retrieve a value)\n\t */\n\t_optionDatepicker: function( target, name, value ) {\n\t\tvar settings, date, minDate, maxDate,\n\t\t\tinst = this._getInst( target );\n\n\t\tif ( arguments.length === 2 && typeof name === \"string\" ) {\n\t\t\treturn ( name === \"defaults\" ? $.extend( {}, $.datepicker._defaults ) :\n\t\t\t\t( inst ? ( name === \"all\" ? $.extend( {}, inst.settings ) :\n\t\t\t\tthis._get( inst, name ) ) : null ) );\n\t\t}\n\n\t\tsettings = name || {};\n\t\tif ( typeof name === \"string\" ) {\n\t\t\tsettings = {};\n\t\t\tsettings[ name ] = value;\n\t\t}\n\n\t\tif ( inst ) {\n\t\t\tif ( this._curInst === inst ) {\n\t\t\t\tthis._hideDatepicker();\n\t\t\t}\n\n\t\t\tdate = this._getDateDatepicker( target, true );\n\t\t\tminDate = this._getMinMaxDate( inst, \"min\" );\n\t\t\tmaxDate = this._getMinMaxDate( inst, \"max\" );\n\t\t\tdatepicker_extendRemove( inst.settings, settings );\n\n\t\t\t// reformat the old minDate/maxDate values if dateFormat changes and a new minDate/maxDate isn't provided\n\t\t\tif ( minDate !== null && settings.dateFormat !== undefined && settings.minDate === undefined ) {\n\t\t\t\tinst.settings.minDate = this._formatDate( inst, minDate );\n\t\t\t}\n\t\t\tif ( maxDate !== null && settings.dateFormat !== undefined && settings.maxDate === undefined ) {\n\t\t\t\tinst.settings.maxDate = this._formatDate( inst, maxDate );\n\t\t\t}\n\t\t\tif ( \"disabled\" in settings ) {\n\t\t\t\tif ( settings.disabled ) {\n\t\t\t\t\tthis._disableDatepicker( target );\n\t\t\t\t} else {\n\t\t\t\t\tthis._enableDatepicker( target );\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._attachments( $( target ), inst );\n\t\t\tthis._autoSize( inst );\n\t\t\tthis._setDate( inst, date );\n\t\t\tthis._updateAlternate( inst );\n\t\t\tthis._updateDatepicker( inst );\n\t\t}\n\t},\n\n\t// Change method deprecated\n\t_changeDatepicker: function( target, name, value ) {\n\t\tthis._optionDatepicker( target, name, value );\n\t},\n\n\t/* Redraw the date picker attached to an input field or division.\n\t * @param  target  element - the target input field or division or span\n\t */\n\t_refreshDatepicker: function( target ) {\n\t\tvar inst = this._getInst( target );\n\t\tif ( inst ) {\n\t\t\tthis._updateDatepicker( inst );\n\t\t}\n\t},\n\n\t/* Set the dates for a jQuery selection.\n\t * @param  target element - the target input field or division or span\n\t * @param  date\tDate - the new date\n\t */\n\t_setDateDatepicker: function( target, date ) {\n\t\tvar inst = this._getInst( target );\n\t\tif ( inst ) {\n\t\t\tthis._setDate( inst, date );\n\t\t\tthis._updateDatepicker( inst );\n\t\t\tthis._updateAlternate( inst );\n\t\t}\n\t},\n\n\t/* Get the date(s) for the first entry in a jQuery selection.\n\t * @param  target element - the target input field or division or span\n\t * @param  noDefault boolean - true if no default date is to be used\n\t * @return Date - the current date\n\t */\n\t_getDateDatepicker: function( target, noDefault ) {\n\t\tvar inst = this._getInst( target );\n\t\tif ( inst && !inst.inline ) {\n\t\t\tthis._setDateFromField( inst, noDefault );\n\t\t}\n\t\treturn ( inst ? this._getDate( inst ) : null );\n\t},\n\n\t/* Handle keystrokes. */\n\t_doKeyDown: function( event ) {\n\t\tvar onSelect, dateStr, sel,\n\t\t\tinst = $.datepicker._getInst( event.target ),\n\t\t\thandled = true,\n\t\t\tisRTL = inst.dpDiv.is( \".ui-datepicker-rtl\" );\n\n\t\tinst._keyEvent = true;\n\t\tif ( $.datepicker._datepickerShowing ) {\n\t\t\tswitch ( event.keyCode ) {\n\t\t\t\tcase 9: $.datepicker._hideDatepicker();\n\t\t\t\t\t\thandled = false;\n\t\t\t\t\t\tbreak; // hide on tab out\n\t\t\t\tcase 13: sel = $( \"td.\" + $.datepicker._dayOverClass + \":not(.\" +\n\t\t\t\t\t\t\t\t\t$.datepicker._currentClass + \")\", inst.dpDiv );\n\t\t\t\t\t\tif ( sel[ 0 ] ) {\n\t\t\t\t\t\t\t$.datepicker._selectDay( event.target, inst.selectedMonth, inst.selectedYear, sel[ 0 ] );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tonSelect = $.datepicker._get( inst, \"onSelect\" );\n\t\t\t\t\t\tif ( onSelect ) {\n\t\t\t\t\t\t\tdateStr = $.datepicker._formatDate( inst );\n\n\t\t\t\t\t\t\t// Trigger custom callback\n\t\t\t\t\t\t\tonSelect.apply( ( inst.input ? inst.input[ 0 ] : null ), [ dateStr, inst ] );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t$.datepicker._hideDatepicker();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn false; // don't submit the form\n\t\t\t\tcase 27: $.datepicker._hideDatepicker();\n\t\t\t\t\t\tbreak; // hide on escape\n\t\t\t\tcase 33: $.datepicker._adjustDate( event.target, ( event.ctrlKey ?\n\t\t\t\t\t\t\t-$.datepicker._get( inst, \"stepBigMonths\" ) :\n\t\t\t\t\t\t\t-$.datepicker._get( inst, \"stepMonths\" ) ), \"M\" );\n\t\t\t\t\t\tbreak; // previous month/year on page up/+ ctrl\n\t\t\t\tcase 34: $.datepicker._adjustDate( event.target, ( event.ctrlKey ?\n\t\t\t\t\t\t\t+$.datepicker._get( inst, \"stepBigMonths\" ) :\n\t\t\t\t\t\t\t+$.datepicker._get( inst, \"stepMonths\" ) ), \"M\" );\n\t\t\t\t\t\tbreak; // next month/year on page down/+ ctrl\n\t\t\t\tcase 35: if ( event.ctrlKey || event.metaKey ) {\n\t\t\t\t\t\t\t$.datepicker._clearDate( event.target );\n\t\t\t\t\t\t}\n\t\t\t\t\t\thandled = event.ctrlKey || event.metaKey;\n\t\t\t\t\t\tbreak; // clear on ctrl or command +end\n\t\t\t\tcase 36: if ( event.ctrlKey || event.metaKey ) {\n\t\t\t\t\t\t\t$.datepicker._gotoToday( event.target );\n\t\t\t\t\t\t}\n\t\t\t\t\t\thandled = event.ctrlKey || event.metaKey;\n\t\t\t\t\t\tbreak; // current on ctrl or command +home\n\t\t\t\tcase 37: if ( event.ctrlKey || event.metaKey ) {\n\t\t\t\t\t\t\t$.datepicker._adjustDate( event.target, ( isRTL ? +1 : -1 ), \"D\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t\thandled = event.ctrlKey || event.metaKey;\n\n\t\t\t\t\t\t// -1 day on ctrl or command +left\n\t\t\t\t\t\tif ( event.originalEvent.altKey ) {\n\t\t\t\t\t\t\t$.datepicker._adjustDate( event.target, ( event.ctrlKey ?\n\t\t\t\t\t\t\t\t-$.datepicker._get( inst, \"stepBigMonths\" ) :\n\t\t\t\t\t\t\t\t-$.datepicker._get( inst, \"stepMonths\" ) ), \"M\" );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// next month/year on alt +left on Mac\n\t\t\t\t\t\tbreak;\n\t\t\t\tcase 38: if ( event.ctrlKey || event.metaKey ) {\n\t\t\t\t\t\t\t$.datepicker._adjustDate( event.target, -7, \"D\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t\thandled = event.ctrlKey || event.metaKey;\n\t\t\t\t\t\tbreak; // -1 week on ctrl or command +up\n\t\t\t\tcase 39: if ( event.ctrlKey || event.metaKey ) {\n\t\t\t\t\t\t\t$.datepicker._adjustDate( event.target, ( isRTL ? -1 : +1 ), \"D\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t\thandled = event.ctrlKey || event.metaKey;\n\n\t\t\t\t\t\t// +1 day on ctrl or command +right\n\t\t\t\t\t\tif ( event.originalEvent.altKey ) {\n\t\t\t\t\t\t\t$.datepicker._adjustDate( event.target, ( event.ctrlKey ?\n\t\t\t\t\t\t\t\t+$.datepicker._get( inst, \"stepBigMonths\" ) :\n\t\t\t\t\t\t\t\t+$.datepicker._get( inst, \"stepMonths\" ) ), \"M\" );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// next month/year on alt +right\n\t\t\t\t\t\tbreak;\n\t\t\t\tcase 40: if ( event.ctrlKey || event.metaKey ) {\n\t\t\t\t\t\t\t$.datepicker._adjustDate( event.target, +7, \"D\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t\thandled = event.ctrlKey || event.metaKey;\n\t\t\t\t\t\tbreak; // +1 week on ctrl or command +down\n\t\t\t\tdefault: handled = false;\n\t\t\t}\n\t\t} else if ( event.keyCode === 36 && event.ctrlKey ) { // display the date picker on ctrl+home\n\t\t\t$.datepicker._showDatepicker( this );\n\t\t} else {\n\t\t\thandled = false;\n\t\t}\n\n\t\tif ( handled ) {\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t}\n\t},\n\n\t/* Filter entered characters - based on date format. */\n\t_doKeyPress: function( event ) {\n\t\tvar chars, chr,\n\t\t\tinst = $.datepicker._getInst( event.target );\n\n\t\tif ( $.datepicker._get( inst, \"constrainInput\" ) ) {\n\t\t\tchars = $.datepicker._possibleChars( $.datepicker._get( inst, \"dateFormat\" ) );\n\t\t\tchr = String.fromCharCode( event.charCode == null ? event.keyCode : event.charCode );\n\t\t\treturn event.ctrlKey || event.metaKey || ( chr < \" \" || !chars || chars.indexOf( chr ) > -1 );\n\t\t}\n\t},\n\n\t/* Synchronise manual entry and field/alternate field. */\n\t_doKeyUp: function( event ) {\n\t\tvar date,\n\t\t\tinst = $.datepicker._getInst( event.target );\n\n\t\tif ( inst.input.val() !== inst.lastVal ) {\n\t\t\ttry {\n\t\t\t\tdate = $.datepicker.parseDate( $.datepicker._get( inst, \"dateFormat\" ),\n\t\t\t\t\t( inst.input ? inst.input.val() : null ),\n\t\t\t\t\t$.datepicker._getFormatConfig( inst ) );\n\n\t\t\t\tif ( date ) { // only if valid\n\t\t\t\t\t$.datepicker._setDateFromField( inst );\n\t\t\t\t\t$.datepicker._updateAlternate( inst );\n\t\t\t\t\t$.datepicker._updateDatepicker( inst );\n\t\t\t\t}\n\t\t\t}\n\t\t\tcatch ( err ) {\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t},\n\n\t/* Pop-up the date picker for a given input field.\n\t * If false returned from beforeShow event handler do not show.\n\t * @param  input  element - the input field attached to the date picker or\n\t *\t\t\t\t\tevent - if triggered by focus\n\t */\n\t_showDatepicker: function( input ) {\n\t\tinput = input.target || input;\n\t\tif ( input.nodeName.toLowerCase() !== \"input\" ) { // find from button/image trigger\n\t\t\tinput = $( \"input\", input.parentNode )[ 0 ];\n\t\t}\n\n\t\tif ( $.datepicker._isDisabledDatepicker( input ) || $.datepicker._lastInput === input ) { // already here\n\t\t\treturn;\n\t\t}\n\n\t\tvar inst, beforeShow, beforeShowSettings, isFixed,\n\t\t\toffset, showAnim, duration;\n\n\t\tinst = $.datepicker._getInst( input );\n\t\tif ( $.datepicker._curInst && $.datepicker._curInst !== inst ) {\n\t\t\t$.datepicker._curInst.dpDiv.stop( true, true );\n\t\t\tif ( inst && $.datepicker._datepickerShowing ) {\n\t\t\t\t$.datepicker._hideDatepicker( $.datepicker._curInst.input[ 0 ] );\n\t\t\t}\n\t\t}\n\n\t\tbeforeShow = $.datepicker._get( inst, \"beforeShow\" );\n\t\tbeforeShowSettings = beforeShow ? beforeShow.apply( input, [ input, inst ] ) : {};\n\t\tif ( beforeShowSettings === false ) {\n\t\t\treturn;\n\t\t}\n\t\tdatepicker_extendRemove( inst.settings, beforeShowSettings );\n\n\t\tinst.lastVal = null;\n\t\t$.datepicker._lastInput = input;\n\t\t$.datepicker._setDateFromField( inst );\n\n\t\tif ( $.datepicker._inDialog ) { // hide cursor\n\t\t\tinput.value = \"\";\n\t\t}\n\t\tif ( !$.datepicker._pos ) { // position below input\n\t\t\t$.datepicker._pos = $.datepicker._findPos( input );\n\t\t\t$.datepicker._pos[ 1 ] += input.offsetHeight; // add the height\n\t\t}\n\n\t\tisFixed = false;\n\t\t$( input ).parents().each( function() {\n\t\t\tisFixed |= $( this ).css( \"position\" ) === \"fixed\";\n\t\t\treturn !isFixed;\n\t\t} );\n\n\t\toffset = { left: $.datepicker._pos[ 0 ], top: $.datepicker._pos[ 1 ] };\n\t\t$.datepicker._pos = null;\n\n\t\t//to avoid flashes on Firefox\n\t\tinst.dpDiv.empty();\n\n\t\t// determine sizing offscreen\n\t\tinst.dpDiv.css( { position: \"absolute\", display: \"block\", top: \"-1000px\" } );\n\t\t$.datepicker._updateDatepicker( inst );\n\n\t\t// fix width for dynamic number of date pickers\n\t\t// and adjust position before showing\n\t\toffset = $.datepicker._checkOffset( inst, offset, isFixed );\n\t\tinst.dpDiv.css( { position: ( $.datepicker._inDialog && $.blockUI ?\n\t\t\t\"static\" : ( isFixed ? \"fixed\" : \"absolute\" ) ), display: \"none\",\n\t\t\tleft: offset.left + \"px\", top: offset.top + \"px\" } );\n\n\t\tif ( !inst.inline ) {\n\t\t\tshowAnim = $.datepicker._get( inst, \"showAnim\" );\n\t\t\tduration = $.datepicker._get( inst, \"duration\" );\n\t\t\tinst.dpDiv.css( \"z-index\", datepicker_getZindex( $( input ) ) + 1 );\n\t\t\t$.datepicker._datepickerShowing = true;\n\n\t\t\tif ( $.effects && $.effects.effect[ showAnim ] ) {\n\t\t\t\tinst.dpDiv.show( showAnim, $.datepicker._get( inst, \"showOptions\" ), duration );\n\t\t\t} else {\n\t\t\t\tinst.dpDiv[ showAnim || \"show\" ]( showAnim ? duration : null );\n\t\t\t}\n\n\t\t\tif ( $.datepicker._shouldFocusInput( inst ) ) {\n\t\t\t\tinst.input.trigger( \"focus\" );\n\t\t\t}\n\n\t\t\t$.datepicker._curInst = inst;\n\t\t}\n\t},\n\n\t/* Generate the date picker content. */\n\t_updateDatepicker: function( inst ) {\n\t\tthis.maxRows = 4; //Reset the max number of rows being displayed (see #7043)\n\t\tdatepicker_instActive = inst; // for delegate hover events\n\t\tinst.dpDiv.empty().append( this._generateHTML( inst ) );\n\t\tthis._attachHandlers( inst );\n\n\t\tvar origyearshtml,\n\t\t\tnumMonths = this._getNumberOfMonths( inst ),\n\t\t\tcols = numMonths[ 1 ],\n\t\t\twidth = 17,\n\t\t\tactiveCell = inst.dpDiv.find( \".\" + this._dayOverClass + \" a\" );\n\n\t\tif ( activeCell.length > 0 ) {\n\t\t\tdatepicker_handleMouseover.apply( activeCell.get( 0 ) );\n\t\t}\n\n\t\tinst.dpDiv.removeClass( \"ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4\" ).width( \"\" );\n\t\tif ( cols > 1 ) {\n\t\t\tinst.dpDiv.addClass( \"ui-datepicker-multi-\" + cols ).css( \"width\", ( width * cols ) + \"em\" );\n\t\t}\n\t\tinst.dpDiv[ ( numMonths[ 0 ] !== 1 || numMonths[ 1 ] !== 1 ? \"add\" : \"remove\" ) +\n\t\t\t\"Class\" ]( \"ui-datepicker-multi\" );\n\t\tinst.dpDiv[ ( this._get( inst, \"isRTL\" ) ? \"add\" : \"remove\" ) +\n\t\t\t\"Class\" ]( \"ui-datepicker-rtl\" );\n\n\t\tif ( inst === $.datepicker._curInst && $.datepicker._datepickerShowing && $.datepicker._shouldFocusInput( inst ) ) {\n\t\t\tinst.input.trigger( \"focus\" );\n\t\t}\n\n\t\t// Deffered render of the years select (to avoid flashes on Firefox)\n\t\tif ( inst.yearshtml ) {\n\t\t\torigyearshtml = inst.yearshtml;\n\t\t\tsetTimeout( function() {\n\n\t\t\t\t//assure that inst.yearshtml didn't change.\n\t\t\t\tif ( origyearshtml === inst.yearshtml && inst.yearshtml ) {\n\t\t\t\t\tinst.dpDiv.find( \"select.ui-datepicker-year:first\" ).replaceWith( inst.yearshtml );\n\t\t\t\t}\n\t\t\t\torigyearshtml = inst.yearshtml = null;\n\t\t\t}, 0 );\n\t\t}\n\t},\n\n\t// #6694 - don't focus the input if it's already focused\n\t// this breaks the change event in IE\n\t// Support: IE and jQuery <1.9\n\t_shouldFocusInput: function( inst ) {\n\t\treturn inst.input && inst.input.is( \":visible\" ) && !inst.input.is( \":disabled\" ) && !inst.input.is( \":focus\" );\n\t},\n\n\t/* Check positioning to remain on screen. */\n\t_checkOffset: function( inst, offset, isFixed ) {\n\t\tvar dpWidth = inst.dpDiv.outerWidth(),\n\t\t\tdpHeight = inst.dpDiv.outerHeight(),\n\t\t\tinputWidth = inst.input ? inst.input.outerWidth() : 0,\n\t\t\tinputHeight = inst.input ? inst.input.outerHeight() : 0,\n\t\t\tviewWidth = document.documentElement.clientWidth + ( isFixed ? 0 : $( document ).scrollLeft() ),\n\t\t\tviewHeight = document.documentElement.clientHeight + ( isFixed ? 0 : $( document ).scrollTop() );\n\n\t\toffset.left -= ( this._get( inst, \"isRTL\" ) ? ( dpWidth - inputWidth ) : 0 );\n\t\toffset.left -= ( isFixed && offset.left === inst.input.offset().left ) ? $( document ).scrollLeft() : 0;\n\t\toffset.top -= ( isFixed && offset.top === ( inst.input.offset().top + inputHeight ) ) ? $( document ).scrollTop() : 0;\n\n\t\t// Now check if datepicker is showing outside window viewport - move to a better place if so.\n\t\toffset.left -= Math.min( offset.left, ( offset.left + dpWidth > viewWidth && viewWidth > dpWidth ) ?\n\t\t\tMath.abs( offset.left + dpWidth - viewWidth ) : 0 );\n\t\toffset.top -= Math.min( offset.top, ( offset.top + dpHeight > viewHeight && viewHeight > dpHeight ) ?\n\t\t\tMath.abs( dpHeight + inputHeight ) : 0 );\n\n\t\treturn offset;\n\t},\n\n\t/* Find an object's position on the screen. */\n\t_findPos: function( obj ) {\n\t\tvar position,\n\t\t\tinst = this._getInst( obj ),\n\t\t\tisRTL = this._get( inst, \"isRTL\" );\n\n\t\twhile ( obj && ( obj.type === \"hidden\" || obj.nodeType !== 1 || $.expr.filters.hidden( obj ) ) ) {\n\t\t\tobj = obj[ isRTL ? \"previousSibling\" : \"nextSibling\" ];\n\t\t}\n\n\t\tposition = $( obj ).offset();\n\t\treturn [ position.left, position.top ];\n\t},\n\n\t/* Hide the date picker from view.\n\t * @param  input  element - the input field attached to the date picker\n\t */\n\t_hideDatepicker: function( input ) {\n\t\tvar showAnim, duration, postProcess, onClose,\n\t\t\tinst = this._curInst;\n\n\t\tif ( !inst || ( input && inst !== $.data( input, \"datepicker\" ) ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( this._datepickerShowing ) {\n\t\t\tshowAnim = this._get( inst, \"showAnim\" );\n\t\t\tduration = this._get( inst, \"duration\" );\n\t\t\tpostProcess = function() {\n\t\t\t\t$.datepicker._tidyDialog( inst );\n\t\t\t};\n\n\t\t\t// DEPRECATED: after BC for 1.8.x $.effects[ showAnim ] is not needed\n\t\t\tif ( $.effects && ( $.effects.effect[ showAnim ] || $.effects[ showAnim ] ) ) {\n\t\t\t\tinst.dpDiv.hide( showAnim, $.datepicker._get( inst, \"showOptions\" ), duration, postProcess );\n\t\t\t} else {\n\t\t\t\tinst.dpDiv[ ( showAnim === \"slideDown\" ? \"slideUp\" :\n\t\t\t\t\t( showAnim === \"fadeIn\" ? \"fadeOut\" : \"hide\" ) ) ]( ( showAnim ? duration : null ), postProcess );\n\t\t\t}\n\n\t\t\tif ( !showAnim ) {\n\t\t\t\tpostProcess();\n\t\t\t}\n\t\t\tthis._datepickerShowing = false;\n\n\t\t\tonClose = this._get( inst, \"onClose\" );\n\t\t\tif ( onClose ) {\n\t\t\t\tonClose.apply( ( inst.input ? inst.input[ 0 ] : null ), [ ( inst.input ? inst.input.val() : \"\" ), inst ] );\n\t\t\t}\n\n\t\t\tthis._lastInput = null;\n\t\t\tif ( this._inDialog ) {\n\t\t\t\tthis._dialogInput.css( { position: \"absolute\", left: \"0\", top: \"-100px\" } );\n\t\t\t\tif ( $.blockUI ) {\n\t\t\t\t\t$.unblockUI();\n\t\t\t\t\t$( \"body\" ).append( this.dpDiv );\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._inDialog = false;\n\t\t}\n\t},\n\n\t/* Tidy up after a dialog display. */\n\t_tidyDialog: function( inst ) {\n\t\tinst.dpDiv.removeClass( this._dialogClass ).off( \".ui-datepicker-calendar\" );\n\t},\n\n\t/* Close date picker if clicked elsewhere. */\n\t_checkExternalClick: function( event ) {\n\t\tif ( !$.datepicker._curInst ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar $target = $( event.target ),\n\t\t\tinst = $.datepicker._getInst( $target[ 0 ] );\n\n\t\tif ( ( ( $target[ 0 ].id !== $.datepicker._mainDivId &&\n\t\t\t\t$target.parents( \"#\" + $.datepicker._mainDivId ).length === 0 &&\n\t\t\t\t!$target.hasClass( $.datepicker.markerClassName ) &&\n\t\t\t\t!$target.closest( \".\" + $.datepicker._triggerClass ).length &&\n\t\t\t\t$.datepicker._datepickerShowing && !( $.datepicker._inDialog && $.blockUI ) ) ) ||\n\t\t\t( $target.hasClass( $.datepicker.markerClassName ) && $.datepicker._curInst !== inst ) ) {\n\t\t\t\t$.datepicker._hideDatepicker();\n\t\t}\n\t},\n\n\t/* Adjust one of the date sub-fields. */\n\t_adjustDate: function( id, offset, period ) {\n\t\tvar target = $( id ),\n\t\t\tinst = this._getInst( target[ 0 ] );\n\n\t\tif ( this._isDisabledDatepicker( target[ 0 ] ) ) {\n\t\t\treturn;\n\t\t}\n\t\tthis._adjustInstDate( inst, offset +\n\t\t\t( period === \"M\" ? this._get( inst, \"showCurrentAtPos\" ) : 0 ), // undo positioning\n\t\t\tperiod );\n\t\tthis._updateDatepicker( inst );\n\t},\n\n\t/* Action for current link. */\n\t_gotoToday: function( id ) {\n\t\tvar date,\n\t\t\ttarget = $( id ),\n\t\t\tinst = this._getInst( target[ 0 ] );\n\n\t\tif ( this._get( inst, \"gotoCurrent\" ) && inst.currentDay ) {\n\t\t\tinst.selectedDay = inst.currentDay;\n\t\t\tinst.drawMonth = inst.selectedMonth = inst.currentMonth;\n\t\t\tinst.drawYear = inst.selectedYear = inst.currentYear;\n\t\t} else {\n\t\t\tdate = new Date();\n\t\t\tinst.selectedDay = date.getDate();\n\t\t\tinst.drawMonth = inst.selectedMonth = date.getMonth();\n\t\t\tinst.drawYear = inst.selectedYear = date.getFullYear();\n\t\t}\n\t\tthis._notifyChange( inst );\n\t\tthis._adjustDate( target );\n\t},\n\n\t/* Action for selecting a new month/year. */\n\t_selectMonthYear: function( id, select, period ) {\n\t\tvar target = $( id ),\n\t\t\tinst = this._getInst( target[ 0 ] );\n\n\t\tinst[ \"selected\" + ( period === \"M\" ? \"Month\" : \"Year\" ) ] =\n\t\tinst[ \"draw\" + ( period === \"M\" ? \"Month\" : \"Year\" ) ] =\n\t\t\tparseInt( select.options[ select.selectedIndex ].value, 10 );\n\n\t\tthis._notifyChange( inst );\n\t\tthis._adjustDate( target );\n\t},\n\n\t/* Action for selecting a day. */\n\t_selectDay: function( id, month, year, td ) {\n\t\tvar inst,\n\t\t\ttarget = $( id );\n\n\t\tif ( $( td ).hasClass( this._unselectableClass ) || this._isDisabledDatepicker( target[ 0 ] ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tinst = this._getInst( target[ 0 ] );\n\t\tinst.selectedDay = inst.currentDay = $( \"a\", td ).html();\n\t\tinst.selectedMonth = inst.currentMonth = month;\n\t\tinst.selectedYear = inst.currentYear = year;\n\t\tthis._selectDate( id, this._formatDate( inst,\n\t\t\tinst.currentDay, inst.currentMonth, inst.currentYear ) );\n\t},\n\n\t/* Erase the input field and hide the date picker. */\n\t_clearDate: function( id ) {\n\t\tvar target = $( id );\n\t\tthis._selectDate( target, \"\" );\n\t},\n\n\t/* Update the input field with the selected date. */\n\t_selectDate: function( id, dateStr ) {\n\t\tvar onSelect,\n\t\t\ttarget = $( id ),\n\t\t\tinst = this._getInst( target[ 0 ] );\n\n\t\tdateStr = ( dateStr != null ? dateStr : this._formatDate( inst ) );\n\t\tif ( inst.input ) {\n\t\t\tinst.input.val( dateStr );\n\t\t}\n\t\tthis._updateAlternate( inst );\n\n\t\tonSelect = this._get( inst, \"onSelect\" );\n\t\tif ( onSelect ) {\n\t\t\tonSelect.apply( ( inst.input ? inst.input[ 0 ] : null ), [ dateStr, inst ] );  // trigger custom callback\n\t\t} else if ( inst.input ) {\n\t\t\tinst.input.trigger( \"change\" ); // fire the change event\n\t\t}\n\n\t\tif ( inst.inline ) {\n\t\t\tthis._updateDatepicker( inst );\n\t\t} else {\n\t\t\tthis._hideDatepicker();\n\t\t\tthis._lastInput = inst.input[ 0 ];\n\t\t\tif ( typeof( inst.input[ 0 ] ) !== \"object\" ) {\n\t\t\t\tinst.input.trigger( \"focus\" ); // restore focus\n\t\t\t}\n\t\t\tthis._lastInput = null;\n\t\t}\n\t},\n\n\t/* Update any alternate field to synchronise with the main field. */\n\t_updateAlternate: function( inst ) {\n\t\tvar altFormat, date, dateStr,\n\t\t\taltField = this._get( inst, \"altField\" );\n\n\t\tif ( altField ) { // update alternate field too\n\t\t\taltFormat = this._get( inst, \"altFormat\" ) || this._get( inst, \"dateFormat\" );\n\t\t\tdate = this._getDate( inst );\n\t\t\tdateStr = this.formatDate( altFormat, date, this._getFormatConfig( inst ) );\n\t\t\t$( altField ).val( dateStr );\n\t\t}\n\t},\n\n\t/* Set as beforeShowDay function to prevent selection of weekends.\n\t * @param  date  Date - the date to customise\n\t * @return [boolean, string] - is this date selectable?, what is its CSS class?\n\t */\n\tnoWeekends: function( date ) {\n\t\tvar day = date.getDay();\n\t\treturn [ ( day > 0 && day < 6 ), \"\" ];\n\t},\n\n\t/* Set as calculateWeek to determine the week of the year based on the ISO 8601 definition.\n\t * @param  date  Date - the date to get the week for\n\t * @return  number - the number of the week within the year that contains this date\n\t */\n\tiso8601Week: function( date ) {\n\t\tvar time,\n\t\t\tcheckDate = new Date( date.getTime() );\n\n\t\t// Find Thursday of this week starting on Monday\n\t\tcheckDate.setDate( checkDate.getDate() + 4 - ( checkDate.getDay() || 7 ) );\n\n\t\ttime = checkDate.getTime();\n\t\tcheckDate.setMonth( 0 ); // Compare with Jan 1\n\t\tcheckDate.setDate( 1 );\n\t\treturn Math.floor( Math.round( ( time - checkDate ) / 86400000 ) / 7 ) + 1;\n\t},\n\n\t/* Parse a string value into a date object.\n\t * See formatDate below for the possible formats.\n\t *\n\t * @param  format string - the expected format of the date\n\t * @param  value string - the date in the above format\n\t * @param  settings Object - attributes include:\n\t *\t\t\t\t\tshortYearCutoff  number - the cutoff year for determining the century (optional)\n\t *\t\t\t\t\tdayNamesShort\tstring[7] - abbreviated names of the days from Sunday (optional)\n\t *\t\t\t\t\tdayNames\t\tstring[7] - names of the days from Sunday (optional)\n\t *\t\t\t\t\tmonthNamesShort string[12] - abbreviated names of the months (optional)\n\t *\t\t\t\t\tmonthNames\t\tstring[12] - names of the months (optional)\n\t * @return  Date - the extracted date value or null if value is blank\n\t */\n\tparseDate: function( format, value, settings ) {\n\t\tif ( format == null || value == null ) {\n\t\t\tthrow \"Invalid arguments\";\n\t\t}\n\n\t\tvalue = ( typeof value === \"object\" ? value.toString() : value + \"\" );\n\t\tif ( value === \"\" ) {\n\t\t\treturn null;\n\t\t}\n\n\t\tvar iFormat, dim, extra,\n\t\t\tiValue = 0,\n\t\t\tshortYearCutoffTemp = ( settings ? settings.shortYearCutoff : null ) || this._defaults.shortYearCutoff,\n\t\t\tshortYearCutoff = ( typeof shortYearCutoffTemp !== \"string\" ? shortYearCutoffTemp :\n\t\t\t\tnew Date().getFullYear() % 100 + parseInt( shortYearCutoffTemp, 10 ) ),\n\t\t\tdayNamesShort = ( settings ? settings.dayNamesShort : null ) || this._defaults.dayNamesShort,\n\t\t\tdayNames = ( settings ? settings.dayNames : null ) || this._defaults.dayNames,\n\t\t\tmonthNamesShort = ( settings ? settings.monthNamesShort : null ) || this._defaults.monthNamesShort,\n\t\t\tmonthNames = ( settings ? settings.monthNames : null ) || this._defaults.monthNames,\n\t\t\tyear = -1,\n\t\t\tmonth = -1,\n\t\t\tday = -1,\n\t\t\tdoy = -1,\n\t\t\tliteral = false,\n\t\t\tdate,\n\n\t\t\t// Check whether a format character is doubled\n\t\t\tlookAhead = function( match ) {\n\t\t\t\tvar matches = ( iFormat + 1 < format.length && format.charAt( iFormat + 1 ) === match );\n\t\t\t\tif ( matches ) {\n\t\t\t\t\tiFormat++;\n\t\t\t\t}\n\t\t\t\treturn matches;\n\t\t\t},\n\n\t\t\t// Extract a number from the string value\n\t\t\tgetNumber = function( match ) {\n\t\t\t\tvar isDoubled = lookAhead( match ),\n\t\t\t\t\tsize = ( match === \"@\" ? 14 : ( match === \"!\" ? 20 :\n\t\t\t\t\t( match === \"y\" && isDoubled ? 4 : ( match === \"o\" ? 3 : 2 ) ) ) ),\n\t\t\t\t\tminSize = ( match === \"y\" ? size : 1 ),\n\t\t\t\t\tdigits = new RegExp( \"^\\\\d{\" + minSize + \",\" + size + \"}\" ),\n\t\t\t\t\tnum = value.substring( iValue ).match( digits );\n\t\t\t\tif ( !num ) {\n\t\t\t\t\tthrow \"Missing number at position \" + iValue;\n\t\t\t\t}\n\t\t\t\tiValue += num[ 0 ].length;\n\t\t\t\treturn parseInt( num[ 0 ], 10 );\n\t\t\t},\n\n\t\t\t// Extract a name from the string value and convert to an index\n\t\t\tgetName = function( match, shortNames, longNames ) {\n\t\t\t\tvar index = -1,\n\t\t\t\t\tnames = $.map( lookAhead( match ) ? longNames : shortNames, function( v, k ) {\n\t\t\t\t\t\treturn [ [ k, v ] ];\n\t\t\t\t\t} ).sort( function( a, b ) {\n\t\t\t\t\t\treturn -( a[ 1 ].length - b[ 1 ].length );\n\t\t\t\t\t} );\n\n\t\t\t\t$.each( names, function( i, pair ) {\n\t\t\t\t\tvar name = pair[ 1 ];\n\t\t\t\t\tif ( value.substr( iValue, name.length ).toLowerCase() === name.toLowerCase() ) {\n\t\t\t\t\t\tindex = pair[ 0 ];\n\t\t\t\t\t\tiValue += name.length;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\tif ( index !== -1 ) {\n\t\t\t\t\treturn index + 1;\n\t\t\t\t} else {\n\t\t\t\t\tthrow \"Unknown name at position \" + iValue;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// Confirm that a literal character matches the string value\n\t\t\tcheckLiteral = function() {\n\t\t\t\tif ( value.charAt( iValue ) !== format.charAt( iFormat ) ) {\n\t\t\t\t\tthrow \"Unexpected literal at position \" + iValue;\n\t\t\t\t}\n\t\t\t\tiValue++;\n\t\t\t};\n\n\t\tfor ( iFormat = 0; iFormat < format.length; iFormat++ ) {\n\t\t\tif ( literal ) {\n\t\t\t\tif ( format.charAt( iFormat ) === \"'\" && !lookAhead( \"'\" ) ) {\n\t\t\t\t\tliteral = false;\n\t\t\t\t} else {\n\t\t\t\t\tcheckLiteral();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tswitch ( format.charAt( iFormat ) ) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\tday = getNumber( \"d\" );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"D\":\n\t\t\t\t\t\tgetName( \"D\", dayNamesShort, dayNames );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"o\":\n\t\t\t\t\t\tdoy = getNumber( \"o\" );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\tmonth = getNumber( \"m\" );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"M\":\n\t\t\t\t\t\tmonth = getName( \"M\", monthNamesShort, monthNames );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\tyear = getNumber( \"y\" );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"@\":\n\t\t\t\t\t\tdate = new Date( getNumber( \"@\" ) );\n\t\t\t\t\t\tyear = date.getFullYear();\n\t\t\t\t\t\tmonth = date.getMonth() + 1;\n\t\t\t\t\t\tday = date.getDate();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"!\":\n\t\t\t\t\t\tdate = new Date( ( getNumber( \"!\" ) - this._ticksTo1970 ) / 10000 );\n\t\t\t\t\t\tyear = date.getFullYear();\n\t\t\t\t\t\tmonth = date.getMonth() + 1;\n\t\t\t\t\t\tday = date.getDate();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"'\":\n\t\t\t\t\t\tif ( lookAhead( \"'\" ) ) {\n\t\t\t\t\t\t\tcheckLiteral();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tliteral = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tcheckLiteral();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( iValue < value.length ) {\n\t\t\textra = value.substr( iValue );\n\t\t\tif ( !/^\\s+/.test( extra ) ) {\n\t\t\t\tthrow \"Extra/unparsed characters found in date: \" + extra;\n\t\t\t}\n\t\t}\n\n\t\tif ( year === -1 ) {\n\t\t\tyear = new Date().getFullYear();\n\t\t} else if ( year < 100 ) {\n\t\t\tyear += new Date().getFullYear() - new Date().getFullYear() % 100 +\n\t\t\t\t( year <= shortYearCutoff ? 0 : -100 );\n\t\t}\n\n\t\tif ( doy > -1 ) {\n\t\t\tmonth = 1;\n\t\t\tday = doy;\n\t\t\tdo {\n\t\t\t\tdim = this._getDaysInMonth( year, month - 1 );\n\t\t\t\tif ( day <= dim ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tmonth++;\n\t\t\t\tday -= dim;\n\t\t\t} while ( true );\n\t\t}\n\n\t\tdate = this._daylightSavingAdjust( new Date( year, month - 1, day ) );\n\t\tif ( date.getFullYear() !== year || date.getMonth() + 1 !== month || date.getDate() !== day ) {\n\t\t\tthrow \"Invalid date\"; // E.g. 31/02/00\n\t\t}\n\t\treturn date;\n\t},\n\n\t/* Standard date formats. */\n\tATOM: \"yy-mm-dd\", // RFC 3339 (ISO 8601)\n\tCOOKIE: \"D, dd M yy\",\n\tISO_8601: \"yy-mm-dd\",\n\tRFC_822: \"D, d M y\",\n\tRFC_850: \"DD, dd-M-y\",\n\tRFC_1036: \"D, d M y\",\n\tRFC_1123: \"D, d M yy\",\n\tRFC_2822: \"D, d M yy\",\n\tRSS: \"D, d M y\", // RFC 822\n\tTICKS: \"!\",\n\tTIMESTAMP: \"@\",\n\tW3C: \"yy-mm-dd\", // ISO 8601\n\n\t_ticksTo1970: ( ( ( 1970 - 1 ) * 365 + Math.floor( 1970 / 4 ) - Math.floor( 1970 / 100 ) +\n\t\tMath.floor( 1970 / 400 ) ) * 24 * 60 * 60 * 10000000 ),\n\n\t/* Format a date object into a string value.\n\t * The format can be combinations of the following:\n\t * d  - day of month (no leading zero)\n\t * dd - day of month (two digit)\n\t * o  - day of year (no leading zeros)\n\t * oo - day of year (three digit)\n\t * D  - day name short\n\t * DD - day name long\n\t * m  - month of year (no leading zero)\n\t * mm - month of year (two digit)\n\t * M  - month name short\n\t * MM - month name long\n\t * y  - year (two digit)\n\t * yy - year (four digit)\n\t * @ - Unix timestamp (ms since 01/01/1970)\n\t * ! - Windows ticks (100ns since 01/01/0001)\n\t * \"...\" - literal text\n\t * '' - single quote\n\t *\n\t * @param  format string - the desired format of the date\n\t * @param  date Date - the date value to format\n\t * @param  settings Object - attributes include:\n\t *\t\t\t\t\tdayNamesShort\tstring[7] - abbreviated names of the days from Sunday (optional)\n\t *\t\t\t\t\tdayNames\t\tstring[7] - names of the days from Sunday (optional)\n\t *\t\t\t\t\tmonthNamesShort string[12] - abbreviated names of the months (optional)\n\t *\t\t\t\t\tmonthNames\t\tstring[12] - names of the months (optional)\n\t * @return  string - the date in the above format\n\t */\n\tformatDate: function( format, date, settings ) {\n\t\tif ( !date ) {\n\t\t\treturn \"\";\n\t\t}\n\n\t\tvar iFormat,\n\t\t\tdayNamesShort = ( settings ? settings.dayNamesShort : null ) || this._defaults.dayNamesShort,\n\t\t\tdayNames = ( settings ? settings.dayNames : null ) || this._defaults.dayNames,\n\t\t\tmonthNamesShort = ( settings ? settings.monthNamesShort : null ) || this._defaults.monthNamesShort,\n\t\t\tmonthNames = ( settings ? settings.monthNames : null ) || this._defaults.monthNames,\n\n\t\t\t// Check whether a format character is doubled\n\t\t\tlookAhead = function( match ) {\n\t\t\t\tvar matches = ( iFormat + 1 < format.length && format.charAt( iFormat + 1 ) === match );\n\t\t\t\tif ( matches ) {\n\t\t\t\t\tiFormat++;\n\t\t\t\t}\n\t\t\t\treturn matches;\n\t\t\t},\n\n\t\t\t// Format a number, with leading zero if necessary\n\t\t\tformatNumber = function( match, value, len ) {\n\t\t\t\tvar num = \"\" + value;\n\t\t\t\tif ( lookAhead( match ) ) {\n\t\t\t\t\twhile ( num.length < len ) {\n\t\t\t\t\t\tnum = \"0\" + num;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn num;\n\t\t\t},\n\n\t\t\t// Format a name, short or long as requested\n\t\t\tformatName = function( match, value, shortNames, longNames ) {\n\t\t\t\treturn ( lookAhead( match ) ? longNames[ value ] : shortNames[ value ] );\n\t\t\t},\n\t\t\toutput = \"\",\n\t\t\tliteral = false;\n\n\t\tif ( date ) {\n\t\t\tfor ( iFormat = 0; iFormat < format.length; iFormat++ ) {\n\t\t\t\tif ( literal ) {\n\t\t\t\t\tif ( format.charAt( iFormat ) === \"'\" && !lookAhead( \"'\" ) ) {\n\t\t\t\t\t\tliteral = false;\n\t\t\t\t\t} else {\n\t\t\t\t\t\toutput += format.charAt( iFormat );\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tswitch ( format.charAt( iFormat ) ) {\n\t\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\t\toutput += formatNumber( \"d\", date.getDate(), 2 );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"D\":\n\t\t\t\t\t\t\toutput += formatName( \"D\", date.getDay(), dayNamesShort, dayNames );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"o\":\n\t\t\t\t\t\t\toutput += formatNumber( \"o\",\n\t\t\t\t\t\t\t\tMath.round( ( new Date( date.getFullYear(), date.getMonth(), date.getDate() ).getTime() - new Date( date.getFullYear(), 0, 0 ).getTime() ) / 86400000 ), 3 );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\t\toutput += formatNumber( \"m\", date.getMonth() + 1, 2 );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"M\":\n\t\t\t\t\t\t\toutput += formatName( \"M\", date.getMonth(), monthNamesShort, monthNames );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\t\toutput += ( lookAhead( \"y\" ) ? date.getFullYear() :\n\t\t\t\t\t\t\t\t( date.getFullYear() % 100 < 10 ? \"0\" : \"\" ) + date.getFullYear() % 100 );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"@\":\n\t\t\t\t\t\t\toutput += date.getTime();\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"!\":\n\t\t\t\t\t\t\toutput += date.getTime() * 10000 + this._ticksTo1970;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"'\":\n\t\t\t\t\t\t\tif ( lookAhead( \"'\" ) ) {\n\t\t\t\t\t\t\t\toutput += \"'\";\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tliteral = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\toutput += format.charAt( iFormat );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t},\n\n\t/* Extract all possible characters from the date format. */\n\t_possibleChars: function( format ) {\n\t\tvar iFormat,\n\t\t\tchars = \"\",\n\t\t\tliteral = false,\n\n\t\t\t// Check whether a format character is doubled\n\t\t\tlookAhead = function( match ) {\n\t\t\t\tvar matches = ( iFormat + 1 < format.length && format.charAt( iFormat + 1 ) === match );\n\t\t\t\tif ( matches ) {\n\t\t\t\t\tiFormat++;\n\t\t\t\t}\n\t\t\t\treturn matches;\n\t\t\t};\n\n\t\tfor ( iFormat = 0; iFormat < format.length; iFormat++ ) {\n\t\t\tif ( literal ) {\n\t\t\t\tif ( format.charAt( iFormat ) === \"'\" && !lookAhead( \"'\" ) ) {\n\t\t\t\t\tliteral = false;\n\t\t\t\t} else {\n\t\t\t\t\tchars += format.charAt( iFormat );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tswitch ( format.charAt( iFormat ) ) {\n\t\t\t\t\tcase \"d\": case \"m\": case \"y\": case \"@\":\n\t\t\t\t\t\tchars += \"0123456789\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"D\": case \"M\":\n\t\t\t\t\t\treturn null; // Accept anything\n\t\t\t\t\tcase \"'\":\n\t\t\t\t\t\tif ( lookAhead( \"'\" ) ) {\n\t\t\t\t\t\t\tchars += \"'\";\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tliteral = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tchars += format.charAt( iFormat );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn chars;\n\t},\n\n\t/* Get a setting value, defaulting if necessary. */\n\t_get: function( inst, name ) {\n\t\treturn inst.settings[ name ] !== undefined ?\n\t\t\tinst.settings[ name ] : this._defaults[ name ];\n\t},\n\n\t/* Parse existing date and initialise date picker. */\n\t_setDateFromField: function( inst, noDefault ) {\n\t\tif ( inst.input.val() === inst.lastVal ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar dateFormat = this._get( inst, \"dateFormat\" ),\n\t\t\tdates = inst.lastVal = inst.input ? inst.input.val() : null,\n\t\t\tdefaultDate = this._getDefaultDate( inst ),\n\t\t\tdate = defaultDate,\n\t\t\tsettings = this._getFormatConfig( inst );\n\n\t\ttry {\n\t\t\tdate = this.parseDate( dateFormat, dates, settings ) || defaultDate;\n\t\t} catch ( event ) {\n\t\t\tdates = ( noDefault ? \"\" : dates );\n\t\t}\n\t\tinst.selectedDay = date.getDate();\n\t\tinst.drawMonth = inst.selectedMonth = date.getMonth();\n\t\tinst.drawYear = inst.selectedYear = date.getFullYear();\n\t\tinst.currentDay = ( dates ? date.getDate() : 0 );\n\t\tinst.currentMonth = ( dates ? date.getMonth() : 0 );\n\t\tinst.currentYear = ( dates ? date.getFullYear() : 0 );\n\t\tthis._adjustInstDate( inst );\n\t},\n\n\t/* Retrieve the default date shown on opening. */\n\t_getDefaultDate: function( inst ) {\n\t\treturn this._restrictMinMax( inst,\n\t\t\tthis._determineDate( inst, this._get( inst, \"defaultDate\" ), new Date() ) );\n\t},\n\n\t/* A date may be specified as an exact value or a relative one. */\n\t_determineDate: function( inst, date, defaultDate ) {\n\t\tvar offsetNumeric = function( offset ) {\n\t\t\t\tvar date = new Date();\n\t\t\t\tdate.setDate( date.getDate() + offset );\n\t\t\t\treturn date;\n\t\t\t},\n\t\t\toffsetString = function( offset ) {\n\t\t\t\ttry {\n\t\t\t\t\treturn $.datepicker.parseDate( $.datepicker._get( inst, \"dateFormat\" ),\n\t\t\t\t\t\toffset, $.datepicker._getFormatConfig( inst ) );\n\t\t\t\t}\n\t\t\t\tcatch ( e ) {\n\n\t\t\t\t\t// Ignore\n\t\t\t\t}\n\n\t\t\t\tvar date = ( offset.toLowerCase().match( /^c/ ) ?\n\t\t\t\t\t$.datepicker._getDate( inst ) : null ) || new Date(),\n\t\t\t\t\tyear = date.getFullYear(),\n\t\t\t\t\tmonth = date.getMonth(),\n\t\t\t\t\tday = date.getDate(),\n\t\t\t\t\tpattern = /([+\\-]?[0-9]+)\\s*(d|D|w|W|m|M|y|Y)?/g,\n\t\t\t\t\tmatches = pattern.exec( offset );\n\n\t\t\t\twhile ( matches ) {\n\t\t\t\t\tswitch ( matches[ 2 ] || \"d\" ) {\n\t\t\t\t\t\tcase \"d\" : case \"D\" :\n\t\t\t\t\t\t\tday += parseInt( matches[ 1 ], 10 ); break;\n\t\t\t\t\t\tcase \"w\" : case \"W\" :\n\t\t\t\t\t\t\tday += parseInt( matches[ 1 ], 10 ) * 7; break;\n\t\t\t\t\t\tcase \"m\" : case \"M\" :\n\t\t\t\t\t\t\tmonth += parseInt( matches[ 1 ], 10 );\n\t\t\t\t\t\t\tday = Math.min( day, $.datepicker._getDaysInMonth( year, month ) );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"y\": case \"Y\" :\n\t\t\t\t\t\t\tyear += parseInt( matches[ 1 ], 10 );\n\t\t\t\t\t\t\tday = Math.min( day, $.datepicker._getDaysInMonth( year, month ) );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tmatches = pattern.exec( offset );\n\t\t\t\t}\n\t\t\t\treturn new Date( year, month, day );\n\t\t\t},\n\t\t\tnewDate = ( date == null || date === \"\" ? defaultDate : ( typeof date === \"string\" ? offsetString( date ) :\n\t\t\t\t( typeof date === \"number\" ? ( isNaN( date ) ? defaultDate : offsetNumeric( date ) ) : new Date( date.getTime() ) ) ) );\n\n\t\tnewDate = ( newDate && newDate.toString() === \"Invalid Date\" ? defaultDate : newDate );\n\t\tif ( newDate ) {\n\t\t\tnewDate.setHours( 0 );\n\t\t\tnewDate.setMinutes( 0 );\n\t\t\tnewDate.setSeconds( 0 );\n\t\t\tnewDate.setMilliseconds( 0 );\n\t\t}\n\t\treturn this._daylightSavingAdjust( newDate );\n\t},\n\n\t/* Handle switch to/from daylight saving.\n\t * Hours may be non-zero on daylight saving cut-over:\n\t * > 12 when midnight changeover, but then cannot generate\n\t * midnight datetime, so jump to 1AM, otherwise reset.\n\t * @param  date  (Date) the date to check\n\t * @return  (Date) the corrected date\n\t */\n\t_daylightSavingAdjust: function( date ) {\n\t\tif ( !date ) {\n\t\t\treturn null;\n\t\t}\n\t\tdate.setHours( date.getHours() > 12 ? date.getHours() + 2 : 0 );\n\t\treturn date;\n\t},\n\n\t/* Set the date(s) directly. */\n\t_setDate: function( inst, date, noChange ) {\n\t\tvar clear = !date,\n\t\t\torigMonth = inst.selectedMonth,\n\t\t\torigYear = inst.selectedYear,\n\t\t\tnewDate = this._restrictMinMax( inst, this._determineDate( inst, date, new Date() ) );\n\n\t\tinst.selectedDay = inst.currentDay = newDate.getDate();\n\t\tinst.drawMonth = inst.selectedMonth = inst.currentMonth = newDate.getMonth();\n\t\tinst.drawYear = inst.selectedYear = inst.currentYear = newDate.getFullYear();\n\t\tif ( ( origMonth !== inst.selectedMonth || origYear !== inst.selectedYear ) && !noChange ) {\n\t\t\tthis._notifyChange( inst );\n\t\t}\n\t\tthis._adjustInstDate( inst );\n\t\tif ( inst.input ) {\n\t\t\tinst.input.val( clear ? \"\" : this._formatDate( inst ) );\n\t\t}\n\t},\n\n\t/* Retrieve the date(s) directly. */\n\t_getDate: function( inst ) {\n\t\tvar startDate = ( !inst.currentYear || ( inst.input && inst.input.val() === \"\" ) ? null :\n\t\t\tthis._daylightSavingAdjust( new Date(\n\t\t\tinst.currentYear, inst.currentMonth, inst.currentDay ) ) );\n\t\t\treturn startDate;\n\t},\n\n\t/* Attach the onxxx handlers.  These are declared statically so\n\t * they work with static code transformers like Caja.\n\t */\n\t_attachHandlers: function( inst ) {\n\t\tvar stepMonths = this._get( inst, \"stepMonths\" ),\n\t\t\tid = \"#\" + inst.id.replace( /\\\\\\\\/g, \"\\\\\" );\n\t\tinst.dpDiv.find( \"[data-handler]\" ).map( function() {\n\t\t\tvar handler = {\n\t\t\t\tprev: function() {\n\t\t\t\t\t$.datepicker._adjustDate( id, -stepMonths, \"M\" );\n\t\t\t\t},\n\t\t\t\tnext: function() {\n\t\t\t\t\t$.datepicker._adjustDate( id, +stepMonths, \"M\" );\n\t\t\t\t},\n\t\t\t\thide: function() {\n\t\t\t\t\t$.datepicker._hideDatepicker();\n\t\t\t\t},\n\t\t\t\ttoday: function() {\n\t\t\t\t\t$.datepicker._gotoToday( id );\n\t\t\t\t},\n\t\t\t\tselectDay: function() {\n\t\t\t\t\t$.datepicker._selectDay( id, +this.getAttribute( \"data-month\" ), +this.getAttribute( \"data-year\" ), this );\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\t\t\t\tselectMonth: function() {\n\t\t\t\t\t$.datepicker._selectMonthYear( id, this, \"M\" );\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\t\t\t\tselectYear: function() {\n\t\t\t\t\t$.datepicker._selectMonthYear( id, this, \"Y\" );\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t};\n\t\t\t$( this ).on( this.getAttribute( \"data-event\" ), handler[ this.getAttribute( \"data-handler\" ) ] );\n\t\t} );\n\t},\n\n\t/* Generate the HTML for the current state of the date picker. */\n\t_generateHTML: function( inst ) {\n\t\tvar maxDraw, prevText, prev, nextText, next, currentText, gotoDate,\n\t\t\tcontrols, buttonPanel, firstDay, showWeek, dayNames, dayNamesMin,\n\t\t\tmonthNames, monthNamesShort, beforeShowDay, showOtherMonths,\n\t\t\tselectOtherMonths, defaultDate, html, dow, row, group, col, selectedDate,\n\t\t\tcornerClass, calender, thead, day, daysInMonth, leadDays, curRows, numRows,\n\t\t\tprintDate, dRow, tbody, daySettings, otherMonth, unselectable,\n\t\t\ttempDate = new Date(),\n\t\t\ttoday = this._daylightSavingAdjust(\n\t\t\t\tnew Date( tempDate.getFullYear(), tempDate.getMonth(), tempDate.getDate() ) ), // clear time\n\t\t\tisRTL = this._get( inst, \"isRTL\" ),\n\t\t\tshowButtonPanel = this._get( inst, \"showButtonPanel\" ),\n\t\t\thideIfNoPrevNext = this._get( inst, \"hideIfNoPrevNext\" ),\n\t\t\tnavigationAsDateFormat = this._get( inst, \"navigationAsDateFormat\" ),\n\t\t\tnumMonths = this._getNumberOfMonths( inst ),\n\t\t\tshowCurrentAtPos = this._get( inst, \"showCurrentAtPos\" ),\n\t\t\tstepMonths = this._get( inst, \"stepMonths\" ),\n\t\t\tisMultiMonth = ( numMonths[ 0 ] !== 1 || numMonths[ 1 ] !== 1 ),\n\t\t\tcurrentDate = this._daylightSavingAdjust( ( !inst.currentDay ? new Date( 9999, 9, 9 ) :\n\t\t\t\tnew Date( inst.currentYear, inst.currentMonth, inst.currentDay ) ) ),\n\t\t\tminDate = this._getMinMaxDate( inst, \"min\" ),\n\t\t\tmaxDate = this._getMinMaxDate( inst, \"max\" ),\n\t\t\tdrawMonth = inst.drawMonth - showCurrentAtPos,\n\t\t\tdrawYear = inst.drawYear;\n\n\t\tif ( drawMonth < 0 ) {\n\t\t\tdrawMonth += 12;\n\t\t\tdrawYear--;\n\t\t}\n\t\tif ( maxDate ) {\n\t\t\tmaxDraw = this._daylightSavingAdjust( new Date( maxDate.getFullYear(),\n\t\t\t\tmaxDate.getMonth() - ( numMonths[ 0 ] * numMonths[ 1 ] ) + 1, maxDate.getDate() ) );\n\t\t\tmaxDraw = ( minDate && maxDraw < minDate ? minDate : maxDraw );\n\t\t\twhile ( this._daylightSavingAdjust( new Date( drawYear, drawMonth, 1 ) ) > maxDraw ) {\n\t\t\t\tdrawMonth--;\n\t\t\t\tif ( drawMonth < 0 ) {\n\t\t\t\t\tdrawMonth = 11;\n\t\t\t\t\tdrawYear--;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tinst.drawMonth = drawMonth;\n\t\tinst.drawYear = drawYear;\n\n\t\tprevText = this._get( inst, \"prevText\" );\n\t\tprevText = ( !navigationAsDateFormat ? prevText : this.formatDate( prevText,\n\t\t\tthis._daylightSavingAdjust( new Date( drawYear, drawMonth - stepMonths, 1 ) ),\n\t\t\tthis._getFormatConfig( inst ) ) );\n\n\t\tprev = ( this._canAdjustMonth( inst, -1, drawYear, drawMonth ) ?\n\t\t\t\"<a class='ui-datepicker-prev ui-corner-all' data-handler='prev' data-event='click'\" +\n\t\t\t\" title='\" + prevText + \"'><span class='ui-icon ui-icon-circle-triangle-\" + ( isRTL ? \"e\" : \"w\" ) + \"'>\" + prevText + \"</span></a>\" :\n\t\t\t( hideIfNoPrevNext ? \"\" : \"<a class='ui-datepicker-prev ui-corner-all ui-state-disabled' title='\" + prevText + \"'><span class='ui-icon ui-icon-circle-triangle-\" + ( isRTL ? \"e\" : \"w\" ) + \"'>\" + prevText + \"</span></a>\" ) );\n\n\t\tnextText = this._get( inst, \"nextText\" );\n\t\tnextText = ( !navigationAsDateFormat ? nextText : this.formatDate( nextText,\n\t\t\tthis._daylightSavingAdjust( new Date( drawYear, drawMonth + stepMonths, 1 ) ),\n\t\t\tthis._getFormatConfig( inst ) ) );\n\n\t\tnext = ( this._canAdjustMonth( inst, +1, drawYear, drawMonth ) ?\n\t\t\t\"<a class='ui-datepicker-next ui-corner-all' data-handler='next' data-event='click'\" +\n\t\t\t\" title='\" + nextText + \"'><span class='ui-icon ui-icon-circle-triangle-\" + ( isRTL ? \"w\" : \"e\" ) + \"'>\" + nextText + \"</span></a>\" :\n\t\t\t( hideIfNoPrevNext ? \"\" : \"<a class='ui-datepicker-next ui-corner-all ui-state-disabled' title='\" + nextText + \"'><span class='ui-icon ui-icon-circle-triangle-\" + ( isRTL ? \"w\" : \"e\" ) + \"'>\" + nextText + \"</span></a>\" ) );\n\n\t\tcurrentText = this._get( inst, \"currentText\" );\n\t\tgotoDate = ( this._get( inst, \"gotoCurrent\" ) && inst.currentDay ? currentDate : today );\n\t\tcurrentText = ( !navigationAsDateFormat ? currentText :\n\t\t\tthis.formatDate( currentText, gotoDate, this._getFormatConfig( inst ) ) );\n\n\t\tcontrols = ( !inst.inline ? \"<button type='button' class='ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all' data-handler='hide' data-event='click'>\" +\n\t\t\tthis._get( inst, \"closeText\" ) + \"</button>\" : \"\" );\n\n\t\tbuttonPanel = ( showButtonPanel ) ? \"<div class='ui-datepicker-buttonpane ui-widget-content'>\" + ( isRTL ? controls : \"\" ) +\n\t\t\t( this._isInRange( inst, gotoDate ) ? \"<button type='button' class='ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all' data-handler='today' data-event='click'\" +\n\t\t\t\">\" + currentText + \"</button>\" : \"\" ) + ( isRTL ? \"\" : controls ) + \"</div>\" : \"\";\n\n\t\tfirstDay = parseInt( this._get( inst, \"firstDay\" ), 10 );\n\t\tfirstDay = ( isNaN( firstDay ) ? 0 : firstDay );\n\n\t\tshowWeek = this._get( inst, \"showWeek\" );\n\t\tdayNames = this._get( inst, \"dayNames\" );\n\t\tdayNamesMin = this._get( inst, \"dayNamesMin\" );\n\t\tmonthNames = this._get( inst, \"monthNames\" );\n\t\tmonthNamesShort = this._get( inst, \"monthNamesShort\" );\n\t\tbeforeShowDay = this._get( inst, \"beforeShowDay\" );\n\t\tshowOtherMonths = this._get( inst, \"showOtherMonths\" );\n\t\tselectOtherMonths = this._get( inst, \"selectOtherMonths\" );\n\t\tdefaultDate = this._getDefaultDate( inst );\n\t\thtml = \"\";\n\n\t\tfor ( row = 0; row < numMonths[ 0 ]; row++ ) {\n\t\t\tgroup = \"\";\n\t\t\tthis.maxRows = 4;\n\t\t\tfor ( col = 0; col < numMonths[ 1 ]; col++ ) {\n\t\t\t\tselectedDate = this._daylightSavingAdjust( new Date( drawYear, drawMonth, inst.selectedDay ) );\n\t\t\t\tcornerClass = \" ui-corner-all\";\n\t\t\t\tcalender = \"\";\n\t\t\t\tif ( isMultiMonth ) {\n\t\t\t\t\tcalender += \"<div class='ui-datepicker-group\";\n\t\t\t\t\tif ( numMonths[ 1 ] > 1 ) {\n\t\t\t\t\t\tswitch ( col ) {\n\t\t\t\t\t\t\tcase 0: calender += \" ui-datepicker-group-first\";\n\t\t\t\t\t\t\t\tcornerClass = \" ui-corner-\" + ( isRTL ? \"right\" : \"left\" ); break;\n\t\t\t\t\t\t\tcase numMonths[ 1 ] - 1: calender += \" ui-datepicker-group-last\";\n\t\t\t\t\t\t\t\tcornerClass = \" ui-corner-\" + ( isRTL ? \"left\" : \"right\" ); break;\n\t\t\t\t\t\t\tdefault: calender += \" ui-datepicker-group-middle\"; cornerClass = \"\"; break;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tcalender += \"'>\";\n\t\t\t\t}\n\t\t\t\tcalender += \"<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix\" + cornerClass + \"'>\" +\n\t\t\t\t\t( /all|left/.test( cornerClass ) && row === 0 ? ( isRTL ? next : prev ) : \"\" ) +\n\t\t\t\t\t( /all|right/.test( cornerClass ) && row === 0 ? ( isRTL ? prev : next ) : \"\" ) +\n\t\t\t\t\tthis._generateMonthYearHeader( inst, drawMonth, drawYear, minDate, maxDate,\n\t\t\t\t\trow > 0 || col > 0, monthNames, monthNamesShort ) + // draw month headers\n\t\t\t\t\t\"</div><table class='ui-datepicker-calendar'><thead>\" +\n\t\t\t\t\t\"<tr>\";\n\t\t\t\tthead = ( showWeek ? \"<th class='ui-datepicker-week-col'>\" + this._get( inst, \"weekHeader\" ) + \"</th>\" : \"\" );\n\t\t\t\tfor ( dow = 0; dow < 7; dow++ ) { // days of the week\n\t\t\t\t\tday = ( dow + firstDay ) % 7;\n\t\t\t\t\tthead += \"<th scope='col'\" + ( ( dow + firstDay + 6 ) % 7 >= 5 ? \" class='ui-datepicker-week-end'\" : \"\" ) + \">\" +\n\t\t\t\t\t\t\"<span title='\" + dayNames[ day ] + \"'>\" + dayNamesMin[ day ] + \"</span></th>\";\n\t\t\t\t}\n\t\t\t\tcalender += thead + \"</tr></thead><tbody>\";\n\t\t\t\tdaysInMonth = this._getDaysInMonth( drawYear, drawMonth );\n\t\t\t\tif ( drawYear === inst.selectedYear && drawMonth === inst.selectedMonth ) {\n\t\t\t\t\tinst.selectedDay = Math.min( inst.selectedDay, daysInMonth );\n\t\t\t\t}\n\t\t\t\tleadDays = ( this._getFirstDayOfMonth( drawYear, drawMonth ) - firstDay + 7 ) % 7;\n\t\t\t\tcurRows = Math.ceil( ( leadDays + daysInMonth ) / 7 ); // calculate the number of rows to generate\n\t\t\t\tnumRows = ( isMultiMonth ? this.maxRows > curRows ? this.maxRows : curRows : curRows ); //If multiple months, use the higher number of rows (see #7043)\n\t\t\t\tthis.maxRows = numRows;\n\t\t\t\tprintDate = this._daylightSavingAdjust( new Date( drawYear, drawMonth, 1 - leadDays ) );\n\t\t\t\tfor ( dRow = 0; dRow < numRows; dRow++ ) { // create date picker rows\n\t\t\t\t\tcalender += \"<tr>\";\n\t\t\t\t\ttbody = ( !showWeek ? \"\" : \"<td class='ui-datepicker-week-col'>\" +\n\t\t\t\t\t\tthis._get( inst, \"calculateWeek\" )( printDate ) + \"</td>\" );\n\t\t\t\t\tfor ( dow = 0; dow < 7; dow++ ) { // create date picker days\n\t\t\t\t\t\tdaySettings = ( beforeShowDay ?\n\t\t\t\t\t\t\tbeforeShowDay.apply( ( inst.input ? inst.input[ 0 ] : null ), [ printDate ] ) : [ true, \"\" ] );\n\t\t\t\t\t\totherMonth = ( printDate.getMonth() !== drawMonth );\n\t\t\t\t\t\tunselectable = ( otherMonth && !selectOtherMonths ) || !daySettings[ 0 ] ||\n\t\t\t\t\t\t\t( minDate && printDate < minDate ) || ( maxDate && printDate > maxDate );\n\t\t\t\t\t\ttbody += \"<td class='\" +\n\t\t\t\t\t\t\t( ( dow + firstDay + 6 ) % 7 >= 5 ? \" ui-datepicker-week-end\" : \"\" ) + // highlight weekends\n\t\t\t\t\t\t\t( otherMonth ? \" ui-datepicker-other-month\" : \"\" ) + // highlight days from other months\n\t\t\t\t\t\t\t( ( printDate.getTime() === selectedDate.getTime() && drawMonth === inst.selectedMonth && inst._keyEvent ) || // user pressed key\n\t\t\t\t\t\t\t( defaultDate.getTime() === printDate.getTime() && defaultDate.getTime() === selectedDate.getTime() ) ?\n\n\t\t\t\t\t\t\t// or defaultDate is current printedDate and defaultDate is selectedDate\n\t\t\t\t\t\t\t\" \" + this._dayOverClass : \"\" ) + // highlight selected day\n\t\t\t\t\t\t\t( unselectable ? \" \" + this._unselectableClass + \" ui-state-disabled\" : \"\" ) +  // highlight unselectable days\n\t\t\t\t\t\t\t( otherMonth && !showOtherMonths ? \"\" : \" \" + daySettings[ 1 ] + // highlight custom dates\n\t\t\t\t\t\t\t( printDate.getTime() === currentDate.getTime() ? \" \" + this._currentClass : \"\" ) + // highlight selected day\n\t\t\t\t\t\t\t( printDate.getTime() === today.getTime() ? \" ui-datepicker-today\" : \"\" ) ) + \"'\" + // highlight today (if different)\n\t\t\t\t\t\t\t( ( !otherMonth || showOtherMonths ) && daySettings[ 2 ] ? \" title='\" + daySettings[ 2 ].replace( /'/g, \"&#39;\" ) + \"'\" : \"\" ) + // cell title\n\t\t\t\t\t\t\t( unselectable ? \"\" : \" data-handler='selectDay' data-event='click' data-month='\" + printDate.getMonth() + \"' data-year='\" + printDate.getFullYear() + \"'\" ) + \">\" + // actions\n\t\t\t\t\t\t\t( otherMonth && !showOtherMonths ? \"&#xa0;\" : // display for other months\n\t\t\t\t\t\t\t( unselectable ? \"<span class='ui-state-default'>\" + printDate.getDate() + \"</span>\" : \"<a class='ui-state-default\" +\n\t\t\t\t\t\t\t( printDate.getTime() === today.getTime() ? \" ui-state-highlight\" : \"\" ) +\n\t\t\t\t\t\t\t( printDate.getTime() === currentDate.getTime() ? \" ui-state-active\" : \"\" ) + // highlight selected day\n\t\t\t\t\t\t\t( otherMonth ? \" ui-priority-secondary\" : \"\" ) + // distinguish dates from other months\n\t\t\t\t\t\t\t\"' href='#'>\" + printDate.getDate() + \"</a>\" ) ) + \"</td>\"; // display selectable date\n\t\t\t\t\t\tprintDate.setDate( printDate.getDate() + 1 );\n\t\t\t\t\t\tprintDate = this._daylightSavingAdjust( printDate );\n\t\t\t\t\t}\n\t\t\t\t\tcalender += tbody + \"</tr>\";\n\t\t\t\t}\n\t\t\t\tdrawMonth++;\n\t\t\t\tif ( drawMonth > 11 ) {\n\t\t\t\t\tdrawMonth = 0;\n\t\t\t\t\tdrawYear++;\n\t\t\t\t}\n\t\t\t\tcalender += \"</tbody></table>\" + ( isMultiMonth ? \"</div>\" +\n\t\t\t\t\t\t\t( ( numMonths[ 0 ] > 0 && col === numMonths[ 1 ] - 1 ) ? \"<div class='ui-datepicker-row-break'></div>\" : \"\" ) : \"\" );\n\t\t\t\tgroup += calender;\n\t\t\t}\n\t\t\thtml += group;\n\t\t}\n\t\thtml += buttonPanel;\n\t\tinst._keyEvent = false;\n\t\treturn html;\n\t},\n\n\t/* Generate the month and year header. */\n\t_generateMonthYearHeader: function( inst, drawMonth, drawYear, minDate, maxDate,\n\t\t\tsecondary, monthNames, monthNamesShort ) {\n\n\t\tvar inMinYear, inMaxYear, month, years, thisYear, determineYear, year, endYear,\n\t\t\tchangeMonth = this._get( inst, \"changeMonth\" ),\n\t\t\tchangeYear = this._get( inst, \"changeYear\" ),\n\t\t\tshowMonthAfterYear = this._get( inst, \"showMonthAfterYear\" ),\n\t\t\thtml = \"<div class='ui-datepicker-title'>\",\n\t\t\tmonthHtml = \"\";\n\n\t\t// Month selection\n\t\tif ( secondary || !changeMonth ) {\n\t\t\tmonthHtml += \"<span class='ui-datepicker-month'>\" + monthNames[ drawMonth ] + \"</span>\";\n\t\t} else {\n\t\t\tinMinYear = ( minDate && minDate.getFullYear() === drawYear );\n\t\t\tinMaxYear = ( maxDate && maxDate.getFullYear() === drawYear );\n\t\t\tmonthHtml += \"<select class='ui-datepicker-month' data-handler='selectMonth' data-event='change'>\";\n\t\t\tfor ( month = 0; month < 12; month++ ) {\n\t\t\t\tif ( ( !inMinYear || month >= minDate.getMonth() ) && ( !inMaxYear || month <= maxDate.getMonth() ) ) {\n\t\t\t\t\tmonthHtml += \"<option value='\" + month + \"'\" +\n\t\t\t\t\t\t( month === drawMonth ? \" selected='selected'\" : \"\" ) +\n\t\t\t\t\t\t\">\" + monthNamesShort[ month ] + \"</option>\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tmonthHtml += \"</select>\";\n\t\t}\n\n\t\tif ( !showMonthAfterYear ) {\n\t\t\thtml += monthHtml + ( secondary || !( changeMonth && changeYear ) ? \"&#xa0;\" : \"\" );\n\t\t}\n\n\t\t// Year selection\n\t\tif ( !inst.yearshtml ) {\n\t\t\tinst.yearshtml = \"\";\n\t\t\tif ( secondary || !changeYear ) {\n\t\t\t\thtml += \"<span class='ui-datepicker-year'>\" + drawYear + \"</span>\";\n\t\t\t} else {\n\n\t\t\t\t// determine range of years to display\n\t\t\t\tyears = this._get( inst, \"yearRange\" ).split( \":\" );\n\t\t\t\tthisYear = new Date().getFullYear();\n\t\t\t\tdetermineYear = function( value ) {\n\t\t\t\t\tvar year = ( value.match( /c[+\\-].*/ ) ? drawYear + parseInt( value.substring( 1 ), 10 ) :\n\t\t\t\t\t\t( value.match( /[+\\-].*/ ) ? thisYear + parseInt( value, 10 ) :\n\t\t\t\t\t\tparseInt( value, 10 ) ) );\n\t\t\t\t\treturn ( isNaN( year ) ? thisYear : year );\n\t\t\t\t};\n\t\t\t\tyear = determineYear( years[ 0 ] );\n\t\t\t\tendYear = Math.max( year, determineYear( years[ 1 ] || \"\" ) );\n\t\t\t\tyear = ( minDate ? Math.max( year, minDate.getFullYear() ) : year );\n\t\t\t\tendYear = ( maxDate ? Math.min( endYear, maxDate.getFullYear() ) : endYear );\n\t\t\t\tinst.yearshtml += \"<select class='ui-datepicker-year' data-handler='selectYear' data-event='change'>\";\n\t\t\t\tfor ( ; year <= endYear; year++ ) {\n\t\t\t\t\tinst.yearshtml += \"<option value='\" + year + \"'\" +\n\t\t\t\t\t\t( year === drawYear ? \" selected='selected'\" : \"\" ) +\n\t\t\t\t\t\t\">\" + year + \"</option>\";\n\t\t\t\t}\n\t\t\t\tinst.yearshtml += \"</select>\";\n\n\t\t\t\thtml += inst.yearshtml;\n\t\t\t\tinst.yearshtml = null;\n\t\t\t}\n\t\t}\n\n\t\thtml += this._get( inst, \"yearSuffix\" );\n\t\tif ( showMonthAfterYear ) {\n\t\t\thtml += ( secondary || !( changeMonth && changeYear ) ? \"&#xa0;\" : \"\" ) + monthHtml;\n\t\t}\n\t\thtml += \"</div>\"; // Close datepicker_header\n\t\treturn html;\n\t},\n\n\t/* Adjust one of the date sub-fields. */\n\t_adjustInstDate: function( inst, offset, period ) {\n\t\tvar year = inst.selectedYear + ( period === \"Y\" ? offset : 0 ),\n\t\t\tmonth = inst.selectedMonth + ( period === \"M\" ? offset : 0 ),\n\t\t\tday = Math.min( inst.selectedDay, this._getDaysInMonth( year, month ) ) + ( period === \"D\" ? offset : 0 ),\n\t\t\tdate = this._restrictMinMax( inst, this._daylightSavingAdjust( new Date( year, month, day ) ) );\n\n\t\tinst.selectedDay = date.getDate();\n\t\tinst.drawMonth = inst.selectedMonth = date.getMonth();\n\t\tinst.drawYear = inst.selectedYear = date.getFullYear();\n\t\tif ( period === \"M\" || period === \"Y\" ) {\n\t\t\tthis._notifyChange( inst );\n\t\t}\n\t},\n\n\t/* Ensure a date is within any min/max bounds. */\n\t_restrictMinMax: function( inst, date ) {\n\t\tvar minDate = this._getMinMaxDate( inst, \"min\" ),\n\t\t\tmaxDate = this._getMinMaxDate( inst, \"max\" ),\n\t\t\tnewDate = ( minDate && date < minDate ? minDate : date );\n\t\treturn ( maxDate && newDate > maxDate ? maxDate : newDate );\n\t},\n\n\t/* Notify change of month/year. */\n\t_notifyChange: function( inst ) {\n\t\tvar onChange = this._get( inst, \"onChangeMonthYear\" );\n\t\tif ( onChange ) {\n\t\t\tonChange.apply( ( inst.input ? inst.input[ 0 ] : null ),\n\t\t\t\t[ inst.selectedYear, inst.selectedMonth + 1, inst ] );\n\t\t}\n\t},\n\n\t/* Determine the number of months to show. */\n\t_getNumberOfMonths: function( inst ) {\n\t\tvar numMonths = this._get( inst, \"numberOfMonths\" );\n\t\treturn ( numMonths == null ? [ 1, 1 ] : ( typeof numMonths === \"number\" ? [ 1, numMonths ] : numMonths ) );\n\t},\n\n\t/* Determine the current maximum date - ensure no time components are set. */\n\t_getMinMaxDate: function( inst, minMax ) {\n\t\treturn this._determineDate( inst, this._get( inst, minMax + \"Date\" ), null );\n\t},\n\n\t/* Find the number of days in a given month. */\n\t_getDaysInMonth: function( year, month ) {\n\t\treturn 32 - this._daylightSavingAdjust( new Date( year, month, 32 ) ).getDate();\n\t},\n\n\t/* Find the day of the week of the first of a month. */\n\t_getFirstDayOfMonth: function( year, month ) {\n\t\treturn new Date( year, month, 1 ).getDay();\n\t},\n\n\t/* Determines if we should allow a \"next/prev\" month display change. */\n\t_canAdjustMonth: function( inst, offset, curYear, curMonth ) {\n\t\tvar numMonths = this._getNumberOfMonths( inst ),\n\t\t\tdate = this._daylightSavingAdjust( new Date( curYear,\n\t\t\tcurMonth + ( offset < 0 ? offset : numMonths[ 0 ] * numMonths[ 1 ] ), 1 ) );\n\n\t\tif ( offset < 0 ) {\n\t\t\tdate.setDate( this._getDaysInMonth( date.getFullYear(), date.getMonth() ) );\n\t\t}\n\t\treturn this._isInRange( inst, date );\n\t},\n\n\t/* Is the given date in the accepted range? */\n\t_isInRange: function( inst, date ) {\n\t\tvar yearSplit, currentYear,\n\t\t\tminDate = this._getMinMaxDate( inst, \"min\" ),\n\t\t\tmaxDate = this._getMinMaxDate( inst, \"max\" ),\n\t\t\tminYear = null,\n\t\t\tmaxYear = null,\n\t\t\tyears = this._get( inst, \"yearRange\" );\n\t\t\tif ( years ) {\n\t\t\t\tyearSplit = years.split( \":\" );\n\t\t\t\tcurrentYear = new Date().getFullYear();\n\t\t\t\tminYear = parseInt( yearSplit[ 0 ], 10 );\n\t\t\t\tmaxYear = parseInt( yearSplit[ 1 ], 10 );\n\t\t\t\tif ( yearSplit[ 0 ].match( /[+\\-].*/ ) ) {\n\t\t\t\t\tminYear += currentYear;\n\t\t\t\t}\n\t\t\t\tif ( yearSplit[ 1 ].match( /[+\\-].*/ ) ) {\n\t\t\t\t\tmaxYear += currentYear;\n\t\t\t\t}\n\t\t\t}\n\n\t\treturn ( ( !minDate || date.getTime() >= minDate.getTime() ) &&\n\t\t\t( !maxDate || date.getTime() <= maxDate.getTime() ) &&\n\t\t\t( !minYear || date.getFullYear() >= minYear ) &&\n\t\t\t( !maxYear || date.getFullYear() <= maxYear ) );\n\t},\n\n\t/* Provide the configuration settings for formatting/parsing. */\n\t_getFormatConfig: function( inst ) {\n\t\tvar shortYearCutoff = this._get( inst, \"shortYearCutoff\" );\n\t\tshortYearCutoff = ( typeof shortYearCutoff !== \"string\" ? shortYearCutoff :\n\t\t\tnew Date().getFullYear() % 100 + parseInt( shortYearCutoff, 10 ) );\n\t\treturn { shortYearCutoff: shortYearCutoff,\n\t\t\tdayNamesShort: this._get( inst, \"dayNamesShort\" ), dayNames: this._get( inst, \"dayNames\" ),\n\t\t\tmonthNamesShort: this._get( inst, \"monthNamesShort\" ), monthNames: this._get( inst, \"monthNames\" ) };\n\t},\n\n\t/* Format the given date for display. */\n\t_formatDate: function( inst, day, month, year ) {\n\t\tif ( !day ) {\n\t\t\tinst.currentDay = inst.selectedDay;\n\t\t\tinst.currentMonth = inst.selectedMonth;\n\t\t\tinst.currentYear = inst.selectedYear;\n\t\t}\n\t\tvar date = ( day ? ( typeof day === \"object\" ? day :\n\t\t\tthis._daylightSavingAdjust( new Date( year, month, day ) ) ) :\n\t\t\tthis._daylightSavingAdjust( new Date( inst.currentYear, inst.currentMonth, inst.currentDay ) ) );\n\t\treturn this.formatDate( this._get( inst, \"dateFormat\" ), date, this._getFormatConfig( inst ) );\n\t}\n} );\n\n/*\n * Bind hover events for datepicker elements.\n * Done via delegate so the binding only occurs once in the lifetime of the parent div.\n * Global datepicker_instActive, set by _updateDatepicker allows the handlers to find their way back to the active picker.\n */\nfunction datepicker_bindHover( dpDiv ) {\n\tvar selector = \"button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a\";\n\treturn dpDiv.on( \"mouseout\", selector, function() {\n\t\t\t$( this ).removeClass( \"ui-state-hover\" );\n\t\t\tif ( this.className.indexOf( \"ui-datepicker-prev\" ) !== -1 ) {\n\t\t\t\t$( this ).removeClass( \"ui-datepicker-prev-hover\" );\n\t\t\t}\n\t\t\tif ( this.className.indexOf( \"ui-datepicker-next\" ) !== -1 ) {\n\t\t\t\t$( this ).removeClass( \"ui-datepicker-next-hover\" );\n\t\t\t}\n\t\t} )\n\t\t.on( \"mouseover\", selector, datepicker_handleMouseover );\n}\n\nfunction datepicker_handleMouseover() {\n\tif ( !$.datepicker._isDisabledDatepicker( datepicker_instActive.inline ? datepicker_instActive.dpDiv.parent()[ 0 ] : datepicker_instActive.input[ 0 ] ) ) {\n\t\t$( this ).parents( \".ui-datepicker-calendar\" ).find( \"a\" ).removeClass( \"ui-state-hover\" );\n\t\t$( this ).addClass( \"ui-state-hover\" );\n\t\tif ( this.className.indexOf( \"ui-datepicker-prev\" ) !== -1 ) {\n\t\t\t$( this ).addClass( \"ui-datepicker-prev-hover\" );\n\t\t}\n\t\tif ( this.className.indexOf( \"ui-datepicker-next\" ) !== -1 ) {\n\t\t\t$( this ).addClass( \"ui-datepicker-next-hover\" );\n\t\t}\n\t}\n}\n\n/* jQuery extend now ignores nulls! */\nfunction datepicker_extendRemove( target, props ) {\n\t$.extend( target, props );\n\tfor ( var name in props ) {\n\t\tif ( props[ name ] == null ) {\n\t\t\ttarget[ name ] = props[ name ];\n\t\t}\n\t}\n\treturn target;\n}\n\n/* Invoke the datepicker functionality.\n   @param  options  string - a command, optionally followed by additional parameters or\n\t\t\t\t\tObject - settings for attaching new datepicker functionality\n   @return  jQuery object */\n$.fn.datepicker = function( options ) {\n\n\t/* Verify an empty collection wasn't passed - Fixes #6976 */\n\tif ( !this.length ) {\n\t\treturn this;\n\t}\n\n\t/* Initialise the date picker. */\n\tif ( !$.datepicker.initialized ) {\n\t\t$( document ).on( \"mousedown\", $.datepicker._checkExternalClick );\n\t\t$.datepicker.initialized = true;\n\t}\n\n\t/* Append datepicker main container to body if not exist. */\n\tif ( $( \"#\" + $.datepicker._mainDivId ).length === 0 ) {\n\t\t$( \"body\" ).append( $.datepicker.dpDiv );\n\t}\n\n\tvar otherArgs = Array.prototype.slice.call( arguments, 1 );\n\tif ( typeof options === \"string\" && ( options === \"isDisabled\" || options === \"getDate\" || options === \"widget\" ) ) {\n\t\treturn $.datepicker[ \"_\" + options + \"Datepicker\" ].\n\t\t\tapply( $.datepicker, [ this[ 0 ] ].concat( otherArgs ) );\n\t}\n\tif ( options === \"option\" && arguments.length === 2 && typeof arguments[ 1 ] === \"string\" ) {\n\t\treturn $.datepicker[ \"_\" + options + \"Datepicker\" ].\n\t\t\tapply( $.datepicker, [ this[ 0 ] ].concat( otherArgs ) );\n\t}\n\treturn this.each( function() {\n\t\ttypeof options === \"string\" ?\n\t\t\t$.datepicker[ \"_\" + options + \"Datepicker\" ].\n\t\t\t\tapply( $.datepicker, [ this ].concat( otherArgs ) ) :\n\t\t\t$.datepicker._attachDatepicker( this, options );\n\t} );\n};\n\n$.datepicker = new Datepicker(); // singleton instance\n$.datepicker.initialized = false;\n$.datepicker.uuid = new Date().getTime();\n$.datepicker.version = \"1.12.1\";\n\nvar widgetsDatepicker = $.datepicker;\n\n\n\n\n// This file is deprecated\nvar ie = $.ui.ie = !!/msie [\\w.]+/.exec( navigator.userAgent.toLowerCase() );\n\n/*!\n * jQuery UI Mouse 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Mouse\n//>>group: Widgets\n//>>description: Abstracts mouse-based interactions to assist in creating certain widgets.\n//>>docs: http://api.jqueryui.com/mouse/\n\n\n\nvar mouseHandled = false;\n$( document ).on( \"mouseup\", function() {\n\tmouseHandled = false;\n} );\n\nvar widgetsMouse = $.widget( \"ui.mouse\", {\n\tversion: \"1.12.1\",\n\toptions: {\n\t\tcancel: \"input, textarea, button, select, option\",\n\t\tdistance: 1,\n\t\tdelay: 0\n\t},\n\t_mouseInit: function() {\n\t\tvar that = this;\n\n\t\tthis.element\n\t\t\t.on( \"mousedown.\" + this.widgetName, function( event ) {\n\t\t\t\treturn that._mouseDown( event );\n\t\t\t} )\n\t\t\t.on( \"click.\" + this.widgetName, function( event ) {\n\t\t\t\tif ( true === $.data( event.target, that.widgetName + \".preventClickEvent\" ) ) {\n\t\t\t\t\t$.removeData( event.target, that.widgetName + \".preventClickEvent\" );\n\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t} );\n\n\t\tthis.started = false;\n\t},\n\n\t// TODO: make sure destroying one instance of mouse doesn't mess with\n\t// other instances of mouse\n\t_mouseDestroy: function() {\n\t\tthis.element.off( \".\" + this.widgetName );\n\t\tif ( this._mouseMoveDelegate ) {\n\t\t\tthis.document\n\t\t\t\t.off( \"mousemove.\" + this.widgetName, this._mouseMoveDelegate )\n\t\t\t\t.off( \"mouseup.\" + this.widgetName, this._mouseUpDelegate );\n\t\t}\n\t},\n\n\t_mouseDown: function( event ) {\n\n\t\t// don't let more than one widget handle mouseStart\n\t\tif ( mouseHandled ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._mouseMoved = false;\n\n\t\t// We may have missed mouseup (out of window)\n\t\t( this._mouseStarted && this._mouseUp( event ) );\n\n\t\tthis._mouseDownEvent = event;\n\n\t\tvar that = this,\n\t\t\tbtnIsLeft = ( event.which === 1 ),\n\n\t\t\t// event.target.nodeName works around a bug in IE 8 with\n\t\t\t// disabled inputs (#7620)\n\t\t\telIsCancel = ( typeof this.options.cancel === \"string\" && event.target.nodeName ?\n\t\t\t\t$( event.target ).closest( this.options.cancel ).length : false );\n\t\tif ( !btnIsLeft || elIsCancel || !this._mouseCapture( event ) ) {\n\t\t\treturn true;\n\t\t}\n\n\t\tthis.mouseDelayMet = !this.options.delay;\n\t\tif ( !this.mouseDelayMet ) {\n\t\t\tthis._mouseDelayTimer = setTimeout( function() {\n\t\t\t\tthat.mouseDelayMet = true;\n\t\t\t}, this.options.delay );\n\t\t}\n\n\t\tif ( this._mouseDistanceMet( event ) && this._mouseDelayMet( event ) ) {\n\t\t\tthis._mouseStarted = ( this._mouseStart( event ) !== false );\n\t\t\tif ( !this._mouseStarted ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\t// Click event may never have fired (Gecko & Opera)\n\t\tif ( true === $.data( event.target, this.widgetName + \".preventClickEvent\" ) ) {\n\t\t\t$.removeData( event.target, this.widgetName + \".preventClickEvent\" );\n\t\t}\n\n\t\t// These delegates are required to keep context\n\t\tthis._mouseMoveDelegate = function( event ) {\n\t\t\treturn that._mouseMove( event );\n\t\t};\n\t\tthis._mouseUpDelegate = function( event ) {\n\t\t\treturn that._mouseUp( event );\n\t\t};\n\n\t\tthis.document\n\t\t\t.on( \"mousemove.\" + this.widgetName, this._mouseMoveDelegate )\n\t\t\t.on( \"mouseup.\" + this.widgetName, this._mouseUpDelegate );\n\n\t\tevent.preventDefault();\n\n\t\tmouseHandled = true;\n\t\treturn true;\n\t},\n\n\t_mouseMove: function( event ) {\n\n\t\t// Only check for mouseups outside the document if you've moved inside the document\n\t\t// at least once. This prevents the firing of mouseup in the case of IE<9, which will\n\t\t// fire a mousemove event if content is placed under the cursor. See #7778\n\t\t// Support: IE <9\n\t\tif ( this._mouseMoved ) {\n\n\t\t\t// IE mouseup check - mouseup happened when mouse was out of window\n\t\t\tif ( $.ui.ie && ( !document.documentMode || document.documentMode < 9 ) &&\n\t\t\t\t\t!event.button ) {\n\t\t\t\treturn this._mouseUp( event );\n\n\t\t\t// Iframe mouseup check - mouseup occurred in another document\n\t\t\t} else if ( !event.which ) {\n\n\t\t\t\t// Support: Safari <=8 - 9\n\t\t\t\t// Safari sets which to 0 if you press any of the following keys\n\t\t\t\t// during a drag (#14461)\n\t\t\t\tif ( event.originalEvent.altKey || event.originalEvent.ctrlKey ||\n\t\t\t\t\t\tevent.originalEvent.metaKey || event.originalEvent.shiftKey ) {\n\t\t\t\t\tthis.ignoreMissingWhich = true;\n\t\t\t\t} else if ( !this.ignoreMissingWhich ) {\n\t\t\t\t\treturn this._mouseUp( event );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( event.which || event.button ) {\n\t\t\tthis._mouseMoved = true;\n\t\t}\n\n\t\tif ( this._mouseStarted ) {\n\t\t\tthis._mouseDrag( event );\n\t\t\treturn event.preventDefault();\n\t\t}\n\n\t\tif ( this._mouseDistanceMet( event ) && this._mouseDelayMet( event ) ) {\n\t\t\tthis._mouseStarted =\n\t\t\t\t( this._mouseStart( this._mouseDownEvent, event ) !== false );\n\t\t\t( this._mouseStarted ? this._mouseDrag( event ) : this._mouseUp( event ) );\n\t\t}\n\n\t\treturn !this._mouseStarted;\n\t},\n\n\t_mouseUp: function( event ) {\n\t\tthis.document\n\t\t\t.off( \"mousemove.\" + this.widgetName, this._mouseMoveDelegate )\n\t\t\t.off( \"mouseup.\" + this.widgetName, this._mouseUpDelegate );\n\n\t\tif ( this._mouseStarted ) {\n\t\t\tthis._mouseStarted = false;\n\n\t\t\tif ( event.target === this._mouseDownEvent.target ) {\n\t\t\t\t$.data( event.target, this.widgetName + \".preventClickEvent\", true );\n\t\t\t}\n\n\t\t\tthis._mouseStop( event );\n\t\t}\n\n\t\tif ( this._mouseDelayTimer ) {\n\t\t\tclearTimeout( this._mouseDelayTimer );\n\t\t\tdelete this._mouseDelayTimer;\n\t\t}\n\n\t\tthis.ignoreMissingWhich = false;\n\t\tmouseHandled = false;\n\t\tevent.preventDefault();\n\t},\n\n\t_mouseDistanceMet: function( event ) {\n\t\treturn ( Math.max(\n\t\t\t\tMath.abs( this._mouseDownEvent.pageX - event.pageX ),\n\t\t\t\tMath.abs( this._mouseDownEvent.pageY - event.pageY )\n\t\t\t) >= this.options.distance\n\t\t);\n\t},\n\n\t_mouseDelayMet: function( /* event */ ) {\n\t\treturn this.mouseDelayMet;\n\t},\n\n\t// These are placeholder methods, to be overriden by extending plugin\n\t_mouseStart: function( /* event */ ) {},\n\t_mouseDrag: function( /* event */ ) {},\n\t_mouseStop: function( /* event */ ) {},\n\t_mouseCapture: function( /* event */ ) { return true; }\n} );\n\n\n\n\n// $.ui.plugin is deprecated. Use $.widget() extensions instead.\nvar plugin = $.ui.plugin = {\n\tadd: function( module, option, set ) {\n\t\tvar i,\n\t\t\tproto = $.ui[ module ].prototype;\n\t\tfor ( i in set ) {\n\t\t\tproto.plugins[ i ] = proto.plugins[ i ] || [];\n\t\t\tproto.plugins[ i ].push( [ option, set[ i ] ] );\n\t\t}\n\t},\n\tcall: function( instance, name, args, allowDisconnected ) {\n\t\tvar i,\n\t\t\tset = instance.plugins[ name ];\n\n\t\tif ( !set ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( !allowDisconnected && ( !instance.element[ 0 ].parentNode ||\n\t\t\t\tinstance.element[ 0 ].parentNode.nodeType === 11 ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tfor ( i = 0; i < set.length; i++ ) {\n\t\t\tif ( instance.options[ set[ i ][ 0 ] ] ) {\n\t\t\t\tset[ i ][ 1 ].apply( instance.element, args );\n\t\t\t}\n\t\t}\n\t}\n};\n\n\n\nvar safeBlur = $.ui.safeBlur = function( element ) {\n\n\t// Support: IE9 - 10 only\n\t// If the <body> is blurred, IE will switch windows, see #9420\n\tif ( element && element.nodeName.toLowerCase() !== \"body\" ) {\n\t\t$( element ).trigger( \"blur\" );\n\t}\n};\n\n\n/*!\n * jQuery UI Draggable 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Draggable\n//>>group: Interactions\n//>>description: Enables dragging functionality for any element.\n//>>docs: http://api.jqueryui.com/draggable/\n//>>demos: http://jqueryui.com/draggable/\n//>>css.structure: ../../themes/base/draggable.css\n\n\n\n$.widget( \"ui.draggable\", $.ui.mouse, {\n\tversion: \"1.12.1\",\n\twidgetEventPrefix: \"drag\",\n\toptions: {\n\t\taddClasses: true,\n\t\tappendTo: \"parent\",\n\t\taxis: false,\n\t\tconnectToSortable: false,\n\t\tcontainment: false,\n\t\tcursor: \"auto\",\n\t\tcursorAt: false,\n\t\tgrid: false,\n\t\thandle: false,\n\t\thelper: \"original\",\n\t\tiframeFix: false,\n\t\topacity: false,\n\t\trefreshPositions: false,\n\t\trevert: false,\n\t\trevertDuration: 500,\n\t\tscope: \"default\",\n\t\tscroll: true,\n\t\tscrollSensitivity: 20,\n\t\tscrollSpeed: 20,\n\t\tsnap: false,\n\t\tsnapMode: \"both\",\n\t\tsnapTolerance: 20,\n\t\tstack: false,\n\t\tzIndex: false,\n\n\t\t// Callbacks\n\t\tdrag: null,\n\t\tstart: null,\n\t\tstop: null\n\t},\n\t_create: function() {\n\n\t\tif ( this.options.helper === \"original\" ) {\n\t\t\tthis._setPositionRelative();\n\t\t}\n\t\tif ( this.options.addClasses ) {\n\t\t\tthis._addClass( \"ui-draggable\" );\n\t\t}\n\t\tthis._setHandleClassName();\n\n\t\tthis._mouseInit();\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tthis._super( key, value );\n\t\tif ( key === \"handle\" ) {\n\t\t\tthis._removeHandleClassName();\n\t\t\tthis._setHandleClassName();\n\t\t}\n\t},\n\n\t_destroy: function() {\n\t\tif ( ( this.helper || this.element ).is( \".ui-draggable-dragging\" ) ) {\n\t\t\tthis.destroyOnClear = true;\n\t\t\treturn;\n\t\t}\n\t\tthis._removeHandleClassName();\n\t\tthis._mouseDestroy();\n\t},\n\n\t_mouseCapture: function( event ) {\n\t\tvar o = this.options;\n\n\t\t// Among others, prevent a drag on a resizable-handle\n\t\tif ( this.helper || o.disabled ||\n\t\t\t\t$( event.target ).closest( \".ui-resizable-handle\" ).length > 0 ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t//Quit if we're not on a valid handle\n\t\tthis.handle = this._getHandle( event );\n\t\tif ( !this.handle ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tthis._blurActiveElement( event );\n\n\t\tthis._blockFrames( o.iframeFix === true ? \"iframe\" : o.iframeFix );\n\n\t\treturn true;\n\n\t},\n\n\t_blockFrames: function( selector ) {\n\t\tthis.iframeBlocks = this.document.find( selector ).map( function() {\n\t\t\tvar iframe = $( this );\n\n\t\t\treturn $( \"<div>\" )\n\t\t\t\t.css( \"position\", \"absolute\" )\n\t\t\t\t.appendTo( iframe.parent() )\n\t\t\t\t.outerWidth( iframe.outerWidth() )\n\t\t\t\t.outerHeight( iframe.outerHeight() )\n\t\t\t\t.offset( iframe.offset() )[ 0 ];\n\t\t} );\n\t},\n\n\t_unblockFrames: function() {\n\t\tif ( this.iframeBlocks ) {\n\t\t\tthis.iframeBlocks.remove();\n\t\t\tdelete this.iframeBlocks;\n\t\t}\n\t},\n\n\t_blurActiveElement: function( event ) {\n\t\tvar activeElement = $.ui.safeActiveElement( this.document[ 0 ] ),\n\t\t\ttarget = $( event.target );\n\n\t\t// Don't blur if the event occurred on an element that is within\n\t\t// the currently focused element\n\t\t// See #10527, #12472\n\t\tif ( target.closest( activeElement ).length ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Blur any element that currently has focus, see #4261\n\t\t$.ui.safeBlur( activeElement );\n\t},\n\n\t_mouseStart: function( event ) {\n\n\t\tvar o = this.options;\n\n\t\t//Create and append the visible helper\n\t\tthis.helper = this._createHelper( event );\n\n\t\tthis._addClass( this.helper, \"ui-draggable-dragging\" );\n\n\t\t//Cache the helper size\n\t\tthis._cacheHelperProportions();\n\n\t\t//If ddmanager is used for droppables, set the global draggable\n\t\tif ( $.ui.ddmanager ) {\n\t\t\t$.ui.ddmanager.current = this;\n\t\t}\n\n\t\t/*\n\t\t * - Position generation -\n\t\t * This block generates everything position related - it's the core of draggables.\n\t\t */\n\n\t\t//Cache the margins of the original element\n\t\tthis._cacheMargins();\n\n\t\t//Store the helper's css position\n\t\tthis.cssPosition = this.helper.css( \"position\" );\n\t\tthis.scrollParent = this.helper.scrollParent( true );\n\t\tthis.offsetParent = this.helper.offsetParent();\n\t\tthis.hasFixedAncestor = this.helper.parents().filter( function() {\n\t\t\t\treturn $( this ).css( \"position\" ) === \"fixed\";\n\t\t\t} ).length > 0;\n\n\t\t//The element's absolute position on the page minus margins\n\t\tthis.positionAbs = this.element.offset();\n\t\tthis._refreshOffsets( event );\n\n\t\t//Generate the original position\n\t\tthis.originalPosition = this.position = this._generatePosition( event, false );\n\t\tthis.originalPageX = event.pageX;\n\t\tthis.originalPageY = event.pageY;\n\n\t\t//Adjust the mouse offset relative to the helper if \"cursorAt\" is supplied\n\t\t( o.cursorAt && this._adjustOffsetFromHelper( o.cursorAt ) );\n\n\t\t//Set a containment if given in the options\n\t\tthis._setContainment();\n\n\t\t//Trigger event + callbacks\n\t\tif ( this._trigger( \"start\", event ) === false ) {\n\t\t\tthis._clear();\n\t\t\treturn false;\n\t\t}\n\n\t\t//Recache the helper size\n\t\tthis._cacheHelperProportions();\n\n\t\t//Prepare the droppable offsets\n\t\tif ( $.ui.ddmanager && !o.dropBehaviour ) {\n\t\t\t$.ui.ddmanager.prepareOffsets( this, event );\n\t\t}\n\n\t\t// Execute the drag once - this causes the helper not to be visible before getting its\n\t\t// correct position\n\t\tthis._mouseDrag( event, true );\n\n\t\t// If the ddmanager is used for droppables, inform the manager that dragging has started\n\t\t// (see #5003)\n\t\tif ( $.ui.ddmanager ) {\n\t\t\t$.ui.ddmanager.dragStart( this, event );\n\t\t}\n\n\t\treturn true;\n\t},\n\n\t_refreshOffsets: function( event ) {\n\t\tthis.offset = {\n\t\t\ttop: this.positionAbs.top - this.margins.top,\n\t\t\tleft: this.positionAbs.left - this.margins.left,\n\t\t\tscroll: false,\n\t\t\tparent: this._getParentOffset(),\n\t\t\trelative: this._getRelativeOffset()\n\t\t};\n\n\t\tthis.offset.click = {\n\t\t\tleft: event.pageX - this.offset.left,\n\t\t\ttop: event.pageY - this.offset.top\n\t\t};\n\t},\n\n\t_mouseDrag: function( event, noPropagation ) {\n\n\t\t// reset any necessary cached properties (see #5009)\n\t\tif ( this.hasFixedAncestor ) {\n\t\t\tthis.offset.parent = this._getParentOffset();\n\t\t}\n\n\t\t//Compute the helpers position\n\t\tthis.position = this._generatePosition( event, true );\n\t\tthis.positionAbs = this._convertPositionTo( \"absolute\" );\n\n\t\t//Call plugins and callbacks and use the resulting position if something is returned\n\t\tif ( !noPropagation ) {\n\t\t\tvar ui = this._uiHash();\n\t\t\tif ( this._trigger( \"drag\", event, ui ) === false ) {\n\t\t\t\tthis._mouseUp( new $.Event( \"mouseup\", event ) );\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tthis.position = ui.position;\n\t\t}\n\n\t\tthis.helper[ 0 ].style.left = this.position.left + \"px\";\n\t\tthis.helper[ 0 ].style.top = this.position.top + \"px\";\n\n\t\tif ( $.ui.ddmanager ) {\n\t\t\t$.ui.ddmanager.drag( this, event );\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t_mouseStop: function( event ) {\n\n\t\t//If we are using droppables, inform the manager about the drop\n\t\tvar that = this,\n\t\t\tdropped = false;\n\t\tif ( $.ui.ddmanager && !this.options.dropBehaviour ) {\n\t\t\tdropped = $.ui.ddmanager.drop( this, event );\n\t\t}\n\n\t\t//if a drop comes from outside (a sortable)\n\t\tif ( this.dropped ) {\n\t\t\tdropped = this.dropped;\n\t\t\tthis.dropped = false;\n\t\t}\n\n\t\tif ( ( this.options.revert === \"invalid\" && !dropped ) ||\n\t\t\t\t( this.options.revert === \"valid\" && dropped ) ||\n\t\t\t\tthis.options.revert === true || ( $.isFunction( this.options.revert ) &&\n\t\t\t\tthis.options.revert.call( this.element, dropped ) )\n\t\t) {\n\t\t\t$( this.helper ).animate(\n\t\t\t\tthis.originalPosition,\n\t\t\t\tparseInt( this.options.revertDuration, 10 ),\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( that._trigger( \"stop\", event ) !== false ) {\n\t\t\t\t\t\tthat._clear();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t);\n\t\t} else {\n\t\t\tif ( this._trigger( \"stop\", event ) !== false ) {\n\t\t\t\tthis._clear();\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t_mouseUp: function( event ) {\n\t\tthis._unblockFrames();\n\n\t\t// If the ddmanager is used for droppables, inform the manager that dragging has stopped\n\t\t// (see #5003)\n\t\tif ( $.ui.ddmanager ) {\n\t\t\t$.ui.ddmanager.dragStop( this, event );\n\t\t}\n\n\t\t// Only need to focus if the event occurred on the draggable itself, see #10527\n\t\tif ( this.handleElement.is( event.target ) ) {\n\n\t\t\t// The interaction is over; whether or not the click resulted in a drag,\n\t\t\t// focus the element\n\t\t\tthis.element.trigger( \"focus\" );\n\t\t}\n\n\t\treturn $.ui.mouse.prototype._mouseUp.call( this, event );\n\t},\n\n\tcancel: function() {\n\n\t\tif ( this.helper.is( \".ui-draggable-dragging\" ) ) {\n\t\t\tthis._mouseUp( new $.Event( \"mouseup\", { target: this.element[ 0 ] } ) );\n\t\t} else {\n\t\t\tthis._clear();\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\t_getHandle: function( event ) {\n\t\treturn this.options.handle ?\n\t\t\t!!$( event.target ).closest( this.element.find( this.options.handle ) ).length :\n\t\t\ttrue;\n\t},\n\n\t_setHandleClassName: function() {\n\t\tthis.handleElement = this.options.handle ?\n\t\t\tthis.element.find( this.options.handle ) : this.element;\n\t\tthis._addClass( this.handleElement, \"ui-draggable-handle\" );\n\t},\n\n\t_removeHandleClassName: function() {\n\t\tthis._removeClass( this.handleElement, \"ui-draggable-handle\" );\n\t},\n\n\t_createHelper: function( event ) {\n\n\t\tvar o = this.options,\n\t\t\thelperIsFunction = $.isFunction( o.helper ),\n\t\t\thelper = helperIsFunction ?\n\t\t\t\t$( o.helper.apply( this.element[ 0 ], [ event ] ) ) :\n\t\t\t\t( o.helper === \"clone\" ?\n\t\t\t\t\tthis.element.clone().removeAttr( \"id\" ) :\n\t\t\t\t\tthis.element );\n\n\t\tif ( !helper.parents( \"body\" ).length ) {\n\t\t\thelper.appendTo( ( o.appendTo === \"parent\" ?\n\t\t\t\tthis.element[ 0 ].parentNode :\n\t\t\t\to.appendTo ) );\n\t\t}\n\n\t\t// Http://bugs.jqueryui.com/ticket/9446\n\t\t// a helper function can return the original element\n\t\t// which wouldn't have been set to relative in _create\n\t\tif ( helperIsFunction && helper[ 0 ] === this.element[ 0 ] ) {\n\t\t\tthis._setPositionRelative();\n\t\t}\n\n\t\tif ( helper[ 0 ] !== this.element[ 0 ] &&\n\t\t\t\t!( /(fixed|absolute)/ ).test( helper.css( \"position\" ) ) ) {\n\t\t\thelper.css( \"position\", \"absolute\" );\n\t\t}\n\n\t\treturn helper;\n\n\t},\n\n\t_setPositionRelative: function() {\n\t\tif ( !( /^(?:r|a|f)/ ).test( this.element.css( \"position\" ) ) ) {\n\t\t\tthis.element[ 0 ].style.position = \"relative\";\n\t\t}\n\t},\n\n\t_adjustOffsetFromHelper: function( obj ) {\n\t\tif ( typeof obj === \"string\" ) {\n\t\t\tobj = obj.split( \" \" );\n\t\t}\n\t\tif ( $.isArray( obj ) ) {\n\t\t\tobj = { left: +obj[ 0 ], top: +obj[ 1 ] || 0 };\n\t\t}\n\t\tif ( \"left\" in obj ) {\n\t\t\tthis.offset.click.left = obj.left + this.margins.left;\n\t\t}\n\t\tif ( \"right\" in obj ) {\n\t\t\tthis.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;\n\t\t}\n\t\tif ( \"top\" in obj ) {\n\t\t\tthis.offset.click.top = obj.top + this.margins.top;\n\t\t}\n\t\tif ( \"bottom\" in obj ) {\n\t\t\tthis.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;\n\t\t}\n\t},\n\n\t_isRootNode: function( element ) {\n\t\treturn ( /(html|body)/i ).test( element.tagName ) || element === this.document[ 0 ];\n\t},\n\n\t_getParentOffset: function() {\n\n\t\t//Get the offsetParent and cache its position\n\t\tvar po = this.offsetParent.offset(),\n\t\t\tdocument = this.document[ 0 ];\n\n\t\t// This is a special case where we need to modify a offset calculated on start, since the\n\t\t// following happened:\n\t\t// 1. The position of the helper is absolute, so it's position is calculated based on the\n\t\t// next positioned parent\n\t\t// 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't\n\t\t// the document, which means that the scroll is included in the initial calculation of the\n\t\t// offset of the parent, and never recalculated upon drag\n\t\tif ( this.cssPosition === \"absolute\" && this.scrollParent[ 0 ] !== document &&\n\t\t\t\t$.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) {\n\t\t\tpo.left += this.scrollParent.scrollLeft();\n\t\t\tpo.top += this.scrollParent.scrollTop();\n\t\t}\n\n\t\tif ( this._isRootNode( this.offsetParent[ 0 ] ) ) {\n\t\t\tpo = { top: 0, left: 0 };\n\t\t}\n\n\t\treturn {\n\t\t\ttop: po.top + ( parseInt( this.offsetParent.css( \"borderTopWidth\" ), 10 ) || 0 ),\n\t\t\tleft: po.left + ( parseInt( this.offsetParent.css( \"borderLeftWidth\" ), 10 ) || 0 )\n\t\t};\n\n\t},\n\n\t_getRelativeOffset: function() {\n\t\tif ( this.cssPosition !== \"relative\" ) {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t\tvar p = this.element.position(),\n\t\t\tscrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] );\n\n\t\treturn {\n\t\t\ttop: p.top - ( parseInt( this.helper.css( \"top\" ), 10 ) || 0 ) +\n\t\t\t\t( !scrollIsRootNode ? this.scrollParent.scrollTop() : 0 ),\n\t\t\tleft: p.left - ( parseInt( this.helper.css( \"left\" ), 10 ) || 0 ) +\n\t\t\t\t( !scrollIsRootNode ? this.scrollParent.scrollLeft() : 0 )\n\t\t};\n\n\t},\n\n\t_cacheMargins: function() {\n\t\tthis.margins = {\n\t\t\tleft: ( parseInt( this.element.css( \"marginLeft\" ), 10 ) || 0 ),\n\t\t\ttop: ( parseInt( this.element.css( \"marginTop\" ), 10 ) || 0 ),\n\t\t\tright: ( parseInt( this.element.css( \"marginRight\" ), 10 ) || 0 ),\n\t\t\tbottom: ( parseInt( this.element.css( \"marginBottom\" ), 10 ) || 0 )\n\t\t};\n\t},\n\n\t_cacheHelperProportions: function() {\n\t\tthis.helperProportions = {\n\t\t\twidth: this.helper.outerWidth(),\n\t\t\theight: this.helper.outerHeight()\n\t\t};\n\t},\n\n\t_setContainment: function() {\n\n\t\tvar isUserScrollable, c, ce,\n\t\t\to = this.options,\n\t\t\tdocument = this.document[ 0 ];\n\n\t\tthis.relativeContainer = null;\n\n\t\tif ( !o.containment ) {\n\t\t\tthis.containment = null;\n\t\t\treturn;\n\t\t}\n\n\t\tif ( o.containment === \"window\" ) {\n\t\t\tthis.containment = [\n\t\t\t\t$( window ).scrollLeft() - this.offset.relative.left - this.offset.parent.left,\n\t\t\t\t$( window ).scrollTop() - this.offset.relative.top - this.offset.parent.top,\n\t\t\t\t$( window ).scrollLeft() + $( window ).width() -\n\t\t\t\t\tthis.helperProportions.width - this.margins.left,\n\t\t\t\t$( window ).scrollTop() +\n\t\t\t\t\t( $( window ).height() || document.body.parentNode.scrollHeight ) -\n\t\t\t\t\tthis.helperProportions.height - this.margins.top\n\t\t\t];\n\t\t\treturn;\n\t\t}\n\n\t\tif ( o.containment === \"document\" ) {\n\t\t\tthis.containment = [\n\t\t\t\t0,\n\t\t\t\t0,\n\t\t\t\t$( document ).width() - this.helperProportions.width - this.margins.left,\n\t\t\t\t( $( document ).height() || document.body.parentNode.scrollHeight ) -\n\t\t\t\t\tthis.helperProportions.height - this.margins.top\n\t\t\t];\n\t\t\treturn;\n\t\t}\n\n\t\tif ( o.containment.constructor === Array ) {\n\t\t\tthis.containment = o.containment;\n\t\t\treturn;\n\t\t}\n\n\t\tif ( o.containment === \"parent\" ) {\n\t\t\to.containment = this.helper[ 0 ].parentNode;\n\t\t}\n\n\t\tc = $( o.containment );\n\t\tce = c[ 0 ];\n\n\t\tif ( !ce ) {\n\t\t\treturn;\n\t\t}\n\n\t\tisUserScrollable = /(scroll|auto)/.test( c.css( \"overflow\" ) );\n\n\t\tthis.containment = [\n\t\t\t( parseInt( c.css( \"borderLeftWidth\" ), 10 ) || 0 ) +\n\t\t\t\t( parseInt( c.css( \"paddingLeft\" ), 10 ) || 0 ),\n\t\t\t( parseInt( c.css( \"borderTopWidth\" ), 10 ) || 0 ) +\n\t\t\t\t( parseInt( c.css( \"paddingTop\" ), 10 ) || 0 ),\n\t\t\t( isUserScrollable ? Math.max( ce.scrollWidth, ce.offsetWidth ) : ce.offsetWidth ) -\n\t\t\t\t( parseInt( c.css( \"borderRightWidth\" ), 10 ) || 0 ) -\n\t\t\t\t( parseInt( c.css( \"paddingRight\" ), 10 ) || 0 ) -\n\t\t\t\tthis.helperProportions.width -\n\t\t\t\tthis.margins.left -\n\t\t\t\tthis.margins.right,\n\t\t\t( isUserScrollable ? Math.max( ce.scrollHeight, ce.offsetHeight ) : ce.offsetHeight ) -\n\t\t\t\t( parseInt( c.css( \"borderBottomWidth\" ), 10 ) || 0 ) -\n\t\t\t\t( parseInt( c.css( \"paddingBottom\" ), 10 ) || 0 ) -\n\t\t\t\tthis.helperProportions.height -\n\t\t\t\tthis.margins.top -\n\t\t\t\tthis.margins.bottom\n\t\t];\n\t\tthis.relativeContainer = c;\n\t},\n\n\t_convertPositionTo: function( d, pos ) {\n\n\t\tif ( !pos ) {\n\t\t\tpos = this.position;\n\t\t}\n\n\t\tvar mod = d === \"absolute\" ? 1 : -1,\n\t\t\tscrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] );\n\n\t\treturn {\n\t\t\ttop: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpos.top\t+\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.top * mod +\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.top * mod -\n\t\t\t\t( ( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.offset.scroll.top :\n\t\t\t\t\t( scrollIsRootNode ? 0 : this.offset.scroll.top ) ) * mod )\n\t\t\t),\n\t\t\tleft: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpos.left +\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.left * mod +\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.left * mod\t-\n\t\t\t\t( ( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.offset.scroll.left :\n\t\t\t\t\t( scrollIsRootNode ? 0 : this.offset.scroll.left ) ) * mod )\n\t\t\t)\n\t\t};\n\n\t},\n\n\t_generatePosition: function( event, constrainPosition ) {\n\n\t\tvar containment, co, top, left,\n\t\t\to = this.options,\n\t\t\tscrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] ),\n\t\t\tpageX = event.pageX,\n\t\t\tpageY = event.pageY;\n\n\t\t// Cache the scroll\n\t\tif ( !scrollIsRootNode || !this.offset.scroll ) {\n\t\t\tthis.offset.scroll = {\n\t\t\t\ttop: this.scrollParent.scrollTop(),\n\t\t\t\tleft: this.scrollParent.scrollLeft()\n\t\t\t};\n\t\t}\n\n\t\t/*\n\t\t * - Position constraining -\n\t\t * Constrain the position to a mix of grid, containment.\n\t\t */\n\n\t\t// If we are not dragging yet, we won't check for options\n\t\tif ( constrainPosition ) {\n\t\t\tif ( this.containment ) {\n\t\t\t\tif ( this.relativeContainer ) {\n\t\t\t\t\tco = this.relativeContainer.offset();\n\t\t\t\t\tcontainment = [\n\t\t\t\t\t\tthis.containment[ 0 ] + co.left,\n\t\t\t\t\t\tthis.containment[ 1 ] + co.top,\n\t\t\t\t\t\tthis.containment[ 2 ] + co.left,\n\t\t\t\t\t\tthis.containment[ 3 ] + co.top\n\t\t\t\t\t];\n\t\t\t\t} else {\n\t\t\t\t\tcontainment = this.containment;\n\t\t\t\t}\n\n\t\t\t\tif ( event.pageX - this.offset.click.left < containment[ 0 ] ) {\n\t\t\t\t\tpageX = containment[ 0 ] + this.offset.click.left;\n\t\t\t\t}\n\t\t\t\tif ( event.pageY - this.offset.click.top < containment[ 1 ] ) {\n\t\t\t\t\tpageY = containment[ 1 ] + this.offset.click.top;\n\t\t\t\t}\n\t\t\t\tif ( event.pageX - this.offset.click.left > containment[ 2 ] ) {\n\t\t\t\t\tpageX = containment[ 2 ] + this.offset.click.left;\n\t\t\t\t}\n\t\t\t\tif ( event.pageY - this.offset.click.top > containment[ 3 ] ) {\n\t\t\t\t\tpageY = containment[ 3 ] + this.offset.click.top;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( o.grid ) {\n\n\t\t\t\t//Check for grid elements set to 0 to prevent divide by 0 error causing invalid\n\t\t\t\t// argument errors in IE (see ticket #6950)\n\t\t\t\ttop = o.grid[ 1 ] ? this.originalPageY + Math.round( ( pageY -\n\t\t\t\t\tthis.originalPageY ) / o.grid[ 1 ] ) * o.grid[ 1 ] : this.originalPageY;\n\t\t\t\tpageY = containment ? ( ( top - this.offset.click.top >= containment[ 1 ] ||\n\t\t\t\t\ttop - this.offset.click.top > containment[ 3 ] ) ?\n\t\t\t\t\t\ttop :\n\t\t\t\t\t\t( ( top - this.offset.click.top >= containment[ 1 ] ) ?\n\t\t\t\t\t\t\ttop - o.grid[ 1 ] : top + o.grid[ 1 ] ) ) : top;\n\n\t\t\t\tleft = o.grid[ 0 ] ? this.originalPageX +\n\t\t\t\t\tMath.round( ( pageX - this.originalPageX ) / o.grid[ 0 ] ) * o.grid[ 0 ] :\n\t\t\t\t\tthis.originalPageX;\n\t\t\t\tpageX = containment ? ( ( left - this.offset.click.left >= containment[ 0 ] ||\n\t\t\t\t\tleft - this.offset.click.left > containment[ 2 ] ) ?\n\t\t\t\t\t\tleft :\n\t\t\t\t\t\t( ( left - this.offset.click.left >= containment[ 0 ] ) ?\n\t\t\t\t\t\t\tleft - o.grid[ 0 ] : left + o.grid[ 0 ] ) ) : left;\n\t\t\t}\n\n\t\t\tif ( o.axis === \"y\" ) {\n\t\t\t\tpageX = this.originalPageX;\n\t\t\t}\n\n\t\t\tif ( o.axis === \"x\" ) {\n\t\t\t\tpageY = this.originalPageY;\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\ttop: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpageY -\n\n\t\t\t\t// Click offset (relative to the element)\n\t\t\t\tthis.offset.click.top -\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.top -\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.top +\n\t\t\t\t( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.offset.scroll.top :\n\t\t\t\t\t( scrollIsRootNode ? 0 : this.offset.scroll.top ) )\n\t\t\t),\n\t\t\tleft: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpageX -\n\n\t\t\t\t// Click offset (relative to the element)\n\t\t\t\tthis.offset.click.left -\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.left -\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.left +\n\t\t\t\t( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.offset.scroll.left :\n\t\t\t\t\t( scrollIsRootNode ? 0 : this.offset.scroll.left ) )\n\t\t\t)\n\t\t};\n\n\t},\n\n\t_clear: function() {\n\t\tthis._removeClass( this.helper, \"ui-draggable-dragging\" );\n\t\tif ( this.helper[ 0 ] !== this.element[ 0 ] && !this.cancelHelperRemoval ) {\n\t\t\tthis.helper.remove();\n\t\t}\n\t\tthis.helper = null;\n\t\tthis.cancelHelperRemoval = false;\n\t\tif ( this.destroyOnClear ) {\n\t\t\tthis.destroy();\n\t\t}\n\t},\n\n\t// From now on bulk stuff - mainly helpers\n\n\t_trigger: function( type, event, ui ) {\n\t\tui = ui || this._uiHash();\n\t\t$.ui.plugin.call( this, type, [ event, ui, this ], true );\n\n\t\t// Absolute position and offset (see #6884 ) have to be recalculated after plugins\n\t\tif ( /^(drag|start|stop)/.test( type ) ) {\n\t\t\tthis.positionAbs = this._convertPositionTo( \"absolute\" );\n\t\t\tui.offset = this.positionAbs;\n\t\t}\n\t\treturn $.Widget.prototype._trigger.call( this, type, event, ui );\n\t},\n\n\tplugins: {},\n\n\t_uiHash: function() {\n\t\treturn {\n\t\t\thelper: this.helper,\n\t\t\tposition: this.position,\n\t\t\toriginalPosition: this.originalPosition,\n\t\t\toffset: this.positionAbs\n\t\t};\n\t}\n\n} );\n\n$.ui.plugin.add( \"draggable\", \"connectToSortable\", {\n\tstart: function( event, ui, draggable ) {\n\t\tvar uiSortable = $.extend( {}, ui, {\n\t\t\titem: draggable.element\n\t\t} );\n\n\t\tdraggable.sortables = [];\n\t\t$( draggable.options.connectToSortable ).each( function() {\n\t\t\tvar sortable = $( this ).sortable( \"instance\" );\n\n\t\t\tif ( sortable && !sortable.options.disabled ) {\n\t\t\t\tdraggable.sortables.push( sortable );\n\n\t\t\t\t// RefreshPositions is called at drag start to refresh the containerCache\n\t\t\t\t// which is used in drag. This ensures it's initialized and synchronized\n\t\t\t\t// with any changes that might have happened on the page since initialization.\n\t\t\t\tsortable.refreshPositions();\n\t\t\t\tsortable._trigger( \"activate\", event, uiSortable );\n\t\t\t}\n\t\t} );\n\t},\n\tstop: function( event, ui, draggable ) {\n\t\tvar uiSortable = $.extend( {}, ui, {\n\t\t\titem: draggable.element\n\t\t} );\n\n\t\tdraggable.cancelHelperRemoval = false;\n\n\t\t$.each( draggable.sortables, function() {\n\t\t\tvar sortable = this;\n\n\t\t\tif ( sortable.isOver ) {\n\t\t\t\tsortable.isOver = 0;\n\n\t\t\t\t// Allow this sortable to handle removing the helper\n\t\t\t\tdraggable.cancelHelperRemoval = true;\n\t\t\t\tsortable.cancelHelperRemoval = false;\n\n\t\t\t\t// Use _storedCSS To restore properties in the sortable,\n\t\t\t\t// as this also handles revert (#9675) since the draggable\n\t\t\t\t// may have modified them in unexpected ways (#8809)\n\t\t\t\tsortable._storedCSS = {\n\t\t\t\t\tposition: sortable.placeholder.css( \"position\" ),\n\t\t\t\t\ttop: sortable.placeholder.css( \"top\" ),\n\t\t\t\t\tleft: sortable.placeholder.css( \"left\" )\n\t\t\t\t};\n\n\t\t\t\tsortable._mouseStop( event );\n\n\t\t\t\t// Once drag has ended, the sortable should return to using\n\t\t\t\t// its original helper, not the shared helper from draggable\n\t\t\t\tsortable.options.helper = sortable.options._helper;\n\t\t\t} else {\n\n\t\t\t\t// Prevent this Sortable from removing the helper.\n\t\t\t\t// However, don't set the draggable to remove the helper\n\t\t\t\t// either as another connected Sortable may yet handle the removal.\n\t\t\t\tsortable.cancelHelperRemoval = true;\n\n\t\t\t\tsortable._trigger( \"deactivate\", event, uiSortable );\n\t\t\t}\n\t\t} );\n\t},\n\tdrag: function( event, ui, draggable ) {\n\t\t$.each( draggable.sortables, function() {\n\t\t\tvar innermostIntersecting = false,\n\t\t\t\tsortable = this;\n\n\t\t\t// Copy over variables that sortable's _intersectsWith uses\n\t\t\tsortable.positionAbs = draggable.positionAbs;\n\t\t\tsortable.helperProportions = draggable.helperProportions;\n\t\t\tsortable.offset.click = draggable.offset.click;\n\n\t\t\tif ( sortable._intersectsWith( sortable.containerCache ) ) {\n\t\t\t\tinnermostIntersecting = true;\n\n\t\t\t\t$.each( draggable.sortables, function() {\n\n\t\t\t\t\t// Copy over variables that sortable's _intersectsWith uses\n\t\t\t\t\tthis.positionAbs = draggable.positionAbs;\n\t\t\t\t\tthis.helperProportions = draggable.helperProportions;\n\t\t\t\t\tthis.offset.click = draggable.offset.click;\n\n\t\t\t\t\tif ( this !== sortable &&\n\t\t\t\t\t\t\tthis._intersectsWith( this.containerCache ) &&\n\t\t\t\t\t\t\t$.contains( sortable.element[ 0 ], this.element[ 0 ] ) ) {\n\t\t\t\t\t\tinnermostIntersecting = false;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn innermostIntersecting;\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tif ( innermostIntersecting ) {\n\n\t\t\t\t// If it intersects, we use a little isOver variable and set it once,\n\t\t\t\t// so that the move-in stuff gets fired only once.\n\t\t\t\tif ( !sortable.isOver ) {\n\t\t\t\t\tsortable.isOver = 1;\n\n\t\t\t\t\t// Store draggable's parent in case we need to reappend to it later.\n\t\t\t\t\tdraggable._parent = ui.helper.parent();\n\n\t\t\t\t\tsortable.currentItem = ui.helper\n\t\t\t\t\t\t.appendTo( sortable.element )\n\t\t\t\t\t\t.data( \"ui-sortable-item\", true );\n\n\t\t\t\t\t// Store helper option to later restore it\n\t\t\t\t\tsortable.options._helper = sortable.options.helper;\n\n\t\t\t\t\tsortable.options.helper = function() {\n\t\t\t\t\t\treturn ui.helper[ 0 ];\n\t\t\t\t\t};\n\n\t\t\t\t\t// Fire the start events of the sortable with our passed browser event,\n\t\t\t\t\t// and our own helper (so it doesn't create a new one)\n\t\t\t\t\tevent.target = sortable.currentItem[ 0 ];\n\t\t\t\t\tsortable._mouseCapture( event, true );\n\t\t\t\t\tsortable._mouseStart( event, true, true );\n\n\t\t\t\t\t// Because the browser event is way off the new appended portlet,\n\t\t\t\t\t// modify necessary variables to reflect the changes\n\t\t\t\t\tsortable.offset.click.top = draggable.offset.click.top;\n\t\t\t\t\tsortable.offset.click.left = draggable.offset.click.left;\n\t\t\t\t\tsortable.offset.parent.left -= draggable.offset.parent.left -\n\t\t\t\t\t\tsortable.offset.parent.left;\n\t\t\t\t\tsortable.offset.parent.top -= draggable.offset.parent.top -\n\t\t\t\t\t\tsortable.offset.parent.top;\n\n\t\t\t\t\tdraggable._trigger( \"toSortable\", event );\n\n\t\t\t\t\t// Inform draggable that the helper is in a valid drop zone,\n\t\t\t\t\t// used solely in the revert option to handle \"valid/invalid\".\n\t\t\t\t\tdraggable.dropped = sortable.element;\n\n\t\t\t\t\t// Need to refreshPositions of all sortables in the case that\n\t\t\t\t\t// adding to one sortable changes the location of the other sortables (#9675)\n\t\t\t\t\t$.each( draggable.sortables, function() {\n\t\t\t\t\t\tthis.refreshPositions();\n\t\t\t\t\t} );\n\n\t\t\t\t\t// Hack so receive/update callbacks work (mostly)\n\t\t\t\t\tdraggable.currentItem = draggable.element;\n\t\t\t\t\tsortable.fromOutside = draggable;\n\t\t\t\t}\n\n\t\t\t\tif ( sortable.currentItem ) {\n\t\t\t\t\tsortable._mouseDrag( event );\n\n\t\t\t\t\t// Copy the sortable's position because the draggable's can potentially reflect\n\t\t\t\t\t// a relative position, while sortable is always absolute, which the dragged\n\t\t\t\t\t// element has now become. (#8809)\n\t\t\t\t\tui.position = sortable.position;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// If it doesn't intersect with the sortable, and it intersected before,\n\t\t\t\t// we fake the drag stop of the sortable, but make sure it doesn't remove\n\t\t\t\t// the helper by using cancelHelperRemoval.\n\t\t\t\tif ( sortable.isOver ) {\n\n\t\t\t\t\tsortable.isOver = 0;\n\t\t\t\t\tsortable.cancelHelperRemoval = true;\n\n\t\t\t\t\t// Calling sortable's mouseStop would trigger a revert,\n\t\t\t\t\t// so revert must be temporarily false until after mouseStop is called.\n\t\t\t\t\tsortable.options._revert = sortable.options.revert;\n\t\t\t\t\tsortable.options.revert = false;\n\n\t\t\t\t\tsortable._trigger( \"out\", event, sortable._uiHash( sortable ) );\n\t\t\t\t\tsortable._mouseStop( event, true );\n\n\t\t\t\t\t// Restore sortable behaviors that were modfied\n\t\t\t\t\t// when the draggable entered the sortable area (#9481)\n\t\t\t\t\tsortable.options.revert = sortable.options._revert;\n\t\t\t\t\tsortable.options.helper = sortable.options._helper;\n\n\t\t\t\t\tif ( sortable.placeholder ) {\n\t\t\t\t\t\tsortable.placeholder.remove();\n\t\t\t\t\t}\n\n\t\t\t\t\t// Restore and recalculate the draggable's offset considering the sortable\n\t\t\t\t\t// may have modified them in unexpected ways. (#8809, #10669)\n\t\t\t\t\tui.helper.appendTo( draggable._parent );\n\t\t\t\t\tdraggable._refreshOffsets( event );\n\t\t\t\t\tui.position = draggable._generatePosition( event, true );\n\n\t\t\t\t\tdraggable._trigger( \"fromSortable\", event );\n\n\t\t\t\t\t// Inform draggable that the helper is no longer in a valid drop zone\n\t\t\t\t\tdraggable.dropped = false;\n\n\t\t\t\t\t// Need to refreshPositions of all sortables just in case removing\n\t\t\t\t\t// from one sortable changes the location of other sortables (#9675)\n\t\t\t\t\t$.each( draggable.sortables, function() {\n\t\t\t\t\t\tthis.refreshPositions();\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t}\n} );\n\n$.ui.plugin.add( \"draggable\", \"cursor\", {\n\tstart: function( event, ui, instance ) {\n\t\tvar t = $( \"body\" ),\n\t\t\to = instance.options;\n\n\t\tif ( t.css( \"cursor\" ) ) {\n\t\t\to._cursor = t.css( \"cursor\" );\n\t\t}\n\t\tt.css( \"cursor\", o.cursor );\n\t},\n\tstop: function( event, ui, instance ) {\n\t\tvar o = instance.options;\n\t\tif ( o._cursor ) {\n\t\t\t$( \"body\" ).css( \"cursor\", o._cursor );\n\t\t}\n\t}\n} );\n\n$.ui.plugin.add( \"draggable\", \"opacity\", {\n\tstart: function( event, ui, instance ) {\n\t\tvar t = $( ui.helper ),\n\t\t\to = instance.options;\n\t\tif ( t.css( \"opacity\" ) ) {\n\t\t\to._opacity = t.css( \"opacity\" );\n\t\t}\n\t\tt.css( \"opacity\", o.opacity );\n\t},\n\tstop: function( event, ui, instance ) {\n\t\tvar o = instance.options;\n\t\tif ( o._opacity ) {\n\t\t\t$( ui.helper ).css( \"opacity\", o._opacity );\n\t\t}\n\t}\n} );\n\n$.ui.plugin.add( \"draggable\", \"scroll\", {\n\tstart: function( event, ui, i ) {\n\t\tif ( !i.scrollParentNotHidden ) {\n\t\t\ti.scrollParentNotHidden = i.helper.scrollParent( false );\n\t\t}\n\n\t\tif ( i.scrollParentNotHidden[ 0 ] !== i.document[ 0 ] &&\n\t\t\t\ti.scrollParentNotHidden[ 0 ].tagName !== \"HTML\" ) {\n\t\t\ti.overflowOffset = i.scrollParentNotHidden.offset();\n\t\t}\n\t},\n\tdrag: function( event, ui, i  ) {\n\n\t\tvar o = i.options,\n\t\t\tscrolled = false,\n\t\t\tscrollParent = i.scrollParentNotHidden[ 0 ],\n\t\t\tdocument = i.document[ 0 ];\n\n\t\tif ( scrollParent !== document && scrollParent.tagName !== \"HTML\" ) {\n\t\t\tif ( !o.axis || o.axis !== \"x\" ) {\n\t\t\t\tif ( ( i.overflowOffset.top + scrollParent.offsetHeight ) - event.pageY <\n\t\t\t\t\t\to.scrollSensitivity ) {\n\t\t\t\t\tscrollParent.scrollTop = scrolled = scrollParent.scrollTop + o.scrollSpeed;\n\t\t\t\t} else if ( event.pageY - i.overflowOffset.top < o.scrollSensitivity ) {\n\t\t\t\t\tscrollParent.scrollTop = scrolled = scrollParent.scrollTop - o.scrollSpeed;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( !o.axis || o.axis !== \"y\" ) {\n\t\t\t\tif ( ( i.overflowOffset.left + scrollParent.offsetWidth ) - event.pageX <\n\t\t\t\t\t\to.scrollSensitivity ) {\n\t\t\t\t\tscrollParent.scrollLeft = scrolled = scrollParent.scrollLeft + o.scrollSpeed;\n\t\t\t\t} else if ( event.pageX - i.overflowOffset.left < o.scrollSensitivity ) {\n\t\t\t\t\tscrollParent.scrollLeft = scrolled = scrollParent.scrollLeft - o.scrollSpeed;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( !o.axis || o.axis !== \"x\" ) {\n\t\t\t\tif ( event.pageY - $( document ).scrollTop() < o.scrollSensitivity ) {\n\t\t\t\t\tscrolled = $( document ).scrollTop( $( document ).scrollTop() - o.scrollSpeed );\n\t\t\t\t} else if ( $( window ).height() - ( event.pageY - $( document ).scrollTop() ) <\n\t\t\t\t\t\to.scrollSensitivity ) {\n\t\t\t\t\tscrolled = $( document ).scrollTop( $( document ).scrollTop() + o.scrollSpeed );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( !o.axis || o.axis !== \"y\" ) {\n\t\t\t\tif ( event.pageX - $( document ).scrollLeft() < o.scrollSensitivity ) {\n\t\t\t\t\tscrolled = $( document ).scrollLeft(\n\t\t\t\t\t\t$( document ).scrollLeft() - o.scrollSpeed\n\t\t\t\t\t);\n\t\t\t\t} else if ( $( window ).width() - ( event.pageX - $( document ).scrollLeft() ) <\n\t\t\t\t\t\to.scrollSensitivity ) {\n\t\t\t\t\tscrolled = $( document ).scrollLeft(\n\t\t\t\t\t\t$( document ).scrollLeft() + o.scrollSpeed\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\t\tif ( scrolled !== false && $.ui.ddmanager && !o.dropBehaviour ) {\n\t\t\t$.ui.ddmanager.prepareOffsets( i, event );\n\t\t}\n\n\t}\n} );\n\n$.ui.plugin.add( \"draggable\", \"snap\", {\n\tstart: function( event, ui, i ) {\n\n\t\tvar o = i.options;\n\n\t\ti.snapElements = [];\n\n\t\t$( o.snap.constructor !== String ? ( o.snap.items || \":data(ui-draggable)\" ) : o.snap )\n\t\t\t.each( function() {\n\t\t\t\tvar $t = $( this ),\n\t\t\t\t\t$o = $t.offset();\n\t\t\t\tif ( this !== i.element[ 0 ] ) {\n\t\t\t\t\ti.snapElements.push( {\n\t\t\t\t\t\titem: this,\n\t\t\t\t\t\twidth: $t.outerWidth(), height: $t.outerHeight(),\n\t\t\t\t\t\ttop: $o.top, left: $o.left\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t} );\n\n\t},\n\tdrag: function( event, ui, inst ) {\n\n\t\tvar ts, bs, ls, rs, l, r, t, b, i, first,\n\t\t\to = inst.options,\n\t\t\td = o.snapTolerance,\n\t\t\tx1 = ui.offset.left, x2 = x1 + inst.helperProportions.width,\n\t\t\ty1 = ui.offset.top, y2 = y1 + inst.helperProportions.height;\n\n\t\tfor ( i = inst.snapElements.length - 1; i >= 0; i-- ) {\n\n\t\t\tl = inst.snapElements[ i ].left - inst.margins.left;\n\t\t\tr = l + inst.snapElements[ i ].width;\n\t\t\tt = inst.snapElements[ i ].top - inst.margins.top;\n\t\t\tb = t + inst.snapElements[ i ].height;\n\n\t\t\tif ( x2 < l - d || x1 > r + d || y2 < t - d || y1 > b + d ||\n\t\t\t\t\t!$.contains( inst.snapElements[ i ].item.ownerDocument,\n\t\t\t\t\tinst.snapElements[ i ].item ) ) {\n\t\t\t\tif ( inst.snapElements[ i ].snapping ) {\n\t\t\t\t\t( inst.options.snap.release &&\n\t\t\t\t\t\tinst.options.snap.release.call(\n\t\t\t\t\t\t\tinst.element,\n\t\t\t\t\t\t\tevent,\n\t\t\t\t\t\t\t$.extend( inst._uiHash(), { snapItem: inst.snapElements[ i ].item } )\n\t\t\t\t\t\t) );\n\t\t\t\t}\n\t\t\t\tinst.snapElements[ i ].snapping = false;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif ( o.snapMode !== \"inner\" ) {\n\t\t\t\tts = Math.abs( t - y2 ) <= d;\n\t\t\t\tbs = Math.abs( b - y1 ) <= d;\n\t\t\t\tls = Math.abs( l - x2 ) <= d;\n\t\t\t\trs = Math.abs( r - x1 ) <= d;\n\t\t\t\tif ( ts ) {\n\t\t\t\t\tui.position.top = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: t - inst.helperProportions.height,\n\t\t\t\t\t\tleft: 0\n\t\t\t\t\t} ).top;\n\t\t\t\t}\n\t\t\t\tif ( bs ) {\n\t\t\t\t\tui.position.top = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: b,\n\t\t\t\t\t\tleft: 0\n\t\t\t\t\t} ).top;\n\t\t\t\t}\n\t\t\t\tif ( ls ) {\n\t\t\t\t\tui.position.left = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\tleft: l - inst.helperProportions.width\n\t\t\t\t\t} ).left;\n\t\t\t\t}\n\t\t\t\tif ( rs ) {\n\t\t\t\t\tui.position.left = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\tleft: r\n\t\t\t\t\t} ).left;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfirst = ( ts || bs || ls || rs );\n\n\t\t\tif ( o.snapMode !== \"outer\" ) {\n\t\t\t\tts = Math.abs( t - y1 ) <= d;\n\t\t\t\tbs = Math.abs( b - y2 ) <= d;\n\t\t\t\tls = Math.abs( l - x1 ) <= d;\n\t\t\t\trs = Math.abs( r - x2 ) <= d;\n\t\t\t\tif ( ts ) {\n\t\t\t\t\tui.position.top = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: t,\n\t\t\t\t\t\tleft: 0\n\t\t\t\t\t} ).top;\n\t\t\t\t}\n\t\t\t\tif ( bs ) {\n\t\t\t\t\tui.position.top = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: b - inst.helperProportions.height,\n\t\t\t\t\t\tleft: 0\n\t\t\t\t\t} ).top;\n\t\t\t\t}\n\t\t\t\tif ( ls ) {\n\t\t\t\t\tui.position.left = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\tleft: l\n\t\t\t\t\t} ).left;\n\t\t\t\t}\n\t\t\t\tif ( rs ) {\n\t\t\t\t\tui.position.left = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\tleft: r - inst.helperProportions.width\n\t\t\t\t\t} ).left;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( !inst.snapElements[ i ].snapping && ( ts || bs || ls || rs || first ) ) {\n\t\t\t\t( inst.options.snap.snap &&\n\t\t\t\t\tinst.options.snap.snap.call(\n\t\t\t\t\t\tinst.element,\n\t\t\t\t\t\tevent,\n\t\t\t\t\t\t$.extend( inst._uiHash(), {\n\t\t\t\t\t\t\tsnapItem: inst.snapElements[ i ].item\n\t\t\t\t\t\t} ) ) );\n\t\t\t}\n\t\t\tinst.snapElements[ i ].snapping = ( ts || bs || ls || rs || first );\n\n\t\t}\n\n\t}\n} );\n\n$.ui.plugin.add( \"draggable\", \"stack\", {\n\tstart: function( event, ui, instance ) {\n\t\tvar min,\n\t\t\to = instance.options,\n\t\t\tgroup = $.makeArray( $( o.stack ) ).sort( function( a, b ) {\n\t\t\t\treturn ( parseInt( $( a ).css( \"zIndex\" ), 10 ) || 0 ) -\n\t\t\t\t\t( parseInt( $( b ).css( \"zIndex\" ), 10 ) || 0 );\n\t\t\t} );\n\n\t\tif ( !group.length ) { return; }\n\n\t\tmin = parseInt( $( group[ 0 ] ).css( \"zIndex\" ), 10 ) || 0;\n\t\t$( group ).each( function( i ) {\n\t\t\t$( this ).css( \"zIndex\", min + i );\n\t\t} );\n\t\tthis.css( \"zIndex\", ( min + group.length ) );\n\t}\n} );\n\n$.ui.plugin.add( \"draggable\", \"zIndex\", {\n\tstart: function( event, ui, instance ) {\n\t\tvar t = $( ui.helper ),\n\t\t\to = instance.options;\n\n\t\tif ( t.css( \"zIndex\" ) ) {\n\t\t\to._zIndex = t.css( \"zIndex\" );\n\t\t}\n\t\tt.css( \"zIndex\", o.zIndex );\n\t},\n\tstop: function( event, ui, instance ) {\n\t\tvar o = instance.options;\n\n\t\tif ( o._zIndex ) {\n\t\t\t$( ui.helper ).css( \"zIndex\", o._zIndex );\n\t\t}\n\t}\n} );\n\nvar widgetsDraggable = $.ui.draggable;\n\n\n/*!\n * jQuery UI Resizable 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Resizable\n//>>group: Interactions\n//>>description: Enables resize functionality for any element.\n//>>docs: http://api.jqueryui.com/resizable/\n//>>demos: http://jqueryui.com/resizable/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/resizable.css\n//>>css.theme: ../../themes/base/theme.css\n\n\n\n$.widget( \"ui.resizable\", $.ui.mouse, {\n\tversion: \"1.12.1\",\n\twidgetEventPrefix: \"resize\",\n\toptions: {\n\t\talsoResize: false,\n\t\tanimate: false,\n\t\tanimateDuration: \"slow\",\n\t\tanimateEasing: \"swing\",\n\t\taspectRatio: false,\n\t\tautoHide: false,\n\t\tclasses: {\n\t\t\t\"ui-resizable-se\": \"ui-icon ui-icon-gripsmall-diagonal-se\"\n\t\t},\n\t\tcontainment: false,\n\t\tghost: false,\n\t\tgrid: false,\n\t\thandles: \"e,s,se\",\n\t\thelper: false,\n\t\tmaxHeight: null,\n\t\tmaxWidth: null,\n\t\tminHeight: 10,\n\t\tminWidth: 10,\n\n\t\t// See #7960\n\t\tzIndex: 90,\n\n\t\t// Callbacks\n\t\tresize: null,\n\t\tstart: null,\n\t\tstop: null\n\t},\n\n\t_num: function( value ) {\n\t\treturn parseFloat( value ) || 0;\n\t},\n\n\t_isNumber: function( value ) {\n\t\treturn !isNaN( parseFloat( value ) );\n\t},\n\n\t_hasScroll: function( el, a ) {\n\n\t\tif ( $( el ).css( \"overflow\" ) === \"hidden\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar scroll = ( a && a === \"left\" ) ? \"scrollLeft\" : \"scrollTop\",\n\t\t\thas = false;\n\n\t\tif ( el[ scroll ] > 0 ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// TODO: determine which cases actually cause this to happen\n\t\t// if the element doesn't have the scroll set, see if it's possible to\n\t\t// set the scroll\n\t\tel[ scroll ] = 1;\n\t\thas = ( el[ scroll ] > 0 );\n\t\tel[ scroll ] = 0;\n\t\treturn has;\n\t},\n\n\t_create: function() {\n\n\t\tvar margins,\n\t\t\to = this.options,\n\t\t\tthat = this;\n\t\tthis._addClass( \"ui-resizable\" );\n\n\t\t$.extend( this, {\n\t\t\t_aspectRatio: !!( o.aspectRatio ),\n\t\t\taspectRatio: o.aspectRatio,\n\t\t\toriginalElement: this.element,\n\t\t\t_proportionallyResizeElements: [],\n\t\t\t_helper: o.helper || o.ghost || o.animate ? o.helper || \"ui-resizable-helper\" : null\n\t\t} );\n\n\t\t// Wrap the element if it cannot hold child nodes\n\t\tif ( this.element[ 0 ].nodeName.match( /^(canvas|textarea|input|select|button|img)$/i ) ) {\n\n\t\t\tthis.element.wrap(\n\t\t\t\t$( \"<div class='ui-wrapper' style='overflow: hidden;'></div>\" ).css( {\n\t\t\t\t\tposition: this.element.css( \"position\" ),\n\t\t\t\t\twidth: this.element.outerWidth(),\n\t\t\t\t\theight: this.element.outerHeight(),\n\t\t\t\t\ttop: this.element.css( \"top\" ),\n\t\t\t\t\tleft: this.element.css( \"left\" )\n\t\t\t\t} )\n\t\t\t);\n\n\t\t\tthis.element = this.element.parent().data(\n\t\t\t\t\"ui-resizable\", this.element.resizable( \"instance\" )\n\t\t\t);\n\n\t\t\tthis.elementIsWrapper = true;\n\n\t\t\tmargins = {\n\t\t\t\tmarginTop: this.originalElement.css( \"marginTop\" ),\n\t\t\t\tmarginRight: this.originalElement.css( \"marginRight\" ),\n\t\t\t\tmarginBottom: this.originalElement.css( \"marginBottom\" ),\n\t\t\t\tmarginLeft: this.originalElement.css( \"marginLeft\" )\n\t\t\t};\n\n\t\t\tthis.element.css( margins );\n\t\t\tthis.originalElement.css( \"margin\", 0 );\n\n\t\t\t// support: Safari\n\t\t\t// Prevent Safari textarea resize\n\t\t\tthis.originalResizeStyle = this.originalElement.css( \"resize\" );\n\t\t\tthis.originalElement.css( \"resize\", \"none\" );\n\n\t\t\tthis._proportionallyResizeElements.push( this.originalElement.css( {\n\t\t\t\tposition: \"static\",\n\t\t\t\tzoom: 1,\n\t\t\t\tdisplay: \"block\"\n\t\t\t} ) );\n\n\t\t\t// Support: IE9\n\t\t\t// avoid IE jump (hard set the margin)\n\t\t\tthis.originalElement.css( margins );\n\n\t\t\tthis._proportionallyResize();\n\t\t}\n\n\t\tthis._setupHandles();\n\n\t\tif ( o.autoHide ) {\n\t\t\t$( this.element )\n\t\t\t\t.on( \"mouseenter\", function() {\n\t\t\t\t\tif ( o.disabled ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tthat._removeClass( \"ui-resizable-autohide\" );\n\t\t\t\t\tthat._handles.show();\n\t\t\t\t} )\n\t\t\t\t.on( \"mouseleave\", function() {\n\t\t\t\t\tif ( o.disabled ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif ( !that.resizing ) {\n\t\t\t\t\t\tthat._addClass( \"ui-resizable-autohide\" );\n\t\t\t\t\t\tthat._handles.hide();\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}\n\n\t\tthis._mouseInit();\n\t},\n\n\t_destroy: function() {\n\n\t\tthis._mouseDestroy();\n\n\t\tvar wrapper,\n\t\t\t_destroy = function( exp ) {\n\t\t\t\t$( exp )\n\t\t\t\t\t.removeData( \"resizable\" )\n\t\t\t\t\t.removeData( \"ui-resizable\" )\n\t\t\t\t\t.off( \".resizable\" )\n\t\t\t\t\t.find( \".ui-resizable-handle\" )\n\t\t\t\t\t\t.remove();\n\t\t\t};\n\n\t\t// TODO: Unwrap at same DOM position\n\t\tif ( this.elementIsWrapper ) {\n\t\t\t_destroy( this.element );\n\t\t\twrapper = this.element;\n\t\t\tthis.originalElement.css( {\n\t\t\t\tposition: wrapper.css( \"position\" ),\n\t\t\t\twidth: wrapper.outerWidth(),\n\t\t\t\theight: wrapper.outerHeight(),\n\t\t\t\ttop: wrapper.css( \"top\" ),\n\t\t\t\tleft: wrapper.css( \"left\" )\n\t\t\t} ).insertAfter( wrapper );\n\t\t\twrapper.remove();\n\t\t}\n\n\t\tthis.originalElement.css( \"resize\", this.originalResizeStyle );\n\t\t_destroy( this.originalElement );\n\n\t\treturn this;\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tthis._super( key, value );\n\n\t\tswitch ( key ) {\n\t\tcase \"handles\":\n\t\t\tthis._removeHandles();\n\t\t\tthis._setupHandles();\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tbreak;\n\t\t}\n\t},\n\n\t_setupHandles: function() {\n\t\tvar o = this.options, handle, i, n, hname, axis, that = this;\n\t\tthis.handles = o.handles ||\n\t\t\t( !$( \".ui-resizable-handle\", this.element ).length ?\n\t\t\t\t\"e,s,se\" : {\n\t\t\t\t\tn: \".ui-resizable-n\",\n\t\t\t\t\te: \".ui-resizable-e\",\n\t\t\t\t\ts: \".ui-resizable-s\",\n\t\t\t\t\tw: \".ui-resizable-w\",\n\t\t\t\t\tse: \".ui-resizable-se\",\n\t\t\t\t\tsw: \".ui-resizable-sw\",\n\t\t\t\t\tne: \".ui-resizable-ne\",\n\t\t\t\t\tnw: \".ui-resizable-nw\"\n\t\t\t\t} );\n\n\t\tthis._handles = $();\n\t\tif ( this.handles.constructor === String ) {\n\n\t\t\tif ( this.handles === \"all\" ) {\n\t\t\t\tthis.handles = \"n,e,s,w,se,sw,ne,nw\";\n\t\t\t}\n\n\t\t\tn = this.handles.split( \",\" );\n\t\t\tthis.handles = {};\n\n\t\t\tfor ( i = 0; i < n.length; i++ ) {\n\n\t\t\t\thandle = $.trim( n[ i ] );\n\t\t\t\thname = \"ui-resizable-\" + handle;\n\t\t\t\taxis = $( \"<div>\" );\n\t\t\t\tthis._addClass( axis, \"ui-resizable-handle \" + hname );\n\n\t\t\t\taxis.css( { zIndex: o.zIndex } );\n\n\t\t\t\tthis.handles[ handle ] = \".ui-resizable-\" + handle;\n\t\t\t\tthis.element.append( axis );\n\t\t\t}\n\n\t\t}\n\n\t\tthis._renderAxis = function( target ) {\n\n\t\t\tvar i, axis, padPos, padWrapper;\n\n\t\t\ttarget = target || this.element;\n\n\t\t\tfor ( i in this.handles ) {\n\n\t\t\t\tif ( this.handles[ i ].constructor === String ) {\n\t\t\t\t\tthis.handles[ i ] = this.element.children( this.handles[ i ] ).first().show();\n\t\t\t\t} else if ( this.handles[ i ].jquery || this.handles[ i ].nodeType ) {\n\t\t\t\t\tthis.handles[ i ] = $( this.handles[ i ] );\n\t\t\t\t\tthis._on( this.handles[ i ], { \"mousedown\": that._mouseDown } );\n\t\t\t\t}\n\n\t\t\t\tif ( this.elementIsWrapper &&\n\t\t\t\t\t\tthis.originalElement[ 0 ]\n\t\t\t\t\t\t\t.nodeName\n\t\t\t\t\t\t\t.match( /^(textarea|input|select|button)$/i ) ) {\n\t\t\t\t\taxis = $( this.handles[ i ], this.element );\n\n\t\t\t\t\tpadWrapper = /sw|ne|nw|se|n|s/.test( i ) ?\n\t\t\t\t\t\taxis.outerHeight() :\n\t\t\t\t\t\taxis.outerWidth();\n\n\t\t\t\t\tpadPos = [ \"padding\",\n\t\t\t\t\t\t/ne|nw|n/.test( i ) ? \"Top\" :\n\t\t\t\t\t\t/se|sw|s/.test( i ) ? \"Bottom\" :\n\t\t\t\t\t\t/^e$/.test( i ) ? \"Right\" : \"Left\" ].join( \"\" );\n\n\t\t\t\t\ttarget.css( padPos, padWrapper );\n\n\t\t\t\t\tthis._proportionallyResize();\n\t\t\t\t}\n\n\t\t\t\tthis._handles = this._handles.add( this.handles[ i ] );\n\t\t\t}\n\t\t};\n\n\t\t// TODO: make renderAxis a prototype function\n\t\tthis._renderAxis( this.element );\n\n\t\tthis._handles = this._handles.add( this.element.find( \".ui-resizable-handle\" ) );\n\t\tthis._handles.disableSelection();\n\n\t\tthis._handles.on( \"mouseover\", function() {\n\t\t\tif ( !that.resizing ) {\n\t\t\t\tif ( this.className ) {\n\t\t\t\t\taxis = this.className.match( /ui-resizable-(se|sw|ne|nw|n|e|s|w)/i );\n\t\t\t\t}\n\t\t\t\tthat.axis = axis && axis[ 1 ] ? axis[ 1 ] : \"se\";\n\t\t\t}\n\t\t} );\n\n\t\tif ( o.autoHide ) {\n\t\t\tthis._handles.hide();\n\t\t\tthis._addClass( \"ui-resizable-autohide\" );\n\t\t}\n\t},\n\n\t_removeHandles: function() {\n\t\tthis._handles.remove();\n\t},\n\n\t_mouseCapture: function( event ) {\n\t\tvar i, handle,\n\t\t\tcapture = false;\n\n\t\tfor ( i in this.handles ) {\n\t\t\thandle = $( this.handles[ i ] )[ 0 ];\n\t\t\tif ( handle === event.target || $.contains( handle, event.target ) ) {\n\t\t\t\tcapture = true;\n\t\t\t}\n\t\t}\n\n\t\treturn !this.options.disabled && capture;\n\t},\n\n\t_mouseStart: function( event ) {\n\n\t\tvar curleft, curtop, cursor,\n\t\t\to = this.options,\n\t\t\tel = this.element;\n\n\t\tthis.resizing = true;\n\n\t\tthis._renderProxy();\n\n\t\tcurleft = this._num( this.helper.css( \"left\" ) );\n\t\tcurtop = this._num( this.helper.css( \"top\" ) );\n\n\t\tif ( o.containment ) {\n\t\t\tcurleft += $( o.containment ).scrollLeft() || 0;\n\t\t\tcurtop += $( o.containment ).scrollTop() || 0;\n\t\t}\n\n\t\tthis.offset = this.helper.offset();\n\t\tthis.position = { left: curleft, top: curtop };\n\n\t\tthis.size = this._helper ? {\n\t\t\t\twidth: this.helper.width(),\n\t\t\t\theight: this.helper.height()\n\t\t\t} : {\n\t\t\t\twidth: el.width(),\n\t\t\t\theight: el.height()\n\t\t\t};\n\n\t\tthis.originalSize = this._helper ? {\n\t\t\t\twidth: el.outerWidth(),\n\t\t\t\theight: el.outerHeight()\n\t\t\t} : {\n\t\t\t\twidth: el.width(),\n\t\t\t\theight: el.height()\n\t\t\t};\n\n\t\tthis.sizeDiff = {\n\t\t\twidth: el.outerWidth() - el.width(),\n\t\t\theight: el.outerHeight() - el.height()\n\t\t};\n\n\t\tthis.originalPosition = { left: curleft, top: curtop };\n\t\tthis.originalMousePosition = { left: event.pageX, top: event.pageY };\n\n\t\tthis.aspectRatio = ( typeof o.aspectRatio === \"number\" ) ?\n\t\t\to.aspectRatio :\n\t\t\t( ( this.originalSize.width / this.originalSize.height ) || 1 );\n\n\t\tcursor = $( \".ui-resizable-\" + this.axis ).css( \"cursor\" );\n\t\t$( \"body\" ).css( \"cursor\", cursor === \"auto\" ? this.axis + \"-resize\" : cursor );\n\n\t\tthis._addClass( \"ui-resizable-resizing\" );\n\t\tthis._propagate( \"start\", event );\n\t\treturn true;\n\t},\n\n\t_mouseDrag: function( event ) {\n\n\t\tvar data, props,\n\t\t\tsmp = this.originalMousePosition,\n\t\t\ta = this.axis,\n\t\t\tdx = ( event.pageX - smp.left ) || 0,\n\t\t\tdy = ( event.pageY - smp.top ) || 0,\n\t\t\ttrigger = this._change[ a ];\n\n\t\tthis._updatePrevProperties();\n\n\t\tif ( !trigger ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tdata = trigger.apply( this, [ event, dx, dy ] );\n\n\t\tthis._updateVirtualBoundaries( event.shiftKey );\n\t\tif ( this._aspectRatio || event.shiftKey ) {\n\t\t\tdata = this._updateRatio( data, event );\n\t\t}\n\n\t\tdata = this._respectSize( data, event );\n\n\t\tthis._updateCache( data );\n\n\t\tthis._propagate( \"resize\", event );\n\n\t\tprops = this._applyChanges();\n\n\t\tif ( !this._helper && this._proportionallyResizeElements.length ) {\n\t\t\tthis._proportionallyResize();\n\t\t}\n\n\t\tif ( !$.isEmptyObject( props ) ) {\n\t\t\tthis._updatePrevProperties();\n\t\t\tthis._trigger( \"resize\", event, this.ui() );\n\t\t\tthis._applyChanges();\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t_mouseStop: function( event ) {\n\n\t\tthis.resizing = false;\n\t\tvar pr, ista, soffseth, soffsetw, s, left, top,\n\t\t\to = this.options, that = this;\n\n\t\tif ( this._helper ) {\n\n\t\t\tpr = this._proportionallyResizeElements;\n\t\t\tista = pr.length && ( /textarea/i ).test( pr[ 0 ].nodeName );\n\t\t\tsoffseth = ista && this._hasScroll( pr[ 0 ], \"left\" ) ? 0 : that.sizeDiff.height;\n\t\t\tsoffsetw = ista ? 0 : that.sizeDiff.width;\n\n\t\t\ts = {\n\t\t\t\twidth: ( that.helper.width()  - soffsetw ),\n\t\t\t\theight: ( that.helper.height() - soffseth )\n\t\t\t};\n\t\t\tleft = ( parseFloat( that.element.css( \"left\" ) ) +\n\t\t\t\t( that.position.left - that.originalPosition.left ) ) || null;\n\t\t\ttop = ( parseFloat( that.element.css( \"top\" ) ) +\n\t\t\t\t( that.position.top - that.originalPosition.top ) ) || null;\n\n\t\t\tif ( !o.animate ) {\n\t\t\t\tthis.element.css( $.extend( s, { top: top, left: left } ) );\n\t\t\t}\n\n\t\t\tthat.helper.height( that.size.height );\n\t\t\tthat.helper.width( that.size.width );\n\n\t\t\tif ( this._helper && !o.animate ) {\n\t\t\t\tthis._proportionallyResize();\n\t\t\t}\n\t\t}\n\n\t\t$( \"body\" ).css( \"cursor\", \"auto\" );\n\n\t\tthis._removeClass( \"ui-resizable-resizing\" );\n\n\t\tthis._propagate( \"stop\", event );\n\n\t\tif ( this._helper ) {\n\t\t\tthis.helper.remove();\n\t\t}\n\n\t\treturn false;\n\n\t},\n\n\t_updatePrevProperties: function() {\n\t\tthis.prevPosition = {\n\t\t\ttop: this.position.top,\n\t\t\tleft: this.position.left\n\t\t};\n\t\tthis.prevSize = {\n\t\t\twidth: this.size.width,\n\t\t\theight: this.size.height\n\t\t};\n\t},\n\n\t_applyChanges: function() {\n\t\tvar props = {};\n\n\t\tif ( this.position.top !== this.prevPosition.top ) {\n\t\t\tprops.top = this.position.top + \"px\";\n\t\t}\n\t\tif ( this.position.left !== this.prevPosition.left ) {\n\t\t\tprops.left = this.position.left + \"px\";\n\t\t}\n\t\tif ( this.size.width !== this.prevSize.width ) {\n\t\t\tprops.width = this.size.width + \"px\";\n\t\t}\n\t\tif ( this.size.height !== this.prevSize.height ) {\n\t\t\tprops.height = this.size.height + \"px\";\n\t\t}\n\n\t\tthis.helper.css( props );\n\n\t\treturn props;\n\t},\n\n\t_updateVirtualBoundaries: function( forceAspectRatio ) {\n\t\tvar pMinWidth, pMaxWidth, pMinHeight, pMaxHeight, b,\n\t\t\to = this.options;\n\n\t\tb = {\n\t\t\tminWidth: this._isNumber( o.minWidth ) ? o.minWidth : 0,\n\t\t\tmaxWidth: this._isNumber( o.maxWidth ) ? o.maxWidth : Infinity,\n\t\t\tminHeight: this._isNumber( o.minHeight ) ? o.minHeight : 0,\n\t\t\tmaxHeight: this._isNumber( o.maxHeight ) ? o.maxHeight : Infinity\n\t\t};\n\n\t\tif ( this._aspectRatio || forceAspectRatio ) {\n\t\t\tpMinWidth = b.minHeight * this.aspectRatio;\n\t\t\tpMinHeight = b.minWidth / this.aspectRatio;\n\t\t\tpMaxWidth = b.maxHeight * this.aspectRatio;\n\t\t\tpMaxHeight = b.maxWidth / this.aspectRatio;\n\n\t\t\tif ( pMinWidth > b.minWidth ) {\n\t\t\t\tb.minWidth = pMinWidth;\n\t\t\t}\n\t\t\tif ( pMinHeight > b.minHeight ) {\n\t\t\t\tb.minHeight = pMinHeight;\n\t\t\t}\n\t\t\tif ( pMaxWidth < b.maxWidth ) {\n\t\t\t\tb.maxWidth = pMaxWidth;\n\t\t\t}\n\t\t\tif ( pMaxHeight < b.maxHeight ) {\n\t\t\t\tb.maxHeight = pMaxHeight;\n\t\t\t}\n\t\t}\n\t\tthis._vBoundaries = b;\n\t},\n\n\t_updateCache: function( data ) {\n\t\tthis.offset = this.helper.offset();\n\t\tif ( this._isNumber( data.left ) ) {\n\t\t\tthis.position.left = data.left;\n\t\t}\n\t\tif ( this._isNumber( data.top ) ) {\n\t\t\tthis.position.top = data.top;\n\t\t}\n\t\tif ( this._isNumber( data.height ) ) {\n\t\t\tthis.size.height = data.height;\n\t\t}\n\t\tif ( this._isNumber( data.width ) ) {\n\t\t\tthis.size.width = data.width;\n\t\t}\n\t},\n\n\t_updateRatio: function( data ) {\n\n\t\tvar cpos = this.position,\n\t\t\tcsize = this.size,\n\t\t\ta = this.axis;\n\n\t\tif ( this._isNumber( data.height ) ) {\n\t\t\tdata.width = ( data.height * this.aspectRatio );\n\t\t} else if ( this._isNumber( data.width ) ) {\n\t\t\tdata.height = ( data.width / this.aspectRatio );\n\t\t}\n\n\t\tif ( a === \"sw\" ) {\n\t\t\tdata.left = cpos.left + ( csize.width - data.width );\n\t\t\tdata.top = null;\n\t\t}\n\t\tif ( a === \"nw\" ) {\n\t\t\tdata.top = cpos.top + ( csize.height - data.height );\n\t\t\tdata.left = cpos.left + ( csize.width - data.width );\n\t\t}\n\n\t\treturn data;\n\t},\n\n\t_respectSize: function( data ) {\n\n\t\tvar o = this._vBoundaries,\n\t\t\ta = this.axis,\n\t\t\tismaxw = this._isNumber( data.width ) && o.maxWidth && ( o.maxWidth < data.width ),\n\t\t\tismaxh = this._isNumber( data.height ) && o.maxHeight && ( o.maxHeight < data.height ),\n\t\t\tisminw = this._isNumber( data.width ) && o.minWidth && ( o.minWidth > data.width ),\n\t\t\tisminh = this._isNumber( data.height ) && o.minHeight && ( o.minHeight > data.height ),\n\t\t\tdw = this.originalPosition.left + this.originalSize.width,\n\t\t\tdh = this.originalPosition.top + this.originalSize.height,\n\t\t\tcw = /sw|nw|w/.test( a ), ch = /nw|ne|n/.test( a );\n\t\tif ( isminw ) {\n\t\t\tdata.width = o.minWidth;\n\t\t}\n\t\tif ( isminh ) {\n\t\t\tdata.height = o.minHeight;\n\t\t}\n\t\tif ( ismaxw ) {\n\t\t\tdata.width = o.maxWidth;\n\t\t}\n\t\tif ( ismaxh ) {\n\t\t\tdata.height = o.maxHeight;\n\t\t}\n\n\t\tif ( isminw && cw ) {\n\t\t\tdata.left = dw - o.minWidth;\n\t\t}\n\t\tif ( ismaxw && cw ) {\n\t\t\tdata.left = dw - o.maxWidth;\n\t\t}\n\t\tif ( isminh && ch ) {\n\t\t\tdata.top = dh - o.minHeight;\n\t\t}\n\t\tif ( ismaxh && ch ) {\n\t\t\tdata.top = dh - o.maxHeight;\n\t\t}\n\n\t\t// Fixing jump error on top/left - bug #2330\n\t\tif ( !data.width && !data.height && !data.left && data.top ) {\n\t\t\tdata.top = null;\n\t\t} else if ( !data.width && !data.height && !data.top && data.left ) {\n\t\t\tdata.left = null;\n\t\t}\n\n\t\treturn data;\n\t},\n\n\t_getPaddingPlusBorderDimensions: function( element ) {\n\t\tvar i = 0,\n\t\t\twidths = [],\n\t\t\tborders = [\n\t\t\t\telement.css( \"borderTopWidth\" ),\n\t\t\t\telement.css( \"borderRightWidth\" ),\n\t\t\t\telement.css( \"borderBottomWidth\" ),\n\t\t\t\telement.css( \"borderLeftWidth\" )\n\t\t\t],\n\t\t\tpaddings = [\n\t\t\t\telement.css( \"paddingTop\" ),\n\t\t\t\telement.css( \"paddingRight\" ),\n\t\t\t\telement.css( \"paddingBottom\" ),\n\t\t\t\telement.css( \"paddingLeft\" )\n\t\t\t];\n\n\t\tfor ( ; i < 4; i++ ) {\n\t\t\twidths[ i ] = ( parseFloat( borders[ i ] ) || 0 );\n\t\t\twidths[ i ] += ( parseFloat( paddings[ i ] ) || 0 );\n\t\t}\n\n\t\treturn {\n\t\t\theight: widths[ 0 ] + widths[ 2 ],\n\t\t\twidth: widths[ 1 ] + widths[ 3 ]\n\t\t};\n\t},\n\n\t_proportionallyResize: function() {\n\n\t\tif ( !this._proportionallyResizeElements.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar prel,\n\t\t\ti = 0,\n\t\t\telement = this.helper || this.element;\n\n\t\tfor ( ; i < this._proportionallyResizeElements.length; i++ ) {\n\n\t\t\tprel = this._proportionallyResizeElements[ i ];\n\n\t\t\t// TODO: Seems like a bug to cache this.outerDimensions\n\t\t\t// considering that we are in a loop.\n\t\t\tif ( !this.outerDimensions ) {\n\t\t\t\tthis.outerDimensions = this._getPaddingPlusBorderDimensions( prel );\n\t\t\t}\n\n\t\t\tprel.css( {\n\t\t\t\theight: ( element.height() - this.outerDimensions.height ) || 0,\n\t\t\t\twidth: ( element.width() - this.outerDimensions.width ) || 0\n\t\t\t} );\n\n\t\t}\n\n\t},\n\n\t_renderProxy: function() {\n\n\t\tvar el = this.element, o = this.options;\n\t\tthis.elementOffset = el.offset();\n\n\t\tif ( this._helper ) {\n\n\t\t\tthis.helper = this.helper || $( \"<div style='overflow:hidden;'></div>\" );\n\n\t\t\tthis._addClass( this.helper, this._helper );\n\t\t\tthis.helper.css( {\n\t\t\t\twidth: this.element.outerWidth(),\n\t\t\t\theight: this.element.outerHeight(),\n\t\t\t\tposition: \"absolute\",\n\t\t\t\tleft: this.elementOffset.left + \"px\",\n\t\t\t\ttop: this.elementOffset.top + \"px\",\n\t\t\t\tzIndex: ++o.zIndex //TODO: Don't modify option\n\t\t\t} );\n\n\t\t\tthis.helper\n\t\t\t\t.appendTo( \"body\" )\n\t\t\t\t.disableSelection();\n\n\t\t} else {\n\t\t\tthis.helper = this.element;\n\t\t}\n\n\t},\n\n\t_change: {\n\t\te: function( event, dx ) {\n\t\t\treturn { width: this.originalSize.width + dx };\n\t\t},\n\t\tw: function( event, dx ) {\n\t\t\tvar cs = this.originalSize, sp = this.originalPosition;\n\t\t\treturn { left: sp.left + dx, width: cs.width - dx };\n\t\t},\n\t\tn: function( event, dx, dy ) {\n\t\t\tvar cs = this.originalSize, sp = this.originalPosition;\n\t\t\treturn { top: sp.top + dy, height: cs.height - dy };\n\t\t},\n\t\ts: function( event, dx, dy ) {\n\t\t\treturn { height: this.originalSize.height + dy };\n\t\t},\n\t\tse: function( event, dx, dy ) {\n\t\t\treturn $.extend( this._change.s.apply( this, arguments ),\n\t\t\t\tthis._change.e.apply( this, [ event, dx, dy ] ) );\n\t\t},\n\t\tsw: function( event, dx, dy ) {\n\t\t\treturn $.extend( this._change.s.apply( this, arguments ),\n\t\t\t\tthis._change.w.apply( this, [ event, dx, dy ] ) );\n\t\t},\n\t\tne: function( event, dx, dy ) {\n\t\t\treturn $.extend( this._change.n.apply( this, arguments ),\n\t\t\t\tthis._change.e.apply( this, [ event, dx, dy ] ) );\n\t\t},\n\t\tnw: function( event, dx, dy ) {\n\t\t\treturn $.extend( this._change.n.apply( this, arguments ),\n\t\t\t\tthis._change.w.apply( this, [ event, dx, dy ] ) );\n\t\t}\n\t},\n\n\t_propagate: function( n, event ) {\n\t\t$.ui.plugin.call( this, n, [ event, this.ui() ] );\n\t\t( n !== \"resize\" && this._trigger( n, event, this.ui() ) );\n\t},\n\n\tplugins: {},\n\n\tui: function() {\n\t\treturn {\n\t\t\toriginalElement: this.originalElement,\n\t\t\telement: this.element,\n\t\t\thelper: this.helper,\n\t\t\tposition: this.position,\n\t\t\tsize: this.size,\n\t\t\toriginalSize: this.originalSize,\n\t\t\toriginalPosition: this.originalPosition\n\t\t};\n\t}\n\n} );\n\n/*\n * Resizable Extensions\n */\n\n$.ui.plugin.add( \"resizable\", \"animate\", {\n\n\tstop: function( event ) {\n\t\tvar that = $( this ).resizable( \"instance\" ),\n\t\t\to = that.options,\n\t\t\tpr = that._proportionallyResizeElements,\n\t\t\tista = pr.length && ( /textarea/i ).test( pr[ 0 ].nodeName ),\n\t\t\tsoffseth = ista && that._hasScroll( pr[ 0 ], \"left\" ) ? 0 : that.sizeDiff.height,\n\t\t\tsoffsetw = ista ? 0 : that.sizeDiff.width,\n\t\t\tstyle = {\n\t\t\t\twidth: ( that.size.width - soffsetw ),\n\t\t\t\theight: ( that.size.height - soffseth )\n\t\t\t},\n\t\t\tleft = ( parseFloat( that.element.css( \"left\" ) ) +\n\t\t\t\t( that.position.left - that.originalPosition.left ) ) || null,\n\t\t\ttop = ( parseFloat( that.element.css( \"top\" ) ) +\n\t\t\t\t( that.position.top - that.originalPosition.top ) ) || null;\n\n\t\tthat.element.animate(\n\t\t\t$.extend( style, top && left ? { top: top, left: left } : {} ), {\n\t\t\t\tduration: o.animateDuration,\n\t\t\t\teasing: o.animateEasing,\n\t\t\t\tstep: function() {\n\n\t\t\t\t\tvar data = {\n\t\t\t\t\t\twidth: parseFloat( that.element.css( \"width\" ) ),\n\t\t\t\t\t\theight: parseFloat( that.element.css( \"height\" ) ),\n\t\t\t\t\t\ttop: parseFloat( that.element.css( \"top\" ) ),\n\t\t\t\t\t\tleft: parseFloat( that.element.css( \"left\" ) )\n\t\t\t\t\t};\n\n\t\t\t\t\tif ( pr && pr.length ) {\n\t\t\t\t\t\t$( pr[ 0 ] ).css( { width: data.width, height: data.height } );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Propagating resize, and updating values for each animation step\n\t\t\t\t\tthat._updateCache( data );\n\t\t\t\t\tthat._propagate( \"resize\", event );\n\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t}\n\n} );\n\n$.ui.plugin.add( \"resizable\", \"containment\", {\n\n\tstart: function() {\n\t\tvar element, p, co, ch, cw, width, height,\n\t\t\tthat = $( this ).resizable( \"instance\" ),\n\t\t\to = that.options,\n\t\t\tel = that.element,\n\t\t\toc = o.containment,\n\t\t\tce = ( oc instanceof $ ) ?\n\t\t\t\toc.get( 0 ) :\n\t\t\t\t( /parent/.test( oc ) ) ? el.parent().get( 0 ) : oc;\n\n\t\tif ( !ce ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthat.containerElement = $( ce );\n\n\t\tif ( /document/.test( oc ) || oc === document ) {\n\t\t\tthat.containerOffset = {\n\t\t\t\tleft: 0,\n\t\t\t\ttop: 0\n\t\t\t};\n\t\t\tthat.containerPosition = {\n\t\t\t\tleft: 0,\n\t\t\t\ttop: 0\n\t\t\t};\n\n\t\t\tthat.parentData = {\n\t\t\t\telement: $( document ),\n\t\t\t\tleft: 0,\n\t\t\t\ttop: 0,\n\t\t\t\twidth: $( document ).width(),\n\t\t\t\theight: $( document ).height() || document.body.parentNode.scrollHeight\n\t\t\t};\n\t\t} else {\n\t\t\telement = $( ce );\n\t\t\tp = [];\n\t\t\t$( [ \"Top\", \"Right\", \"Left\", \"Bottom\" ] ).each( function( i, name ) {\n\t\t\t\tp[ i ] = that._num( element.css( \"padding\" + name ) );\n\t\t\t} );\n\n\t\t\tthat.containerOffset = element.offset();\n\t\t\tthat.containerPosition = element.position();\n\t\t\tthat.containerSize = {\n\t\t\t\theight: ( element.innerHeight() - p[ 3 ] ),\n\t\t\t\twidth: ( element.innerWidth() - p[ 1 ] )\n\t\t\t};\n\n\t\t\tco = that.containerOffset;\n\t\t\tch = that.containerSize.height;\n\t\t\tcw = that.containerSize.width;\n\t\t\twidth = ( that._hasScroll ( ce, \"left\" ) ? ce.scrollWidth : cw );\n\t\t\theight = ( that._hasScroll ( ce ) ? ce.scrollHeight : ch ) ;\n\n\t\t\tthat.parentData = {\n\t\t\t\telement: ce,\n\t\t\t\tleft: co.left,\n\t\t\t\ttop: co.top,\n\t\t\t\twidth: width,\n\t\t\t\theight: height\n\t\t\t};\n\t\t}\n\t},\n\n\tresize: function( event ) {\n\t\tvar woset, hoset, isParent, isOffsetRelative,\n\t\t\tthat = $( this ).resizable( \"instance\" ),\n\t\t\to = that.options,\n\t\t\tco = that.containerOffset,\n\t\t\tcp = that.position,\n\t\t\tpRatio = that._aspectRatio || event.shiftKey,\n\t\t\tcop = {\n\t\t\t\ttop: 0,\n\t\t\t\tleft: 0\n\t\t\t},\n\t\t\tce = that.containerElement,\n\t\t\tcontinueResize = true;\n\n\t\tif ( ce[ 0 ] !== document && ( /static/ ).test( ce.css( \"position\" ) ) ) {\n\t\t\tcop = co;\n\t\t}\n\n\t\tif ( cp.left < ( that._helper ? co.left : 0 ) ) {\n\t\t\tthat.size.width = that.size.width +\n\t\t\t\t( that._helper ?\n\t\t\t\t\t( that.position.left - co.left ) :\n\t\t\t\t\t( that.position.left - cop.left ) );\n\n\t\t\tif ( pRatio ) {\n\t\t\t\tthat.size.height = that.size.width / that.aspectRatio;\n\t\t\t\tcontinueResize = false;\n\t\t\t}\n\t\t\tthat.position.left = o.helper ? co.left : 0;\n\t\t}\n\n\t\tif ( cp.top < ( that._helper ? co.top : 0 ) ) {\n\t\t\tthat.size.height = that.size.height +\n\t\t\t\t( that._helper ?\n\t\t\t\t\t( that.position.top - co.top ) :\n\t\t\t\t\tthat.position.top );\n\n\t\t\tif ( pRatio ) {\n\t\t\t\tthat.size.width = that.size.height * that.aspectRatio;\n\t\t\t\tcontinueResize = false;\n\t\t\t}\n\t\t\tthat.position.top = that._helper ? co.top : 0;\n\t\t}\n\n\t\tisParent = that.containerElement.get( 0 ) === that.element.parent().get( 0 );\n\t\tisOffsetRelative = /relative|absolute/.test( that.containerElement.css( \"position\" ) );\n\n\t\tif ( isParent && isOffsetRelative ) {\n\t\t\tthat.offset.left = that.parentData.left + that.position.left;\n\t\t\tthat.offset.top = that.parentData.top + that.position.top;\n\t\t} else {\n\t\t\tthat.offset.left = that.element.offset().left;\n\t\t\tthat.offset.top = that.element.offset().top;\n\t\t}\n\n\t\twoset = Math.abs( that.sizeDiff.width +\n\t\t\t( that._helper ?\n\t\t\t\tthat.offset.left - cop.left :\n\t\t\t\t( that.offset.left - co.left ) ) );\n\n\t\thoset = Math.abs( that.sizeDiff.height +\n\t\t\t( that._helper ?\n\t\t\t\tthat.offset.top - cop.top :\n\t\t\t\t( that.offset.top - co.top ) ) );\n\n\t\tif ( woset + that.size.width >= that.parentData.width ) {\n\t\t\tthat.size.width = that.parentData.width - woset;\n\t\t\tif ( pRatio ) {\n\t\t\t\tthat.size.height = that.size.width / that.aspectRatio;\n\t\t\t\tcontinueResize = false;\n\t\t\t}\n\t\t}\n\n\t\tif ( hoset + that.size.height >= that.parentData.height ) {\n\t\t\tthat.size.height = that.parentData.height - hoset;\n\t\t\tif ( pRatio ) {\n\t\t\t\tthat.size.width = that.size.height * that.aspectRatio;\n\t\t\t\tcontinueResize = false;\n\t\t\t}\n\t\t}\n\n\t\tif ( !continueResize ) {\n\t\t\tthat.position.left = that.prevPosition.left;\n\t\t\tthat.position.top = that.prevPosition.top;\n\t\t\tthat.size.width = that.prevSize.width;\n\t\t\tthat.size.height = that.prevSize.height;\n\t\t}\n\t},\n\n\tstop: function() {\n\t\tvar that = $( this ).resizable( \"instance\" ),\n\t\t\to = that.options,\n\t\t\tco = that.containerOffset,\n\t\t\tcop = that.containerPosition,\n\t\t\tce = that.containerElement,\n\t\t\thelper = $( that.helper ),\n\t\t\tho = helper.offset(),\n\t\t\tw = helper.outerWidth() - that.sizeDiff.width,\n\t\t\th = helper.outerHeight() - that.sizeDiff.height;\n\n\t\tif ( that._helper && !o.animate && ( /relative/ ).test( ce.css( \"position\" ) ) ) {\n\t\t\t$( this ).css( {\n\t\t\t\tleft: ho.left - cop.left - co.left,\n\t\t\t\twidth: w,\n\t\t\t\theight: h\n\t\t\t} );\n\t\t}\n\n\t\tif ( that._helper && !o.animate && ( /static/ ).test( ce.css( \"position\" ) ) ) {\n\t\t\t$( this ).css( {\n\t\t\t\tleft: ho.left - cop.left - co.left,\n\t\t\t\twidth: w,\n\t\t\t\theight: h\n\t\t\t} );\n\t\t}\n\t}\n} );\n\n$.ui.plugin.add( \"resizable\", \"alsoResize\", {\n\n\tstart: function() {\n\t\tvar that = $( this ).resizable( \"instance\" ),\n\t\t\to = that.options;\n\n\t\t$( o.alsoResize ).each( function() {\n\t\t\tvar el = $( this );\n\t\t\tel.data( \"ui-resizable-alsoresize\", {\n\t\t\t\twidth: parseFloat( el.width() ), height: parseFloat( el.height() ),\n\t\t\t\tleft: parseFloat( el.css( \"left\" ) ), top: parseFloat( el.css( \"top\" ) )\n\t\t\t} );\n\t\t} );\n\t},\n\n\tresize: function( event, ui ) {\n\t\tvar that = $( this ).resizable( \"instance\" ),\n\t\t\to = that.options,\n\t\t\tos = that.originalSize,\n\t\t\top = that.originalPosition,\n\t\t\tdelta = {\n\t\t\t\theight: ( that.size.height - os.height ) || 0,\n\t\t\t\twidth: ( that.size.width - os.width ) || 0,\n\t\t\t\ttop: ( that.position.top - op.top ) || 0,\n\t\t\t\tleft: ( that.position.left - op.left ) || 0\n\t\t\t};\n\n\t\t\t$( o.alsoResize ).each( function() {\n\t\t\t\tvar el = $( this ), start = $( this ).data( \"ui-resizable-alsoresize\" ), style = {},\n\t\t\t\t\tcss = el.parents( ui.originalElement[ 0 ] ).length ?\n\t\t\t\t\t\t\t[ \"width\", \"height\" ] :\n\t\t\t\t\t\t\t[ \"width\", \"height\", \"top\", \"left\" ];\n\n\t\t\t\t$.each( css, function( i, prop ) {\n\t\t\t\t\tvar sum = ( start[ prop ] || 0 ) + ( delta[ prop ] || 0 );\n\t\t\t\t\tif ( sum && sum >= 0 ) {\n\t\t\t\t\t\tstyle[ prop ] = sum || null;\n\t\t\t\t\t}\n\t\t\t\t} );\n\n\t\t\t\tel.css( style );\n\t\t\t} );\n\t},\n\n\tstop: function() {\n\t\t$( this ).removeData( \"ui-resizable-alsoresize\" );\n\t}\n} );\n\n$.ui.plugin.add( \"resizable\", \"ghost\", {\n\n\tstart: function() {\n\n\t\tvar that = $( this ).resizable( \"instance\" ), cs = that.size;\n\n\t\tthat.ghost = that.originalElement.clone();\n\t\tthat.ghost.css( {\n\t\t\topacity: 0.25,\n\t\t\tdisplay: \"block\",\n\t\t\tposition: \"relative\",\n\t\t\theight: cs.height,\n\t\t\twidth: cs.width,\n\t\t\tmargin: 0,\n\t\t\tleft: 0,\n\t\t\ttop: 0\n\t\t} );\n\n\t\tthat._addClass( that.ghost, \"ui-resizable-ghost\" );\n\n\t\t// DEPRECATED\n\t\t// TODO: remove after 1.12\n\t\tif ( $.uiBackCompat !== false && typeof that.options.ghost === \"string\" ) {\n\n\t\t\t// Ghost option\n\t\t\tthat.ghost.addClass( this.options.ghost );\n\t\t}\n\n\t\tthat.ghost.appendTo( that.helper );\n\n\t},\n\n\tresize: function() {\n\t\tvar that = $( this ).resizable( \"instance\" );\n\t\tif ( that.ghost ) {\n\t\t\tthat.ghost.css( {\n\t\t\t\tposition: \"relative\",\n\t\t\t\theight: that.size.height,\n\t\t\t\twidth: that.size.width\n\t\t\t} );\n\t\t}\n\t},\n\n\tstop: function() {\n\t\tvar that = $( this ).resizable( \"instance\" );\n\t\tif ( that.ghost && that.helper ) {\n\t\t\tthat.helper.get( 0 ).removeChild( that.ghost.get( 0 ) );\n\t\t}\n\t}\n\n} );\n\n$.ui.plugin.add( \"resizable\", \"grid\", {\n\n\tresize: function() {\n\t\tvar outerDimensions,\n\t\t\tthat = $( this ).resizable( \"instance\" ),\n\t\t\to = that.options,\n\t\t\tcs = that.size,\n\t\t\tos = that.originalSize,\n\t\t\top = that.originalPosition,\n\t\t\ta = that.axis,\n\t\t\tgrid = typeof o.grid === \"number\" ? [ o.grid, o.grid ] : o.grid,\n\t\t\tgridX = ( grid[ 0 ] || 1 ),\n\t\t\tgridY = ( grid[ 1 ] || 1 ),\n\t\t\tox = Math.round( ( cs.width - os.width ) / gridX ) * gridX,\n\t\t\toy = Math.round( ( cs.height - os.height ) / gridY ) * gridY,\n\t\t\tnewWidth = os.width + ox,\n\t\t\tnewHeight = os.height + oy,\n\t\t\tisMaxWidth = o.maxWidth && ( o.maxWidth < newWidth ),\n\t\t\tisMaxHeight = o.maxHeight && ( o.maxHeight < newHeight ),\n\t\t\tisMinWidth = o.minWidth && ( o.minWidth > newWidth ),\n\t\t\tisMinHeight = o.minHeight && ( o.minHeight > newHeight );\n\n\t\to.grid = grid;\n\n\t\tif ( isMinWidth ) {\n\t\t\tnewWidth += gridX;\n\t\t}\n\t\tif ( isMinHeight ) {\n\t\t\tnewHeight += gridY;\n\t\t}\n\t\tif ( isMaxWidth ) {\n\t\t\tnewWidth -= gridX;\n\t\t}\n\t\tif ( isMaxHeight ) {\n\t\t\tnewHeight -= gridY;\n\t\t}\n\n\t\tif ( /^(se|s|e)$/.test( a ) ) {\n\t\t\tthat.size.width = newWidth;\n\t\t\tthat.size.height = newHeight;\n\t\t} else if ( /^(ne)$/.test( a ) ) {\n\t\t\tthat.size.width = newWidth;\n\t\t\tthat.size.height = newHeight;\n\t\t\tthat.position.top = op.top - oy;\n\t\t} else if ( /^(sw)$/.test( a ) ) {\n\t\t\tthat.size.width = newWidth;\n\t\t\tthat.size.height = newHeight;\n\t\t\tthat.position.left = op.left - ox;\n\t\t} else {\n\t\t\tif ( newHeight - gridY <= 0 || newWidth - gridX <= 0 ) {\n\t\t\t\touterDimensions = that._getPaddingPlusBorderDimensions( this );\n\t\t\t}\n\n\t\t\tif ( newHeight - gridY > 0 ) {\n\t\t\t\tthat.size.height = newHeight;\n\t\t\t\tthat.position.top = op.top - oy;\n\t\t\t} else {\n\t\t\t\tnewHeight = gridY - outerDimensions.height;\n\t\t\t\tthat.size.height = newHeight;\n\t\t\t\tthat.position.top = op.top + os.height - newHeight;\n\t\t\t}\n\t\t\tif ( newWidth - gridX > 0 ) {\n\t\t\t\tthat.size.width = newWidth;\n\t\t\t\tthat.position.left = op.left - ox;\n\t\t\t} else {\n\t\t\t\tnewWidth = gridX - outerDimensions.width;\n\t\t\t\tthat.size.width = newWidth;\n\t\t\t\tthat.position.left = op.left + os.width - newWidth;\n\t\t\t}\n\t\t}\n\t}\n\n} );\n\nvar widgetsResizable = $.ui.resizable;\n\n\n/*!\n * jQuery UI Dialog 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Dialog\n//>>group: Widgets\n//>>description: Displays customizable dialog windows.\n//>>docs: http://api.jqueryui.com/dialog/\n//>>demos: http://jqueryui.com/dialog/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/dialog.css\n//>>css.theme: ../../themes/base/theme.css\n\n\n\n$.widget( \"ui.dialog\", {\n\tversion: \"1.12.1\",\n\toptions: {\n\t\tappendTo: \"body\",\n\t\tautoOpen: true,\n\t\tbuttons: [],\n\t\tclasses: {\n\t\t\t\"ui-dialog\": \"ui-corner-all\",\n\t\t\t\"ui-dialog-titlebar\": \"ui-corner-all\"\n\t\t},\n\t\tcloseOnEscape: true,\n\t\tcloseText: \"Close\",\n\t\tdraggable: true,\n\t\thide: null,\n\t\theight: \"auto\",\n\t\tmaxHeight: null,\n\t\tmaxWidth: null,\n\t\tminHeight: 150,\n\t\tminWidth: 150,\n\t\tmodal: false,\n\t\tposition: {\n\t\t\tmy: \"center\",\n\t\t\tat: \"center\",\n\t\t\tof: window,\n\t\t\tcollision: \"fit\",\n\n\t\t\t// Ensure the titlebar is always visible\n\t\t\tusing: function( pos ) {\n\t\t\t\tvar topOffset = $( this ).css( pos ).offset().top;\n\t\t\t\tif ( topOffset < 0 ) {\n\t\t\t\t\t$( this ).css( \"top\", pos.top - topOffset );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tresizable: true,\n\t\tshow: null,\n\t\ttitle: null,\n\t\twidth: 300,\n\n\t\t// Callbacks\n\t\tbeforeClose: null,\n\t\tclose: null,\n\t\tdrag: null,\n\t\tdragStart: null,\n\t\tdragStop: null,\n\t\tfocus: null,\n\t\topen: null,\n\t\tresize: null,\n\t\tresizeStart: null,\n\t\tresizeStop: null\n\t},\n\n\tsizeRelatedOptions: {\n\t\tbuttons: true,\n\t\theight: true,\n\t\tmaxHeight: true,\n\t\tmaxWidth: true,\n\t\tminHeight: true,\n\t\tminWidth: true,\n\t\twidth: true\n\t},\n\n\tresizableRelatedOptions: {\n\t\tmaxHeight: true,\n\t\tmaxWidth: true,\n\t\tminHeight: true,\n\t\tminWidth: true\n\t},\n\n\t_create: function() {\n\t\tthis.originalCss = {\n\t\t\tdisplay: this.element[ 0 ].style.display,\n\t\t\twidth: this.element[ 0 ].style.width,\n\t\t\tminHeight: this.element[ 0 ].style.minHeight,\n\t\t\tmaxHeight: this.element[ 0 ].style.maxHeight,\n\t\t\theight: this.element[ 0 ].style.height\n\t\t};\n\t\tthis.originalPosition = {\n\t\t\tparent: this.element.parent(),\n\t\t\tindex: this.element.parent().children().index( this.element )\n\t\t};\n\t\tthis.originalTitle = this.element.attr( \"title\" );\n\t\tif ( this.options.title == null && this.originalTitle != null ) {\n\t\t\tthis.options.title = this.originalTitle;\n\t\t}\n\n\t\t// Dialogs can't be disabled\n\t\tif ( this.options.disabled ) {\n\t\t\tthis.options.disabled = false;\n\t\t}\n\n\t\tthis._createWrapper();\n\n\t\tthis.element\n\t\t\t.show()\n\t\t\t.removeAttr( \"title\" )\n\t\t\t.appendTo( this.uiDialog );\n\n\t\tthis._addClass( \"ui-dialog-content\", \"ui-widget-content\" );\n\n\t\tthis._createTitlebar();\n\t\tthis._createButtonPane();\n\n\t\tif ( this.options.draggable && $.fn.draggable ) {\n\t\t\tthis._makeDraggable();\n\t\t}\n\t\tif ( this.options.resizable && $.fn.resizable ) {\n\t\t\tthis._makeResizable();\n\t\t}\n\n\t\tthis._isOpen = false;\n\n\t\tthis._trackFocus();\n\t},\n\n\t_init: function() {\n\t\tif ( this.options.autoOpen ) {\n\t\t\tthis.open();\n\t\t}\n\t},\n\n\t_appendTo: function() {\n\t\tvar element = this.options.appendTo;\n\t\tif ( element && ( element.jquery || element.nodeType ) ) {\n\t\t\treturn $( element );\n\t\t}\n\t\treturn this.document.find( element || \"body\" ).eq( 0 );\n\t},\n\n\t_destroy: function() {\n\t\tvar next,\n\t\t\toriginalPosition = this.originalPosition;\n\n\t\tthis._untrackInstance();\n\t\tthis._destroyOverlay();\n\n\t\tthis.element\n\t\t\t.removeUniqueId()\n\t\t\t.css( this.originalCss )\n\n\t\t\t// Without detaching first, the following becomes really slow\n\t\t\t.detach();\n\n\t\tthis.uiDialog.remove();\n\n\t\tif ( this.originalTitle ) {\n\t\t\tthis.element.attr( \"title\", this.originalTitle );\n\t\t}\n\n\t\tnext = originalPosition.parent.children().eq( originalPosition.index );\n\n\t\t// Don't try to place the dialog next to itself (#8613)\n\t\tif ( next.length && next[ 0 ] !== this.element[ 0 ] ) {\n\t\t\tnext.before( this.element );\n\t\t} else {\n\t\t\toriginalPosition.parent.append( this.element );\n\t\t}\n\t},\n\n\twidget: function() {\n\t\treturn this.uiDialog;\n\t},\n\n\tdisable: $.noop,\n\tenable: $.noop,\n\n\tclose: function( event ) {\n\t\tvar that = this;\n\n\t\tif ( !this._isOpen || this._trigger( \"beforeClose\", event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._isOpen = false;\n\t\tthis._focusedElement = null;\n\t\tthis._destroyOverlay();\n\t\tthis._untrackInstance();\n\n\t\tif ( !this.opener.filter( \":focusable\" ).trigger( \"focus\" ).length ) {\n\n\t\t\t// Hiding a focused element doesn't trigger blur in WebKit\n\t\t\t// so in case we have nothing to focus on, explicitly blur the active element\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=47182\n\t\t\t$.ui.safeBlur( $.ui.safeActiveElement( this.document[ 0 ] ) );\n\t\t}\n\n\t\tthis._hide( this.uiDialog, this.options.hide, function() {\n\t\t\tthat._trigger( \"close\", event );\n\t\t} );\n\t},\n\n\tisOpen: function() {\n\t\treturn this._isOpen;\n\t},\n\n\tmoveToTop: function() {\n\t\tthis._moveToTop();\n\t},\n\n\t_moveToTop: function( event, silent ) {\n\t\tvar moved = false,\n\t\t\tzIndices = this.uiDialog.siblings( \".ui-front:visible\" ).map( function() {\n\t\t\t\treturn +$( this ).css( \"z-index\" );\n\t\t\t} ).get(),\n\t\t\tzIndexMax = Math.max.apply( null, zIndices );\n\n\t\tif ( zIndexMax >= +this.uiDialog.css( \"z-index\" ) ) {\n\t\t\tthis.uiDialog.css( \"z-index\", zIndexMax + 1 );\n\t\t\tmoved = true;\n\t\t}\n\n\t\tif ( moved && !silent ) {\n\t\t\tthis._trigger( \"focus\", event );\n\t\t}\n\t\treturn moved;\n\t},\n\n\topen: function() {\n\t\tvar that = this;\n\t\tif ( this._isOpen ) {\n\t\t\tif ( this._moveToTop() ) {\n\t\t\t\tthis._focusTabbable();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tthis._isOpen = true;\n\t\tthis.opener = $( $.ui.safeActiveElement( this.document[ 0 ] ) );\n\n\t\tthis._size();\n\t\tthis._position();\n\t\tthis._createOverlay();\n\t\tthis._moveToTop( null, true );\n\n\t\t// Ensure the overlay is moved to the top with the dialog, but only when\n\t\t// opening. The overlay shouldn't move after the dialog is open so that\n\t\t// modeless dialogs opened after the modal dialog stack properly.\n\t\tif ( this.overlay ) {\n\t\t\tthis.overlay.css( \"z-index\", this.uiDialog.css( \"z-index\" ) - 1 );\n\t\t}\n\n\t\tthis._show( this.uiDialog, this.options.show, function() {\n\t\t\tthat._focusTabbable();\n\t\t\tthat._trigger( \"focus\" );\n\t\t} );\n\n\t\t// Track the dialog immediately upon openening in case a focus event\n\t\t// somehow occurs outside of the dialog before an element inside the\n\t\t// dialog is focused (#10152)\n\t\tthis._makeFocusTarget();\n\n\t\tthis._trigger( \"open\" );\n\t},\n\n\t_focusTabbable: function() {\n\n\t\t// Set focus to the first match:\n\t\t// 1. An element that was focused previously\n\t\t// 2. First element inside the dialog matching [autofocus]\n\t\t// 3. Tabbable element inside the content element\n\t\t// 4. Tabbable element inside the buttonpane\n\t\t// 5. The close button\n\t\t// 6. The dialog itself\n\t\tvar hasFocus = this._focusedElement;\n\t\tif ( !hasFocus ) {\n\t\t\thasFocus = this.element.find( \"[autofocus]\" );\n\t\t}\n\t\tif ( !hasFocus.length ) {\n\t\t\thasFocus = this.element.find( \":tabbable\" );\n\t\t}\n\t\tif ( !hasFocus.length ) {\n\t\t\thasFocus = this.uiDialogButtonPane.find( \":tabbable\" );\n\t\t}\n\t\tif ( !hasFocus.length ) {\n\t\t\thasFocus = this.uiDialogTitlebarClose.filter( \":tabbable\" );\n\t\t}\n\t\tif ( !hasFocus.length ) {\n\t\t\thasFocus = this.uiDialog;\n\t\t}\n\t\thasFocus.eq( 0 ).trigger( \"focus\" );\n\t},\n\n\t_keepFocus: function( event ) {\n\t\tfunction checkFocus() {\n\t\t\tvar activeElement = $.ui.safeActiveElement( this.document[ 0 ] ),\n\t\t\t\tisActive = this.uiDialog[ 0 ] === activeElement ||\n\t\t\t\t\t$.contains( this.uiDialog[ 0 ], activeElement );\n\t\t\tif ( !isActive ) {\n\t\t\t\tthis._focusTabbable();\n\t\t\t}\n\t\t}\n\t\tevent.preventDefault();\n\t\tcheckFocus.call( this );\n\n\t\t// support: IE\n\t\t// IE <= 8 doesn't prevent moving focus even with event.preventDefault()\n\t\t// so we check again later\n\t\tthis._delay( checkFocus );\n\t},\n\n\t_createWrapper: function() {\n\t\tthis.uiDialog = $( \"<div>\" )\n\t\t\t.hide()\n\t\t\t.attr( {\n\n\t\t\t\t// Setting tabIndex makes the div focusable\n\t\t\t\ttabIndex: -1,\n\t\t\t\trole: \"dialog\"\n\t\t\t} )\n\t\t\t.appendTo( this._appendTo() );\n\n\t\tthis._addClass( this.uiDialog, \"ui-dialog\", \"ui-widget ui-widget-content ui-front\" );\n\t\tthis._on( this.uiDialog, {\n\t\t\tkeydown: function( event ) {\n\t\t\t\tif ( this.options.closeOnEscape && !event.isDefaultPrevented() && event.keyCode &&\n\t\t\t\t\t\tevent.keyCode === $.ui.keyCode.ESCAPE ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tthis.close( event );\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Prevent tabbing out of dialogs\n\t\t\t\tif ( event.keyCode !== $.ui.keyCode.TAB || event.isDefaultPrevented() ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tvar tabbables = this.uiDialog.find( \":tabbable\" ),\n\t\t\t\t\tfirst = tabbables.filter( \":first\" ),\n\t\t\t\t\tlast = tabbables.filter( \":last\" );\n\n\t\t\t\tif ( ( event.target === last[ 0 ] || event.target === this.uiDialog[ 0 ] ) &&\n\t\t\t\t\t\t!event.shiftKey ) {\n\t\t\t\t\tthis._delay( function() {\n\t\t\t\t\t\tfirst.trigger( \"focus\" );\n\t\t\t\t\t} );\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t} else if ( ( event.target === first[ 0 ] ||\n\t\t\t\t\t\tevent.target === this.uiDialog[ 0 ] ) && event.shiftKey ) {\n\t\t\t\t\tthis._delay( function() {\n\t\t\t\t\t\tlast.trigger( \"focus\" );\n\t\t\t\t\t} );\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t},\n\t\t\tmousedown: function( event ) {\n\t\t\t\tif ( this._moveToTop( event ) ) {\n\t\t\t\t\tthis._focusTabbable();\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\n\t\t// We assume that any existing aria-describedby attribute means\n\t\t// that the dialog content is marked up properly\n\t\t// otherwise we brute force the content as the description\n\t\tif ( !this.element.find( \"[aria-describedby]\" ).length ) {\n\t\t\tthis.uiDialog.attr( {\n\t\t\t\t\"aria-describedby\": this.element.uniqueId().attr( \"id\" )\n\t\t\t} );\n\t\t}\n\t},\n\n\t_createTitlebar: function() {\n\t\tvar uiDialogTitle;\n\n\t\tthis.uiDialogTitlebar = $( \"<div>\" );\n\t\tthis._addClass( this.uiDialogTitlebar,\n\t\t\t\"ui-dialog-titlebar\", \"ui-widget-header ui-helper-clearfix\" );\n\t\tthis._on( this.uiDialogTitlebar, {\n\t\t\tmousedown: function( event ) {\n\n\t\t\t\t// Don't prevent click on close button (#8838)\n\t\t\t\t// Focusing a dialog that is partially scrolled out of view\n\t\t\t\t// causes the browser to scroll it into view, preventing the click event\n\t\t\t\tif ( !$( event.target ).closest( \".ui-dialog-titlebar-close\" ) ) {\n\n\t\t\t\t\t// Dialog isn't getting focus when dragging (#8063)\n\t\t\t\t\tthis.uiDialog.trigger( \"focus\" );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\n\t\t// Support: IE\n\t\t// Use type=\"button\" to prevent enter keypresses in textboxes from closing the\n\t\t// dialog in IE (#9312)\n\t\tthis.uiDialogTitlebarClose = $( \"<button type='button'></button>\" )\n\t\t\t.button( {\n\t\t\t\tlabel: $( \"<a>\" ).text( this.options.closeText ).html(),\n\t\t\t\ticon: \"ui-icon-closethick\",\n\t\t\t\tshowLabel: false\n\t\t\t} )\n\t\t\t.appendTo( this.uiDialogTitlebar );\n\n\t\tthis._addClass( this.uiDialogTitlebarClose, \"ui-dialog-titlebar-close\" );\n\t\tthis._on( this.uiDialogTitlebarClose, {\n\t\t\tclick: function( event ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tthis.close( event );\n\t\t\t}\n\t\t} );\n\n\t\tuiDialogTitle = $( \"<span>\" ).uniqueId().prependTo( this.uiDialogTitlebar );\n\t\tthis._addClass( uiDialogTitle, \"ui-dialog-title\" );\n\t\tthis._title( uiDialogTitle );\n\n\t\tthis.uiDialogTitlebar.prependTo( this.uiDialog );\n\n\t\tthis.uiDialog.attr( {\n\t\t\t\"aria-labelledby\": uiDialogTitle.attr( \"id\" )\n\t\t} );\n\t},\n\n\t_title: function( title ) {\n\t\tif ( this.options.title ) {\n\t\t\ttitle.text( this.options.title );\n\t\t} else {\n\t\t\ttitle.html( \"&#160;\" );\n\t\t}\n\t},\n\n\t_createButtonPane: function() {\n\t\tthis.uiDialogButtonPane = $( \"<div>\" );\n\t\tthis._addClass( this.uiDialogButtonPane, \"ui-dialog-buttonpane\",\n\t\t\t\"ui-widget-content ui-helper-clearfix\" );\n\n\t\tthis.uiButtonSet = $( \"<div>\" )\n\t\t\t.appendTo( this.uiDialogButtonPane );\n\t\tthis._addClass( this.uiButtonSet, \"ui-dialog-buttonset\" );\n\n\t\tthis._createButtons();\n\t},\n\n\t_createButtons: function() {\n\t\tvar that = this,\n\t\t\tbuttons = this.options.buttons;\n\n\t\t// If we already have a button pane, remove it\n\t\tthis.uiDialogButtonPane.remove();\n\t\tthis.uiButtonSet.empty();\n\n\t\tif ( $.isEmptyObject( buttons ) || ( $.isArray( buttons ) && !buttons.length ) ) {\n\t\t\tthis._removeClass( this.uiDialog, \"ui-dialog-buttons\" );\n\t\t\treturn;\n\t\t}\n\n\t\t$.each( buttons, function( name, props ) {\n\t\t\tvar click, buttonOptions;\n\t\t\tprops = $.isFunction( props ) ?\n\t\t\t\t{ click: props, text: name } :\n\t\t\t\tprops;\n\n\t\t\t// Default to a non-submitting button\n\t\t\tprops = $.extend( { type: \"button\" }, props );\n\n\t\t\t// Change the context for the click callback to be the main element\n\t\t\tclick = props.click;\n\t\t\tbuttonOptions = {\n\t\t\t\ticon: props.icon,\n\t\t\t\ticonPosition: props.iconPosition,\n\t\t\t\tshowLabel: props.showLabel,\n\n\t\t\t\t// Deprecated options\n\t\t\t\ticons: props.icons,\n\t\t\t\ttext: props.text\n\t\t\t};\n\n\t\t\tdelete props.click;\n\t\t\tdelete props.icon;\n\t\t\tdelete props.iconPosition;\n\t\t\tdelete props.showLabel;\n\n\t\t\t// Deprecated options\n\t\t\tdelete props.icons;\n\t\t\tif ( typeof props.text === \"boolean\" ) {\n\t\t\t\tdelete props.text;\n\t\t\t}\n\n\t\t\t$( \"<button></button>\", props )\n\t\t\t\t.button( buttonOptions )\n\t\t\t\t.appendTo( that.uiButtonSet )\n\t\t\t\t.on( \"click\", function() {\n\t\t\t\t\tclick.apply( that.element[ 0 ], arguments );\n\t\t\t\t} );\n\t\t} );\n\t\tthis._addClass( this.uiDialog, \"ui-dialog-buttons\" );\n\t\tthis.uiDialogButtonPane.appendTo( this.uiDialog );\n\t},\n\n\t_makeDraggable: function() {\n\t\tvar that = this,\n\t\t\toptions = this.options;\n\n\t\tfunction filteredUi( ui ) {\n\t\t\treturn {\n\t\t\t\tposition: ui.position,\n\t\t\t\toffset: ui.offset\n\t\t\t};\n\t\t}\n\n\t\tthis.uiDialog.draggable( {\n\t\t\tcancel: \".ui-dialog-content, .ui-dialog-titlebar-close\",\n\t\t\thandle: \".ui-dialog-titlebar\",\n\t\t\tcontainment: \"document\",\n\t\t\tstart: function( event, ui ) {\n\t\t\t\tthat._addClass( $( this ), \"ui-dialog-dragging\" );\n\t\t\t\tthat._blockFrames();\n\t\t\t\tthat._trigger( \"dragStart\", event, filteredUi( ui ) );\n\t\t\t},\n\t\t\tdrag: function( event, ui ) {\n\t\t\t\tthat._trigger( \"drag\", event, filteredUi( ui ) );\n\t\t\t},\n\t\t\tstop: function( event, ui ) {\n\t\t\t\tvar left = ui.offset.left - that.document.scrollLeft(),\n\t\t\t\t\ttop = ui.offset.top - that.document.scrollTop();\n\n\t\t\t\toptions.position = {\n\t\t\t\t\tmy: \"left top\",\n\t\t\t\t\tat: \"left\" + ( left >= 0 ? \"+\" : \"\" ) + left + \" \" +\n\t\t\t\t\t\t\"top\" + ( top >= 0 ? \"+\" : \"\" ) + top,\n\t\t\t\t\tof: that.window\n\t\t\t\t};\n\t\t\t\tthat._removeClass( $( this ), \"ui-dialog-dragging\" );\n\t\t\t\tthat._unblockFrames();\n\t\t\t\tthat._trigger( \"dragStop\", event, filteredUi( ui ) );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_makeResizable: function() {\n\t\tvar that = this,\n\t\t\toptions = this.options,\n\t\t\thandles = options.resizable,\n\n\t\t\t// .ui-resizable has position: relative defined in the stylesheet\n\t\t\t// but dialogs have to use absolute or fixed positioning\n\t\t\tposition = this.uiDialog.css( \"position\" ),\n\t\t\tresizeHandles = typeof handles === \"string\" ?\n\t\t\t\thandles :\n\t\t\t\t\"n,e,s,w,se,sw,ne,nw\";\n\n\t\tfunction filteredUi( ui ) {\n\t\t\treturn {\n\t\t\t\toriginalPosition: ui.originalPosition,\n\t\t\t\toriginalSize: ui.originalSize,\n\t\t\t\tposition: ui.position,\n\t\t\t\tsize: ui.size\n\t\t\t};\n\t\t}\n\n\t\tthis.uiDialog.resizable( {\n\t\t\tcancel: \".ui-dialog-content\",\n\t\t\tcontainment: \"document\",\n\t\t\talsoResize: this.element,\n\t\t\tmaxWidth: options.maxWidth,\n\t\t\tmaxHeight: options.maxHeight,\n\t\t\tminWidth: options.minWidth,\n\t\t\tminHeight: this._minHeight(),\n\t\t\thandles: resizeHandles,\n\t\t\tstart: function( event, ui ) {\n\t\t\t\tthat._addClass( $( this ), \"ui-dialog-resizing\" );\n\t\t\t\tthat._blockFrames();\n\t\t\t\tthat._trigger( \"resizeStart\", event, filteredUi( ui ) );\n\t\t\t},\n\t\t\tresize: function( event, ui ) {\n\t\t\t\tthat._trigger( \"resize\", event, filteredUi( ui ) );\n\t\t\t},\n\t\t\tstop: function( event, ui ) {\n\t\t\t\tvar offset = that.uiDialog.offset(),\n\t\t\t\t\tleft = offset.left - that.document.scrollLeft(),\n\t\t\t\t\ttop = offset.top - that.document.scrollTop();\n\n\t\t\t\toptions.height = that.uiDialog.height();\n\t\t\t\toptions.width = that.uiDialog.width();\n\t\t\t\toptions.position = {\n\t\t\t\t\tmy: \"left top\",\n\t\t\t\t\tat: \"left\" + ( left >= 0 ? \"+\" : \"\" ) + left + \" \" +\n\t\t\t\t\t\t\"top\" + ( top >= 0 ? \"+\" : \"\" ) + top,\n\t\t\t\t\tof: that.window\n\t\t\t\t};\n\t\t\t\tthat._removeClass( $( this ), \"ui-dialog-resizing\" );\n\t\t\t\tthat._unblockFrames();\n\t\t\t\tthat._trigger( \"resizeStop\", event, filteredUi( ui ) );\n\t\t\t}\n\t\t} )\n\t\t\t.css( \"position\", position );\n\t},\n\n\t_trackFocus: function() {\n\t\tthis._on( this.widget(), {\n\t\t\tfocusin: function( event ) {\n\t\t\t\tthis._makeFocusTarget();\n\t\t\t\tthis._focusedElement = $( event.target );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_makeFocusTarget: function() {\n\t\tthis._untrackInstance();\n\t\tthis._trackingInstances().unshift( this );\n\t},\n\n\t_untrackInstance: function() {\n\t\tvar instances = this._trackingInstances(),\n\t\t\texists = $.inArray( this, instances );\n\t\tif ( exists !== -1 ) {\n\t\t\tinstances.splice( exists, 1 );\n\t\t}\n\t},\n\n\t_trackingInstances: function() {\n\t\tvar instances = this.document.data( \"ui-dialog-instances\" );\n\t\tif ( !instances ) {\n\t\t\tinstances = [];\n\t\t\tthis.document.data( \"ui-dialog-instances\", instances );\n\t\t}\n\t\treturn instances;\n\t},\n\n\t_minHeight: function() {\n\t\tvar options = this.options;\n\n\t\treturn options.height === \"auto\" ?\n\t\t\toptions.minHeight :\n\t\t\tMath.min( options.minHeight, options.height );\n\t},\n\n\t_position: function() {\n\n\t\t// Need to show the dialog to get the actual offset in the position plugin\n\t\tvar isVisible = this.uiDialog.is( \":visible\" );\n\t\tif ( !isVisible ) {\n\t\t\tthis.uiDialog.show();\n\t\t}\n\t\tthis.uiDialog.position( this.options.position );\n\t\tif ( !isVisible ) {\n\t\t\tthis.uiDialog.hide();\n\t\t}\n\t},\n\n\t_setOptions: function( options ) {\n\t\tvar that = this,\n\t\t\tresize = false,\n\t\t\tresizableOptions = {};\n\n\t\t$.each( options, function( key, value ) {\n\t\t\tthat._setOption( key, value );\n\n\t\t\tif ( key in that.sizeRelatedOptions ) {\n\t\t\t\tresize = true;\n\t\t\t}\n\t\t\tif ( key in that.resizableRelatedOptions ) {\n\t\t\t\tresizableOptions[ key ] = value;\n\t\t\t}\n\t\t} );\n\n\t\tif ( resize ) {\n\t\t\tthis._size();\n\t\t\tthis._position();\n\t\t}\n\t\tif ( this.uiDialog.is( \":data(ui-resizable)\" ) ) {\n\t\t\tthis.uiDialog.resizable( \"option\", resizableOptions );\n\t\t}\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tvar isDraggable, isResizable,\n\t\t\tuiDialog = this.uiDialog;\n\n\t\tif ( key === \"disabled\" ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._super( key, value );\n\n\t\tif ( key === \"appendTo\" ) {\n\t\t\tthis.uiDialog.appendTo( this._appendTo() );\n\t\t}\n\n\t\tif ( key === \"buttons\" ) {\n\t\t\tthis._createButtons();\n\t\t}\n\n\t\tif ( key === \"closeText\" ) {\n\t\t\tthis.uiDialogTitlebarClose.button( {\n\n\t\t\t\t// Ensure that we always pass a string\n\t\t\t\tlabel: $( \"<a>\" ).text( \"\" + this.options.closeText ).html()\n\t\t\t} );\n\t\t}\n\n\t\tif ( key === \"draggable\" ) {\n\t\t\tisDraggable = uiDialog.is( \":data(ui-draggable)\" );\n\t\t\tif ( isDraggable && !value ) {\n\t\t\t\tuiDialog.draggable( \"destroy\" );\n\t\t\t}\n\n\t\t\tif ( !isDraggable && value ) {\n\t\t\t\tthis._makeDraggable();\n\t\t\t}\n\t\t}\n\n\t\tif ( key === \"position\" ) {\n\t\t\tthis._position();\n\t\t}\n\n\t\tif ( key === \"resizable\" ) {\n\n\t\t\t// currently resizable, becoming non-resizable\n\t\t\tisResizable = uiDialog.is( \":data(ui-resizable)\" );\n\t\t\tif ( isResizable && !value ) {\n\t\t\t\tuiDialog.resizable( \"destroy\" );\n\t\t\t}\n\n\t\t\t// Currently resizable, changing handles\n\t\t\tif ( isResizable && typeof value === \"string\" ) {\n\t\t\t\tuiDialog.resizable( \"option\", \"handles\", value );\n\t\t\t}\n\n\t\t\t// Currently non-resizable, becoming resizable\n\t\t\tif ( !isResizable && value !== false ) {\n\t\t\t\tthis._makeResizable();\n\t\t\t}\n\t\t}\n\n\t\tif ( key === \"title\" ) {\n\t\t\tthis._title( this.uiDialogTitlebar.find( \".ui-dialog-title\" ) );\n\t\t}\n\t},\n\n\t_size: function() {\n\n\t\t// If the user has resized the dialog, the .ui-dialog and .ui-dialog-content\n\t\t// divs will both have width and height set, so we need to reset them\n\t\tvar nonContentHeight, minContentHeight, maxContentHeight,\n\t\t\toptions = this.options;\n\n\t\t// Reset content sizing\n\t\tthis.element.show().css( {\n\t\t\twidth: \"auto\",\n\t\t\tminHeight: 0,\n\t\t\tmaxHeight: \"none\",\n\t\t\theight: 0\n\t\t} );\n\n\t\tif ( options.minWidth > options.width ) {\n\t\t\toptions.width = options.minWidth;\n\t\t}\n\n\t\t// Reset wrapper sizing\n\t\t// determine the height of all the non-content elements\n\t\tnonContentHeight = this.uiDialog.css( {\n\t\t\theight: \"auto\",\n\t\t\twidth: options.width\n\t\t} )\n\t\t\t.outerHeight();\n\t\tminContentHeight = Math.max( 0, options.minHeight - nonContentHeight );\n\t\tmaxContentHeight = typeof options.maxHeight === \"number\" ?\n\t\t\tMath.max( 0, options.maxHeight - nonContentHeight ) :\n\t\t\t\"none\";\n\n\t\tif ( options.height === \"auto\" ) {\n\t\t\tthis.element.css( {\n\t\t\t\tminHeight: minContentHeight,\n\t\t\t\tmaxHeight: maxContentHeight,\n\t\t\t\theight: \"auto\"\n\t\t\t} );\n\t\t} else {\n\t\t\tthis.element.height( Math.max( 0, options.height - nonContentHeight ) );\n\t\t}\n\n\t\tif ( this.uiDialog.is( \":data(ui-resizable)\" ) ) {\n\t\t\tthis.uiDialog.resizable( \"option\", \"minHeight\", this._minHeight() );\n\t\t}\n\t},\n\n\t_blockFrames: function() {\n\t\tthis.iframeBlocks = this.document.find( \"iframe\" ).map( function() {\n\t\t\tvar iframe = $( this );\n\n\t\t\treturn $( \"<div>\" )\n\t\t\t\t.css( {\n\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\twidth: iframe.outerWidth(),\n\t\t\t\t\theight: iframe.outerHeight()\n\t\t\t\t} )\n\t\t\t\t.appendTo( iframe.parent() )\n\t\t\t\t.offset( iframe.offset() )[ 0 ];\n\t\t} );\n\t},\n\n\t_unblockFrames: function() {\n\t\tif ( this.iframeBlocks ) {\n\t\t\tthis.iframeBlocks.remove();\n\t\t\tdelete this.iframeBlocks;\n\t\t}\n\t},\n\n\t_allowInteraction: function( event ) {\n\t\tif ( $( event.target ).closest( \".ui-dialog\" ).length ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// TODO: Remove hack when datepicker implements\n\t\t// the .ui-front logic (#8989)\n\t\treturn !!$( event.target ).closest( \".ui-datepicker\" ).length;\n\t},\n\n\t_createOverlay: function() {\n\t\tif ( !this.options.modal ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// We use a delay in case the overlay is created from an\n\t\t// event that we're going to be cancelling (#2804)\n\t\tvar isOpening = true;\n\t\tthis._delay( function() {\n\t\t\tisOpening = false;\n\t\t} );\n\n\t\tif ( !this.document.data( \"ui-dialog-overlays\" ) ) {\n\n\t\t\t// Prevent use of anchors and inputs\n\t\t\t// Using _on() for an event handler shared across many instances is\n\t\t\t// safe because the dialogs stack and must be closed in reverse order\n\t\t\tthis._on( this.document, {\n\t\t\t\tfocusin: function( event ) {\n\t\t\t\t\tif ( isOpening ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( !this._allowInteraction( event ) ) {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\tthis._trackingInstances()[ 0 ]._focusTabbable();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\tthis.overlay = $( \"<div>\" )\n\t\t\t.appendTo( this._appendTo() );\n\n\t\tthis._addClass( this.overlay, null, \"ui-widget-overlay ui-front\" );\n\t\tthis._on( this.overlay, {\n\t\t\tmousedown: \"_keepFocus\"\n\t\t} );\n\t\tthis.document.data( \"ui-dialog-overlays\",\n\t\t\t( this.document.data( \"ui-dialog-overlays\" ) || 0 ) + 1 );\n\t},\n\n\t_destroyOverlay: function() {\n\t\tif ( !this.options.modal ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( this.overlay ) {\n\t\t\tvar overlays = this.document.data( \"ui-dialog-overlays\" ) - 1;\n\n\t\t\tif ( !overlays ) {\n\t\t\t\tthis._off( this.document, \"focusin\" );\n\t\t\t\tthis.document.removeData( \"ui-dialog-overlays\" );\n\t\t\t} else {\n\t\t\t\tthis.document.data( \"ui-dialog-overlays\", overlays );\n\t\t\t}\n\n\t\t\tthis.overlay.remove();\n\t\t\tthis.overlay = null;\n\t\t}\n\t}\n} );\n\n// DEPRECATED\n// TODO: switch return back to widget declaration at top of file when this is removed\nif ( $.uiBackCompat !== false ) {\n\n\t// Backcompat for dialogClass option\n\t$.widget( \"ui.dialog\", $.ui.dialog, {\n\t\toptions: {\n\t\t\tdialogClass: \"\"\n\t\t},\n\t\t_createWrapper: function() {\n\t\t\tthis._super();\n\t\t\tthis.uiDialog.addClass( this.options.dialogClass );\n\t\t},\n\t\t_setOption: function( key, value ) {\n\t\t\tif ( key === \"dialogClass\" ) {\n\t\t\t\tthis.uiDialog\n\t\t\t\t\t.removeClass( this.options.dialogClass )\n\t\t\t\t\t.addClass( value );\n\t\t\t}\n\t\t\tthis._superApply( arguments );\n\t\t}\n\t} );\n}\n\nvar widgetsDialog = $.ui.dialog;\n\n\n/*!\n * jQuery UI Droppable 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Droppable\n//>>group: Interactions\n//>>description: Enables drop targets for draggable elements.\n//>>docs: http://api.jqueryui.com/droppable/\n//>>demos: http://jqueryui.com/droppable/\n\n\n\n$.widget( \"ui.droppable\", {\n\tversion: \"1.12.1\",\n\twidgetEventPrefix: \"drop\",\n\toptions: {\n\t\taccept: \"*\",\n\t\taddClasses: true,\n\t\tgreedy: false,\n\t\tscope: \"default\",\n\t\ttolerance: \"intersect\",\n\n\t\t// Callbacks\n\t\tactivate: null,\n\t\tdeactivate: null,\n\t\tdrop: null,\n\t\tout: null,\n\t\tover: null\n\t},\n\t_create: function() {\n\n\t\tvar proportions,\n\t\t\to = this.options,\n\t\t\taccept = o.accept;\n\n\t\tthis.isover = false;\n\t\tthis.isout = true;\n\n\t\tthis.accept = $.isFunction( accept ) ? accept : function( d ) {\n\t\t\treturn d.is( accept );\n\t\t};\n\n\t\tthis.proportions = function( /* valueToWrite */ ) {\n\t\t\tif ( arguments.length ) {\n\n\t\t\t\t// Store the droppable's proportions\n\t\t\t\tproportions = arguments[ 0 ];\n\t\t\t} else {\n\n\t\t\t\t// Retrieve or derive the droppable's proportions\n\t\t\t\treturn proportions ?\n\t\t\t\t\tproportions :\n\t\t\t\t\tproportions = {\n\t\t\t\t\t\twidth: this.element[ 0 ].offsetWidth,\n\t\t\t\t\t\theight: this.element[ 0 ].offsetHeight\n\t\t\t\t\t};\n\t\t\t}\n\t\t};\n\n\t\tthis._addToManager( o.scope );\n\n\t\to.addClasses && this._addClass( \"ui-droppable\" );\n\n\t},\n\n\t_addToManager: function( scope ) {\n\n\t\t// Add the reference and positions to the manager\n\t\t$.ui.ddmanager.droppables[ scope ] = $.ui.ddmanager.droppables[ scope ] || [];\n\t\t$.ui.ddmanager.droppables[ scope ].push( this );\n\t},\n\n\t_splice: function( drop ) {\n\t\tvar i = 0;\n\t\tfor ( ; i < drop.length; i++ ) {\n\t\t\tif ( drop[ i ] === this ) {\n\t\t\t\tdrop.splice( i, 1 );\n\t\t\t}\n\t\t}\n\t},\n\n\t_destroy: function() {\n\t\tvar drop = $.ui.ddmanager.droppables[ this.options.scope ];\n\n\t\tthis._splice( drop );\n\t},\n\n\t_setOption: function( key, value ) {\n\n\t\tif ( key === \"accept\" ) {\n\t\t\tthis.accept = $.isFunction( value ) ? value : function( d ) {\n\t\t\t\treturn d.is( value );\n\t\t\t};\n\t\t} else if ( key === \"scope\" ) {\n\t\t\tvar drop = $.ui.ddmanager.droppables[ this.options.scope ];\n\n\t\t\tthis._splice( drop );\n\t\t\tthis._addToManager( value );\n\t\t}\n\n\t\tthis._super( key, value );\n\t},\n\n\t_activate: function( event ) {\n\t\tvar draggable = $.ui.ddmanager.current;\n\n\t\tthis._addActiveClass();\n\t\tif ( draggable ) {\n\t\t\tthis._trigger( \"activate\", event, this.ui( draggable ) );\n\t\t}\n\t},\n\n\t_deactivate: function( event ) {\n\t\tvar draggable = $.ui.ddmanager.current;\n\n\t\tthis._removeActiveClass();\n\t\tif ( draggable ) {\n\t\t\tthis._trigger( \"deactivate\", event, this.ui( draggable ) );\n\t\t}\n\t},\n\n\t_over: function( event ) {\n\n\t\tvar draggable = $.ui.ddmanager.current;\n\n\t\t// Bail if draggable and droppable are same element\n\t\tif ( !draggable || ( draggable.currentItem ||\n\t\t\t\tdraggable.element )[ 0 ] === this.element[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( this.accept.call( this.element[ 0 ], ( draggable.currentItem ||\n\t\t\t\tdraggable.element ) ) ) {\n\t\t\tthis._addHoverClass();\n\t\t\tthis._trigger( \"over\", event, this.ui( draggable ) );\n\t\t}\n\n\t},\n\n\t_out: function( event ) {\n\n\t\tvar draggable = $.ui.ddmanager.current;\n\n\t\t// Bail if draggable and droppable are same element\n\t\tif ( !draggable || ( draggable.currentItem ||\n\t\t\t\tdraggable.element )[ 0 ] === this.element[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( this.accept.call( this.element[ 0 ], ( draggable.currentItem ||\n\t\t\t\tdraggable.element ) ) ) {\n\t\t\tthis._removeHoverClass();\n\t\t\tthis._trigger( \"out\", event, this.ui( draggable ) );\n\t\t}\n\n\t},\n\n\t_drop: function( event, custom ) {\n\n\t\tvar draggable = custom || $.ui.ddmanager.current,\n\t\t\tchildrenIntersection = false;\n\n\t\t// Bail if draggable and droppable are same element\n\t\tif ( !draggable || ( draggable.currentItem ||\n\t\t\t\tdraggable.element )[ 0 ] === this.element[ 0 ] ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.element\n\t\t\t.find( \":data(ui-droppable)\" )\n\t\t\t.not( \".ui-draggable-dragging\" )\n\t\t\t.each( function() {\n\t\t\t\tvar inst = $( this ).droppable( \"instance\" );\n\t\t\t\tif (\n\t\t\t\t\tinst.options.greedy &&\n\t\t\t\t\t!inst.options.disabled &&\n\t\t\t\t\tinst.options.scope === draggable.options.scope &&\n\t\t\t\t\tinst.accept.call(\n\t\t\t\t\t\tinst.element[ 0 ], ( draggable.currentItem || draggable.element )\n\t\t\t\t\t) &&\n\t\t\t\t\tintersect(\n\t\t\t\t\t\tdraggable,\n\t\t\t\t\t\t$.extend( inst, { offset: inst.element.offset() } ),\n\t\t\t\t\t\tinst.options.tolerance, event\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\tchildrenIntersection = true;\n\t\t\t\t\treturn false; }\n\t\t\t} );\n\t\tif ( childrenIntersection ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif ( this.accept.call( this.element[ 0 ],\n\t\t\t\t( draggable.currentItem || draggable.element ) ) ) {\n\t\t\tthis._removeActiveClass();\n\t\t\tthis._removeHoverClass();\n\n\t\t\tthis._trigger( \"drop\", event, this.ui( draggable ) );\n\t\t\treturn this.element;\n\t\t}\n\n\t\treturn false;\n\n\t},\n\n\tui: function( c ) {\n\t\treturn {\n\t\t\tdraggable: ( c.currentItem || c.element ),\n\t\t\thelper: c.helper,\n\t\t\tposition: c.position,\n\t\t\toffset: c.positionAbs\n\t\t};\n\t},\n\n\t// Extension points just to make backcompat sane and avoid duplicating logic\n\t// TODO: Remove in 1.13 along with call to it below\n\t_addHoverClass: function() {\n\t\tthis._addClass( \"ui-droppable-hover\" );\n\t},\n\n\t_removeHoverClass: function() {\n\t\tthis._removeClass( \"ui-droppable-hover\" );\n\t},\n\n\t_addActiveClass: function() {\n\t\tthis._addClass( \"ui-droppable-active\" );\n\t},\n\n\t_removeActiveClass: function() {\n\t\tthis._removeClass( \"ui-droppable-active\" );\n\t}\n} );\n\nvar intersect = $.ui.intersect = ( function() {\n\tfunction isOverAxis( x, reference, size ) {\n\t\treturn ( x >= reference ) && ( x < ( reference + size ) );\n\t}\n\n\treturn function( draggable, droppable, toleranceMode, event ) {\n\n\t\tif ( !droppable.offset ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar x1 = ( draggable.positionAbs ||\n\t\t\t\tdraggable.position.absolute ).left + draggable.margins.left,\n\t\t\ty1 = ( draggable.positionAbs ||\n\t\t\t\tdraggable.position.absolute ).top + draggable.margins.top,\n\t\t\tx2 = x1 + draggable.helperProportions.width,\n\t\t\ty2 = y1 + draggable.helperProportions.height,\n\t\t\tl = droppable.offset.left,\n\t\t\tt = droppable.offset.top,\n\t\t\tr = l + droppable.proportions().width,\n\t\t\tb = t + droppable.proportions().height;\n\n\t\tswitch ( toleranceMode ) {\n\t\tcase \"fit\":\n\t\t\treturn ( l <= x1 && x2 <= r && t <= y1 && y2 <= b );\n\t\tcase \"intersect\":\n\t\t\treturn ( l < x1 + ( draggable.helperProportions.width / 2 ) && // Right Half\n\t\t\t\tx2 - ( draggable.helperProportions.width / 2 ) < r && // Left Half\n\t\t\t\tt < y1 + ( draggable.helperProportions.height / 2 ) && // Bottom Half\n\t\t\t\ty2 - ( draggable.helperProportions.height / 2 ) < b ); // Top Half\n\t\tcase \"pointer\":\n\t\t\treturn isOverAxis( event.pageY, t, droppable.proportions().height ) &&\n\t\t\t\tisOverAxis( event.pageX, l, droppable.proportions().width );\n\t\tcase \"touch\":\n\t\t\treturn (\n\t\t\t\t( y1 >= t && y1 <= b ) || // Top edge touching\n\t\t\t\t( y2 >= t && y2 <= b ) || // Bottom edge touching\n\t\t\t\t( y1 < t && y2 > b ) // Surrounded vertically\n\t\t\t) && (\n\t\t\t\t( x1 >= l && x1 <= r ) || // Left edge touching\n\t\t\t\t( x2 >= l && x2 <= r ) || // Right edge touching\n\t\t\t\t( x1 < l && x2 > r ) // Surrounded horizontally\n\t\t\t);\n\t\tdefault:\n\t\t\treturn false;\n\t\t}\n\t};\n} )();\n\n/*\n\tThis manager tracks offsets of draggables and droppables\n*/\n$.ui.ddmanager = {\n\tcurrent: null,\n\tdroppables: { \"default\": [] },\n\tprepareOffsets: function( t, event ) {\n\n\t\tvar i, j,\n\t\t\tm = $.ui.ddmanager.droppables[ t.options.scope ] || [],\n\t\t\ttype = event ? event.type : null, // workaround for #2317\n\t\t\tlist = ( t.currentItem || t.element ).find( \":data(ui-droppable)\" ).addBack();\n\n\t\tdroppablesLoop: for ( i = 0; i < m.length; i++ ) {\n\n\t\t\t// No disabled and non-accepted\n\t\t\tif ( m[ i ].options.disabled || ( t && !m[ i ].accept.call( m[ i ].element[ 0 ],\n\t\t\t\t\t( t.currentItem || t.element ) ) ) ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Filter out elements in the current dragged item\n\t\t\tfor ( j = 0; j < list.length; j++ ) {\n\t\t\t\tif ( list[ j ] === m[ i ].element[ 0 ] ) {\n\t\t\t\t\tm[ i ].proportions().height = 0;\n\t\t\t\t\tcontinue droppablesLoop;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tm[ i ].visible = m[ i ].element.css( \"display\" ) !== \"none\";\n\t\t\tif ( !m[ i ].visible ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Activate the droppable if used directly from draggables\n\t\t\tif ( type === \"mousedown\" ) {\n\t\t\t\tm[ i ]._activate.call( m[ i ], event );\n\t\t\t}\n\n\t\t\tm[ i ].offset = m[ i ].element.offset();\n\t\t\tm[ i ].proportions( {\n\t\t\t\twidth: m[ i ].element[ 0 ].offsetWidth,\n\t\t\t\theight: m[ i ].element[ 0 ].offsetHeight\n\t\t\t} );\n\n\t\t}\n\n\t},\n\tdrop: function( draggable, event ) {\n\n\t\tvar dropped = false;\n\n\t\t// Create a copy of the droppables in case the list changes during the drop (#9116)\n\t\t$.each( ( $.ui.ddmanager.droppables[ draggable.options.scope ] || [] ).slice(), function() {\n\n\t\t\tif ( !this.options ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( !this.options.disabled && this.visible &&\n\t\t\t\t\tintersect( draggable, this, this.options.tolerance, event ) ) {\n\t\t\t\tdropped = this._drop.call( this, event ) || dropped;\n\t\t\t}\n\n\t\t\tif ( !this.options.disabled && this.visible && this.accept.call( this.element[ 0 ],\n\t\t\t\t\t( draggable.currentItem || draggable.element ) ) ) {\n\t\t\t\tthis.isout = true;\n\t\t\t\tthis.isover = false;\n\t\t\t\tthis._deactivate.call( this, event );\n\t\t\t}\n\n\t\t} );\n\t\treturn dropped;\n\n\t},\n\tdragStart: function( draggable, event ) {\n\n\t\t// Listen for scrolling so that if the dragging causes scrolling the position of the\n\t\t// droppables can be recalculated (see #5003)\n\t\tdraggable.element.parentsUntil( \"body\" ).on( \"scroll.droppable\", function() {\n\t\t\tif ( !draggable.options.refreshPositions ) {\n\t\t\t\t$.ui.ddmanager.prepareOffsets( draggable, event );\n\t\t\t}\n\t\t} );\n\t},\n\tdrag: function( draggable, event ) {\n\n\t\t// If you have a highly dynamic page, you might try this option. It renders positions\n\t\t// every time you move the mouse.\n\t\tif ( draggable.options.refreshPositions ) {\n\t\t\t$.ui.ddmanager.prepareOffsets( draggable, event );\n\t\t}\n\n\t\t// Run through all droppables and check their positions based on specific tolerance options\n\t\t$.each( $.ui.ddmanager.droppables[ draggable.options.scope ] || [], function() {\n\n\t\t\tif ( this.options.disabled || this.greedyChild || !this.visible ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar parentInstance, scope, parent,\n\t\t\t\tintersects = intersect( draggable, this, this.options.tolerance, event ),\n\t\t\t\tc = !intersects && this.isover ?\n\t\t\t\t\t\"isout\" :\n\t\t\t\t\t( intersects && !this.isover ? \"isover\" : null );\n\t\t\tif ( !c ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( this.options.greedy ) {\n\n\t\t\t\t// find droppable parents with same scope\n\t\t\t\tscope = this.options.scope;\n\t\t\t\tparent = this.element.parents( \":data(ui-droppable)\" ).filter( function() {\n\t\t\t\t\treturn $( this ).droppable( \"instance\" ).options.scope === scope;\n\t\t\t\t} );\n\n\t\t\t\tif ( parent.length ) {\n\t\t\t\t\tparentInstance = $( parent[ 0 ] ).droppable( \"instance\" );\n\t\t\t\t\tparentInstance.greedyChild = ( c === \"isover\" );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// We just moved into a greedy child\n\t\t\tif ( parentInstance && c === \"isover\" ) {\n\t\t\t\tparentInstance.isover = false;\n\t\t\t\tparentInstance.isout = true;\n\t\t\t\tparentInstance._out.call( parentInstance, event );\n\t\t\t}\n\n\t\t\tthis[ c ] = true;\n\t\t\tthis[ c === \"isout\" ? \"isover\" : \"isout\" ] = false;\n\t\t\tthis[ c === \"isover\" ? \"_over\" : \"_out\" ].call( this, event );\n\n\t\t\t// We just moved out of a greedy child\n\t\t\tif ( parentInstance && c === \"isout\" ) {\n\t\t\t\tparentInstance.isout = false;\n\t\t\t\tparentInstance.isover = true;\n\t\t\t\tparentInstance._over.call( parentInstance, event );\n\t\t\t}\n\t\t} );\n\n\t},\n\tdragStop: function( draggable, event ) {\n\t\tdraggable.element.parentsUntil( \"body\" ).off( \"scroll.droppable\" );\n\n\t\t// Call prepareOffsets one final time since IE does not fire return scroll events when\n\t\t// overflow was caused by drag (see #5003)\n\t\tif ( !draggable.options.refreshPositions ) {\n\t\t\t$.ui.ddmanager.prepareOffsets( draggable, event );\n\t\t}\n\t}\n};\n\n// DEPRECATED\n// TODO: switch return back to widget declaration at top of file when this is removed\nif ( $.uiBackCompat !== false ) {\n\n\t// Backcompat for activeClass and hoverClass options\n\t$.widget( \"ui.droppable\", $.ui.droppable, {\n\t\toptions: {\n\t\t\thoverClass: false,\n\t\t\tactiveClass: false\n\t\t},\n\t\t_addActiveClass: function() {\n\t\t\tthis._super();\n\t\t\tif ( this.options.activeClass ) {\n\t\t\t\tthis.element.addClass( this.options.activeClass );\n\t\t\t}\n\t\t},\n\t\t_removeActiveClass: function() {\n\t\t\tthis._super();\n\t\t\tif ( this.options.activeClass ) {\n\t\t\t\tthis.element.removeClass( this.options.activeClass );\n\t\t\t}\n\t\t},\n\t\t_addHoverClass: function() {\n\t\t\tthis._super();\n\t\t\tif ( this.options.hoverClass ) {\n\t\t\t\tthis.element.addClass( this.options.hoverClass );\n\t\t\t}\n\t\t},\n\t\t_removeHoverClass: function() {\n\t\t\tthis._super();\n\t\t\tif ( this.options.hoverClass ) {\n\t\t\t\tthis.element.removeClass( this.options.hoverClass );\n\t\t\t}\n\t\t}\n\t} );\n}\n\nvar widgetsDroppable = $.ui.droppable;\n\n\n/*!\n * jQuery UI Progressbar 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Progressbar\n//>>group: Widgets\n// jscs:disable maximumLineLength\n//>>description: Displays a status indicator for loading state, standard percentage, and other progress indicators.\n// jscs:enable maximumLineLength\n//>>docs: http://api.jqueryui.com/progressbar/\n//>>demos: http://jqueryui.com/progressbar/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/progressbar.css\n//>>css.theme: ../../themes/base/theme.css\n\n\n\nvar widgetsProgressbar = $.widget( \"ui.progressbar\", {\n\tversion: \"1.12.1\",\n\toptions: {\n\t\tclasses: {\n\t\t\t\"ui-progressbar\": \"ui-corner-all\",\n\t\t\t\"ui-progressbar-value\": \"ui-corner-left\",\n\t\t\t\"ui-progressbar-complete\": \"ui-corner-right\"\n\t\t},\n\t\tmax: 100,\n\t\tvalue: 0,\n\n\t\tchange: null,\n\t\tcomplete: null\n\t},\n\n\tmin: 0,\n\n\t_create: function() {\n\n\t\t// Constrain initial value\n\t\tthis.oldValue = this.options.value = this._constrainedValue();\n\n\t\tthis.element.attr( {\n\n\t\t\t// Only set static values; aria-valuenow and aria-valuemax are\n\t\t\t// set inside _refreshValue()\n\t\t\trole: \"progressbar\",\n\t\t\t\"aria-valuemin\": this.min\n\t\t} );\n\t\tthis._addClass( \"ui-progressbar\", \"ui-widget ui-widget-content\" );\n\n\t\tthis.valueDiv = $( \"<div>\" ).appendTo( this.element );\n\t\tthis._addClass( this.valueDiv, \"ui-progressbar-value\", \"ui-widget-header\" );\n\t\tthis._refreshValue();\n\t},\n\n\t_destroy: function() {\n\t\tthis.element.removeAttr( \"role aria-valuemin aria-valuemax aria-valuenow\" );\n\n\t\tthis.valueDiv.remove();\n\t},\n\n\tvalue: function( newValue ) {\n\t\tif ( newValue === undefined ) {\n\t\t\treturn this.options.value;\n\t\t}\n\n\t\tthis.options.value = this._constrainedValue( newValue );\n\t\tthis._refreshValue();\n\t},\n\n\t_constrainedValue: function( newValue ) {\n\t\tif ( newValue === undefined ) {\n\t\t\tnewValue = this.options.value;\n\t\t}\n\n\t\tthis.indeterminate = newValue === false;\n\n\t\t// Sanitize value\n\t\tif ( typeof newValue !== \"number\" ) {\n\t\t\tnewValue = 0;\n\t\t}\n\n\t\treturn this.indeterminate ? false :\n\t\t\tMath.min( this.options.max, Math.max( this.min, newValue ) );\n\t},\n\n\t_setOptions: function( options ) {\n\n\t\t// Ensure \"value\" option is set after other values (like max)\n\t\tvar value = options.value;\n\t\tdelete options.value;\n\n\t\tthis._super( options );\n\n\t\tthis.options.value = this._constrainedValue( value );\n\t\tthis._refreshValue();\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tif ( key === \"max\" ) {\n\n\t\t\t// Don't allow a max less than min\n\t\t\tvalue = Math.max( this.min, value );\n\t\t}\n\t\tthis._super( key, value );\n\t},\n\n\t_setOptionDisabled: function( value ) {\n\t\tthis._super( value );\n\n\t\tthis.element.attr( \"aria-disabled\", value );\n\t\tthis._toggleClass( null, \"ui-state-disabled\", !!value );\n\t},\n\n\t_percentage: function() {\n\t\treturn this.indeterminate ?\n\t\t\t100 :\n\t\t\t100 * ( this.options.value - this.min ) / ( this.options.max - this.min );\n\t},\n\n\t_refreshValue: function() {\n\t\tvar value = this.options.value,\n\t\t\tpercentage = this._percentage();\n\n\t\tthis.valueDiv\n\t\t\t.toggle( this.indeterminate || value > this.min )\n\t\t\t.width( percentage.toFixed( 0 ) + \"%\" );\n\n\t\tthis\n\t\t\t._toggleClass( this.valueDiv, \"ui-progressbar-complete\", null,\n\t\t\t\tvalue === this.options.max )\n\t\t\t._toggleClass( \"ui-progressbar-indeterminate\", null, this.indeterminate );\n\n\t\tif ( this.indeterminate ) {\n\t\t\tthis.element.removeAttr( \"aria-valuenow\" );\n\t\t\tif ( !this.overlayDiv ) {\n\t\t\t\tthis.overlayDiv = $( \"<div>\" ).appendTo( this.valueDiv );\n\t\t\t\tthis._addClass( this.overlayDiv, \"ui-progressbar-overlay\" );\n\t\t\t}\n\t\t} else {\n\t\t\tthis.element.attr( {\n\t\t\t\t\"aria-valuemax\": this.options.max,\n\t\t\t\t\"aria-valuenow\": value\n\t\t\t} );\n\t\t\tif ( this.overlayDiv ) {\n\t\t\t\tthis.overlayDiv.remove();\n\t\t\t\tthis.overlayDiv = null;\n\t\t\t}\n\t\t}\n\n\t\tif ( this.oldValue !== value ) {\n\t\t\tthis.oldValue = value;\n\t\t\tthis._trigger( \"change\" );\n\t\t}\n\t\tif ( value === this.options.max ) {\n\t\t\tthis._trigger( \"complete\" );\n\t\t}\n\t}\n} );\n\n\n/*!\n * jQuery UI Selectable 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Selectable\n//>>group: Interactions\n//>>description: Allows groups of elements to be selected with the mouse.\n//>>docs: http://api.jqueryui.com/selectable/\n//>>demos: http://jqueryui.com/selectable/\n//>>css.structure: ../../themes/base/selectable.css\n\n\n\nvar widgetsSelectable = $.widget( \"ui.selectable\", $.ui.mouse, {\n\tversion: \"1.12.1\",\n\toptions: {\n\t\tappendTo: \"body\",\n\t\tautoRefresh: true,\n\t\tdistance: 0,\n\t\tfilter: \"*\",\n\t\ttolerance: \"touch\",\n\n\t\t// Callbacks\n\t\tselected: null,\n\t\tselecting: null,\n\t\tstart: null,\n\t\tstop: null,\n\t\tunselected: null,\n\t\tunselecting: null\n\t},\n\t_create: function() {\n\t\tvar that = this;\n\n\t\tthis._addClass( \"ui-selectable\" );\n\n\t\tthis.dragged = false;\n\n\t\t// Cache selectee children based on filter\n\t\tthis.refresh = function() {\n\t\t\tthat.elementPos = $( that.element[ 0 ] ).offset();\n\t\t\tthat.selectees = $( that.options.filter, that.element[ 0 ] );\n\t\t\tthat._addClass( that.selectees, \"ui-selectee\" );\n\t\t\tthat.selectees.each( function() {\n\t\t\t\tvar $this = $( this ),\n\t\t\t\t\tselecteeOffset = $this.offset(),\n\t\t\t\t\tpos = {\n\t\t\t\t\t\tleft: selecteeOffset.left - that.elementPos.left,\n\t\t\t\t\t\ttop: selecteeOffset.top - that.elementPos.top\n\t\t\t\t\t};\n\t\t\t\t$.data( this, \"selectable-item\", {\n\t\t\t\t\telement: this,\n\t\t\t\t\t$element: $this,\n\t\t\t\t\tleft: pos.left,\n\t\t\t\t\ttop: pos.top,\n\t\t\t\t\tright: pos.left + $this.outerWidth(),\n\t\t\t\t\tbottom: pos.top + $this.outerHeight(),\n\t\t\t\t\tstartselected: false,\n\t\t\t\t\tselected: $this.hasClass( \"ui-selected\" ),\n\t\t\t\t\tselecting: $this.hasClass( \"ui-selecting\" ),\n\t\t\t\t\tunselecting: $this.hasClass( \"ui-unselecting\" )\n\t\t\t\t} );\n\t\t\t} );\n\t\t};\n\t\tthis.refresh();\n\n\t\tthis._mouseInit();\n\n\t\tthis.helper = $( \"<div>\" );\n\t\tthis._addClass( this.helper, \"ui-selectable-helper\" );\n\t},\n\n\t_destroy: function() {\n\t\tthis.selectees.removeData( \"selectable-item\" );\n\t\tthis._mouseDestroy();\n\t},\n\n\t_mouseStart: function( event ) {\n\t\tvar that = this,\n\t\t\toptions = this.options;\n\n\t\tthis.opos = [ event.pageX, event.pageY ];\n\t\tthis.elementPos = $( this.element[ 0 ] ).offset();\n\n\t\tif ( this.options.disabled ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.selectees = $( options.filter, this.element[ 0 ] );\n\n\t\tthis._trigger( \"start\", event );\n\n\t\t$( options.appendTo ).append( this.helper );\n\n\t\t// position helper (lasso)\n\t\tthis.helper.css( {\n\t\t\t\"left\": event.pageX,\n\t\t\t\"top\": event.pageY,\n\t\t\t\"width\": 0,\n\t\t\t\"height\": 0\n\t\t} );\n\n\t\tif ( options.autoRefresh ) {\n\t\t\tthis.refresh();\n\t\t}\n\n\t\tthis.selectees.filter( \".ui-selected\" ).each( function() {\n\t\t\tvar selectee = $.data( this, \"selectable-item\" );\n\t\t\tselectee.startselected = true;\n\t\t\tif ( !event.metaKey && !event.ctrlKey ) {\n\t\t\t\tthat._removeClass( selectee.$element, \"ui-selected\" );\n\t\t\t\tselectee.selected = false;\n\t\t\t\tthat._addClass( selectee.$element, \"ui-unselecting\" );\n\t\t\t\tselectee.unselecting = true;\n\n\t\t\t\t// selectable UNSELECTING callback\n\t\t\t\tthat._trigger( \"unselecting\", event, {\n\t\t\t\t\tunselecting: selectee.element\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\n\t\t$( event.target ).parents().addBack().each( function() {\n\t\t\tvar doSelect,\n\t\t\t\tselectee = $.data( this, \"selectable-item\" );\n\t\t\tif ( selectee ) {\n\t\t\t\tdoSelect = ( !event.metaKey && !event.ctrlKey ) ||\n\t\t\t\t\t!selectee.$element.hasClass( \"ui-selected\" );\n\t\t\t\tthat._removeClass( selectee.$element, doSelect ? \"ui-unselecting\" : \"ui-selected\" )\n\t\t\t\t\t._addClass( selectee.$element, doSelect ? \"ui-selecting\" : \"ui-unselecting\" );\n\t\t\t\tselectee.unselecting = !doSelect;\n\t\t\t\tselectee.selecting = doSelect;\n\t\t\t\tselectee.selected = doSelect;\n\n\t\t\t\t// selectable (UN)SELECTING callback\n\t\t\t\tif ( doSelect ) {\n\t\t\t\t\tthat._trigger( \"selecting\", event, {\n\t\t\t\t\t\tselecting: selectee.element\n\t\t\t\t\t} );\n\t\t\t\t} else {\n\t\t\t\t\tthat._trigger( \"unselecting\", event, {\n\t\t\t\t\t\tunselecting: selectee.element\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} );\n\n\t},\n\n\t_mouseDrag: function( event ) {\n\n\t\tthis.dragged = true;\n\n\t\tif ( this.options.disabled ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar tmp,\n\t\t\tthat = this,\n\t\t\toptions = this.options,\n\t\t\tx1 = this.opos[ 0 ],\n\t\t\ty1 = this.opos[ 1 ],\n\t\t\tx2 = event.pageX,\n\t\t\ty2 = event.pageY;\n\n\t\tif ( x1 > x2 ) { tmp = x2; x2 = x1; x1 = tmp; }\n\t\tif ( y1 > y2 ) { tmp = y2; y2 = y1; y1 = tmp; }\n\t\tthis.helper.css( { left: x1, top: y1, width: x2 - x1, height: y2 - y1 } );\n\n\t\tthis.selectees.each( function() {\n\t\t\tvar selectee = $.data( this, \"selectable-item\" ),\n\t\t\t\thit = false,\n\t\t\t\toffset = {};\n\n\t\t\t//prevent helper from being selected if appendTo: selectable\n\t\t\tif ( !selectee || selectee.element === that.element[ 0 ] ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\toffset.left   = selectee.left   + that.elementPos.left;\n\t\t\toffset.right  = selectee.right  + that.elementPos.left;\n\t\t\toffset.top    = selectee.top    + that.elementPos.top;\n\t\t\toffset.bottom = selectee.bottom + that.elementPos.top;\n\n\t\t\tif ( options.tolerance === \"touch\" ) {\n\t\t\t\thit = ( !( offset.left > x2 || offset.right < x1 || offset.top > y2 ||\n                    offset.bottom < y1 ) );\n\t\t\t} else if ( options.tolerance === \"fit\" ) {\n\t\t\t\thit = ( offset.left > x1 && offset.right < x2 && offset.top > y1 &&\n                    offset.bottom < y2 );\n\t\t\t}\n\n\t\t\tif ( hit ) {\n\n\t\t\t\t// SELECT\n\t\t\t\tif ( selectee.selected ) {\n\t\t\t\t\tthat._removeClass( selectee.$element, \"ui-selected\" );\n\t\t\t\t\tselectee.selected = false;\n\t\t\t\t}\n\t\t\t\tif ( selectee.unselecting ) {\n\t\t\t\t\tthat._removeClass( selectee.$element, \"ui-unselecting\" );\n\t\t\t\t\tselectee.unselecting = false;\n\t\t\t\t}\n\t\t\t\tif ( !selectee.selecting ) {\n\t\t\t\t\tthat._addClass( selectee.$element, \"ui-selecting\" );\n\t\t\t\t\tselectee.selecting = true;\n\n\t\t\t\t\t// selectable SELECTING callback\n\t\t\t\t\tthat._trigger( \"selecting\", event, {\n\t\t\t\t\t\tselecting: selectee.element\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// UNSELECT\n\t\t\t\tif ( selectee.selecting ) {\n\t\t\t\t\tif ( ( event.metaKey || event.ctrlKey ) && selectee.startselected ) {\n\t\t\t\t\t\tthat._removeClass( selectee.$element, \"ui-selecting\" );\n\t\t\t\t\t\tselectee.selecting = false;\n\t\t\t\t\t\tthat._addClass( selectee.$element, \"ui-selected\" );\n\t\t\t\t\t\tselectee.selected = true;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthat._removeClass( selectee.$element, \"ui-selecting\" );\n\t\t\t\t\t\tselectee.selecting = false;\n\t\t\t\t\t\tif ( selectee.startselected ) {\n\t\t\t\t\t\t\tthat._addClass( selectee.$element, \"ui-unselecting\" );\n\t\t\t\t\t\t\tselectee.unselecting = true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// selectable UNSELECTING callback\n\t\t\t\t\t\tthat._trigger( \"unselecting\", event, {\n\t\t\t\t\t\t\tunselecting: selectee.element\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif ( selectee.selected ) {\n\t\t\t\t\tif ( !event.metaKey && !event.ctrlKey && !selectee.startselected ) {\n\t\t\t\t\t\tthat._removeClass( selectee.$element, \"ui-selected\" );\n\t\t\t\t\t\tselectee.selected = false;\n\n\t\t\t\t\t\tthat._addClass( selectee.$element, \"ui-unselecting\" );\n\t\t\t\t\t\tselectee.unselecting = true;\n\n\t\t\t\t\t\t// selectable UNSELECTING callback\n\t\t\t\t\t\tthat._trigger( \"unselecting\", event, {\n\t\t\t\t\t\t\tunselecting: selectee.element\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\n\t\treturn false;\n\t},\n\n\t_mouseStop: function( event ) {\n\t\tvar that = this;\n\n\t\tthis.dragged = false;\n\n\t\t$( \".ui-unselecting\", this.element[ 0 ] ).each( function() {\n\t\t\tvar selectee = $.data( this, \"selectable-item\" );\n\t\t\tthat._removeClass( selectee.$element, \"ui-unselecting\" );\n\t\t\tselectee.unselecting = false;\n\t\t\tselectee.startselected = false;\n\t\t\tthat._trigger( \"unselected\", event, {\n\t\t\t\tunselected: selectee.element\n\t\t\t} );\n\t\t} );\n\t\t$( \".ui-selecting\", this.element[ 0 ] ).each( function() {\n\t\t\tvar selectee = $.data( this, \"selectable-item\" );\n\t\t\tthat._removeClass( selectee.$element, \"ui-selecting\" )\n\t\t\t\t._addClass( selectee.$element, \"ui-selected\" );\n\t\t\tselectee.selecting = false;\n\t\t\tselectee.selected = true;\n\t\t\tselectee.startselected = true;\n\t\t\tthat._trigger( \"selected\", event, {\n\t\t\t\tselected: selectee.element\n\t\t\t} );\n\t\t} );\n\t\tthis._trigger( \"stop\", event );\n\n\t\tthis.helper.remove();\n\n\t\treturn false;\n\t}\n\n} );\n\n\n/*!\n * jQuery UI Selectmenu 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Selectmenu\n//>>group: Widgets\n// jscs:disable maximumLineLength\n//>>description: Duplicates and extends the functionality of a native HTML select element, allowing it to be customizable in behavior and appearance far beyond the limitations of a native select.\n// jscs:enable maximumLineLength\n//>>docs: http://api.jqueryui.com/selectmenu/\n//>>demos: http://jqueryui.com/selectmenu/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/selectmenu.css, ../../themes/base/button.css\n//>>css.theme: ../../themes/base/theme.css\n\n\n\nvar widgetsSelectmenu = $.widget( \"ui.selectmenu\", [ $.ui.formResetMixin, {\n\tversion: \"1.12.1\",\n\tdefaultElement: \"<select>\",\n\toptions: {\n\t\tappendTo: null,\n\t\tclasses: {\n\t\t\t\"ui-selectmenu-button-open\": \"ui-corner-top\",\n\t\t\t\"ui-selectmenu-button-closed\": \"ui-corner-all\"\n\t\t},\n\t\tdisabled: null,\n\t\ticons: {\n\t\t\tbutton: \"ui-icon-triangle-1-s\"\n\t\t},\n\t\tposition: {\n\t\t\tmy: \"left top\",\n\t\t\tat: \"left bottom\",\n\t\t\tcollision: \"none\"\n\t\t},\n\t\twidth: false,\n\n\t\t// Callbacks\n\t\tchange: null,\n\t\tclose: null,\n\t\tfocus: null,\n\t\topen: null,\n\t\tselect: null\n\t},\n\n\t_create: function() {\n\t\tvar selectmenuId = this.element.uniqueId().attr( \"id\" );\n\t\tthis.ids = {\n\t\t\telement: selectmenuId,\n\t\t\tbutton: selectmenuId + \"-button\",\n\t\t\tmenu: selectmenuId + \"-menu\"\n\t\t};\n\n\t\tthis._drawButton();\n\t\tthis._drawMenu();\n\t\tthis._bindFormResetHandler();\n\n\t\tthis._rendered = false;\n\t\tthis.menuItems = $();\n\t},\n\n\t_drawButton: function() {\n\t\tvar icon,\n\t\t\tthat = this,\n\t\t\titem = this._parseOption(\n\t\t\t\tthis.element.find( \"option:selected\" ),\n\t\t\t\tthis.element[ 0 ].selectedIndex\n\t\t\t);\n\n\t\t// Associate existing label with the new button\n\t\tthis.labels = this.element.labels().attr( \"for\", this.ids.button );\n\t\tthis._on( this.labels, {\n\t\t\tclick: function( event ) {\n\t\t\t\tthis.button.focus();\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t} );\n\n\t\t// Hide original select element\n\t\tthis.element.hide();\n\n\t\t// Create button\n\t\tthis.button = $( \"<span>\", {\n\t\t\ttabindex: this.options.disabled ? -1 : 0,\n\t\t\tid: this.ids.button,\n\t\t\trole: \"combobox\",\n\t\t\t\"aria-expanded\": \"false\",\n\t\t\t\"aria-autocomplete\": \"list\",\n\t\t\t\"aria-owns\": this.ids.menu,\n\t\t\t\"aria-haspopup\": \"true\",\n\t\t\ttitle: this.element.attr( \"title\" )\n\t\t} )\n\t\t\t.insertAfter( this.element );\n\n\t\tthis._addClass( this.button, \"ui-selectmenu-button ui-selectmenu-button-closed\",\n\t\t\t\"ui-button ui-widget\" );\n\n\t\ticon = $( \"<span>\" ).appendTo( this.button );\n\t\tthis._addClass( icon, \"ui-selectmenu-icon\", \"ui-icon \" + this.options.icons.button );\n\t\tthis.buttonItem = this._renderButtonItem( item )\n\t\t\t.appendTo( this.button );\n\n\t\tif ( this.options.width !== false ) {\n\t\t\tthis._resizeButton();\n\t\t}\n\n\t\tthis._on( this.button, this._buttonEvents );\n\t\tthis.button.one( \"focusin\", function() {\n\n\t\t\t// Delay rendering the menu items until the button receives focus.\n\t\t\t// The menu may have already been rendered via a programmatic open.\n\t\t\tif ( !that._rendered ) {\n\t\t\t\tthat._refreshMenu();\n\t\t\t}\n\t\t} );\n\t},\n\n\t_drawMenu: function() {\n\t\tvar that = this;\n\n\t\t// Create menu\n\t\tthis.menu = $( \"<ul>\", {\n\t\t\t\"aria-hidden\": \"true\",\n\t\t\t\"aria-labelledby\": this.ids.button,\n\t\t\tid: this.ids.menu\n\t\t} );\n\n\t\t// Wrap menu\n\t\tthis.menuWrap = $( \"<div>\" ).append( this.menu );\n\t\tthis._addClass( this.menuWrap, \"ui-selectmenu-menu\", \"ui-front\" );\n\t\tthis.menuWrap.appendTo( this._appendTo() );\n\n\t\t// Initialize menu widget\n\t\tthis.menuInstance = this.menu\n\t\t\t.menu( {\n\t\t\t\tclasses: {\n\t\t\t\t\t\"ui-menu\": \"ui-corner-bottom\"\n\t\t\t\t},\n\t\t\t\trole: \"listbox\",\n\t\t\t\tselect: function( event, ui ) {\n\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t// Support: IE8\n\t\t\t\t\t// If the item was selected via a click, the text selection\n\t\t\t\t\t// will be destroyed in IE\n\t\t\t\t\tthat._setSelection();\n\n\t\t\t\t\tthat._select( ui.item.data( \"ui-selectmenu-item\" ), event );\n\t\t\t\t},\n\t\t\t\tfocus: function( event, ui ) {\n\t\t\t\t\tvar item = ui.item.data( \"ui-selectmenu-item\" );\n\n\t\t\t\t\t// Prevent inital focus from firing and check if its a newly focused item\n\t\t\t\t\tif ( that.focusIndex != null && item.index !== that.focusIndex ) {\n\t\t\t\t\t\tthat._trigger( \"focus\", event, { item: item } );\n\t\t\t\t\t\tif ( !that.isOpen ) {\n\t\t\t\t\t\t\tthat._select( item, event );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthat.focusIndex = item.index;\n\n\t\t\t\t\tthat.button.attr( \"aria-activedescendant\",\n\t\t\t\t\t\tthat.menuItems.eq( item.index ).attr( \"id\" ) );\n\t\t\t\t}\n\t\t\t} )\n\t\t\t.menu( \"instance\" );\n\n\t\t// Don't close the menu on mouseleave\n\t\tthis.menuInstance._off( this.menu, \"mouseleave\" );\n\n\t\t// Cancel the menu's collapseAll on document click\n\t\tthis.menuInstance._closeOnDocumentClick = function() {\n\t\t\treturn false;\n\t\t};\n\n\t\t// Selects often contain empty items, but never contain dividers\n\t\tthis.menuInstance._isDivider = function() {\n\t\t\treturn false;\n\t\t};\n\t},\n\n\trefresh: function() {\n\t\tthis._refreshMenu();\n\t\tthis.buttonItem.replaceWith(\n\t\t\tthis.buttonItem = this._renderButtonItem(\n\n\t\t\t\t// Fall back to an empty object in case there are no options\n\t\t\t\tthis._getSelectedItem().data( \"ui-selectmenu-item\" ) || {}\n\t\t\t)\n\t\t);\n\t\tif ( this.options.width === null ) {\n\t\t\tthis._resizeButton();\n\t\t}\n\t},\n\n\t_refreshMenu: function() {\n\t\tvar item,\n\t\t\toptions = this.element.find( \"option\" );\n\n\t\tthis.menu.empty();\n\n\t\tthis._parseOptions( options );\n\t\tthis._renderMenu( this.menu, this.items );\n\n\t\tthis.menuInstance.refresh();\n\t\tthis.menuItems = this.menu.find( \"li\" )\n\t\t\t.not( \".ui-selectmenu-optgroup\" )\n\t\t\t\t.find( \".ui-menu-item-wrapper\" );\n\n\t\tthis._rendered = true;\n\n\t\tif ( !options.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\titem = this._getSelectedItem();\n\n\t\t// Update the menu to have the correct item focused\n\t\tthis.menuInstance.focus( null, item );\n\t\tthis._setAria( item.data( \"ui-selectmenu-item\" ) );\n\n\t\t// Set disabled state\n\t\tthis._setOption( \"disabled\", this.element.prop( \"disabled\" ) );\n\t},\n\n\topen: function( event ) {\n\t\tif ( this.options.disabled ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If this is the first time the menu is being opened, render the items\n\t\tif ( !this._rendered ) {\n\t\t\tthis._refreshMenu();\n\t\t} else {\n\n\t\t\t// Menu clears focus on close, reset focus to selected item\n\t\t\tthis._removeClass( this.menu.find( \".ui-state-active\" ), null, \"ui-state-active\" );\n\t\t\tthis.menuInstance.focus( null, this._getSelectedItem() );\n\t\t}\n\n\t\t// If there are no options, don't open the menu\n\t\tif ( !this.menuItems.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.isOpen = true;\n\t\tthis._toggleAttr();\n\t\tthis._resizeMenu();\n\t\tthis._position();\n\n\t\tthis._on( this.document, this._documentClick );\n\n\t\tthis._trigger( \"open\", event );\n\t},\n\n\t_position: function() {\n\t\tthis.menuWrap.position( $.extend( { of: this.button }, this.options.position ) );\n\t},\n\n\tclose: function( event ) {\n\t\tif ( !this.isOpen ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.isOpen = false;\n\t\tthis._toggleAttr();\n\n\t\tthis.range = null;\n\t\tthis._off( this.document );\n\n\t\tthis._trigger( \"close\", event );\n\t},\n\n\twidget: function() {\n\t\treturn this.button;\n\t},\n\n\tmenuWidget: function() {\n\t\treturn this.menu;\n\t},\n\n\t_renderButtonItem: function( item ) {\n\t\tvar buttonItem = $( \"<span>\" );\n\n\t\tthis._setText( buttonItem, item.label );\n\t\tthis._addClass( buttonItem, \"ui-selectmenu-text\" );\n\n\t\treturn buttonItem;\n\t},\n\n\t_renderMenu: function( ul, items ) {\n\t\tvar that = this,\n\t\t\tcurrentOptgroup = \"\";\n\n\t\t$.each( items, function( index, item ) {\n\t\t\tvar li;\n\n\t\t\tif ( item.optgroup !== currentOptgroup ) {\n\t\t\t\tli = $( \"<li>\", {\n\t\t\t\t\ttext: item.optgroup\n\t\t\t\t} );\n\t\t\t\tthat._addClass( li, \"ui-selectmenu-optgroup\", \"ui-menu-divider\" +\n\t\t\t\t\t( item.element.parent( \"optgroup\" ).prop( \"disabled\" ) ?\n\t\t\t\t\t\t\" ui-state-disabled\" :\n\t\t\t\t\t\t\"\" ) );\n\n\t\t\t\tli.appendTo( ul );\n\n\t\t\t\tcurrentOptgroup = item.optgroup;\n\t\t\t}\n\n\t\t\tthat._renderItemData( ul, item );\n\t\t} );\n\t},\n\n\t_renderItemData: function( ul, item ) {\n\t\treturn this._renderItem( ul, item ).data( \"ui-selectmenu-item\", item );\n\t},\n\n\t_renderItem: function( ul, item ) {\n\t\tvar li = $( \"<li>\" ),\n\t\t\twrapper = $( \"<div>\", {\n\t\t\t\ttitle: item.element.attr( \"title\" )\n\t\t\t} );\n\n\t\tif ( item.disabled ) {\n\t\t\tthis._addClass( li, null, \"ui-state-disabled\" );\n\t\t}\n\t\tthis._setText( wrapper, item.label );\n\n\t\treturn li.append( wrapper ).appendTo( ul );\n\t},\n\n\t_setText: function( element, value ) {\n\t\tif ( value ) {\n\t\t\telement.text( value );\n\t\t} else {\n\t\t\telement.html( \"&#160;\" );\n\t\t}\n\t},\n\n\t_move: function( direction, event ) {\n\t\tvar item, next,\n\t\t\tfilter = \".ui-menu-item\";\n\n\t\tif ( this.isOpen ) {\n\t\t\titem = this.menuItems.eq( this.focusIndex ).parent( \"li\" );\n\t\t} else {\n\t\t\titem = this.menuItems.eq( this.element[ 0 ].selectedIndex ).parent( \"li\" );\n\t\t\tfilter += \":not(.ui-state-disabled)\";\n\t\t}\n\n\t\tif ( direction === \"first\" || direction === \"last\" ) {\n\t\t\tnext = item[ direction === \"first\" ? \"prevAll\" : \"nextAll\" ]( filter ).eq( -1 );\n\t\t} else {\n\t\t\tnext = item[ direction + \"All\" ]( filter ).eq( 0 );\n\t\t}\n\n\t\tif ( next.length ) {\n\t\t\tthis.menuInstance.focus( event, next );\n\t\t}\n\t},\n\n\t_getSelectedItem: function() {\n\t\treturn this.menuItems.eq( this.element[ 0 ].selectedIndex ).parent( \"li\" );\n\t},\n\n\t_toggle: function( event ) {\n\t\tthis[ this.isOpen ? \"close\" : \"open\" ]( event );\n\t},\n\n\t_setSelection: function() {\n\t\tvar selection;\n\n\t\tif ( !this.range ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( window.getSelection ) {\n\t\t\tselection = window.getSelection();\n\t\t\tselection.removeAllRanges();\n\t\t\tselection.addRange( this.range );\n\n\t\t// Support: IE8\n\t\t} else {\n\t\t\tthis.range.select();\n\t\t}\n\n\t\t// Support: IE\n\t\t// Setting the text selection kills the button focus in IE, but\n\t\t// restoring the focus doesn't kill the selection.\n\t\tthis.button.focus();\n\t},\n\n\t_documentClick: {\n\t\tmousedown: function( event ) {\n\t\t\tif ( !this.isOpen ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( !$( event.target ).closest( \".ui-selectmenu-menu, #\" +\n\t\t\t\t\t$.ui.escapeSelector( this.ids.button ) ).length ) {\n\t\t\t\tthis.close( event );\n\t\t\t}\n\t\t}\n\t},\n\n\t_buttonEvents: {\n\n\t\t// Prevent text selection from being reset when interacting with the selectmenu (#10144)\n\t\tmousedown: function() {\n\t\t\tvar selection;\n\n\t\t\tif ( window.getSelection ) {\n\t\t\t\tselection = window.getSelection();\n\t\t\t\tif ( selection.rangeCount ) {\n\t\t\t\t\tthis.range = selection.getRangeAt( 0 );\n\t\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t} else {\n\t\t\t\tthis.range = document.selection.createRange();\n\t\t\t}\n\t\t},\n\n\t\tclick: function( event ) {\n\t\t\tthis._setSelection();\n\t\t\tthis._toggle( event );\n\t\t},\n\n\t\tkeydown: function( event ) {\n\t\t\tvar preventDefault = true;\n\t\t\tswitch ( event.keyCode ) {\n\t\t\tcase $.ui.keyCode.TAB:\n\t\t\tcase $.ui.keyCode.ESCAPE:\n\t\t\t\tthis.close( event );\n\t\t\t\tpreventDefault = false;\n\t\t\t\tbreak;\n\t\t\tcase $.ui.keyCode.ENTER:\n\t\t\t\tif ( this.isOpen ) {\n\t\t\t\t\tthis._selectFocusedItem( event );\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase $.ui.keyCode.UP:\n\t\t\t\tif ( event.altKey ) {\n\t\t\t\t\tthis._toggle( event );\n\t\t\t\t} else {\n\t\t\t\t\tthis._move( \"prev\", event );\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase $.ui.keyCode.DOWN:\n\t\t\t\tif ( event.altKey ) {\n\t\t\t\t\tthis._toggle( event );\n\t\t\t\t} else {\n\t\t\t\t\tthis._move( \"next\", event );\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase $.ui.keyCode.SPACE:\n\t\t\t\tif ( this.isOpen ) {\n\t\t\t\t\tthis._selectFocusedItem( event );\n\t\t\t\t} else {\n\t\t\t\t\tthis._toggle( event );\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase $.ui.keyCode.LEFT:\n\t\t\t\tthis._move( \"prev\", event );\n\t\t\t\tbreak;\n\t\t\tcase $.ui.keyCode.RIGHT:\n\t\t\t\tthis._move( \"next\", event );\n\t\t\t\tbreak;\n\t\t\tcase $.ui.keyCode.HOME:\n\t\t\tcase $.ui.keyCode.PAGE_UP:\n\t\t\t\tthis._move( \"first\", event );\n\t\t\t\tbreak;\n\t\t\tcase $.ui.keyCode.END:\n\t\t\tcase $.ui.keyCode.PAGE_DOWN:\n\t\t\t\tthis._move( \"last\", event );\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthis.menu.trigger( event );\n\t\t\t\tpreventDefault = false;\n\t\t\t}\n\n\t\t\tif ( preventDefault ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t}\n\t},\n\n\t_selectFocusedItem: function( event ) {\n\t\tvar item = this.menuItems.eq( this.focusIndex ).parent( \"li\" );\n\t\tif ( !item.hasClass( \"ui-state-disabled\" ) ) {\n\t\t\tthis._select( item.data( \"ui-selectmenu-item\" ), event );\n\t\t}\n\t},\n\n\t_select: function( item, event ) {\n\t\tvar oldIndex = this.element[ 0 ].selectedIndex;\n\n\t\t// Change native select element\n\t\tthis.element[ 0 ].selectedIndex = item.index;\n\t\tthis.buttonItem.replaceWith( this.buttonItem = this._renderButtonItem( item ) );\n\t\tthis._setAria( item );\n\t\tthis._trigger( \"select\", event, { item: item } );\n\n\t\tif ( item.index !== oldIndex ) {\n\t\t\tthis._trigger( \"change\", event, { item: item } );\n\t\t}\n\n\t\tthis.close( event );\n\t},\n\n\t_setAria: function( item ) {\n\t\tvar id = this.menuItems.eq( item.index ).attr( \"id\" );\n\n\t\tthis.button.attr( {\n\t\t\t\"aria-labelledby\": id,\n\t\t\t\"aria-activedescendant\": id\n\t\t} );\n\t\tthis.menu.attr( \"aria-activedescendant\", id );\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tif ( key === \"icons\" ) {\n\t\t\tvar icon = this.button.find( \"span.ui-icon\" );\n\t\t\tthis._removeClass( icon, null, this.options.icons.button )\n\t\t\t\t._addClass( icon, null, value.button );\n\t\t}\n\n\t\tthis._super( key, value );\n\n\t\tif ( key === \"appendTo\" ) {\n\t\t\tthis.menuWrap.appendTo( this._appendTo() );\n\t\t}\n\n\t\tif ( key === \"width\" ) {\n\t\t\tthis._resizeButton();\n\t\t}\n\t},\n\n\t_setOptionDisabled: function( value ) {\n\t\tthis._super( value );\n\n\t\tthis.menuInstance.option( \"disabled\", value );\n\t\tthis.button.attr( \"aria-disabled\", value );\n\t\tthis._toggleClass( this.button, null, \"ui-state-disabled\", value );\n\n\t\tthis.element.prop( \"disabled\", value );\n\t\tif ( value ) {\n\t\t\tthis.button.attr( \"tabindex\", -1 );\n\t\t\tthis.close();\n\t\t} else {\n\t\t\tthis.button.attr( \"tabindex\", 0 );\n\t\t}\n\t},\n\n\t_appendTo: function() {\n\t\tvar element = this.options.appendTo;\n\n\t\tif ( element ) {\n\t\t\telement = element.jquery || element.nodeType ?\n\t\t\t\t$( element ) :\n\t\t\t\tthis.document.find( element ).eq( 0 );\n\t\t}\n\n\t\tif ( !element || !element[ 0 ] ) {\n\t\t\telement = this.element.closest( \".ui-front, dialog\" );\n\t\t}\n\n\t\tif ( !element.length ) {\n\t\t\telement = this.document[ 0 ].body;\n\t\t}\n\n\t\treturn element;\n\t},\n\n\t_toggleAttr: function() {\n\t\tthis.button.attr( \"aria-expanded\", this.isOpen );\n\n\t\t// We can't use two _toggleClass() calls here, because we need to make sure\n\t\t// we always remove classes first and add them second, otherwise if both classes have the\n\t\t// same theme class, it will be removed after we add it.\n\t\tthis._removeClass( this.button, \"ui-selectmenu-button-\" +\n\t\t\t( this.isOpen ? \"closed\" : \"open\" ) )\n\t\t\t._addClass( this.button, \"ui-selectmenu-button-\" +\n\t\t\t\t( this.isOpen ? \"open\" : \"closed\" ) )\n\t\t\t._toggleClass( this.menuWrap, \"ui-selectmenu-open\", null, this.isOpen );\n\n\t\tthis.menu.attr( \"aria-hidden\", !this.isOpen );\n\t},\n\n\t_resizeButton: function() {\n\t\tvar width = this.options.width;\n\n\t\t// For `width: false`, just remove inline style and stop\n\t\tif ( width === false ) {\n\t\t\tthis.button.css( \"width\", \"\" );\n\t\t\treturn;\n\t\t}\n\n\t\t// For `width: null`, match the width of the original element\n\t\tif ( width === null ) {\n\t\t\twidth = this.element.show().outerWidth();\n\t\t\tthis.element.hide();\n\t\t}\n\n\t\tthis.button.outerWidth( width );\n\t},\n\n\t_resizeMenu: function() {\n\t\tthis.menu.outerWidth( Math.max(\n\t\t\tthis.button.outerWidth(),\n\n\t\t\t// Support: IE10\n\t\t\t// IE10 wraps long text (possibly a rounding bug)\n\t\t\t// so we add 1px to avoid the wrapping\n\t\t\tthis.menu.width( \"\" ).outerWidth() + 1\n\t\t) );\n\t},\n\n\t_getCreateOptions: function() {\n\t\tvar options = this._super();\n\n\t\toptions.disabled = this.element.prop( \"disabled\" );\n\n\t\treturn options;\n\t},\n\n\t_parseOptions: function( options ) {\n\t\tvar that = this,\n\t\t\tdata = [];\n\t\toptions.each( function( index, item ) {\n\t\t\tdata.push( that._parseOption( $( item ), index ) );\n\t\t} );\n\t\tthis.items = data;\n\t},\n\n\t_parseOption: function( option, index ) {\n\t\tvar optgroup = option.parent( \"optgroup\" );\n\n\t\treturn {\n\t\t\telement: option,\n\t\t\tindex: index,\n\t\t\tvalue: option.val(),\n\t\t\tlabel: option.text(),\n\t\t\toptgroup: optgroup.attr( \"label\" ) || \"\",\n\t\t\tdisabled: optgroup.prop( \"disabled\" ) || option.prop( \"disabled\" )\n\t\t};\n\t},\n\n\t_destroy: function() {\n\t\tthis._unbindFormResetHandler();\n\t\tthis.menuWrap.remove();\n\t\tthis.button.remove();\n\t\tthis.element.show();\n\t\tthis.element.removeUniqueId();\n\t\tthis.labels.attr( \"for\", this.ids.element );\n\t}\n} ] );\n\n\n/*!\n * jQuery UI Slider 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Slider\n//>>group: Widgets\n//>>description: Displays a flexible slider with ranges and accessibility via keyboard.\n//>>docs: http://api.jqueryui.com/slider/\n//>>demos: http://jqueryui.com/slider/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/slider.css\n//>>css.theme: ../../themes/base/theme.css\n\n\n\nvar widgetsSlider = $.widget( \"ui.slider\", $.ui.mouse, {\n\tversion: \"1.12.1\",\n\twidgetEventPrefix: \"slide\",\n\n\toptions: {\n\t\tanimate: false,\n\t\tclasses: {\n\t\t\t\"ui-slider\": \"ui-corner-all\",\n\t\t\t\"ui-slider-handle\": \"ui-corner-all\",\n\n\t\t\t// Note: ui-widget-header isn't the most fittingly semantic framework class for this\n\t\t\t// element, but worked best visually with a variety of themes\n\t\t\t\"ui-slider-range\": \"ui-corner-all ui-widget-header\"\n\t\t},\n\t\tdistance: 0,\n\t\tmax: 100,\n\t\tmin: 0,\n\t\torientation: \"horizontal\",\n\t\trange: false,\n\t\tstep: 1,\n\t\tvalue: 0,\n\t\tvalues: null,\n\n\t\t// Callbacks\n\t\tchange: null,\n\t\tslide: null,\n\t\tstart: null,\n\t\tstop: null\n\t},\n\n\t// Number of pages in a slider\n\t// (how many times can you page up/down to go through the whole range)\n\tnumPages: 5,\n\n\t_create: function() {\n\t\tthis._keySliding = false;\n\t\tthis._mouseSliding = false;\n\t\tthis._animateOff = true;\n\t\tthis._handleIndex = null;\n\t\tthis._detectOrientation();\n\t\tthis._mouseInit();\n\t\tthis._calculateNewMax();\n\n\t\tthis._addClass( \"ui-slider ui-slider-\" + this.orientation,\n\t\t\t\"ui-widget ui-widget-content\" );\n\n\t\tthis._refresh();\n\n\t\tthis._animateOff = false;\n\t},\n\n\t_refresh: function() {\n\t\tthis._createRange();\n\t\tthis._createHandles();\n\t\tthis._setupEvents();\n\t\tthis._refreshValue();\n\t},\n\n\t_createHandles: function() {\n\t\tvar i, handleCount,\n\t\t\toptions = this.options,\n\t\t\texistingHandles = this.element.find( \".ui-slider-handle\" ),\n\t\t\thandle = \"<span tabindex='0'></span>\",\n\t\t\thandles = [];\n\n\t\thandleCount = ( options.values && options.values.length ) || 1;\n\n\t\tif ( existingHandles.length > handleCount ) {\n\t\t\texistingHandles.slice( handleCount ).remove();\n\t\t\texistingHandles = existingHandles.slice( 0, handleCount );\n\t\t}\n\n\t\tfor ( i = existingHandles.length; i < handleCount; i++ ) {\n\t\t\thandles.push( handle );\n\t\t}\n\n\t\tthis.handles = existingHandles.add( $( handles.join( \"\" ) ).appendTo( this.element ) );\n\n\t\tthis._addClass( this.handles, \"ui-slider-handle\", \"ui-state-default\" );\n\n\t\tthis.handle = this.handles.eq( 0 );\n\n\t\tthis.handles.each( function( i ) {\n\t\t\t$( this )\n\t\t\t\t.data( \"ui-slider-handle-index\", i )\n\t\t\t\t.attr( \"tabIndex\", 0 );\n\t\t} );\n\t},\n\n\t_createRange: function() {\n\t\tvar options = this.options;\n\n\t\tif ( options.range ) {\n\t\t\tif ( options.range === true ) {\n\t\t\t\tif ( !options.values ) {\n\t\t\t\t\toptions.values = [ this._valueMin(), this._valueMin() ];\n\t\t\t\t} else if ( options.values.length && options.values.length !== 2 ) {\n\t\t\t\t\toptions.values = [ options.values[ 0 ], options.values[ 0 ] ];\n\t\t\t\t} else if ( $.isArray( options.values ) ) {\n\t\t\t\t\toptions.values = options.values.slice( 0 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( !this.range || !this.range.length ) {\n\t\t\t\tthis.range = $( \"<div>\" )\n\t\t\t\t\t.appendTo( this.element );\n\n\t\t\t\tthis._addClass( this.range, \"ui-slider-range\" );\n\t\t\t} else {\n\t\t\t\tthis._removeClass( this.range, \"ui-slider-range-min ui-slider-range-max\" );\n\n\t\t\t\t// Handle range switching from true to min/max\n\t\t\t\tthis.range.css( {\n\t\t\t\t\t\"left\": \"\",\n\t\t\t\t\t\"bottom\": \"\"\n\t\t\t\t} );\n\t\t\t}\n\t\t\tif ( options.range === \"min\" || options.range === \"max\" ) {\n\t\t\t\tthis._addClass( this.range, \"ui-slider-range-\" + options.range );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( this.range ) {\n\t\t\t\tthis.range.remove();\n\t\t\t}\n\t\t\tthis.range = null;\n\t\t}\n\t},\n\n\t_setupEvents: function() {\n\t\tthis._off( this.handles );\n\t\tthis._on( this.handles, this._handleEvents );\n\t\tthis._hoverable( this.handles );\n\t\tthis._focusable( this.handles );\n\t},\n\n\t_destroy: function() {\n\t\tthis.handles.remove();\n\t\tif ( this.range ) {\n\t\t\tthis.range.remove();\n\t\t}\n\n\t\tthis._mouseDestroy();\n\t},\n\n\t_mouseCapture: function( event ) {\n\t\tvar position, normValue, distance, closestHandle, index, allowed, offset, mouseOverHandle,\n\t\t\tthat = this,\n\t\t\to = this.options;\n\n\t\tif ( o.disabled ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.elementSize = {\n\t\t\twidth: this.element.outerWidth(),\n\t\t\theight: this.element.outerHeight()\n\t\t};\n\t\tthis.elementOffset = this.element.offset();\n\n\t\tposition = { x: event.pageX, y: event.pageY };\n\t\tnormValue = this._normValueFromMouse( position );\n\t\tdistance = this._valueMax() - this._valueMin() + 1;\n\t\tthis.handles.each( function( i ) {\n\t\t\tvar thisDistance = Math.abs( normValue - that.values( i ) );\n\t\t\tif ( ( distance > thisDistance ) ||\n\t\t\t\t( distance === thisDistance &&\n\t\t\t\t\t( i === that._lastChangedValue || that.values( i ) === o.min ) ) ) {\n\t\t\t\tdistance = thisDistance;\n\t\t\t\tclosestHandle = $( this );\n\t\t\t\tindex = i;\n\t\t\t}\n\t\t} );\n\n\t\tallowed = this._start( event, index );\n\t\tif ( allowed === false ) {\n\t\t\treturn false;\n\t\t}\n\t\tthis._mouseSliding = true;\n\n\t\tthis._handleIndex = index;\n\n\t\tthis._addClass( closestHandle, null, \"ui-state-active\" );\n\t\tclosestHandle.trigger( \"focus\" );\n\n\t\toffset = closestHandle.offset();\n\t\tmouseOverHandle = !$( event.target ).parents().addBack().is( \".ui-slider-handle\" );\n\t\tthis._clickOffset = mouseOverHandle ? { left: 0, top: 0 } : {\n\t\t\tleft: event.pageX - offset.left - ( closestHandle.width() / 2 ),\n\t\t\ttop: event.pageY - offset.top -\n\t\t\t\t( closestHandle.height() / 2 ) -\n\t\t\t\t( parseInt( closestHandle.css( \"borderTopWidth\" ), 10 ) || 0 ) -\n\t\t\t\t( parseInt( closestHandle.css( \"borderBottomWidth\" ), 10 ) || 0 ) +\n\t\t\t\t( parseInt( closestHandle.css( \"marginTop\" ), 10 ) || 0 )\n\t\t};\n\n\t\tif ( !this.handles.hasClass( \"ui-state-hover\" ) ) {\n\t\t\tthis._slide( event, index, normValue );\n\t\t}\n\t\tthis._animateOff = true;\n\t\treturn true;\n\t},\n\n\t_mouseStart: function() {\n\t\treturn true;\n\t},\n\n\t_mouseDrag: function( event ) {\n\t\tvar position = { x: event.pageX, y: event.pageY },\n\t\t\tnormValue = this._normValueFromMouse( position );\n\n\t\tthis._slide( event, this._handleIndex, normValue );\n\n\t\treturn false;\n\t},\n\n\t_mouseStop: function( event ) {\n\t\tthis._removeClass( this.handles, null, \"ui-state-active\" );\n\t\tthis._mouseSliding = false;\n\n\t\tthis._stop( event, this._handleIndex );\n\t\tthis._change( event, this._handleIndex );\n\n\t\tthis._handleIndex = null;\n\t\tthis._clickOffset = null;\n\t\tthis._animateOff = false;\n\n\t\treturn false;\n\t},\n\n\t_detectOrientation: function() {\n\t\tthis.orientation = ( this.options.orientation === \"vertical\" ) ? \"vertical\" : \"horizontal\";\n\t},\n\n\t_normValueFromMouse: function( position ) {\n\t\tvar pixelTotal,\n\t\t\tpixelMouse,\n\t\t\tpercentMouse,\n\t\t\tvalueTotal,\n\t\t\tvalueMouse;\n\n\t\tif ( this.orientation === \"horizontal\" ) {\n\t\t\tpixelTotal = this.elementSize.width;\n\t\t\tpixelMouse = position.x - this.elementOffset.left -\n\t\t\t\t( this._clickOffset ? this._clickOffset.left : 0 );\n\t\t} else {\n\t\t\tpixelTotal = this.elementSize.height;\n\t\t\tpixelMouse = position.y - this.elementOffset.top -\n\t\t\t\t( this._clickOffset ? this._clickOffset.top : 0 );\n\t\t}\n\n\t\tpercentMouse = ( pixelMouse / pixelTotal );\n\t\tif ( percentMouse > 1 ) {\n\t\t\tpercentMouse = 1;\n\t\t}\n\t\tif ( percentMouse < 0 ) {\n\t\t\tpercentMouse = 0;\n\t\t}\n\t\tif ( this.orientation === \"vertical\" ) {\n\t\t\tpercentMouse = 1 - percentMouse;\n\t\t}\n\n\t\tvalueTotal = this._valueMax() - this._valueMin();\n\t\tvalueMouse = this._valueMin() + percentMouse * valueTotal;\n\n\t\treturn this._trimAlignValue( valueMouse );\n\t},\n\n\t_uiHash: function( index, value, values ) {\n\t\tvar uiHash = {\n\t\t\thandle: this.handles[ index ],\n\t\t\thandleIndex: index,\n\t\t\tvalue: value !== undefined ? value : this.value()\n\t\t};\n\n\t\tif ( this._hasMultipleValues() ) {\n\t\t\tuiHash.value = value !== undefined ? value : this.values( index );\n\t\t\tuiHash.values = values || this.values();\n\t\t}\n\n\t\treturn uiHash;\n\t},\n\n\t_hasMultipleValues: function() {\n\t\treturn this.options.values && this.options.values.length;\n\t},\n\n\t_start: function( event, index ) {\n\t\treturn this._trigger( \"start\", event, this._uiHash( index ) );\n\t},\n\n\t_slide: function( event, index, newVal ) {\n\t\tvar allowed, otherVal,\n\t\t\tcurrentValue = this.value(),\n\t\t\tnewValues = this.values();\n\n\t\tif ( this._hasMultipleValues() ) {\n\t\t\totherVal = this.values( index ? 0 : 1 );\n\t\t\tcurrentValue = this.values( index );\n\n\t\t\tif ( this.options.values.length === 2 && this.options.range === true ) {\n\t\t\t\tnewVal =  index === 0 ? Math.min( otherVal, newVal ) : Math.max( otherVal, newVal );\n\t\t\t}\n\n\t\t\tnewValues[ index ] = newVal;\n\t\t}\n\n\t\tif ( newVal === currentValue ) {\n\t\t\treturn;\n\t\t}\n\n\t\tallowed = this._trigger( \"slide\", event, this._uiHash( index, newVal, newValues ) );\n\n\t\t// A slide can be canceled by returning false from the slide callback\n\t\tif ( allowed === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( this._hasMultipleValues() ) {\n\t\t\tthis.values( index, newVal );\n\t\t} else {\n\t\t\tthis.value( newVal );\n\t\t}\n\t},\n\n\t_stop: function( event, index ) {\n\t\tthis._trigger( \"stop\", event, this._uiHash( index ) );\n\t},\n\n\t_change: function( event, index ) {\n\t\tif ( !this._keySliding && !this._mouseSliding ) {\n\n\t\t\t//store the last changed value index for reference when handles overlap\n\t\t\tthis._lastChangedValue = index;\n\t\t\tthis._trigger( \"change\", event, this._uiHash( index ) );\n\t\t}\n\t},\n\n\tvalue: function( newValue ) {\n\t\tif ( arguments.length ) {\n\t\t\tthis.options.value = this._trimAlignValue( newValue );\n\t\t\tthis._refreshValue();\n\t\t\tthis._change( null, 0 );\n\t\t\treturn;\n\t\t}\n\n\t\treturn this._value();\n\t},\n\n\tvalues: function( index, newValue ) {\n\t\tvar vals,\n\t\t\tnewValues,\n\t\t\ti;\n\n\t\tif ( arguments.length > 1 ) {\n\t\t\tthis.options.values[ index ] = this._trimAlignValue( newValue );\n\t\t\tthis._refreshValue();\n\t\t\tthis._change( null, index );\n\t\t\treturn;\n\t\t}\n\n\t\tif ( arguments.length ) {\n\t\t\tif ( $.isArray( arguments[ 0 ] ) ) {\n\t\t\t\tvals = this.options.values;\n\t\t\t\tnewValues = arguments[ 0 ];\n\t\t\t\tfor ( i = 0; i < vals.length; i += 1 ) {\n\t\t\t\t\tvals[ i ] = this._trimAlignValue( newValues[ i ] );\n\t\t\t\t\tthis._change( null, i );\n\t\t\t\t}\n\t\t\t\tthis._refreshValue();\n\t\t\t} else {\n\t\t\t\tif ( this._hasMultipleValues() ) {\n\t\t\t\t\treturn this._values( index );\n\t\t\t\t} else {\n\t\t\t\t\treturn this.value();\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\treturn this._values();\n\t\t}\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tvar i,\n\t\t\tvalsLength = 0;\n\n\t\tif ( key === \"range\" && this.options.range === true ) {\n\t\t\tif ( value === \"min\" ) {\n\t\t\t\tthis.options.value = this._values( 0 );\n\t\t\t\tthis.options.values = null;\n\t\t\t} else if ( value === \"max\" ) {\n\t\t\t\tthis.options.value = this._values( this.options.values.length - 1 );\n\t\t\t\tthis.options.values = null;\n\t\t\t}\n\t\t}\n\n\t\tif ( $.isArray( this.options.values ) ) {\n\t\t\tvalsLength = this.options.values.length;\n\t\t}\n\n\t\tthis._super( key, value );\n\n\t\tswitch ( key ) {\n\t\t\tcase \"orientation\":\n\t\t\t\tthis._detectOrientation();\n\t\t\t\tthis._removeClass( \"ui-slider-horizontal ui-slider-vertical\" )\n\t\t\t\t\t._addClass( \"ui-slider-\" + this.orientation );\n\t\t\t\tthis._refreshValue();\n\t\t\t\tif ( this.options.range ) {\n\t\t\t\t\tthis._refreshRange( value );\n\t\t\t\t}\n\n\t\t\t\t// Reset positioning from previous orientation\n\t\t\t\tthis.handles.css( value === \"horizontal\" ? \"bottom\" : \"left\", \"\" );\n\t\t\t\tbreak;\n\t\t\tcase \"value\":\n\t\t\t\tthis._animateOff = true;\n\t\t\t\tthis._refreshValue();\n\t\t\t\tthis._change( null, 0 );\n\t\t\t\tthis._animateOff = false;\n\t\t\t\tbreak;\n\t\t\tcase \"values\":\n\t\t\t\tthis._animateOff = true;\n\t\t\t\tthis._refreshValue();\n\n\t\t\t\t// Start from the last handle to prevent unreachable handles (#9046)\n\t\t\t\tfor ( i = valsLength - 1; i >= 0; i-- ) {\n\t\t\t\t\tthis._change( null, i );\n\t\t\t\t}\n\t\t\t\tthis._animateOff = false;\n\t\t\t\tbreak;\n\t\t\tcase \"step\":\n\t\t\tcase \"min\":\n\t\t\tcase \"max\":\n\t\t\t\tthis._animateOff = true;\n\t\t\t\tthis._calculateNewMax();\n\t\t\t\tthis._refreshValue();\n\t\t\t\tthis._animateOff = false;\n\t\t\t\tbreak;\n\t\t\tcase \"range\":\n\t\t\t\tthis._animateOff = true;\n\t\t\t\tthis._refresh();\n\t\t\t\tthis._animateOff = false;\n\t\t\t\tbreak;\n\t\t}\n\t},\n\n\t_setOptionDisabled: function( value ) {\n\t\tthis._super( value );\n\n\t\tthis._toggleClass( null, \"ui-state-disabled\", !!value );\n\t},\n\n\t//internal value getter\n\t// _value() returns value trimmed by min and max, aligned by step\n\t_value: function() {\n\t\tvar val = this.options.value;\n\t\tval = this._trimAlignValue( val );\n\n\t\treturn val;\n\t},\n\n\t//internal values getter\n\t// _values() returns array of values trimmed by min and max, aligned by step\n\t// _values( index ) returns single value trimmed by min and max, aligned by step\n\t_values: function( index ) {\n\t\tvar val,\n\t\t\tvals,\n\t\t\ti;\n\n\t\tif ( arguments.length ) {\n\t\t\tval = this.options.values[ index ];\n\t\t\tval = this._trimAlignValue( val );\n\n\t\t\treturn val;\n\t\t} else if ( this._hasMultipleValues() ) {\n\n\t\t\t// .slice() creates a copy of the array\n\t\t\t// this copy gets trimmed by min and max and then returned\n\t\t\tvals = this.options.values.slice();\n\t\t\tfor ( i = 0; i < vals.length; i += 1 ) {\n\t\t\t\tvals[ i ] = this._trimAlignValue( vals[ i ] );\n\t\t\t}\n\n\t\t\treturn vals;\n\t\t} else {\n\t\t\treturn [];\n\t\t}\n\t},\n\n\t// Returns the step-aligned value that val is closest to, between (inclusive) min and max\n\t_trimAlignValue: function( val ) {\n\t\tif ( val <= this._valueMin() ) {\n\t\t\treturn this._valueMin();\n\t\t}\n\t\tif ( val >= this._valueMax() ) {\n\t\t\treturn this._valueMax();\n\t\t}\n\t\tvar step = ( this.options.step > 0 ) ? this.options.step : 1,\n\t\t\tvalModStep = ( val - this._valueMin() ) % step,\n\t\t\talignValue = val - valModStep;\n\n\t\tif ( Math.abs( valModStep ) * 2 >= step ) {\n\t\t\talignValue += ( valModStep > 0 ) ? step : ( -step );\n\t\t}\n\n\t\t// Since JavaScript has problems with large floats, round\n\t\t// the final value to 5 digits after the decimal point (see #4124)\n\t\treturn parseFloat( alignValue.toFixed( 5 ) );\n\t},\n\n\t_calculateNewMax: function() {\n\t\tvar max = this.options.max,\n\t\t\tmin = this._valueMin(),\n\t\t\tstep = this.options.step,\n\t\t\taboveMin = Math.round( ( max - min ) / step ) * step;\n\t\tmax = aboveMin + min;\n\t\tif ( max > this.options.max ) {\n\n\t\t\t//If max is not divisible by step, rounding off may increase its value\n\t\t\tmax -= step;\n\t\t}\n\t\tthis.max = parseFloat( max.toFixed( this._precision() ) );\n\t},\n\n\t_precision: function() {\n\t\tvar precision = this._precisionOf( this.options.step );\n\t\tif ( this.options.min !== null ) {\n\t\t\tprecision = Math.max( precision, this._precisionOf( this.options.min ) );\n\t\t}\n\t\treturn precision;\n\t},\n\n\t_precisionOf: function( num ) {\n\t\tvar str = num.toString(),\n\t\t\tdecimal = str.indexOf( \".\" );\n\t\treturn decimal === -1 ? 0 : str.length - decimal - 1;\n\t},\n\n\t_valueMin: function() {\n\t\treturn this.options.min;\n\t},\n\n\t_valueMax: function() {\n\t\treturn this.max;\n\t},\n\n\t_refreshRange: function( orientation ) {\n\t\tif ( orientation === \"vertical\" ) {\n\t\t\tthis.range.css( { \"width\": \"\", \"left\": \"\" } );\n\t\t}\n\t\tif ( orientation === \"horizontal\" ) {\n\t\t\tthis.range.css( { \"height\": \"\", \"bottom\": \"\" } );\n\t\t}\n\t},\n\n\t_refreshValue: function() {\n\t\tvar lastValPercent, valPercent, value, valueMin, valueMax,\n\t\t\toRange = this.options.range,\n\t\t\to = this.options,\n\t\t\tthat = this,\n\t\t\tanimate = ( !this._animateOff ) ? o.animate : false,\n\t\t\t_set = {};\n\n\t\tif ( this._hasMultipleValues() ) {\n\t\t\tthis.handles.each( function( i ) {\n\t\t\t\tvalPercent = ( that.values( i ) - that._valueMin() ) / ( that._valueMax() -\n\t\t\t\t\tthat._valueMin() ) * 100;\n\t\t\t\t_set[ that.orientation === \"horizontal\" ? \"left\" : \"bottom\" ] = valPercent + \"%\";\n\t\t\t\t$( this ).stop( 1, 1 )[ animate ? \"animate\" : \"css\" ]( _set, o.animate );\n\t\t\t\tif ( that.options.range === true ) {\n\t\t\t\t\tif ( that.orientation === \"horizontal\" ) {\n\t\t\t\t\t\tif ( i === 0 ) {\n\t\t\t\t\t\t\tthat.range.stop( 1, 1 )[ animate ? \"animate\" : \"css\" ]( {\n\t\t\t\t\t\t\t\tleft: valPercent + \"%\"\n\t\t\t\t\t\t\t}, o.animate );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( i === 1 ) {\n\t\t\t\t\t\t\tthat.range[ animate ? \"animate\" : \"css\" ]( {\n\t\t\t\t\t\t\t\twidth: ( valPercent - lastValPercent ) + \"%\"\n\t\t\t\t\t\t\t}, {\n\t\t\t\t\t\t\t\tqueue: false,\n\t\t\t\t\t\t\t\tduration: o.animate\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif ( i === 0 ) {\n\t\t\t\t\t\t\tthat.range.stop( 1, 1 )[ animate ? \"animate\" : \"css\" ]( {\n\t\t\t\t\t\t\t\tbottom: ( valPercent ) + \"%\"\n\t\t\t\t\t\t\t}, o.animate );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( i === 1 ) {\n\t\t\t\t\t\t\tthat.range[ animate ? \"animate\" : \"css\" ]( {\n\t\t\t\t\t\t\t\theight: ( valPercent - lastValPercent ) + \"%\"\n\t\t\t\t\t\t\t}, {\n\t\t\t\t\t\t\t\tqueue: false,\n\t\t\t\t\t\t\t\tduration: o.animate\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tlastValPercent = valPercent;\n\t\t\t} );\n\t\t} else {\n\t\t\tvalue = this.value();\n\t\t\tvalueMin = this._valueMin();\n\t\t\tvalueMax = this._valueMax();\n\t\t\tvalPercent = ( valueMax !== valueMin ) ?\n\t\t\t\t\t( value - valueMin ) / ( valueMax - valueMin ) * 100 :\n\t\t\t\t\t0;\n\t\t\t_set[ this.orientation === \"horizontal\" ? \"left\" : \"bottom\" ] = valPercent + \"%\";\n\t\t\tthis.handle.stop( 1, 1 )[ animate ? \"animate\" : \"css\" ]( _set, o.animate );\n\n\t\t\tif ( oRange === \"min\" && this.orientation === \"horizontal\" ) {\n\t\t\t\tthis.range.stop( 1, 1 )[ animate ? \"animate\" : \"css\" ]( {\n\t\t\t\t\twidth: valPercent + \"%\"\n\t\t\t\t}, o.animate );\n\t\t\t}\n\t\t\tif ( oRange === \"max\" && this.orientation === \"horizontal\" ) {\n\t\t\t\tthis.range.stop( 1, 1 )[ animate ? \"animate\" : \"css\" ]( {\n\t\t\t\t\twidth: ( 100 - valPercent ) + \"%\"\n\t\t\t\t}, o.animate );\n\t\t\t}\n\t\t\tif ( oRange === \"min\" && this.orientation === \"vertical\" ) {\n\t\t\t\tthis.range.stop( 1, 1 )[ animate ? \"animate\" : \"css\" ]( {\n\t\t\t\t\theight: valPercent + \"%\"\n\t\t\t\t}, o.animate );\n\t\t\t}\n\t\t\tif ( oRange === \"max\" && this.orientation === \"vertical\" ) {\n\t\t\t\tthis.range.stop( 1, 1 )[ animate ? \"animate\" : \"css\" ]( {\n\t\t\t\t\theight: ( 100 - valPercent ) + \"%\"\n\t\t\t\t}, o.animate );\n\t\t\t}\n\t\t}\n\t},\n\n\t_handleEvents: {\n\t\tkeydown: function( event ) {\n\t\t\tvar allowed, curVal, newVal, step,\n\t\t\t\tindex = $( event.target ).data( \"ui-slider-handle-index\" );\n\n\t\t\tswitch ( event.keyCode ) {\n\t\t\t\tcase $.ui.keyCode.HOME:\n\t\t\t\tcase $.ui.keyCode.END:\n\t\t\t\tcase $.ui.keyCode.PAGE_UP:\n\t\t\t\tcase $.ui.keyCode.PAGE_DOWN:\n\t\t\t\tcase $.ui.keyCode.UP:\n\t\t\t\tcase $.ui.keyCode.RIGHT:\n\t\t\t\tcase $.ui.keyCode.DOWN:\n\t\t\t\tcase $.ui.keyCode.LEFT:\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tif ( !this._keySliding ) {\n\t\t\t\t\t\tthis._keySliding = true;\n\t\t\t\t\t\tthis._addClass( $( event.target ), null, \"ui-state-active\" );\n\t\t\t\t\t\tallowed = this._start( event, index );\n\t\t\t\t\t\tif ( allowed === false ) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tstep = this.options.step;\n\t\t\tif ( this._hasMultipleValues() ) {\n\t\t\t\tcurVal = newVal = this.values( index );\n\t\t\t} else {\n\t\t\t\tcurVal = newVal = this.value();\n\t\t\t}\n\n\t\t\tswitch ( event.keyCode ) {\n\t\t\t\tcase $.ui.keyCode.HOME:\n\t\t\t\t\tnewVal = this._valueMin();\n\t\t\t\t\tbreak;\n\t\t\t\tcase $.ui.keyCode.END:\n\t\t\t\t\tnewVal = this._valueMax();\n\t\t\t\t\tbreak;\n\t\t\t\tcase $.ui.keyCode.PAGE_UP:\n\t\t\t\t\tnewVal = this._trimAlignValue(\n\t\t\t\t\t\tcurVal + ( ( this._valueMax() - this._valueMin() ) / this.numPages )\n\t\t\t\t\t);\n\t\t\t\t\tbreak;\n\t\t\t\tcase $.ui.keyCode.PAGE_DOWN:\n\t\t\t\t\tnewVal = this._trimAlignValue(\n\t\t\t\t\t\tcurVal - ( ( this._valueMax() - this._valueMin() ) / this.numPages ) );\n\t\t\t\t\tbreak;\n\t\t\t\tcase $.ui.keyCode.UP:\n\t\t\t\tcase $.ui.keyCode.RIGHT:\n\t\t\t\t\tif ( curVal === this._valueMax() ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tnewVal = this._trimAlignValue( curVal + step );\n\t\t\t\t\tbreak;\n\t\t\t\tcase $.ui.keyCode.DOWN:\n\t\t\t\tcase $.ui.keyCode.LEFT:\n\t\t\t\t\tif ( curVal === this._valueMin() ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tnewVal = this._trimAlignValue( curVal - step );\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tthis._slide( event, index, newVal );\n\t\t},\n\t\tkeyup: function( event ) {\n\t\t\tvar index = $( event.target ).data( \"ui-slider-handle-index\" );\n\n\t\t\tif ( this._keySliding ) {\n\t\t\t\tthis._keySliding = false;\n\t\t\t\tthis._stop( event, index );\n\t\t\t\tthis._change( event, index );\n\t\t\t\tthis._removeClass( $( event.target ), null, \"ui-state-active\" );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n\n/*!\n * jQuery UI Sortable 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Sortable\n//>>group: Interactions\n//>>description: Enables items in a list to be sorted using the mouse.\n//>>docs: http://api.jqueryui.com/sortable/\n//>>demos: http://jqueryui.com/sortable/\n//>>css.structure: ../../themes/base/sortable.css\n\n\n\nvar widgetsSortable = $.widget( \"ui.sortable\", $.ui.mouse, {\n\tversion: \"1.12.1\",\n\twidgetEventPrefix: \"sort\",\n\tready: false,\n\toptions: {\n\t\tappendTo: \"parent\",\n\t\taxis: false,\n\t\tconnectWith: false,\n\t\tcontainment: false,\n\t\tcursor: \"auto\",\n\t\tcursorAt: false,\n\t\tdropOnEmpty: true,\n\t\tforcePlaceholderSize: false,\n\t\tforceHelperSize: false,\n\t\tgrid: false,\n\t\thandle: false,\n\t\thelper: \"original\",\n\t\titems: \"> *\",\n\t\topacity: false,\n\t\tplaceholder: false,\n\t\trevert: false,\n\t\tscroll: true,\n\t\tscrollSensitivity: 20,\n\t\tscrollSpeed: 20,\n\t\tscope: \"default\",\n\t\ttolerance: \"intersect\",\n\t\tzIndex: 1000,\n\n\t\t// Callbacks\n\t\tactivate: null,\n\t\tbeforeStop: null,\n\t\tchange: null,\n\t\tdeactivate: null,\n\t\tout: null,\n\t\tover: null,\n\t\treceive: null,\n\t\tremove: null,\n\t\tsort: null,\n\t\tstart: null,\n\t\tstop: null,\n\t\tupdate: null\n\t},\n\n\t_isOverAxis: function( x, reference, size ) {\n\t\treturn ( x >= reference ) && ( x < ( reference + size ) );\n\t},\n\n\t_isFloating: function( item ) {\n\t\treturn ( /left|right/ ).test( item.css( \"float\" ) ) ||\n\t\t\t( /inline|table-cell/ ).test( item.css( \"display\" ) );\n\t},\n\n\t_create: function() {\n\t\tthis.containerCache = {};\n\t\tthis._addClass( \"ui-sortable\" );\n\n\t\t//Get the items\n\t\tthis.refresh();\n\n\t\t//Let's determine the parent's offset\n\t\tthis.offset = this.element.offset();\n\n\t\t//Initialize mouse events for interaction\n\t\tthis._mouseInit();\n\n\t\tthis._setHandleClassName();\n\n\t\t//We're ready to go\n\t\tthis.ready = true;\n\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tthis._super( key, value );\n\n\t\tif ( key === \"handle\" ) {\n\t\t\tthis._setHandleClassName();\n\t\t}\n\t},\n\n\t_setHandleClassName: function() {\n\t\tvar that = this;\n\t\tthis._removeClass( this.element.find( \".ui-sortable-handle\" ), \"ui-sortable-handle\" );\n\t\t$.each( this.items, function() {\n\t\t\tthat._addClass(\n\t\t\t\tthis.instance.options.handle ?\n\t\t\t\t\tthis.item.find( this.instance.options.handle ) :\n\t\t\t\t\tthis.item,\n\t\t\t\t\"ui-sortable-handle\"\n\t\t\t);\n\t\t} );\n\t},\n\n\t_destroy: function() {\n\t\tthis._mouseDestroy();\n\n\t\tfor ( var i = this.items.length - 1; i >= 0; i-- ) {\n\t\t\tthis.items[ i ].item.removeData( this.widgetName + \"-item\" );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\t_mouseCapture: function( event, overrideHandle ) {\n\t\tvar currentItem = null,\n\t\t\tvalidHandle = false,\n\t\t\tthat = this;\n\n\t\tif ( this.reverting ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif ( this.options.disabled || this.options.type === \"static\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t//We have to refresh the items data once first\n\t\tthis._refreshItems( event );\n\n\t\t//Find out if the clicked node (or one of its parents) is a actual item in this.items\n\t\t$( event.target ).parents().each( function() {\n\t\t\tif ( $.data( this, that.widgetName + \"-item\" ) === that ) {\n\t\t\t\tcurrentItem = $( this );\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} );\n\t\tif ( $.data( event.target, that.widgetName + \"-item\" ) === that ) {\n\t\t\tcurrentItem = $( event.target );\n\t\t}\n\n\t\tif ( !currentItem ) {\n\t\t\treturn false;\n\t\t}\n\t\tif ( this.options.handle && !overrideHandle ) {\n\t\t\t$( this.options.handle, currentItem ).find( \"*\" ).addBack().each( function() {\n\t\t\t\tif ( this === event.target ) {\n\t\t\t\t\tvalidHandle = true;\n\t\t\t\t}\n\t\t\t} );\n\t\t\tif ( !validHandle ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tthis.currentItem = currentItem;\n\t\tthis._removeCurrentsFromItems();\n\t\treturn true;\n\n\t},\n\n\t_mouseStart: function( event, overrideHandle, noActivation ) {\n\n\t\tvar i, body,\n\t\t\to = this.options;\n\n\t\tthis.currentContainer = this;\n\n\t\t//We only need to call refreshPositions, because the refreshItems call has been moved to\n\t\t// mouseCapture\n\t\tthis.refreshPositions();\n\n\t\t//Create and append the visible helper\n\t\tthis.helper = this._createHelper( event );\n\n\t\t//Cache the helper size\n\t\tthis._cacheHelperProportions();\n\n\t\t/*\n\t\t * - Position generation -\n\t\t * This block generates everything position related - it's the core of draggables.\n\t\t */\n\n\t\t//Cache the margins of the original element\n\t\tthis._cacheMargins();\n\n\t\t//Get the next scrolling parent\n\t\tthis.scrollParent = this.helper.scrollParent();\n\n\t\t//The element's absolute position on the page minus margins\n\t\tthis.offset = this.currentItem.offset();\n\t\tthis.offset = {\n\t\t\ttop: this.offset.top - this.margins.top,\n\t\t\tleft: this.offset.left - this.margins.left\n\t\t};\n\n\t\t$.extend( this.offset, {\n\t\t\tclick: { //Where the click happened, relative to the element\n\t\t\t\tleft: event.pageX - this.offset.left,\n\t\t\t\ttop: event.pageY - this.offset.top\n\t\t\t},\n\t\t\tparent: this._getParentOffset(),\n\n\t\t\t// This is a relative to absolute position minus the actual position calculation -\n\t\t\t// only used for relative positioned helper\n\t\t\trelative: this._getRelativeOffset()\n\t\t} );\n\n\t\t// Only after we got the offset, we can change the helper's position to absolute\n\t\t// TODO: Still need to figure out a way to make relative sorting possible\n\t\tthis.helper.css( \"position\", \"absolute\" );\n\t\tthis.cssPosition = this.helper.css( \"position\" );\n\n\t\t//Generate the original position\n\t\tthis.originalPosition = this._generatePosition( event );\n\t\tthis.originalPageX = event.pageX;\n\t\tthis.originalPageY = event.pageY;\n\n\t\t//Adjust the mouse offset relative to the helper if \"cursorAt\" is supplied\n\t\t( o.cursorAt && this._adjustOffsetFromHelper( o.cursorAt ) );\n\n\t\t//Cache the former DOM position\n\t\tthis.domPosition = {\n\t\t\tprev: this.currentItem.prev()[ 0 ],\n\t\t\tparent: this.currentItem.parent()[ 0 ]\n\t\t};\n\n\t\t// If the helper is not the original, hide the original so it's not playing any role during\n\t\t// the drag, won't cause anything bad this way\n\t\tif ( this.helper[ 0 ] !== this.currentItem[ 0 ] ) {\n\t\t\tthis.currentItem.hide();\n\t\t}\n\n\t\t//Create the placeholder\n\t\tthis._createPlaceholder();\n\n\t\t//Set a containment if given in the options\n\t\tif ( o.containment ) {\n\t\t\tthis._setContainment();\n\t\t}\n\n\t\tif ( o.cursor && o.cursor !== \"auto\" ) { // cursor option\n\t\t\tbody = this.document.find( \"body\" );\n\n\t\t\t// Support: IE\n\t\t\tthis.storedCursor = body.css( \"cursor\" );\n\t\t\tbody.css( \"cursor\", o.cursor );\n\n\t\t\tthis.storedStylesheet =\n\t\t\t\t$( \"<style>*{ cursor: \" + o.cursor + \" !important; }</style>\" ).appendTo( body );\n\t\t}\n\n\t\tif ( o.opacity ) { // opacity option\n\t\t\tif ( this.helper.css( \"opacity\" ) ) {\n\t\t\t\tthis._storedOpacity = this.helper.css( \"opacity\" );\n\t\t\t}\n\t\t\tthis.helper.css( \"opacity\", o.opacity );\n\t\t}\n\n\t\tif ( o.zIndex ) { // zIndex option\n\t\t\tif ( this.helper.css( \"zIndex\" ) ) {\n\t\t\t\tthis._storedZIndex = this.helper.css( \"zIndex\" );\n\t\t\t}\n\t\t\tthis.helper.css( \"zIndex\", o.zIndex );\n\t\t}\n\n\t\t//Prepare scrolling\n\t\tif ( this.scrollParent[ 0 ] !== this.document[ 0 ] &&\n\t\t\t\tthis.scrollParent[ 0 ].tagName !== \"HTML\" ) {\n\t\t\tthis.overflowOffset = this.scrollParent.offset();\n\t\t}\n\n\t\t//Call callbacks\n\t\tthis._trigger( \"start\", event, this._uiHash() );\n\n\t\t//Recache the helper size\n\t\tif ( !this._preserveHelperProportions ) {\n\t\t\tthis._cacheHelperProportions();\n\t\t}\n\n\t\t//Post \"activate\" events to possible containers\n\t\tif ( !noActivation ) {\n\t\t\tfor ( i = this.containers.length - 1; i >= 0; i-- ) {\n\t\t\t\tthis.containers[ i ]._trigger( \"activate\", event, this._uiHash( this ) );\n\t\t\t}\n\t\t}\n\n\t\t//Prepare possible droppables\n\t\tif ( $.ui.ddmanager ) {\n\t\t\t$.ui.ddmanager.current = this;\n\t\t}\n\n\t\tif ( $.ui.ddmanager && !o.dropBehaviour ) {\n\t\t\t$.ui.ddmanager.prepareOffsets( this, event );\n\t\t}\n\n\t\tthis.dragging = true;\n\n\t\tthis._addClass( this.helper, \"ui-sortable-helper\" );\n\n\t\t// Execute the drag once - this causes the helper not to be visiblebefore getting its\n\t\t// correct position\n\t\tthis._mouseDrag( event );\n\t\treturn true;\n\n\t},\n\n\t_mouseDrag: function( event ) {\n\t\tvar i, item, itemElement, intersection,\n\t\t\to = this.options,\n\t\t\tscrolled = false;\n\n\t\t//Compute the helpers position\n\t\tthis.position = this._generatePosition( event );\n\t\tthis.positionAbs = this._convertPositionTo( \"absolute\" );\n\n\t\tif ( !this.lastPositionAbs ) {\n\t\t\tthis.lastPositionAbs = this.positionAbs;\n\t\t}\n\n\t\t//Do scrolling\n\t\tif ( this.options.scroll ) {\n\t\t\tif ( this.scrollParent[ 0 ] !== this.document[ 0 ] &&\n\t\t\t\t\tthis.scrollParent[ 0 ].tagName !== \"HTML\" ) {\n\n\t\t\t\tif ( ( this.overflowOffset.top + this.scrollParent[ 0 ].offsetHeight ) -\n\t\t\t\t\t\tevent.pageY < o.scrollSensitivity ) {\n\t\t\t\t\tthis.scrollParent[ 0 ].scrollTop =\n\t\t\t\t\t\tscrolled = this.scrollParent[ 0 ].scrollTop + o.scrollSpeed;\n\t\t\t\t} else if ( event.pageY - this.overflowOffset.top < o.scrollSensitivity ) {\n\t\t\t\t\tthis.scrollParent[ 0 ].scrollTop =\n\t\t\t\t\t\tscrolled = this.scrollParent[ 0 ].scrollTop - o.scrollSpeed;\n\t\t\t\t}\n\n\t\t\t\tif ( ( this.overflowOffset.left + this.scrollParent[ 0 ].offsetWidth ) -\n\t\t\t\t\t\tevent.pageX < o.scrollSensitivity ) {\n\t\t\t\t\tthis.scrollParent[ 0 ].scrollLeft = scrolled =\n\t\t\t\t\t\tthis.scrollParent[ 0 ].scrollLeft + o.scrollSpeed;\n\t\t\t\t} else if ( event.pageX - this.overflowOffset.left < o.scrollSensitivity ) {\n\t\t\t\t\tthis.scrollParent[ 0 ].scrollLeft = scrolled =\n\t\t\t\t\t\tthis.scrollParent[ 0 ].scrollLeft - o.scrollSpeed;\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( event.pageY - this.document.scrollTop() < o.scrollSensitivity ) {\n\t\t\t\t\tscrolled = this.document.scrollTop( this.document.scrollTop() - o.scrollSpeed );\n\t\t\t\t} else if ( this.window.height() - ( event.pageY - this.document.scrollTop() ) <\n\t\t\t\t\t\to.scrollSensitivity ) {\n\t\t\t\t\tscrolled = this.document.scrollTop( this.document.scrollTop() + o.scrollSpeed );\n\t\t\t\t}\n\n\t\t\t\tif ( event.pageX - this.document.scrollLeft() < o.scrollSensitivity ) {\n\t\t\t\t\tscrolled = this.document.scrollLeft(\n\t\t\t\t\t\tthis.document.scrollLeft() - o.scrollSpeed\n\t\t\t\t\t);\n\t\t\t\t} else if ( this.window.width() - ( event.pageX - this.document.scrollLeft() ) <\n\t\t\t\t\t\to.scrollSensitivity ) {\n\t\t\t\t\tscrolled = this.document.scrollLeft(\n\t\t\t\t\t\tthis.document.scrollLeft() + o.scrollSpeed\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( scrolled !== false && $.ui.ddmanager && !o.dropBehaviour ) {\n\t\t\t\t$.ui.ddmanager.prepareOffsets( this, event );\n\t\t\t}\n\t\t}\n\n\t\t//Regenerate the absolute position used for position checks\n\t\tthis.positionAbs = this._convertPositionTo( \"absolute\" );\n\n\t\t//Set the helper position\n\t\tif ( !this.options.axis || this.options.axis !== \"y\" ) {\n\t\t\tthis.helper[ 0 ].style.left = this.position.left + \"px\";\n\t\t}\n\t\tif ( !this.options.axis || this.options.axis !== \"x\" ) {\n\t\t\tthis.helper[ 0 ].style.top = this.position.top + \"px\";\n\t\t}\n\n\t\t//Rearrange\n\t\tfor ( i = this.items.length - 1; i >= 0; i-- ) {\n\n\t\t\t//Cache variables and intersection, continue if no intersection\n\t\t\titem = this.items[ i ];\n\t\t\titemElement = item.item[ 0 ];\n\t\t\tintersection = this._intersectsWithPointer( item );\n\t\t\tif ( !intersection ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Only put the placeholder inside the current Container, skip all\n\t\t\t// items from other containers. This works because when moving\n\t\t\t// an item from one container to another the\n\t\t\t// currentContainer is switched before the placeholder is moved.\n\t\t\t//\n\t\t\t// Without this, moving items in \"sub-sortables\" can cause\n\t\t\t// the placeholder to jitter between the outer and inner container.\n\t\t\tif ( item.instance !== this.currentContainer ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Cannot intersect with itself\n\t\t\t// no useless actions that have been done before\n\t\t\t// no action if the item moved is the parent of the item checked\n\t\t\tif ( itemElement !== this.currentItem[ 0 ] &&\n\t\t\t\tthis.placeholder[ intersection === 1 ? \"next\" : \"prev\" ]()[ 0 ] !== itemElement &&\n\t\t\t\t!$.contains( this.placeholder[ 0 ], itemElement ) &&\n\t\t\t\t( this.options.type === \"semi-dynamic\" ?\n\t\t\t\t\t!$.contains( this.element[ 0 ], itemElement ) :\n\t\t\t\t\ttrue\n\t\t\t\t)\n\t\t\t) {\n\n\t\t\t\tthis.direction = intersection === 1 ? \"down\" : \"up\";\n\n\t\t\t\tif ( this.options.tolerance === \"pointer\" || this._intersectsWithSides( item ) ) {\n\t\t\t\t\tthis._rearrange( event, item );\n\t\t\t\t} else {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tthis._trigger( \"change\", event, this._uiHash() );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t//Post events to containers\n\t\tthis._contactContainers( event );\n\n\t\t//Interconnect with droppables\n\t\tif ( $.ui.ddmanager ) {\n\t\t\t$.ui.ddmanager.drag( this, event );\n\t\t}\n\n\t\t//Call callbacks\n\t\tthis._trigger( \"sort\", event, this._uiHash() );\n\n\t\tthis.lastPositionAbs = this.positionAbs;\n\t\treturn false;\n\n\t},\n\n\t_mouseStop: function( event, noPropagation ) {\n\n\t\tif ( !event ) {\n\t\t\treturn;\n\t\t}\n\n\t\t//If we are using droppables, inform the manager about the drop\n\t\tif ( $.ui.ddmanager && !this.options.dropBehaviour ) {\n\t\t\t$.ui.ddmanager.drop( this, event );\n\t\t}\n\n\t\tif ( this.options.revert ) {\n\t\t\tvar that = this,\n\t\t\t\tcur = this.placeholder.offset(),\n\t\t\t\taxis = this.options.axis,\n\t\t\t\tanimation = {};\n\n\t\t\tif ( !axis || axis === \"x\" ) {\n\t\t\t\tanimation.left = cur.left - this.offset.parent.left - this.margins.left +\n\t\t\t\t\t( this.offsetParent[ 0 ] === this.document[ 0 ].body ?\n\t\t\t\t\t\t0 :\n\t\t\t\t\t\tthis.offsetParent[ 0 ].scrollLeft\n\t\t\t\t\t);\n\t\t\t}\n\t\t\tif ( !axis || axis === \"y\" ) {\n\t\t\t\tanimation.top = cur.top - this.offset.parent.top - this.margins.top +\n\t\t\t\t\t( this.offsetParent[ 0 ] === this.document[ 0 ].body ?\n\t\t\t\t\t\t0 :\n\t\t\t\t\t\tthis.offsetParent[ 0 ].scrollTop\n\t\t\t\t\t);\n\t\t\t}\n\t\t\tthis.reverting = true;\n\t\t\t$( this.helper ).animate(\n\t\t\t\tanimation,\n\t\t\t\tparseInt( this.options.revert, 10 ) || 500,\n\t\t\t\tfunction() {\n\t\t\t\t\tthat._clear( event );\n\t\t\t\t}\n\t\t\t);\n\t\t} else {\n\t\t\tthis._clear( event, noPropagation );\n\t\t}\n\n\t\treturn false;\n\n\t},\n\n\tcancel: function() {\n\n\t\tif ( this.dragging ) {\n\n\t\t\tthis._mouseUp( new $.Event( \"mouseup\", { target: null } ) );\n\n\t\t\tif ( this.options.helper === \"original\" ) {\n\t\t\t\tthis.currentItem.css( this._storedCSS );\n\t\t\t\tthis._removeClass( this.currentItem, \"ui-sortable-helper\" );\n\t\t\t} else {\n\t\t\t\tthis.currentItem.show();\n\t\t\t}\n\n\t\t\t//Post deactivating events to containers\n\t\t\tfor ( var i = this.containers.length - 1; i >= 0; i-- ) {\n\t\t\t\tthis.containers[ i ]._trigger( \"deactivate\", null, this._uiHash( this ) );\n\t\t\t\tif ( this.containers[ i ].containerCache.over ) {\n\t\t\t\t\tthis.containers[ i ]._trigger( \"out\", null, this._uiHash( this ) );\n\t\t\t\t\tthis.containers[ i ].containerCache.over = 0;\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.placeholder ) {\n\n\t\t\t//$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately,\n\t\t\t// it unbinds ALL events from the original node!\n\t\t\tif ( this.placeholder[ 0 ].parentNode ) {\n\t\t\t\tthis.placeholder[ 0 ].parentNode.removeChild( this.placeholder[ 0 ] );\n\t\t\t}\n\t\t\tif ( this.options.helper !== \"original\" && this.helper &&\n\t\t\t\t\tthis.helper[ 0 ].parentNode ) {\n\t\t\t\tthis.helper.remove();\n\t\t\t}\n\n\t\t\t$.extend( this, {\n\t\t\t\thelper: null,\n\t\t\t\tdragging: false,\n\t\t\t\treverting: false,\n\t\t\t\t_noFinalSort: null\n\t\t\t} );\n\n\t\t\tif ( this.domPosition.prev ) {\n\t\t\t\t$( this.domPosition.prev ).after( this.currentItem );\n\t\t\t} else {\n\t\t\t\t$( this.domPosition.parent ).prepend( this.currentItem );\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tserialize: function( o ) {\n\n\t\tvar items = this._getItemsAsjQuery( o && o.connected ),\n\t\t\tstr = [];\n\t\to = o || {};\n\n\t\t$( items ).each( function() {\n\t\t\tvar res = ( $( o.item || this ).attr( o.attribute || \"id\" ) || \"\" )\n\t\t\t\t.match( o.expression || ( /(.+)[\\-=_](.+)/ ) );\n\t\t\tif ( res ) {\n\t\t\t\tstr.push(\n\t\t\t\t\t( o.key || res[ 1 ] + \"[]\" ) +\n\t\t\t\t\t\"=\" + ( o.key && o.expression ? res[ 1 ] : res[ 2 ] ) );\n\t\t\t}\n\t\t} );\n\n\t\tif ( !str.length && o.key ) {\n\t\t\tstr.push( o.key + \"=\" );\n\t\t}\n\n\t\treturn str.join( \"&\" );\n\n\t},\n\n\ttoArray: function( o ) {\n\n\t\tvar items = this._getItemsAsjQuery( o && o.connected ),\n\t\t\tret = [];\n\n\t\to = o || {};\n\n\t\titems.each( function() {\n\t\t\tret.push( $( o.item || this ).attr( o.attribute || \"id\" ) || \"\" );\n\t\t} );\n\t\treturn ret;\n\n\t},\n\n\t/* Be careful with the following core functions */\n\t_intersectsWith: function( item ) {\n\n\t\tvar x1 = this.positionAbs.left,\n\t\t\tx2 = x1 + this.helperProportions.width,\n\t\t\ty1 = this.positionAbs.top,\n\t\t\ty2 = y1 + this.helperProportions.height,\n\t\t\tl = item.left,\n\t\t\tr = l + item.width,\n\t\t\tt = item.top,\n\t\t\tb = t + item.height,\n\t\t\tdyClick = this.offset.click.top,\n\t\t\tdxClick = this.offset.click.left,\n\t\t\tisOverElementHeight = ( this.options.axis === \"x\" ) || ( ( y1 + dyClick ) > t &&\n\t\t\t\t( y1 + dyClick ) < b ),\n\t\t\tisOverElementWidth = ( this.options.axis === \"y\" ) || ( ( x1 + dxClick ) > l &&\n\t\t\t\t( x1 + dxClick ) < r ),\n\t\t\tisOverElement = isOverElementHeight && isOverElementWidth;\n\n\t\tif ( this.options.tolerance === \"pointer\" ||\n\t\t\tthis.options.forcePointerForContainers ||\n\t\t\t( this.options.tolerance !== \"pointer\" &&\n\t\t\t\tthis.helperProportions[ this.floating ? \"width\" : \"height\" ] >\n\t\t\t\titem[ this.floating ? \"width\" : \"height\" ] )\n\t\t) {\n\t\t\treturn isOverElement;\n\t\t} else {\n\n\t\t\treturn ( l < x1 + ( this.helperProportions.width / 2 ) && // Right Half\n\t\t\t\tx2 - ( this.helperProportions.width / 2 ) < r && // Left Half\n\t\t\t\tt < y1 + ( this.helperProportions.height / 2 ) && // Bottom Half\n\t\t\t\ty2 - ( this.helperProportions.height / 2 ) < b ); // Top Half\n\n\t\t}\n\t},\n\n\t_intersectsWithPointer: function( item ) {\n\t\tvar verticalDirection, horizontalDirection,\n\t\t\tisOverElementHeight = ( this.options.axis === \"x\" ) ||\n\t\t\t\tthis._isOverAxis(\n\t\t\t\t\tthis.positionAbs.top + this.offset.click.top, item.top, item.height ),\n\t\t\tisOverElementWidth = ( this.options.axis === \"y\" ) ||\n\t\t\t\tthis._isOverAxis(\n\t\t\t\t\tthis.positionAbs.left + this.offset.click.left, item.left, item.width ),\n\t\t\tisOverElement = isOverElementHeight && isOverElementWidth;\n\n\t\tif ( !isOverElement ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tverticalDirection = this._getDragVerticalDirection();\n\t\thorizontalDirection = this._getDragHorizontalDirection();\n\n\t\treturn this.floating ?\n\t\t\t( ( horizontalDirection === \"right\" || verticalDirection === \"down\" ) ? 2 : 1 )\n\t\t\t: ( verticalDirection && ( verticalDirection === \"down\" ? 2 : 1 ) );\n\n\t},\n\n\t_intersectsWithSides: function( item ) {\n\n\t\tvar isOverBottomHalf = this._isOverAxis( this.positionAbs.top +\n\t\t\t\tthis.offset.click.top, item.top + ( item.height / 2 ), item.height ),\n\t\t\tisOverRightHalf = this._isOverAxis( this.positionAbs.left +\n\t\t\t\tthis.offset.click.left, item.left + ( item.width / 2 ), item.width ),\n\t\t\tverticalDirection = this._getDragVerticalDirection(),\n\t\t\thorizontalDirection = this._getDragHorizontalDirection();\n\n\t\tif ( this.floating && horizontalDirection ) {\n\t\t\treturn ( ( horizontalDirection === \"right\" && isOverRightHalf ) ||\n\t\t\t\t( horizontalDirection === \"left\" && !isOverRightHalf ) );\n\t\t} else {\n\t\t\treturn verticalDirection && ( ( verticalDirection === \"down\" && isOverBottomHalf ) ||\n\t\t\t\t( verticalDirection === \"up\" && !isOverBottomHalf ) );\n\t\t}\n\n\t},\n\n\t_getDragVerticalDirection: function() {\n\t\tvar delta = this.positionAbs.top - this.lastPositionAbs.top;\n\t\treturn delta !== 0 && ( delta > 0 ? \"down\" : \"up\" );\n\t},\n\n\t_getDragHorizontalDirection: function() {\n\t\tvar delta = this.positionAbs.left - this.lastPositionAbs.left;\n\t\treturn delta !== 0 && ( delta > 0 ? \"right\" : \"left\" );\n\t},\n\n\trefresh: function( event ) {\n\t\tthis._refreshItems( event );\n\t\tthis._setHandleClassName();\n\t\tthis.refreshPositions();\n\t\treturn this;\n\t},\n\n\t_connectWith: function() {\n\t\tvar options = this.options;\n\t\treturn options.connectWith.constructor === String ?\n\t\t\t[ options.connectWith ] :\n\t\t\toptions.connectWith;\n\t},\n\n\t_getItemsAsjQuery: function( connected ) {\n\n\t\tvar i, j, cur, inst,\n\t\t\titems = [],\n\t\t\tqueries = [],\n\t\t\tconnectWith = this._connectWith();\n\n\t\tif ( connectWith && connected ) {\n\t\t\tfor ( i = connectWith.length - 1; i >= 0; i-- ) {\n\t\t\t\tcur = $( connectWith[ i ], this.document[ 0 ] );\n\t\t\t\tfor ( j = cur.length - 1; j >= 0; j-- ) {\n\t\t\t\t\tinst = $.data( cur[ j ], this.widgetFullName );\n\t\t\t\t\tif ( inst && inst !== this && !inst.options.disabled ) {\n\t\t\t\t\t\tqueries.push( [ $.isFunction( inst.options.items ) ?\n\t\t\t\t\t\t\tinst.options.items.call( inst.element ) :\n\t\t\t\t\t\t\t$( inst.options.items, inst.element )\n\t\t\t\t\t\t\t\t.not( \".ui-sortable-helper\" )\n\t\t\t\t\t\t\t\t.not( \".ui-sortable-placeholder\" ), inst ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tqueries.push( [ $.isFunction( this.options.items ) ?\n\t\t\tthis.options.items\n\t\t\t\t.call( this.element, null, { options: this.options, item: this.currentItem } ) :\n\t\t\t$( this.options.items, this.element )\n\t\t\t\t.not( \".ui-sortable-helper\" )\n\t\t\t\t.not( \".ui-sortable-placeholder\" ), this ] );\n\n\t\tfunction addItems() {\n\t\t\titems.push( this );\n\t\t}\n\t\tfor ( i = queries.length - 1; i >= 0; i-- ) {\n\t\t\tqueries[ i ][ 0 ].each( addItems );\n\t\t}\n\n\t\treturn $( items );\n\n\t},\n\n\t_removeCurrentsFromItems: function() {\n\n\t\tvar list = this.currentItem.find( \":data(\" + this.widgetName + \"-item)\" );\n\n\t\tthis.items = $.grep( this.items, function( item ) {\n\t\t\tfor ( var j = 0; j < list.length; j++ ) {\n\t\t\t\tif ( list[ j ] === item.item[ 0 ] ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} );\n\n\t},\n\n\t_refreshItems: function( event ) {\n\n\t\tthis.items = [];\n\t\tthis.containers = [ this ];\n\n\t\tvar i, j, cur, inst, targetData, _queries, item, queriesLength,\n\t\t\titems = this.items,\n\t\t\tqueries = [ [ $.isFunction( this.options.items ) ?\n\t\t\t\tthis.options.items.call( this.element[ 0 ], event, { item: this.currentItem } ) :\n\t\t\t\t$( this.options.items, this.element ), this ] ],\n\t\t\tconnectWith = this._connectWith();\n\n\t\t//Shouldn't be run the first time through due to massive slow-down\n\t\tif ( connectWith && this.ready ) {\n\t\t\tfor ( i = connectWith.length - 1; i >= 0; i-- ) {\n\t\t\t\tcur = $( connectWith[ i ], this.document[ 0 ] );\n\t\t\t\tfor ( j = cur.length - 1; j >= 0; j-- ) {\n\t\t\t\t\tinst = $.data( cur[ j ], this.widgetFullName );\n\t\t\t\t\tif ( inst && inst !== this && !inst.options.disabled ) {\n\t\t\t\t\t\tqueries.push( [ $.isFunction( inst.options.items ) ?\n\t\t\t\t\t\t\tinst.options.items\n\t\t\t\t\t\t\t\t.call( inst.element[ 0 ], event, { item: this.currentItem } ) :\n\t\t\t\t\t\t\t$( inst.options.items, inst.element ), inst ] );\n\t\t\t\t\t\tthis.containers.push( inst );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor ( i = queries.length - 1; i >= 0; i-- ) {\n\t\t\ttargetData = queries[ i ][ 1 ];\n\t\t\t_queries = queries[ i ][ 0 ];\n\n\t\t\tfor ( j = 0, queriesLength = _queries.length; j < queriesLength; j++ ) {\n\t\t\t\titem = $( _queries[ j ] );\n\n\t\t\t\t// Data for target checking (mouse manager)\n\t\t\t\titem.data( this.widgetName + \"-item\", targetData );\n\n\t\t\t\titems.push( {\n\t\t\t\t\titem: item,\n\t\t\t\t\tinstance: targetData,\n\t\t\t\t\twidth: 0, height: 0,\n\t\t\t\t\tleft: 0, top: 0\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\n\t},\n\n\trefreshPositions: function( fast ) {\n\n\t\t// Determine whether items are being displayed horizontally\n\t\tthis.floating = this.items.length ?\n\t\t\tthis.options.axis === \"x\" || this._isFloating( this.items[ 0 ].item ) :\n\t\t\tfalse;\n\n\t\t//This has to be redone because due to the item being moved out/into the offsetParent,\n\t\t// the offsetParent's position will change\n\t\tif ( this.offsetParent && this.helper ) {\n\t\t\tthis.offset.parent = this._getParentOffset();\n\t\t}\n\n\t\tvar i, item, t, p;\n\n\t\tfor ( i = this.items.length - 1; i >= 0; i-- ) {\n\t\t\titem = this.items[ i ];\n\n\t\t\t//We ignore calculating positions of all connected containers when we're not over them\n\t\t\tif ( item.instance !== this.currentContainer && this.currentContainer &&\n\t\t\t\t\titem.item[ 0 ] !== this.currentItem[ 0 ] ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tt = this.options.toleranceElement ?\n\t\t\t\t$( this.options.toleranceElement, item.item ) :\n\t\t\t\titem.item;\n\n\t\t\tif ( !fast ) {\n\t\t\t\titem.width = t.outerWidth();\n\t\t\t\titem.height = t.outerHeight();\n\t\t\t}\n\n\t\t\tp = t.offset();\n\t\t\titem.left = p.left;\n\t\t\titem.top = p.top;\n\t\t}\n\n\t\tif ( this.options.custom && this.options.custom.refreshContainers ) {\n\t\t\tthis.options.custom.refreshContainers.call( this );\n\t\t} else {\n\t\t\tfor ( i = this.containers.length - 1; i >= 0; i-- ) {\n\t\t\t\tp = this.containers[ i ].element.offset();\n\t\t\t\tthis.containers[ i ].containerCache.left = p.left;\n\t\t\t\tthis.containers[ i ].containerCache.top = p.top;\n\t\t\t\tthis.containers[ i ].containerCache.width =\n\t\t\t\t\tthis.containers[ i ].element.outerWidth();\n\t\t\t\tthis.containers[ i ].containerCache.height =\n\t\t\t\t\tthis.containers[ i ].element.outerHeight();\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\t_createPlaceholder: function( that ) {\n\t\tthat = that || this;\n\t\tvar className,\n\t\t\to = that.options;\n\n\t\tif ( !o.placeholder || o.placeholder.constructor === String ) {\n\t\t\tclassName = o.placeholder;\n\t\t\to.placeholder = {\n\t\t\t\telement: function() {\n\n\t\t\t\t\tvar nodeName = that.currentItem[ 0 ].nodeName.toLowerCase(),\n\t\t\t\t\t\telement = $( \"<\" + nodeName + \">\", that.document[ 0 ] );\n\n\t\t\t\t\t\tthat._addClass( element, \"ui-sortable-placeholder\",\n\t\t\t\t\t\t\t\tclassName || that.currentItem[ 0 ].className )\n\t\t\t\t\t\t\t._removeClass( element, \"ui-sortable-helper\" );\n\n\t\t\t\t\tif ( nodeName === \"tbody\" ) {\n\t\t\t\t\t\tthat._createTrPlaceholder(\n\t\t\t\t\t\t\tthat.currentItem.find( \"tr\" ).eq( 0 ),\n\t\t\t\t\t\t\t$( \"<tr>\", that.document[ 0 ] ).appendTo( element )\n\t\t\t\t\t\t);\n\t\t\t\t\t} else if ( nodeName === \"tr\" ) {\n\t\t\t\t\t\tthat._createTrPlaceholder( that.currentItem, element );\n\t\t\t\t\t} else if ( nodeName === \"img\" ) {\n\t\t\t\t\t\telement.attr( \"src\", that.currentItem.attr( \"src\" ) );\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( !className ) {\n\t\t\t\t\t\telement.css( \"visibility\", \"hidden\" );\n\t\t\t\t\t}\n\n\t\t\t\t\treturn element;\n\t\t\t\t},\n\t\t\t\tupdate: function( container, p ) {\n\n\t\t\t\t\t// 1. If a className is set as 'placeholder option, we don't force sizes -\n\t\t\t\t\t// the class is responsible for that\n\t\t\t\t\t// 2. The option 'forcePlaceholderSize can be enabled to force it even if a\n\t\t\t\t\t// class name is specified\n\t\t\t\t\tif ( className && !o.forcePlaceholderSize ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t//If the element doesn't have a actual height by itself (without styles coming\n\t\t\t\t\t// from a stylesheet), it receives the inline height from the dragged item\n\t\t\t\t\tif ( !p.height() ) {\n\t\t\t\t\t\tp.height(\n\t\t\t\t\t\t\tthat.currentItem.innerHeight() -\n\t\t\t\t\t\t\tparseInt( that.currentItem.css( \"paddingTop\" ) || 0, 10 ) -\n\t\t\t\t\t\t\tparseInt( that.currentItem.css( \"paddingBottom\" ) || 0, 10 ) );\n\t\t\t\t\t}\n\t\t\t\t\tif ( !p.width() ) {\n\t\t\t\t\t\tp.width(\n\t\t\t\t\t\t\tthat.currentItem.innerWidth() -\n\t\t\t\t\t\t\tparseInt( that.currentItem.css( \"paddingLeft\" ) || 0, 10 ) -\n\t\t\t\t\t\t\tparseInt( that.currentItem.css( \"paddingRight\" ) || 0, 10 ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\t//Create the placeholder\n\t\tthat.placeholder = $( o.placeholder.element.call( that.element, that.currentItem ) );\n\n\t\t//Append it after the actual current item\n\t\tthat.currentItem.after( that.placeholder );\n\n\t\t//Update the size of the placeholder (TODO: Logic to fuzzy, see line 316/317)\n\t\to.placeholder.update( that, that.placeholder );\n\n\t},\n\n\t_createTrPlaceholder: function( sourceTr, targetTr ) {\n\t\tvar that = this;\n\n\t\tsourceTr.children().each( function() {\n\t\t\t$( \"<td>&#160;</td>\", that.document[ 0 ] )\n\t\t\t\t.attr( \"colspan\", $( this ).attr( \"colspan\" ) || 1 )\n\t\t\t\t.appendTo( targetTr );\n\t\t} );\n\t},\n\n\t_contactContainers: function( event ) {\n\t\tvar i, j, dist, itemWithLeastDistance, posProperty, sizeProperty, cur, nearBottom,\n\t\t\tfloating, axis,\n\t\t\tinnermostContainer = null,\n\t\t\tinnermostIndex = null;\n\n\t\t// Get innermost container that intersects with item\n\t\tfor ( i = this.containers.length - 1; i >= 0; i-- ) {\n\n\t\t\t// Never consider a container that's located within the item itself\n\t\t\tif ( $.contains( this.currentItem[ 0 ], this.containers[ i ].element[ 0 ] ) ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif ( this._intersectsWith( this.containers[ i ].containerCache ) ) {\n\n\t\t\t\t// If we've already found a container and it's more \"inner\" than this, then continue\n\t\t\t\tif ( innermostContainer &&\n\t\t\t\t\t\t$.contains(\n\t\t\t\t\t\t\tthis.containers[ i ].element[ 0 ],\n\t\t\t\t\t\t\tinnermostContainer.element[ 0 ] ) ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tinnermostContainer = this.containers[ i ];\n\t\t\t\tinnermostIndex = i;\n\n\t\t\t} else {\n\n\t\t\t\t// container doesn't intersect. trigger \"out\" event if necessary\n\t\t\t\tif ( this.containers[ i ].containerCache.over ) {\n\t\t\t\t\tthis.containers[ i ]._trigger( \"out\", event, this._uiHash( this ) );\n\t\t\t\t\tthis.containers[ i ].containerCache.over = 0;\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\t\t// If no intersecting containers found, return\n\t\tif ( !innermostContainer ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Move the item into the container if it's not there already\n\t\tif ( this.containers.length === 1 ) {\n\t\t\tif ( !this.containers[ innermostIndex ].containerCache.over ) {\n\t\t\t\tthis.containers[ innermostIndex ]._trigger( \"over\", event, this._uiHash( this ) );\n\t\t\t\tthis.containers[ innermostIndex ].containerCache.over = 1;\n\t\t\t}\n\t\t} else {\n\n\t\t\t// When entering a new container, we will find the item with the least distance and\n\t\t\t// append our item near it\n\t\t\tdist = 10000;\n\t\t\titemWithLeastDistance = null;\n\t\t\tfloating = innermostContainer.floating || this._isFloating( this.currentItem );\n\t\t\tposProperty = floating ? \"left\" : \"top\";\n\t\t\tsizeProperty = floating ? \"width\" : \"height\";\n\t\t\taxis = floating ? \"pageX\" : \"pageY\";\n\n\t\t\tfor ( j = this.items.length - 1; j >= 0; j-- ) {\n\t\t\t\tif ( !$.contains(\n\t\t\t\t\t\tthis.containers[ innermostIndex ].element[ 0 ], this.items[ j ].item[ 0 ] )\n\t\t\t\t) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif ( this.items[ j ].item[ 0 ] === this.currentItem[ 0 ] ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tcur = this.items[ j ].item.offset()[ posProperty ];\n\t\t\t\tnearBottom = false;\n\t\t\t\tif ( event[ axis ] - cur > this.items[ j ][ sizeProperty ] / 2 ) {\n\t\t\t\t\tnearBottom = true;\n\t\t\t\t}\n\n\t\t\t\tif ( Math.abs( event[ axis ] - cur ) < dist ) {\n\t\t\t\t\tdist = Math.abs( event[ axis ] - cur );\n\t\t\t\t\titemWithLeastDistance = this.items[ j ];\n\t\t\t\t\tthis.direction = nearBottom ? \"up\" : \"down\";\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//Check if dropOnEmpty is enabled\n\t\t\tif ( !itemWithLeastDistance && !this.options.dropOnEmpty ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( this.currentContainer === this.containers[ innermostIndex ] ) {\n\t\t\t\tif ( !this.currentContainer.containerCache.over ) {\n\t\t\t\t\tthis.containers[ innermostIndex ]._trigger( \"over\", event, this._uiHash() );\n\t\t\t\t\tthis.currentContainer.containerCache.over = 1;\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\titemWithLeastDistance ?\n\t\t\t\tthis._rearrange( event, itemWithLeastDistance, null, true ) :\n\t\t\t\tthis._rearrange( event, null, this.containers[ innermostIndex ].element, true );\n\t\t\tthis._trigger( \"change\", event, this._uiHash() );\n\t\t\tthis.containers[ innermostIndex ]._trigger( \"change\", event, this._uiHash( this ) );\n\t\t\tthis.currentContainer = this.containers[ innermostIndex ];\n\n\t\t\t//Update the placeholder\n\t\t\tthis.options.placeholder.update( this.currentContainer, this.placeholder );\n\n\t\t\tthis.containers[ innermostIndex ]._trigger( \"over\", event, this._uiHash( this ) );\n\t\t\tthis.containers[ innermostIndex ].containerCache.over = 1;\n\t\t}\n\n\t},\n\n\t_createHelper: function( event ) {\n\n\t\tvar o = this.options,\n\t\t\thelper = $.isFunction( o.helper ) ?\n\t\t\t\t$( o.helper.apply( this.element[ 0 ], [ event, this.currentItem ] ) ) :\n\t\t\t\t( o.helper === \"clone\" ? this.currentItem.clone() : this.currentItem );\n\n\t\t//Add the helper to the DOM if that didn't happen already\n\t\tif ( !helper.parents( \"body\" ).length ) {\n\t\t\t$( o.appendTo !== \"parent\" ?\n\t\t\t\to.appendTo :\n\t\t\t\tthis.currentItem[ 0 ].parentNode )[ 0 ].appendChild( helper[ 0 ] );\n\t\t}\n\n\t\tif ( helper[ 0 ] === this.currentItem[ 0 ] ) {\n\t\t\tthis._storedCSS = {\n\t\t\t\twidth: this.currentItem[ 0 ].style.width,\n\t\t\t\theight: this.currentItem[ 0 ].style.height,\n\t\t\t\tposition: this.currentItem.css( \"position\" ),\n\t\t\t\ttop: this.currentItem.css( \"top\" ),\n\t\t\t\tleft: this.currentItem.css( \"left\" )\n\t\t\t};\n\t\t}\n\n\t\tif ( !helper[ 0 ].style.width || o.forceHelperSize ) {\n\t\t\thelper.width( this.currentItem.width() );\n\t\t}\n\t\tif ( !helper[ 0 ].style.height || o.forceHelperSize ) {\n\t\t\thelper.height( this.currentItem.height() );\n\t\t}\n\n\t\treturn helper;\n\n\t},\n\n\t_adjustOffsetFromHelper: function( obj ) {\n\t\tif ( typeof obj === \"string\" ) {\n\t\t\tobj = obj.split( \" \" );\n\t\t}\n\t\tif ( $.isArray( obj ) ) {\n\t\t\tobj = { left: +obj[ 0 ], top: +obj[ 1 ] || 0 };\n\t\t}\n\t\tif ( \"left\" in obj ) {\n\t\t\tthis.offset.click.left = obj.left + this.margins.left;\n\t\t}\n\t\tif ( \"right\" in obj ) {\n\t\t\tthis.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;\n\t\t}\n\t\tif ( \"top\" in obj ) {\n\t\t\tthis.offset.click.top = obj.top + this.margins.top;\n\t\t}\n\t\tif ( \"bottom\" in obj ) {\n\t\t\tthis.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;\n\t\t}\n\t},\n\n\t_getParentOffset: function() {\n\n\t\t//Get the offsetParent and cache its position\n\t\tthis.offsetParent = this.helper.offsetParent();\n\t\tvar po = this.offsetParent.offset();\n\n\t\t// This is a special case where we need to modify a offset calculated on start, since the\n\t\t// following happened:\n\t\t// 1. The position of the helper is absolute, so it's position is calculated based on the\n\t\t// next positioned parent\n\t\t// 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't\n\t\t// the document, which means that the scroll is included in the initial calculation of the\n\t\t// offset of the parent, and never recalculated upon drag\n\t\tif ( this.cssPosition === \"absolute\" && this.scrollParent[ 0 ] !== this.document[ 0 ] &&\n\t\t\t\t$.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) {\n\t\t\tpo.left += this.scrollParent.scrollLeft();\n\t\t\tpo.top += this.scrollParent.scrollTop();\n\t\t}\n\n\t\t// This needs to be actually done for all browsers, since pageX/pageY includes this\n\t\t// information with an ugly IE fix\n\t\tif ( this.offsetParent[ 0 ] === this.document[ 0 ].body ||\n\t\t\t\t( this.offsetParent[ 0 ].tagName &&\n\t\t\t\tthis.offsetParent[ 0 ].tagName.toLowerCase() === \"html\" && $.ui.ie ) ) {\n\t\t\tpo = { top: 0, left: 0 };\n\t\t}\n\n\t\treturn {\n\t\t\ttop: po.top + ( parseInt( this.offsetParent.css( \"borderTopWidth\" ), 10 ) || 0 ),\n\t\t\tleft: po.left + ( parseInt( this.offsetParent.css( \"borderLeftWidth\" ), 10 ) || 0 )\n\t\t};\n\n\t},\n\n\t_getRelativeOffset: function() {\n\n\t\tif ( this.cssPosition === \"relative\" ) {\n\t\t\tvar p = this.currentItem.position();\n\t\t\treturn {\n\t\t\t\ttop: p.top - ( parseInt( this.helper.css( \"top\" ), 10 ) || 0 ) +\n\t\t\t\t\tthis.scrollParent.scrollTop(),\n\t\t\t\tleft: p.left - ( parseInt( this.helper.css( \"left\" ), 10 ) || 0 ) +\n\t\t\t\t\tthis.scrollParent.scrollLeft()\n\t\t\t};\n\t\t} else {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t},\n\n\t_cacheMargins: function() {\n\t\tthis.margins = {\n\t\t\tleft: ( parseInt( this.currentItem.css( \"marginLeft\" ), 10 ) || 0 ),\n\t\t\ttop: ( parseInt( this.currentItem.css( \"marginTop\" ), 10 ) || 0 )\n\t\t};\n\t},\n\n\t_cacheHelperProportions: function() {\n\t\tthis.helperProportions = {\n\t\t\twidth: this.helper.outerWidth(),\n\t\t\theight: this.helper.outerHeight()\n\t\t};\n\t},\n\n\t_setContainment: function() {\n\n\t\tvar ce, co, over,\n\t\t\to = this.options;\n\t\tif ( o.containment === \"parent\" ) {\n\t\t\to.containment = this.helper[ 0 ].parentNode;\n\t\t}\n\t\tif ( o.containment === \"document\" || o.containment === \"window\" ) {\n\t\t\tthis.containment = [\n\t\t\t\t0 - this.offset.relative.left - this.offset.parent.left,\n\t\t\t\t0 - this.offset.relative.top - this.offset.parent.top,\n\t\t\t\to.containment === \"document\" ?\n\t\t\t\t\tthis.document.width() :\n\t\t\t\t\tthis.window.width() - this.helperProportions.width - this.margins.left,\n\t\t\t\t( o.containment === \"document\" ?\n\t\t\t\t\t( this.document.height() || document.body.parentNode.scrollHeight ) :\n\t\t\t\t\tthis.window.height() || this.document[ 0 ].body.parentNode.scrollHeight\n\t\t\t\t) - this.helperProportions.height - this.margins.top\n\t\t\t];\n\t\t}\n\n\t\tif ( !( /^(document|window|parent)$/ ).test( o.containment ) ) {\n\t\t\tce = $( o.containment )[ 0 ];\n\t\t\tco = $( o.containment ).offset();\n\t\t\tover = ( $( ce ).css( \"overflow\" ) !== \"hidden\" );\n\n\t\t\tthis.containment = [\n\t\t\t\tco.left + ( parseInt( $( ce ).css( \"borderLeftWidth\" ), 10 ) || 0 ) +\n\t\t\t\t\t( parseInt( $( ce ).css( \"paddingLeft\" ), 10 ) || 0 ) - this.margins.left,\n\t\t\t\tco.top + ( parseInt( $( ce ).css( \"borderTopWidth\" ), 10 ) || 0 ) +\n\t\t\t\t\t( parseInt( $( ce ).css( \"paddingTop\" ), 10 ) || 0 ) - this.margins.top,\n\t\t\t\tco.left + ( over ? Math.max( ce.scrollWidth, ce.offsetWidth ) : ce.offsetWidth ) -\n\t\t\t\t\t( parseInt( $( ce ).css( \"borderLeftWidth\" ), 10 ) || 0 ) -\n\t\t\t\t\t( parseInt( $( ce ).css( \"paddingRight\" ), 10 ) || 0 ) -\n\t\t\t\t\tthis.helperProportions.width - this.margins.left,\n\t\t\t\tco.top + ( over ? Math.max( ce.scrollHeight, ce.offsetHeight ) : ce.offsetHeight ) -\n\t\t\t\t\t( parseInt( $( ce ).css( \"borderTopWidth\" ), 10 ) || 0 ) -\n\t\t\t\t\t( parseInt( $( ce ).css( \"paddingBottom\" ), 10 ) || 0 ) -\n\t\t\t\t\tthis.helperProportions.height - this.margins.top\n\t\t\t];\n\t\t}\n\n\t},\n\n\t_convertPositionTo: function( d, pos ) {\n\n\t\tif ( !pos ) {\n\t\t\tpos = this.position;\n\t\t}\n\t\tvar mod = d === \"absolute\" ? 1 : -1,\n\t\t\tscroll = this.cssPosition === \"absolute\" &&\n\t\t\t\t!( this.scrollParent[ 0 ] !== this.document[ 0 ] &&\n\t\t\t\t$.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) ?\n\t\t\t\t\tthis.offsetParent :\n\t\t\t\t\tthis.scrollParent,\n\t\t\tscrollIsRootNode = ( /(html|body)/i ).test( scroll[ 0 ].tagName );\n\n\t\treturn {\n\t\t\ttop: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpos.top\t+\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.top * mod +\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.top * mod -\n\t\t\t\t( ( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.scrollParent.scrollTop() :\n\t\t\t\t\t( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod )\n\t\t\t),\n\t\t\tleft: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpos.left +\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.left * mod +\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.left * mod\t-\n\t\t\t\t( ( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 :\n\t\t\t\t\tscroll.scrollLeft() ) * mod )\n\t\t\t)\n\t\t};\n\n\t},\n\n\t_generatePosition: function( event ) {\n\n\t\tvar top, left,\n\t\t\to = this.options,\n\t\t\tpageX = event.pageX,\n\t\t\tpageY = event.pageY,\n\t\t\tscroll = this.cssPosition === \"absolute\" &&\n\t\t\t\t!( this.scrollParent[ 0 ] !== this.document[ 0 ] &&\n\t\t\t\t$.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) ?\n\t\t\t\t\tthis.offsetParent :\n\t\t\t\t\tthis.scrollParent,\n\t\t\t\tscrollIsRootNode = ( /(html|body)/i ).test( scroll[ 0 ].tagName );\n\n\t\t// This is another very weird special case that only happens for relative elements:\n\t\t// 1. If the css position is relative\n\t\t// 2. and the scroll parent is the document or similar to the offset parent\n\t\t// we have to refresh the relative offset during the scroll so there are no jumps\n\t\tif ( this.cssPosition === \"relative\" && !( this.scrollParent[ 0 ] !== this.document[ 0 ] &&\n\t\t\t\tthis.scrollParent[ 0 ] !== this.offsetParent[ 0 ] ) ) {\n\t\t\tthis.offset.relative = this._getRelativeOffset();\n\t\t}\n\n\t\t/*\n\t\t * - Position constraining -\n\t\t * Constrain the position to a mix of grid, containment.\n\t\t */\n\n\t\tif ( this.originalPosition ) { //If we are not dragging yet, we won't check for options\n\n\t\t\tif ( this.containment ) {\n\t\t\t\tif ( event.pageX - this.offset.click.left < this.containment[ 0 ] ) {\n\t\t\t\t\tpageX = this.containment[ 0 ] + this.offset.click.left;\n\t\t\t\t}\n\t\t\t\tif ( event.pageY - this.offset.click.top < this.containment[ 1 ] ) {\n\t\t\t\t\tpageY = this.containment[ 1 ] + this.offset.click.top;\n\t\t\t\t}\n\t\t\t\tif ( event.pageX - this.offset.click.left > this.containment[ 2 ] ) {\n\t\t\t\t\tpageX = this.containment[ 2 ] + this.offset.click.left;\n\t\t\t\t}\n\t\t\t\tif ( event.pageY - this.offset.click.top > this.containment[ 3 ] ) {\n\t\t\t\t\tpageY = this.containment[ 3 ] + this.offset.click.top;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( o.grid ) {\n\t\t\t\ttop = this.originalPageY + Math.round( ( pageY - this.originalPageY ) /\n\t\t\t\t\to.grid[ 1 ] ) * o.grid[ 1 ];\n\t\t\t\tpageY = this.containment ?\n\t\t\t\t\t( ( top - this.offset.click.top >= this.containment[ 1 ] &&\n\t\t\t\t\t\ttop - this.offset.click.top <= this.containment[ 3 ] ) ?\n\t\t\t\t\t\t\ttop :\n\t\t\t\t\t\t\t( ( top - this.offset.click.top >= this.containment[ 1 ] ) ?\n\t\t\t\t\t\t\t\ttop - o.grid[ 1 ] : top + o.grid[ 1 ] ) ) :\n\t\t\t\t\t\t\t\ttop;\n\n\t\t\t\tleft = this.originalPageX + Math.round( ( pageX - this.originalPageX ) /\n\t\t\t\t\to.grid[ 0 ] ) * o.grid[ 0 ];\n\t\t\t\tpageX = this.containment ?\n\t\t\t\t\t( ( left - this.offset.click.left >= this.containment[ 0 ] &&\n\t\t\t\t\t\tleft - this.offset.click.left <= this.containment[ 2 ] ) ?\n\t\t\t\t\t\t\tleft :\n\t\t\t\t\t\t\t( ( left - this.offset.click.left >= this.containment[ 0 ] ) ?\n\t\t\t\t\t\t\t\tleft - o.grid[ 0 ] : left + o.grid[ 0 ] ) ) :\n\t\t\t\t\t\t\t\tleft;\n\t\t\t}\n\n\t\t}\n\n\t\treturn {\n\t\t\ttop: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpageY -\n\n\t\t\t\t// Click offset (relative to the element)\n\t\t\t\tthis.offset.click.top -\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.top -\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.top +\n\t\t\t\t( ( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.scrollParent.scrollTop() :\n\t\t\t\t\t( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) )\n\t\t\t),\n\t\t\tleft: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpageX -\n\n\t\t\t\t// Click offset (relative to the element)\n\t\t\t\tthis.offset.click.left -\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.left -\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.left +\n\t\t\t\t( ( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.scrollParent.scrollLeft() :\n\t\t\t\t\tscrollIsRootNode ? 0 : scroll.scrollLeft() ) )\n\t\t\t)\n\t\t};\n\n\t},\n\n\t_rearrange: function( event, i, a, hardRefresh ) {\n\n\t\ta ? a[ 0 ].appendChild( this.placeholder[ 0 ] ) :\n\t\t\ti.item[ 0 ].parentNode.insertBefore( this.placeholder[ 0 ],\n\t\t\t\t( this.direction === \"down\" ? i.item[ 0 ] : i.item[ 0 ].nextSibling ) );\n\n\t\t//Various things done here to improve the performance:\n\t\t// 1. we create a setTimeout, that calls refreshPositions\n\t\t// 2. on the instance, we have a counter variable, that get's higher after every append\n\t\t// 3. on the local scope, we copy the counter variable, and check in the timeout,\n\t\t// if it's still the same\n\t\t// 4. this lets only the last addition to the timeout stack through\n\t\tthis.counter = this.counter ? ++this.counter : 1;\n\t\tvar counter = this.counter;\n\n\t\tthis._delay( function() {\n\t\t\tif ( counter === this.counter ) {\n\n\t\t\t\t//Precompute after each DOM insertion, NOT on mousemove\n\t\t\t\tthis.refreshPositions( !hardRefresh );\n\t\t\t}\n\t\t} );\n\n\t},\n\n\t_clear: function( event, noPropagation ) {\n\n\t\tthis.reverting = false;\n\n\t\t// We delay all events that have to be triggered to after the point where the placeholder\n\t\t// has been removed and everything else normalized again\n\t\tvar i,\n\t\t\tdelayedTriggers = [];\n\n\t\t// We first have to update the dom position of the actual currentItem\n\t\t// Note: don't do it if the current item is already removed (by a user), or it gets\n\t\t// reappended (see #4088)\n\t\tif ( !this._noFinalSort && this.currentItem.parent().length ) {\n\t\t\tthis.placeholder.before( this.currentItem );\n\t\t}\n\t\tthis._noFinalSort = null;\n\n\t\tif ( this.helper[ 0 ] === this.currentItem[ 0 ] ) {\n\t\t\tfor ( i in this._storedCSS ) {\n\t\t\t\tif ( this._storedCSS[ i ] === \"auto\" || this._storedCSS[ i ] === \"static\" ) {\n\t\t\t\t\tthis._storedCSS[ i ] = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.currentItem.css( this._storedCSS );\n\t\t\tthis._removeClass( this.currentItem, \"ui-sortable-helper\" );\n\t\t} else {\n\t\t\tthis.currentItem.show();\n\t\t}\n\n\t\tif ( this.fromOutside && !noPropagation ) {\n\t\t\tdelayedTriggers.push( function( event ) {\n\t\t\t\tthis._trigger( \"receive\", event, this._uiHash( this.fromOutside ) );\n\t\t\t} );\n\t\t}\n\t\tif ( ( this.fromOutside ||\n\t\t\t\tthis.domPosition.prev !==\n\t\t\t\tthis.currentItem.prev().not( \".ui-sortable-helper\" )[ 0 ] ||\n\t\t\t\tthis.domPosition.parent !== this.currentItem.parent()[ 0 ] ) && !noPropagation ) {\n\n\t\t\t// Trigger update callback if the DOM position has changed\n\t\t\tdelayedTriggers.push( function( event ) {\n\t\t\t\tthis._trigger( \"update\", event, this._uiHash() );\n\t\t\t} );\n\t\t}\n\n\t\t// Check if the items Container has Changed and trigger appropriate\n\t\t// events.\n\t\tif ( this !== this.currentContainer ) {\n\t\t\tif ( !noPropagation ) {\n\t\t\t\tdelayedTriggers.push( function( event ) {\n\t\t\t\t\tthis._trigger( \"remove\", event, this._uiHash() );\n\t\t\t\t} );\n\t\t\t\tdelayedTriggers.push( ( function( c ) {\n\t\t\t\t\treturn function( event ) {\n\t\t\t\t\t\tc._trigger( \"receive\", event, this._uiHash( this ) );\n\t\t\t\t\t};\n\t\t\t\t} ).call( this, this.currentContainer ) );\n\t\t\t\tdelayedTriggers.push( ( function( c ) {\n\t\t\t\t\treturn function( event ) {\n\t\t\t\t\t\tc._trigger( \"update\", event, this._uiHash( this ) );\n\t\t\t\t\t};\n\t\t\t\t} ).call( this, this.currentContainer ) );\n\t\t\t}\n\t\t}\n\n\t\t//Post events to containers\n\t\tfunction delayEvent( type, instance, container ) {\n\t\t\treturn function( event ) {\n\t\t\t\tcontainer._trigger( type, event, instance._uiHash( instance ) );\n\t\t\t};\n\t\t}\n\t\tfor ( i = this.containers.length - 1; i >= 0; i-- ) {\n\t\t\tif ( !noPropagation ) {\n\t\t\t\tdelayedTriggers.push( delayEvent( \"deactivate\", this, this.containers[ i ] ) );\n\t\t\t}\n\t\t\tif ( this.containers[ i ].containerCache.over ) {\n\t\t\t\tdelayedTriggers.push( delayEvent( \"out\", this, this.containers[ i ] ) );\n\t\t\t\tthis.containers[ i ].containerCache.over = 0;\n\t\t\t}\n\t\t}\n\n\t\t//Do what was originally in plugins\n\t\tif ( this.storedCursor ) {\n\t\t\tthis.document.find( \"body\" ).css( \"cursor\", this.storedCursor );\n\t\t\tthis.storedStylesheet.remove();\n\t\t}\n\t\tif ( this._storedOpacity ) {\n\t\t\tthis.helper.css( \"opacity\", this._storedOpacity );\n\t\t}\n\t\tif ( this._storedZIndex ) {\n\t\t\tthis.helper.css( \"zIndex\", this._storedZIndex === \"auto\" ? \"\" : this._storedZIndex );\n\t\t}\n\n\t\tthis.dragging = false;\n\n\t\tif ( !noPropagation ) {\n\t\t\tthis._trigger( \"beforeStop\", event, this._uiHash() );\n\t\t}\n\n\t\t//$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately,\n\t\t// it unbinds ALL events from the original node!\n\t\tthis.placeholder[ 0 ].parentNode.removeChild( this.placeholder[ 0 ] );\n\n\t\tif ( !this.cancelHelperRemoval ) {\n\t\t\tif ( this.helper[ 0 ] !== this.currentItem[ 0 ] ) {\n\t\t\t\tthis.helper.remove();\n\t\t\t}\n\t\t\tthis.helper = null;\n\t\t}\n\n\t\tif ( !noPropagation ) {\n\t\t\tfor ( i = 0; i < delayedTriggers.length; i++ ) {\n\n\t\t\t\t// Trigger all delayed events\n\t\t\t\tdelayedTriggers[ i ].call( this, event );\n\t\t\t}\n\t\t\tthis._trigger( \"stop\", event, this._uiHash() );\n\t\t}\n\n\t\tthis.fromOutside = false;\n\t\treturn !this.cancelHelperRemoval;\n\n\t},\n\n\t_trigger: function() {\n\t\tif ( $.Widget.prototype._trigger.apply( this, arguments ) === false ) {\n\t\t\tthis.cancel();\n\t\t}\n\t},\n\n\t_uiHash: function( _inst ) {\n\t\tvar inst = _inst || this;\n\t\treturn {\n\t\t\thelper: inst.helper,\n\t\t\tplaceholder: inst.placeholder || $( [] ),\n\t\t\tposition: inst.position,\n\t\t\toriginalPosition: inst.originalPosition,\n\t\t\toffset: inst.positionAbs,\n\t\t\titem: inst.currentItem,\n\t\t\tsender: _inst ? _inst.element : null\n\t\t};\n\t}\n\n} );\n\n\n/*!\n * jQuery UI Spinner 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Spinner\n//>>group: Widgets\n//>>description: Displays buttons to easily input numbers via the keyboard or mouse.\n//>>docs: http://api.jqueryui.com/spinner/\n//>>demos: http://jqueryui.com/spinner/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/spinner.css\n//>>css.theme: ../../themes/base/theme.css\n\n\n\nfunction spinnerModifer( fn ) {\n\treturn function() {\n\t\tvar previous = this.element.val();\n\t\tfn.apply( this, arguments );\n\t\tthis._refresh();\n\t\tif ( previous !== this.element.val() ) {\n\t\t\tthis._trigger( \"change\" );\n\t\t}\n\t};\n}\n\n$.widget( \"ui.spinner\", {\n\tversion: \"1.12.1\",\n\tdefaultElement: \"<input>\",\n\twidgetEventPrefix: \"spin\",\n\toptions: {\n\t\tclasses: {\n\t\t\t\"ui-spinner\": \"ui-corner-all\",\n\t\t\t\"ui-spinner-down\": \"ui-corner-br\",\n\t\t\t\"ui-spinner-up\": \"ui-corner-tr\"\n\t\t},\n\t\tculture: null,\n\t\ticons: {\n\t\t\tdown: \"ui-icon-triangle-1-s\",\n\t\t\tup: \"ui-icon-triangle-1-n\"\n\t\t},\n\t\tincremental: true,\n\t\tmax: null,\n\t\tmin: null,\n\t\tnumberFormat: null,\n\t\tpage: 10,\n\t\tstep: 1,\n\n\t\tchange: null,\n\t\tspin: null,\n\t\tstart: null,\n\t\tstop: null\n\t},\n\n\t_create: function() {\n\n\t\t// handle string values that need to be parsed\n\t\tthis._setOption( \"max\", this.options.max );\n\t\tthis._setOption( \"min\", this.options.min );\n\t\tthis._setOption( \"step\", this.options.step );\n\n\t\t// Only format if there is a value, prevents the field from being marked\n\t\t// as invalid in Firefox, see #9573.\n\t\tif ( this.value() !== \"\" ) {\n\n\t\t\t// Format the value, but don't constrain.\n\t\t\tthis._value( this.element.val(), true );\n\t\t}\n\n\t\tthis._draw();\n\t\tthis._on( this._events );\n\t\tthis._refresh();\n\n\t\t// Turning off autocomplete prevents the browser from remembering the\n\t\t// value when navigating through history, so we re-enable autocomplete\n\t\t// if the page is unloaded before the widget is destroyed. #7790\n\t\tthis._on( this.window, {\n\t\t\tbeforeunload: function() {\n\t\t\t\tthis.element.removeAttr( \"autocomplete\" );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_getCreateOptions: function() {\n\t\tvar options = this._super();\n\t\tvar element = this.element;\n\n\t\t$.each( [ \"min\", \"max\", \"step\" ], function( i, option ) {\n\t\t\tvar value = element.attr( option );\n\t\t\tif ( value != null && value.length ) {\n\t\t\t\toptions[ option ] = value;\n\t\t\t}\n\t\t} );\n\n\t\treturn options;\n\t},\n\n\t_events: {\n\t\tkeydown: function( event ) {\n\t\t\tif ( this._start( event ) && this._keydown( event ) ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t},\n\t\tkeyup: \"_stop\",\n\t\tfocus: function() {\n\t\t\tthis.previous = this.element.val();\n\t\t},\n\t\tblur: function( event ) {\n\t\t\tif ( this.cancelBlur ) {\n\t\t\t\tdelete this.cancelBlur;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis._stop();\n\t\t\tthis._refresh();\n\t\t\tif ( this.previous !== this.element.val() ) {\n\t\t\t\tthis._trigger( \"change\", event );\n\t\t\t}\n\t\t},\n\t\tmousewheel: function( event, delta ) {\n\t\t\tif ( !delta ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( !this.spinning && !this._start( event ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tthis._spin( ( delta > 0 ? 1 : -1 ) * this.options.step, event );\n\t\t\tclearTimeout( this.mousewheelTimer );\n\t\t\tthis.mousewheelTimer = this._delay( function() {\n\t\t\t\tif ( this.spinning ) {\n\t\t\t\t\tthis._stop( event );\n\t\t\t\t}\n\t\t\t}, 100 );\n\t\t\tevent.preventDefault();\n\t\t},\n\t\t\"mousedown .ui-spinner-button\": function( event ) {\n\t\t\tvar previous;\n\n\t\t\t// We never want the buttons to have focus; whenever the user is\n\t\t\t// interacting with the spinner, the focus should be on the input.\n\t\t\t// If the input is focused then this.previous is properly set from\n\t\t\t// when the input first received focus. If the input is not focused\n\t\t\t// then we need to set this.previous based on the value before spinning.\n\t\t\tprevious = this.element[ 0 ] === $.ui.safeActiveElement( this.document[ 0 ] ) ?\n\t\t\t\tthis.previous : this.element.val();\n\t\t\tfunction checkFocus() {\n\t\t\t\tvar isActive = this.element[ 0 ] === $.ui.safeActiveElement( this.document[ 0 ] );\n\t\t\t\tif ( !isActive ) {\n\t\t\t\t\tthis.element.trigger( \"focus\" );\n\t\t\t\t\tthis.previous = previous;\n\n\t\t\t\t\t// support: IE\n\t\t\t\t\t// IE sets focus asynchronously, so we need to check if focus\n\t\t\t\t\t// moved off of the input because the user clicked on the button.\n\t\t\t\t\tthis._delay( function() {\n\t\t\t\t\t\tthis.previous = previous;\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Ensure focus is on (or stays on) the text field\n\t\t\tevent.preventDefault();\n\t\t\tcheckFocus.call( this );\n\n\t\t\t// Support: IE\n\t\t\t// IE doesn't prevent moving focus even with event.preventDefault()\n\t\t\t// so we set a flag to know when we should ignore the blur event\n\t\t\t// and check (again) if focus moved off of the input.\n\t\t\tthis.cancelBlur = true;\n\t\t\tthis._delay( function() {\n\t\t\t\tdelete this.cancelBlur;\n\t\t\t\tcheckFocus.call( this );\n\t\t\t} );\n\n\t\t\tif ( this._start( event ) === false ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis._repeat( null, $( event.currentTarget )\n\t\t\t\t.hasClass( \"ui-spinner-up\" ) ? 1 : -1, event );\n\t\t},\n\t\t\"mouseup .ui-spinner-button\": \"_stop\",\n\t\t\"mouseenter .ui-spinner-button\": function( event ) {\n\n\t\t\t// button will add ui-state-active if mouse was down while mouseleave and kept down\n\t\t\tif ( !$( event.currentTarget ).hasClass( \"ui-state-active\" ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( this._start( event ) === false ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tthis._repeat( null, $( event.currentTarget )\n\t\t\t\t.hasClass( \"ui-spinner-up\" ) ? 1 : -1, event );\n\t\t},\n\n\t\t// TODO: do we really want to consider this a stop?\n\t\t// shouldn't we just stop the repeater and wait until mouseup before\n\t\t// we trigger the stop event?\n\t\t\"mouseleave .ui-spinner-button\": \"_stop\"\n\t},\n\n\t// Support mobile enhanced option and make backcompat more sane\n\t_enhance: function() {\n\t\tthis.uiSpinner = this.element\n\t\t\t.attr( \"autocomplete\", \"off\" )\n\t\t\t.wrap( \"<span>\" )\n\t\t\t.parent()\n\n\t\t\t\t// Add buttons\n\t\t\t\t.append(\n\t\t\t\t\t\"<a></a><a></a>\"\n\t\t\t\t);\n\t},\n\n\t_draw: function() {\n\t\tthis._enhance();\n\n\t\tthis._addClass( this.uiSpinner, \"ui-spinner\", \"ui-widget ui-widget-content\" );\n\t\tthis._addClass( \"ui-spinner-input\" );\n\n\t\tthis.element.attr( \"role\", \"spinbutton\" );\n\n\t\t// Button bindings\n\t\tthis.buttons = this.uiSpinner.children( \"a\" )\n\t\t\t.attr( \"tabIndex\", -1 )\n\t\t\t.attr( \"aria-hidden\", true )\n\t\t\t.button( {\n\t\t\t\tclasses: {\n\t\t\t\t\t\"ui-button\": \"\"\n\t\t\t\t}\n\t\t\t} );\n\n\t\t// TODO: Right now button does not support classes this is already updated in button PR\n\t\tthis._removeClass( this.buttons, \"ui-corner-all\" );\n\n\t\tthis._addClass( this.buttons.first(), \"ui-spinner-button ui-spinner-up\" );\n\t\tthis._addClass( this.buttons.last(), \"ui-spinner-button ui-spinner-down\" );\n\t\tthis.buttons.first().button( {\n\t\t\t\"icon\": this.options.icons.up,\n\t\t\t\"showLabel\": false\n\t\t} );\n\t\tthis.buttons.last().button( {\n\t\t\t\"icon\": this.options.icons.down,\n\t\t\t\"showLabel\": false\n\t\t} );\n\n\t\t// IE 6 doesn't understand height: 50% for the buttons\n\t\t// unless the wrapper has an explicit height\n\t\tif ( this.buttons.height() > Math.ceil( this.uiSpinner.height() * 0.5 ) &&\n\t\t\t\tthis.uiSpinner.height() > 0 ) {\n\t\t\tthis.uiSpinner.height( this.uiSpinner.height() );\n\t\t}\n\t},\n\n\t_keydown: function( event ) {\n\t\tvar options = this.options,\n\t\t\tkeyCode = $.ui.keyCode;\n\n\t\tswitch ( event.keyCode ) {\n\t\tcase keyCode.UP:\n\t\t\tthis._repeat( null, 1, event );\n\t\t\treturn true;\n\t\tcase keyCode.DOWN:\n\t\t\tthis._repeat( null, -1, event );\n\t\t\treturn true;\n\t\tcase keyCode.PAGE_UP:\n\t\t\tthis._repeat( null, options.page, event );\n\t\t\treturn true;\n\t\tcase keyCode.PAGE_DOWN:\n\t\t\tthis._repeat( null, -options.page, event );\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t_start: function( event ) {\n\t\tif ( !this.spinning && this._trigger( \"start\", event ) === false ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif ( !this.counter ) {\n\t\t\tthis.counter = 1;\n\t\t}\n\t\tthis.spinning = true;\n\t\treturn true;\n\t},\n\n\t_repeat: function( i, steps, event ) {\n\t\ti = i || 500;\n\n\t\tclearTimeout( this.timer );\n\t\tthis.timer = this._delay( function() {\n\t\t\tthis._repeat( 40, steps, event );\n\t\t}, i );\n\n\t\tthis._spin( steps * this.options.step, event );\n\t},\n\n\t_spin: function( step, event ) {\n\t\tvar value = this.value() || 0;\n\n\t\tif ( !this.counter ) {\n\t\t\tthis.counter = 1;\n\t\t}\n\n\t\tvalue = this._adjustValue( value + step * this._increment( this.counter ) );\n\n\t\tif ( !this.spinning || this._trigger( \"spin\", event, { value: value } ) !== false ) {\n\t\t\tthis._value( value );\n\t\t\tthis.counter++;\n\t\t}\n\t},\n\n\t_increment: function( i ) {\n\t\tvar incremental = this.options.incremental;\n\n\t\tif ( incremental ) {\n\t\t\treturn $.isFunction( incremental ) ?\n\t\t\t\tincremental( i ) :\n\t\t\t\tMath.floor( i * i * i / 50000 - i * i / 500 + 17 * i / 200 + 1 );\n\t\t}\n\n\t\treturn 1;\n\t},\n\n\t_precision: function() {\n\t\tvar precision = this._precisionOf( this.options.step );\n\t\tif ( this.options.min !== null ) {\n\t\t\tprecision = Math.max( precision, this._precisionOf( this.options.min ) );\n\t\t}\n\t\treturn precision;\n\t},\n\n\t_precisionOf: function( num ) {\n\t\tvar str = num.toString(),\n\t\t\tdecimal = str.indexOf( \".\" );\n\t\treturn decimal === -1 ? 0 : str.length - decimal - 1;\n\t},\n\n\t_adjustValue: function( value ) {\n\t\tvar base, aboveMin,\n\t\t\toptions = this.options;\n\n\t\t// Make sure we're at a valid step\n\t\t// - find out where we are relative to the base (min or 0)\n\t\tbase = options.min !== null ? options.min : 0;\n\t\taboveMin = value - base;\n\n\t\t// - round to the nearest step\n\t\taboveMin = Math.round( aboveMin / options.step ) * options.step;\n\n\t\t// - rounding is based on 0, so adjust back to our base\n\t\tvalue = base + aboveMin;\n\n\t\t// Fix precision from bad JS floating point math\n\t\tvalue = parseFloat( value.toFixed( this._precision() ) );\n\n\t\t// Clamp the value\n\t\tif ( options.max !== null && value > options.max ) {\n\t\t\treturn options.max;\n\t\t}\n\t\tif ( options.min !== null && value < options.min ) {\n\t\t\treturn options.min;\n\t\t}\n\n\t\treturn value;\n\t},\n\n\t_stop: function( event ) {\n\t\tif ( !this.spinning ) {\n\t\t\treturn;\n\t\t}\n\n\t\tclearTimeout( this.timer );\n\t\tclearTimeout( this.mousewheelTimer );\n\t\tthis.counter = 0;\n\t\tthis.spinning = false;\n\t\tthis._trigger( \"stop\", event );\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tvar prevValue, first, last;\n\n\t\tif ( key === \"culture\" || key === \"numberFormat\" ) {\n\t\t\tprevValue = this._parse( this.element.val() );\n\t\t\tthis.options[ key ] = value;\n\t\t\tthis.element.val( this._format( prevValue ) );\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key === \"max\" || key === \"min\" || key === \"step\" ) {\n\t\t\tif ( typeof value === \"string\" ) {\n\t\t\t\tvalue = this._parse( value );\n\t\t\t}\n\t\t}\n\t\tif ( key === \"icons\" ) {\n\t\t\tfirst = this.buttons.first().find( \".ui-icon\" );\n\t\t\tthis._removeClass( first, null, this.options.icons.up );\n\t\t\tthis._addClass( first, null, value.up );\n\t\t\tlast = this.buttons.last().find( \".ui-icon\" );\n\t\t\tthis._removeClass( last, null, this.options.icons.down );\n\t\t\tthis._addClass( last, null, value.down );\n\t\t}\n\n\t\tthis._super( key, value );\n\t},\n\n\t_setOptionDisabled: function( value ) {\n\t\tthis._super( value );\n\n\t\tthis._toggleClass( this.uiSpinner, null, \"ui-state-disabled\", !!value );\n\t\tthis.element.prop( \"disabled\", !!value );\n\t\tthis.buttons.button( value ? \"disable\" : \"enable\" );\n\t},\n\n\t_setOptions: spinnerModifer( function( options ) {\n\t\tthis._super( options );\n\t} ),\n\n\t_parse: function( val ) {\n\t\tif ( typeof val === \"string\" && val !== \"\" ) {\n\t\t\tval = window.Globalize && this.options.numberFormat ?\n\t\t\t\tGlobalize.parseFloat( val, 10, this.options.culture ) : +val;\n\t\t}\n\t\treturn val === \"\" || isNaN( val ) ? null : val;\n\t},\n\n\t_format: function( value ) {\n\t\tif ( value === \"\" ) {\n\t\t\treturn \"\";\n\t\t}\n\t\treturn window.Globalize && this.options.numberFormat ?\n\t\t\tGlobalize.format( value, this.options.numberFormat, this.options.culture ) :\n\t\t\tvalue;\n\t},\n\n\t_refresh: function() {\n\t\tthis.element.attr( {\n\t\t\t\"aria-valuemin\": this.options.min,\n\t\t\t\"aria-valuemax\": this.options.max,\n\n\t\t\t// TODO: what should we do with values that can't be parsed?\n\t\t\t\"aria-valuenow\": this._parse( this.element.val() )\n\t\t} );\n\t},\n\n\tisValid: function() {\n\t\tvar value = this.value();\n\n\t\t// Null is invalid\n\t\tif ( value === null ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// If value gets adjusted, it's invalid\n\t\treturn value === this._adjustValue( value );\n\t},\n\n\t// Update the value without triggering change\n\t_value: function( value, allowAny ) {\n\t\tvar parsed;\n\t\tif ( value !== \"\" ) {\n\t\t\tparsed = this._parse( value );\n\t\t\tif ( parsed !== null ) {\n\t\t\t\tif ( !allowAny ) {\n\t\t\t\t\tparsed = this._adjustValue( parsed );\n\t\t\t\t}\n\t\t\t\tvalue = this._format( parsed );\n\t\t\t}\n\t\t}\n\t\tthis.element.val( value );\n\t\tthis._refresh();\n\t},\n\n\t_destroy: function() {\n\t\tthis.element\n\t\t\t.prop( \"disabled\", false )\n\t\t\t.removeAttr( \"autocomplete role aria-valuemin aria-valuemax aria-valuenow\" );\n\n\t\tthis.uiSpinner.replaceWith( this.element );\n\t},\n\n\tstepUp: spinnerModifer( function( steps ) {\n\t\tthis._stepUp( steps );\n\t} ),\n\t_stepUp: function( steps ) {\n\t\tif ( this._start() ) {\n\t\t\tthis._spin( ( steps || 1 ) * this.options.step );\n\t\t\tthis._stop();\n\t\t}\n\t},\n\n\tstepDown: spinnerModifer( function( steps ) {\n\t\tthis._stepDown( steps );\n\t} ),\n\t_stepDown: function( steps ) {\n\t\tif ( this._start() ) {\n\t\t\tthis._spin( ( steps || 1 ) * -this.options.step );\n\t\t\tthis._stop();\n\t\t}\n\t},\n\n\tpageUp: spinnerModifer( function( pages ) {\n\t\tthis._stepUp( ( pages || 1 ) * this.options.page );\n\t} ),\n\n\tpageDown: spinnerModifer( function( pages ) {\n\t\tthis._stepDown( ( pages || 1 ) * this.options.page );\n\t} ),\n\n\tvalue: function( newVal ) {\n\t\tif ( !arguments.length ) {\n\t\t\treturn this._parse( this.element.val() );\n\t\t}\n\t\tspinnerModifer( this._value ).call( this, newVal );\n\t},\n\n\twidget: function() {\n\t\treturn this.uiSpinner;\n\t}\n} );\n\n// DEPRECATED\n// TODO: switch return back to widget declaration at top of file when this is removed\nif ( $.uiBackCompat !== false ) {\n\n\t// Backcompat for spinner html extension points\n\t$.widget( \"ui.spinner\", $.ui.spinner, {\n\t\t_enhance: function() {\n\t\t\tthis.uiSpinner = this.element\n\t\t\t\t.attr( \"autocomplete\", \"off\" )\n\t\t\t\t.wrap( this._uiSpinnerHtml() )\n\t\t\t\t.parent()\n\n\t\t\t\t\t// Add buttons\n\t\t\t\t\t.append( this._buttonHtml() );\n\t\t},\n\t\t_uiSpinnerHtml: function() {\n\t\t\treturn \"<span>\";\n\t\t},\n\n\t\t_buttonHtml: function() {\n\t\t\treturn \"<a></a><a></a>\";\n\t\t}\n\t} );\n}\n\nvar widgetsSpinner = $.ui.spinner;\n\n\n/*!\n * jQuery UI Tabs 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Tabs\n//>>group: Widgets\n//>>description: Transforms a set of container elements into a tab structure.\n//>>docs: http://api.jqueryui.com/tabs/\n//>>demos: http://jqueryui.com/tabs/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/tabs.css\n//>>css.theme: ../../themes/base/theme.css\n\n\n\n$.widget( \"ui.tabs\", {\n\tversion: \"1.12.1\",\n\tdelay: 300,\n\toptions: {\n\t\tactive: null,\n\t\tclasses: {\n\t\t\t\"ui-tabs\": \"ui-corner-all\",\n\t\t\t\"ui-tabs-nav\": \"ui-corner-all\",\n\t\t\t\"ui-tabs-panel\": \"ui-corner-bottom\",\n\t\t\t\"ui-tabs-tab\": \"ui-corner-top\"\n\t\t},\n\t\tcollapsible: false,\n\t\tevent: \"click\",\n\t\theightStyle: \"content\",\n\t\thide: null,\n\t\tshow: null,\n\n\t\t// Callbacks\n\t\tactivate: null,\n\t\tbeforeActivate: null,\n\t\tbeforeLoad: null,\n\t\tload: null\n\t},\n\n\t_isLocal: ( function() {\n\t\tvar rhash = /#.*$/;\n\n\t\treturn function( anchor ) {\n\t\t\tvar anchorUrl, locationUrl;\n\n\t\t\tanchorUrl = anchor.href.replace( rhash, \"\" );\n\t\t\tlocationUrl = location.href.replace( rhash, \"\" );\n\n\t\t\t// Decoding may throw an error if the URL isn't UTF-8 (#9518)\n\t\t\ttry {\n\t\t\t\tanchorUrl = decodeURIComponent( anchorUrl );\n\t\t\t} catch ( error ) {}\n\t\t\ttry {\n\t\t\t\tlocationUrl = decodeURIComponent( locationUrl );\n\t\t\t} catch ( error ) {}\n\n\t\t\treturn anchor.hash.length > 1 && anchorUrl === locationUrl;\n\t\t};\n\t} )(),\n\n\t_create: function() {\n\t\tvar that = this,\n\t\t\toptions = this.options;\n\n\t\tthis.running = false;\n\n\t\tthis._addClass( \"ui-tabs\", \"ui-widget ui-widget-content\" );\n\t\tthis._toggleClass( \"ui-tabs-collapsible\", null, options.collapsible );\n\n\t\tthis._processTabs();\n\t\toptions.active = this._initialActive();\n\n\t\t// Take disabling tabs via class attribute from HTML\n\t\t// into account and update option properly.\n\t\tif ( $.isArray( options.disabled ) ) {\n\t\t\toptions.disabled = $.unique( options.disabled.concat(\n\t\t\t\t$.map( this.tabs.filter( \".ui-state-disabled\" ), function( li ) {\n\t\t\t\t\treturn that.tabs.index( li );\n\t\t\t\t} )\n\t\t\t) ).sort();\n\t\t}\n\n\t\t// Check for length avoids error when initializing empty list\n\t\tif ( this.options.active !== false && this.anchors.length ) {\n\t\t\tthis.active = this._findActive( options.active );\n\t\t} else {\n\t\t\tthis.active = $();\n\t\t}\n\n\t\tthis._refresh();\n\n\t\tif ( this.active.length ) {\n\t\t\tthis.load( options.active );\n\t\t}\n\t},\n\n\t_initialActive: function() {\n\t\tvar active = this.options.active,\n\t\t\tcollapsible = this.options.collapsible,\n\t\t\tlocationHash = location.hash.substring( 1 );\n\n\t\tif ( active === null ) {\n\n\t\t\t// check the fragment identifier in the URL\n\t\t\tif ( locationHash ) {\n\t\t\t\tthis.tabs.each( function( i, tab ) {\n\t\t\t\t\tif ( $( tab ).attr( \"aria-controls\" ) === locationHash ) {\n\t\t\t\t\t\tactive = i;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\t// Check for a tab marked active via a class\n\t\t\tif ( active === null ) {\n\t\t\t\tactive = this.tabs.index( this.tabs.filter( \".ui-tabs-active\" ) );\n\t\t\t}\n\n\t\t\t// No active tab, set to false\n\t\t\tif ( active === null || active === -1 ) {\n\t\t\t\tactive = this.tabs.length ? 0 : false;\n\t\t\t}\n\t\t}\n\n\t\t// Handle numbers: negative, out of range\n\t\tif ( active !== false ) {\n\t\t\tactive = this.tabs.index( this.tabs.eq( active ) );\n\t\t\tif ( active === -1 ) {\n\t\t\t\tactive = collapsible ? false : 0;\n\t\t\t}\n\t\t}\n\n\t\t// Don't allow collapsible: false and active: false\n\t\tif ( !collapsible && active === false && this.anchors.length ) {\n\t\t\tactive = 0;\n\t\t}\n\n\t\treturn active;\n\t},\n\n\t_getCreateEventData: function() {\n\t\treturn {\n\t\t\ttab: this.active,\n\t\t\tpanel: !this.active.length ? $() : this._getPanelForTab( this.active )\n\t\t};\n\t},\n\n\t_tabKeydown: function( event ) {\n\t\tvar focusedTab = $( $.ui.safeActiveElement( this.document[ 0 ] ) ).closest( \"li\" ),\n\t\t\tselectedIndex = this.tabs.index( focusedTab ),\n\t\t\tgoingForward = true;\n\n\t\tif ( this._handlePageNav( event ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tswitch ( event.keyCode ) {\n\t\tcase $.ui.keyCode.RIGHT:\n\t\tcase $.ui.keyCode.DOWN:\n\t\t\tselectedIndex++;\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.UP:\n\t\tcase $.ui.keyCode.LEFT:\n\t\t\tgoingForward = false;\n\t\t\tselectedIndex--;\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.END:\n\t\t\tselectedIndex = this.anchors.length - 1;\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.HOME:\n\t\t\tselectedIndex = 0;\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.SPACE:\n\n\t\t\t// Activate only, no collapsing\n\t\t\tevent.preventDefault();\n\t\t\tclearTimeout( this.activating );\n\t\t\tthis._activate( selectedIndex );\n\t\t\treturn;\n\t\tcase $.ui.keyCode.ENTER:\n\n\t\t\t// Toggle (cancel delayed activation, allow collapsing)\n\t\t\tevent.preventDefault();\n\t\t\tclearTimeout( this.activating );\n\n\t\t\t// Determine if we should collapse or activate\n\t\t\tthis._activate( selectedIndex === this.options.active ? false : selectedIndex );\n\t\t\treturn;\n\t\tdefault:\n\t\t\treturn;\n\t\t}\n\n\t\t// Focus the appropriate tab, based on which key was pressed\n\t\tevent.preventDefault();\n\t\tclearTimeout( this.activating );\n\t\tselectedIndex = this._focusNextTab( selectedIndex, goingForward );\n\n\t\t// Navigating with control/command key will prevent automatic activation\n\t\tif ( !event.ctrlKey && !event.metaKey ) {\n\n\t\t\t// Update aria-selected immediately so that AT think the tab is already selected.\n\t\t\t// Otherwise AT may confuse the user by stating that they need to activate the tab,\n\t\t\t// but the tab will already be activated by the time the announcement finishes.\n\t\t\tfocusedTab.attr( \"aria-selected\", \"false\" );\n\t\t\tthis.tabs.eq( selectedIndex ).attr( \"aria-selected\", \"true\" );\n\n\t\t\tthis.activating = this._delay( function() {\n\t\t\t\tthis.option( \"active\", selectedIndex );\n\t\t\t}, this.delay );\n\t\t}\n\t},\n\n\t_panelKeydown: function( event ) {\n\t\tif ( this._handlePageNav( event ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Ctrl+up moves focus to the current tab\n\t\tif ( event.ctrlKey && event.keyCode === $.ui.keyCode.UP ) {\n\t\t\tevent.preventDefault();\n\t\t\tthis.active.trigger( \"focus\" );\n\t\t}\n\t},\n\n\t// Alt+page up/down moves focus to the previous/next tab (and activates)\n\t_handlePageNav: function( event ) {\n\t\tif ( event.altKey && event.keyCode === $.ui.keyCode.PAGE_UP ) {\n\t\t\tthis._activate( this._focusNextTab( this.options.active - 1, false ) );\n\t\t\treturn true;\n\t\t}\n\t\tif ( event.altKey && event.keyCode === $.ui.keyCode.PAGE_DOWN ) {\n\t\t\tthis._activate( this._focusNextTab( this.options.active + 1, true ) );\n\t\t\treturn true;\n\t\t}\n\t},\n\n\t_findNextTab: function( index, goingForward ) {\n\t\tvar lastTabIndex = this.tabs.length - 1;\n\n\t\tfunction constrain() {\n\t\t\tif ( index > lastTabIndex ) {\n\t\t\t\tindex = 0;\n\t\t\t}\n\t\t\tif ( index < 0 ) {\n\t\t\t\tindex = lastTabIndex;\n\t\t\t}\n\t\t\treturn index;\n\t\t}\n\n\t\twhile ( $.inArray( constrain(), this.options.disabled ) !== -1 ) {\n\t\t\tindex = goingForward ? index + 1 : index - 1;\n\t\t}\n\n\t\treturn index;\n\t},\n\n\t_focusNextTab: function( index, goingForward ) {\n\t\tindex = this._findNextTab( index, goingForward );\n\t\tthis.tabs.eq( index ).trigger( \"focus\" );\n\t\treturn index;\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tif ( key === \"active\" ) {\n\n\t\t\t// _activate() will handle invalid values and update this.options\n\t\t\tthis._activate( value );\n\t\t\treturn;\n\t\t}\n\n\t\tthis._super( key, value );\n\n\t\tif ( key === \"collapsible\" ) {\n\t\t\tthis._toggleClass( \"ui-tabs-collapsible\", null, value );\n\n\t\t\t// Setting collapsible: false while collapsed; open first panel\n\t\t\tif ( !value && this.options.active === false ) {\n\t\t\t\tthis._activate( 0 );\n\t\t\t}\n\t\t}\n\n\t\tif ( key === \"event\" ) {\n\t\t\tthis._setupEvents( value );\n\t\t}\n\n\t\tif ( key === \"heightStyle\" ) {\n\t\t\tthis._setupHeightStyle( value );\n\t\t}\n\t},\n\n\t_sanitizeSelector: function( hash ) {\n\t\treturn hash ? hash.replace( /[!\"$%&'()*+,.\\/:;<=>?@\\[\\]\\^`{|}~]/g, \"\\\\$&\" ) : \"\";\n\t},\n\n\trefresh: function() {\n\t\tvar options = this.options,\n\t\t\tlis = this.tablist.children( \":has(a[href])\" );\n\n\t\t// Get disabled tabs from class attribute from HTML\n\t\t// this will get converted to a boolean if needed in _refresh()\n\t\toptions.disabled = $.map( lis.filter( \".ui-state-disabled\" ), function( tab ) {\n\t\t\treturn lis.index( tab );\n\t\t} );\n\n\t\tthis._processTabs();\n\n\t\t// Was collapsed or no tabs\n\t\tif ( options.active === false || !this.anchors.length ) {\n\t\t\toptions.active = false;\n\t\t\tthis.active = $();\n\n\t\t// was active, but active tab is gone\n\t\t} else if ( this.active.length && !$.contains( this.tablist[ 0 ], this.active[ 0 ] ) ) {\n\n\t\t\t// all remaining tabs are disabled\n\t\t\tif ( this.tabs.length === options.disabled.length ) {\n\t\t\t\toptions.active = false;\n\t\t\t\tthis.active = $();\n\n\t\t\t// activate previous tab\n\t\t\t} else {\n\t\t\t\tthis._activate( this._findNextTab( Math.max( 0, options.active - 1 ), false ) );\n\t\t\t}\n\n\t\t// was active, active tab still exists\n\t\t} else {\n\n\t\t\t// make sure active index is correct\n\t\t\toptions.active = this.tabs.index( this.active );\n\t\t}\n\n\t\tthis._refresh();\n\t},\n\n\t_refresh: function() {\n\t\tthis._setOptionDisabled( this.options.disabled );\n\t\tthis._setupEvents( this.options.event );\n\t\tthis._setupHeightStyle( this.options.heightStyle );\n\n\t\tthis.tabs.not( this.active ).attr( {\n\t\t\t\"aria-selected\": \"false\",\n\t\t\t\"aria-expanded\": \"false\",\n\t\t\ttabIndex: -1\n\t\t} );\n\t\tthis.panels.not( this._getPanelForTab( this.active ) )\n\t\t\t.hide()\n\t\t\t.attr( {\n\t\t\t\t\"aria-hidden\": \"true\"\n\t\t\t} );\n\n\t\t// Make sure one tab is in the tab order\n\t\tif ( !this.active.length ) {\n\t\t\tthis.tabs.eq( 0 ).attr( \"tabIndex\", 0 );\n\t\t} else {\n\t\t\tthis.active\n\t\t\t\t.attr( {\n\t\t\t\t\t\"aria-selected\": \"true\",\n\t\t\t\t\t\"aria-expanded\": \"true\",\n\t\t\t\t\ttabIndex: 0\n\t\t\t\t} );\n\t\t\tthis._addClass( this.active, \"ui-tabs-active\", \"ui-state-active\" );\n\t\t\tthis._getPanelForTab( this.active )\n\t\t\t\t.show()\n\t\t\t\t.attr( {\n\t\t\t\t\t\"aria-hidden\": \"false\"\n\t\t\t\t} );\n\t\t}\n\t},\n\n\t_processTabs: function() {\n\t\tvar that = this,\n\t\t\tprevTabs = this.tabs,\n\t\t\tprevAnchors = this.anchors,\n\t\t\tprevPanels = this.panels;\n\n\t\tthis.tablist = this._getList().attr( \"role\", \"tablist\" );\n\t\tthis._addClass( this.tablist, \"ui-tabs-nav\",\n\t\t\t\"ui-helper-reset ui-helper-clearfix ui-widget-header\" );\n\n\t\t// Prevent users from focusing disabled tabs via click\n\t\tthis.tablist\n\t\t\t.on( \"mousedown\" + this.eventNamespace, \"> li\", function( event ) {\n\t\t\t\tif ( $( this ).is( \".ui-state-disabled\" ) ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t} )\n\n\t\t\t// Support: IE <9\n\t\t\t// Preventing the default action in mousedown doesn't prevent IE\n\t\t\t// from focusing the element, so if the anchor gets focused, blur.\n\t\t\t// We don't have to worry about focusing the previously focused\n\t\t\t// element since clicking on a non-focusable element should focus\n\t\t\t// the body anyway.\n\t\t\t.on( \"focus\" + this.eventNamespace, \".ui-tabs-anchor\", function() {\n\t\t\t\tif ( $( this ).closest( \"li\" ).is( \".ui-state-disabled\" ) ) {\n\t\t\t\t\tthis.blur();\n\t\t\t\t}\n\t\t\t} );\n\n\t\tthis.tabs = this.tablist.find( \"> li:has(a[href])\" )\n\t\t\t.attr( {\n\t\t\t\trole: \"tab\",\n\t\t\t\ttabIndex: -1\n\t\t\t} );\n\t\tthis._addClass( this.tabs, \"ui-tabs-tab\", \"ui-state-default\" );\n\n\t\tthis.anchors = this.tabs.map( function() {\n\t\t\treturn $( \"a\", this )[ 0 ];\n\t\t} )\n\t\t\t.attr( {\n\t\t\t\trole: \"presentation\",\n\t\t\t\ttabIndex: -1\n\t\t\t} );\n\t\tthis._addClass( this.anchors, \"ui-tabs-anchor\" );\n\n\t\tthis.panels = $();\n\n\t\tthis.anchors.each( function( i, anchor ) {\n\t\t\tvar selector, panel, panelId,\n\t\t\t\tanchorId = $( anchor ).uniqueId().attr( \"id\" ),\n\t\t\t\ttab = $( anchor ).closest( \"li\" ),\n\t\t\t\toriginalAriaControls = tab.attr( \"aria-controls\" );\n\n\t\t\t// Inline tab\n\t\t\tif ( that._isLocal( anchor ) ) {\n\t\t\t\tselector = anchor.hash;\n\t\t\t\tpanelId = selector.substring( 1 );\n\t\t\t\tpanel = that.element.find( that._sanitizeSelector( selector ) );\n\n\t\t\t// remote tab\n\t\t\t} else {\n\n\t\t\t\t// If the tab doesn't already have aria-controls,\n\t\t\t\t// generate an id by using a throw-away element\n\t\t\t\tpanelId = tab.attr( \"aria-controls\" ) || $( {} ).uniqueId()[ 0 ].id;\n\t\t\t\tselector = \"#\" + panelId;\n\t\t\t\tpanel = that.element.find( selector );\n\t\t\t\tif ( !panel.length ) {\n\t\t\t\t\tpanel = that._createPanel( panelId );\n\t\t\t\t\tpanel.insertAfter( that.panels[ i - 1 ] || that.tablist );\n\t\t\t\t}\n\t\t\t\tpanel.attr( \"aria-live\", \"polite\" );\n\t\t\t}\n\n\t\t\tif ( panel.length ) {\n\t\t\t\tthat.panels = that.panels.add( panel );\n\t\t\t}\n\t\t\tif ( originalAriaControls ) {\n\t\t\t\ttab.data( \"ui-tabs-aria-controls\", originalAriaControls );\n\t\t\t}\n\t\t\ttab.attr( {\n\t\t\t\t\"aria-controls\": panelId,\n\t\t\t\t\"aria-labelledby\": anchorId\n\t\t\t} );\n\t\t\tpanel.attr( \"aria-labelledby\", anchorId );\n\t\t} );\n\n\t\tthis.panels.attr( \"role\", \"tabpanel\" );\n\t\tthis._addClass( this.panels, \"ui-tabs-panel\", \"ui-widget-content\" );\n\n\t\t// Avoid memory leaks (#10056)\n\t\tif ( prevTabs ) {\n\t\t\tthis._off( prevTabs.not( this.tabs ) );\n\t\t\tthis._off( prevAnchors.not( this.anchors ) );\n\t\t\tthis._off( prevPanels.not( this.panels ) );\n\t\t}\n\t},\n\n\t// Allow overriding how to find the list for rare usage scenarios (#7715)\n\t_getList: function() {\n\t\treturn this.tablist || this.element.find( \"ol, ul\" ).eq( 0 );\n\t},\n\n\t_createPanel: function( id ) {\n\t\treturn $( \"<div>\" )\n\t\t\t.attr( \"id\", id )\n\t\t\t.data( \"ui-tabs-destroy\", true );\n\t},\n\n\t_setOptionDisabled: function( disabled ) {\n\t\tvar currentItem, li, i;\n\n\t\tif ( $.isArray( disabled ) ) {\n\t\t\tif ( !disabled.length ) {\n\t\t\t\tdisabled = false;\n\t\t\t} else if ( disabled.length === this.anchors.length ) {\n\t\t\t\tdisabled = true;\n\t\t\t}\n\t\t}\n\n\t\t// Disable tabs\n\t\tfor ( i = 0; ( li = this.tabs[ i ] ); i++ ) {\n\t\t\tcurrentItem = $( li );\n\t\t\tif ( disabled === true || $.inArray( i, disabled ) !== -1 ) {\n\t\t\t\tcurrentItem.attr( \"aria-disabled\", \"true\" );\n\t\t\t\tthis._addClass( currentItem, null, \"ui-state-disabled\" );\n\t\t\t} else {\n\t\t\t\tcurrentItem.removeAttr( \"aria-disabled\" );\n\t\t\t\tthis._removeClass( currentItem, null, \"ui-state-disabled\" );\n\t\t\t}\n\t\t}\n\n\t\tthis.options.disabled = disabled;\n\n\t\tthis._toggleClass( this.widget(), this.widgetFullName + \"-disabled\", null,\n\t\t\tdisabled === true );\n\t},\n\n\t_setupEvents: function( event ) {\n\t\tvar events = {};\n\t\tif ( event ) {\n\t\t\t$.each( event.split( \" \" ), function( index, eventName ) {\n\t\t\t\tevents[ eventName ] = \"_eventHandler\";\n\t\t\t} );\n\t\t}\n\n\t\tthis._off( this.anchors.add( this.tabs ).add( this.panels ) );\n\n\t\t// Always prevent the default action, even when disabled\n\t\tthis._on( true, this.anchors, {\n\t\t\tclick: function( event ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t} );\n\t\tthis._on( this.anchors, events );\n\t\tthis._on( this.tabs, { keydown: \"_tabKeydown\" } );\n\t\tthis._on( this.panels, { keydown: \"_panelKeydown\" } );\n\n\t\tthis._focusable( this.tabs );\n\t\tthis._hoverable( this.tabs );\n\t},\n\n\t_setupHeightStyle: function( heightStyle ) {\n\t\tvar maxHeight,\n\t\t\tparent = this.element.parent();\n\n\t\tif ( heightStyle === \"fill\" ) {\n\t\t\tmaxHeight = parent.height();\n\t\t\tmaxHeight -= this.element.outerHeight() - this.element.height();\n\n\t\t\tthis.element.siblings( \":visible\" ).each( function() {\n\t\t\t\tvar elem = $( this ),\n\t\t\t\t\tposition = elem.css( \"position\" );\n\n\t\t\t\tif ( position === \"absolute\" || position === \"fixed\" ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tmaxHeight -= elem.outerHeight( true );\n\t\t\t} );\n\n\t\t\tthis.element.children().not( this.panels ).each( function() {\n\t\t\t\tmaxHeight -= $( this ).outerHeight( true );\n\t\t\t} );\n\n\t\t\tthis.panels.each( function() {\n\t\t\t\t$( this ).height( Math.max( 0, maxHeight -\n\t\t\t\t\t$( this ).innerHeight() + $( this ).height() ) );\n\t\t\t} )\n\t\t\t\t.css( \"overflow\", \"auto\" );\n\t\t} else if ( heightStyle === \"auto\" ) {\n\t\t\tmaxHeight = 0;\n\t\t\tthis.panels.each( function() {\n\t\t\t\tmaxHeight = Math.max( maxHeight, $( this ).height( \"\" ).height() );\n\t\t\t} ).height( maxHeight );\n\t\t}\n\t},\n\n\t_eventHandler: function( event ) {\n\t\tvar options = this.options,\n\t\t\tactive = this.active,\n\t\t\tanchor = $( event.currentTarget ),\n\t\t\ttab = anchor.closest( \"li\" ),\n\t\t\tclickedIsActive = tab[ 0 ] === active[ 0 ],\n\t\t\tcollapsing = clickedIsActive && options.collapsible,\n\t\t\ttoShow = collapsing ? $() : this._getPanelForTab( tab ),\n\t\t\ttoHide = !active.length ? $() : this._getPanelForTab( active ),\n\t\t\teventData = {\n\t\t\t\toldTab: active,\n\t\t\t\toldPanel: toHide,\n\t\t\t\tnewTab: collapsing ? $() : tab,\n\t\t\t\tnewPanel: toShow\n\t\t\t};\n\n\t\tevent.preventDefault();\n\n\t\tif ( tab.hasClass( \"ui-state-disabled\" ) ||\n\n\t\t\t\t// tab is already loading\n\t\t\t\ttab.hasClass( \"ui-tabs-loading\" ) ||\n\n\t\t\t\t// can't switch durning an animation\n\t\t\t\tthis.running ||\n\n\t\t\t\t// click on active header, but not collapsible\n\t\t\t\t( clickedIsActive && !options.collapsible ) ||\n\n\t\t\t\t// allow canceling activation\n\t\t\t\t( this._trigger( \"beforeActivate\", event, eventData ) === false ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\toptions.active = collapsing ? false : this.tabs.index( tab );\n\n\t\tthis.active = clickedIsActive ? $() : tab;\n\t\tif ( this.xhr ) {\n\t\t\tthis.xhr.abort();\n\t\t}\n\n\t\tif ( !toHide.length && !toShow.length ) {\n\t\t\t$.error( \"jQuery UI Tabs: Mismatching fragment identifier.\" );\n\t\t}\n\n\t\tif ( toShow.length ) {\n\t\t\tthis.load( this.tabs.index( tab ), event );\n\t\t}\n\t\tthis._toggle( event, eventData );\n\t},\n\n\t// Handles show/hide for selecting tabs\n\t_toggle: function( event, eventData ) {\n\t\tvar that = this,\n\t\t\ttoShow = eventData.newPanel,\n\t\t\ttoHide = eventData.oldPanel;\n\n\t\tthis.running = true;\n\n\t\tfunction complete() {\n\t\t\tthat.running = false;\n\t\t\tthat._trigger( \"activate\", event, eventData );\n\t\t}\n\n\t\tfunction show() {\n\t\t\tthat._addClass( eventData.newTab.closest( \"li\" ), \"ui-tabs-active\", \"ui-state-active\" );\n\n\t\t\tif ( toShow.length && that.options.show ) {\n\t\t\t\tthat._show( toShow, that.options.show, complete );\n\t\t\t} else {\n\t\t\t\ttoShow.show();\n\t\t\t\tcomplete();\n\t\t\t}\n\t\t}\n\n\t\t// Start out by hiding, then showing, then completing\n\t\tif ( toHide.length && this.options.hide ) {\n\t\t\tthis._hide( toHide, this.options.hide, function() {\n\t\t\t\tthat._removeClass( eventData.oldTab.closest( \"li\" ),\n\t\t\t\t\t\"ui-tabs-active\", \"ui-state-active\" );\n\t\t\t\tshow();\n\t\t\t} );\n\t\t} else {\n\t\t\tthis._removeClass( eventData.oldTab.closest( \"li\" ),\n\t\t\t\t\"ui-tabs-active\", \"ui-state-active\" );\n\t\t\ttoHide.hide();\n\t\t\tshow();\n\t\t}\n\n\t\ttoHide.attr( \"aria-hidden\", \"true\" );\n\t\teventData.oldTab.attr( {\n\t\t\t\"aria-selected\": \"false\",\n\t\t\t\"aria-expanded\": \"false\"\n\t\t} );\n\n\t\t// If we're switching tabs, remove the old tab from the tab order.\n\t\t// If we're opening from collapsed state, remove the previous tab from the tab order.\n\t\t// If we're collapsing, then keep the collapsing tab in the tab order.\n\t\tif ( toShow.length && toHide.length ) {\n\t\t\teventData.oldTab.attr( \"tabIndex\", -1 );\n\t\t} else if ( toShow.length ) {\n\t\t\tthis.tabs.filter( function() {\n\t\t\t\treturn $( this ).attr( \"tabIndex\" ) === 0;\n\t\t\t} )\n\t\t\t\t.attr( \"tabIndex\", -1 );\n\t\t}\n\n\t\ttoShow.attr( \"aria-hidden\", \"false\" );\n\t\teventData.newTab.attr( {\n\t\t\t\"aria-selected\": \"true\",\n\t\t\t\"aria-expanded\": \"true\",\n\t\t\ttabIndex: 0\n\t\t} );\n\t},\n\n\t_activate: function( index ) {\n\t\tvar anchor,\n\t\t\tactive = this._findActive( index );\n\n\t\t// Trying to activate the already active panel\n\t\tif ( active[ 0 ] === this.active[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Trying to collapse, simulate a click on the current active header\n\t\tif ( !active.length ) {\n\t\t\tactive = this.active;\n\t\t}\n\n\t\tanchor = active.find( \".ui-tabs-anchor\" )[ 0 ];\n\t\tthis._eventHandler( {\n\t\t\ttarget: anchor,\n\t\t\tcurrentTarget: anchor,\n\t\t\tpreventDefault: $.noop\n\t\t} );\n\t},\n\n\t_findActive: function( index ) {\n\t\treturn index === false ? $() : this.tabs.eq( index );\n\t},\n\n\t_getIndex: function( index ) {\n\n\t\t// meta-function to give users option to provide a href string instead of a numerical index.\n\t\tif ( typeof index === \"string\" ) {\n\t\t\tindex = this.anchors.index( this.anchors.filter( \"[href$='\" +\n\t\t\t\t$.ui.escapeSelector( index ) + \"']\" ) );\n\t\t}\n\n\t\treturn index;\n\t},\n\n\t_destroy: function() {\n\t\tif ( this.xhr ) {\n\t\t\tthis.xhr.abort();\n\t\t}\n\n\t\tthis.tablist\n\t\t\t.removeAttr( \"role\" )\n\t\t\t.off( this.eventNamespace );\n\n\t\tthis.anchors\n\t\t\t.removeAttr( \"role tabIndex\" )\n\t\t\t.removeUniqueId();\n\n\t\tthis.tabs.add( this.panels ).each( function() {\n\t\t\tif ( $.data( this, \"ui-tabs-destroy\" ) ) {\n\t\t\t\t$( this ).remove();\n\t\t\t} else {\n\t\t\t\t$( this ).removeAttr( \"role tabIndex \" +\n\t\t\t\t\t\"aria-live aria-busy aria-selected aria-labelledby aria-hidden aria-expanded\" );\n\t\t\t}\n\t\t} );\n\n\t\tthis.tabs.each( function() {\n\t\t\tvar li = $( this ),\n\t\t\t\tprev = li.data( \"ui-tabs-aria-controls\" );\n\t\t\tif ( prev ) {\n\t\t\t\tli\n\t\t\t\t\t.attr( \"aria-controls\", prev )\n\t\t\t\t\t.removeData( \"ui-tabs-aria-controls\" );\n\t\t\t} else {\n\t\t\t\tli.removeAttr( \"aria-controls\" );\n\t\t\t}\n\t\t} );\n\n\t\tthis.panels.show();\n\n\t\tif ( this.options.heightStyle !== \"content\" ) {\n\t\t\tthis.panels.css( \"height\", \"\" );\n\t\t}\n\t},\n\n\tenable: function( index ) {\n\t\tvar disabled = this.options.disabled;\n\t\tif ( disabled === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( index === undefined ) {\n\t\t\tdisabled = false;\n\t\t} else {\n\t\t\tindex = this._getIndex( index );\n\t\t\tif ( $.isArray( disabled ) ) {\n\t\t\t\tdisabled = $.map( disabled, function( num ) {\n\t\t\t\t\treturn num !== index ? num : null;\n\t\t\t\t} );\n\t\t\t} else {\n\t\t\t\tdisabled = $.map( this.tabs, function( li, num ) {\n\t\t\t\t\treturn num !== index ? num : null;\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\t\tthis._setOptionDisabled( disabled );\n\t},\n\n\tdisable: function( index ) {\n\t\tvar disabled = this.options.disabled;\n\t\tif ( disabled === true ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( index === undefined ) {\n\t\t\tdisabled = true;\n\t\t} else {\n\t\t\tindex = this._getIndex( index );\n\t\t\tif ( $.inArray( index, disabled ) !== -1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( $.isArray( disabled ) ) {\n\t\t\t\tdisabled = $.merge( [ index ], disabled ).sort();\n\t\t\t} else {\n\t\t\t\tdisabled = [ index ];\n\t\t\t}\n\t\t}\n\t\tthis._setOptionDisabled( disabled );\n\t},\n\n\tload: function( index, event ) {\n\t\tindex = this._getIndex( index );\n\t\tvar that = this,\n\t\t\ttab = this.tabs.eq( index ),\n\t\t\tanchor = tab.find( \".ui-tabs-anchor\" ),\n\t\t\tpanel = this._getPanelForTab( tab ),\n\t\t\teventData = {\n\t\t\t\ttab: tab,\n\t\t\t\tpanel: panel\n\t\t\t},\n\t\t\tcomplete = function( jqXHR, status ) {\n\t\t\t\tif ( status === \"abort\" ) {\n\t\t\t\t\tthat.panels.stop( false, true );\n\t\t\t\t}\n\n\t\t\t\tthat._removeClass( tab, \"ui-tabs-loading\" );\n\t\t\t\tpanel.removeAttr( \"aria-busy\" );\n\n\t\t\t\tif ( jqXHR === that.xhr ) {\n\t\t\t\t\tdelete that.xhr;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Not remote\n\t\tif ( this._isLocal( anchor[ 0 ] ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.xhr = $.ajax( this._ajaxSettings( anchor, event, eventData ) );\n\n\t\t// Support: jQuery <1.8\n\t\t// jQuery <1.8 returns false if the request is canceled in beforeSend,\n\t\t// but as of 1.8, $.ajax() always returns a jqXHR object.\n\t\tif ( this.xhr && this.xhr.statusText !== \"canceled\" ) {\n\t\t\tthis._addClass( tab, \"ui-tabs-loading\" );\n\t\t\tpanel.attr( \"aria-busy\", \"true\" );\n\n\t\t\tthis.xhr\n\t\t\t\t.done( function( response, status, jqXHR ) {\n\n\t\t\t\t\t// support: jQuery <1.8\n\t\t\t\t\t// http://bugs.jquery.com/ticket/11778\n\t\t\t\t\tsetTimeout( function() {\n\t\t\t\t\t\tpanel.html( response );\n\t\t\t\t\t\tthat._trigger( \"load\", event, eventData );\n\n\t\t\t\t\t\tcomplete( jqXHR, status );\n\t\t\t\t\t}, 1 );\n\t\t\t\t} )\n\t\t\t\t.fail( function( jqXHR, status ) {\n\n\t\t\t\t\t// support: jQuery <1.8\n\t\t\t\t\t// http://bugs.jquery.com/ticket/11778\n\t\t\t\t\tsetTimeout( function() {\n\t\t\t\t\t\tcomplete( jqXHR, status );\n\t\t\t\t\t}, 1 );\n\t\t\t\t} );\n\t\t}\n\t},\n\n\t_ajaxSettings: function( anchor, event, eventData ) {\n\t\tvar that = this;\n\t\treturn {\n\n\t\t\t// Support: IE <11 only\n\t\t\t// Strip any hash that exists to prevent errors with the Ajax request\n\t\t\turl: anchor.attr( \"href\" ).replace( /#.*$/, \"\" ),\n\t\t\tbeforeSend: function( jqXHR, settings ) {\n\t\t\t\treturn that._trigger( \"beforeLoad\", event,\n\t\t\t\t\t$.extend( { jqXHR: jqXHR, ajaxSettings: settings }, eventData ) );\n\t\t\t}\n\t\t};\n\t},\n\n\t_getPanelForTab: function( tab ) {\n\t\tvar id = $( tab ).attr( \"aria-controls\" );\n\t\treturn this.element.find( this._sanitizeSelector( \"#\" + id ) );\n\t}\n} );\n\n// DEPRECATED\n// TODO: Switch return back to widget declaration at top of file when this is removed\nif ( $.uiBackCompat !== false ) {\n\n\t// Backcompat for ui-tab class (now ui-tabs-tab)\n\t$.widget( \"ui.tabs\", $.ui.tabs, {\n\t\t_processTabs: function() {\n\t\t\tthis._superApply( arguments );\n\t\t\tthis._addClass( this.tabs, \"ui-tab\" );\n\t\t}\n\t} );\n}\n\nvar widgetsTabs = $.ui.tabs;\n\n\n/*!\n * jQuery UI Tooltip 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Tooltip\n//>>group: Widgets\n//>>description: Shows additional information for any element on hover or focus.\n//>>docs: http://api.jqueryui.com/tooltip/\n//>>demos: http://jqueryui.com/tooltip/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/tooltip.css\n//>>css.theme: ../../themes/base/theme.css\n\n\n\n$.widget( \"ui.tooltip\", {\n\tversion: \"1.12.1\",\n\toptions: {\n\t\tclasses: {\n\t\t\t\"ui-tooltip\": \"ui-corner-all ui-widget-shadow\"\n\t\t},\n\t\tcontent: function() {\n\n\t\t\t// support: IE<9, Opera in jQuery <1.7\n\t\t\t// .text() can't accept undefined, so coerce to a string\n\t\t\tvar title = $( this ).attr( \"title\" ) || \"\";\n\n\t\t\t// Escape title, since we're going from an attribute to raw HTML\n\t\t\treturn $( \"<a>\" ).text( title ).html();\n\t\t},\n\t\thide: true,\n\n\t\t// Disabled elements have inconsistent behavior across browsers (#8661)\n\t\titems: \"[title]:not([disabled])\",\n\t\tposition: {\n\t\t\tmy: \"left top+15\",\n\t\t\tat: \"left bottom\",\n\t\t\tcollision: \"flipfit flip\"\n\t\t},\n\t\tshow: true,\n\t\ttrack: false,\n\n\t\t// Callbacks\n\t\tclose: null,\n\t\topen: null\n\t},\n\n\t_addDescribedBy: function( elem, id ) {\n\t\tvar describedby = ( elem.attr( \"aria-describedby\" ) || \"\" ).split( /\\s+/ );\n\t\tdescribedby.push( id );\n\t\telem\n\t\t\t.data( \"ui-tooltip-id\", id )\n\t\t\t.attr( \"aria-describedby\", $.trim( describedby.join( \" \" ) ) );\n\t},\n\n\t_removeDescribedBy: function( elem ) {\n\t\tvar id = elem.data( \"ui-tooltip-id\" ),\n\t\t\tdescribedby = ( elem.attr( \"aria-describedby\" ) || \"\" ).split( /\\s+/ ),\n\t\t\tindex = $.inArray( id, describedby );\n\n\t\tif ( index !== -1 ) {\n\t\t\tdescribedby.splice( index, 1 );\n\t\t}\n\n\t\telem.removeData( \"ui-tooltip-id\" );\n\t\tdescribedby = $.trim( describedby.join( \" \" ) );\n\t\tif ( describedby ) {\n\t\t\telem.attr( \"aria-describedby\", describedby );\n\t\t} else {\n\t\t\telem.removeAttr( \"aria-describedby\" );\n\t\t}\n\t},\n\n\t_create: function() {\n\t\tthis._on( {\n\t\t\tmouseover: \"open\",\n\t\t\tfocusin: \"open\"\n\t\t} );\n\n\t\t// IDs of generated tooltips, needed for destroy\n\t\tthis.tooltips = {};\n\n\t\t// IDs of parent tooltips where we removed the title attribute\n\t\tthis.parents = {};\n\n\t\t// Append the aria-live region so tooltips announce correctly\n\t\tthis.liveRegion = $( \"<div>\" )\n\t\t\t.attr( {\n\t\t\t\trole: \"log\",\n\t\t\t\t\"aria-live\": \"assertive\",\n\t\t\t\t\"aria-relevant\": \"additions\"\n\t\t\t} )\n\t\t\t.appendTo( this.document[ 0 ].body );\n\t\tthis._addClass( this.liveRegion, null, \"ui-helper-hidden-accessible\" );\n\n\t\tthis.disabledTitles = $( [] );\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tvar that = this;\n\n\t\tthis._super( key, value );\n\n\t\tif ( key === \"content\" ) {\n\t\t\t$.each( this.tooltips, function( id, tooltipData ) {\n\t\t\t\tthat._updateContent( tooltipData.element );\n\t\t\t} );\n\t\t}\n\t},\n\n\t_setOptionDisabled: function( value ) {\n\t\tthis[ value ? \"_disable\" : \"_enable\" ]();\n\t},\n\n\t_disable: function() {\n\t\tvar that = this;\n\n\t\t// Close open tooltips\n\t\t$.each( this.tooltips, function( id, tooltipData ) {\n\t\t\tvar event = $.Event( \"blur\" );\n\t\t\tevent.target = event.currentTarget = tooltipData.element[ 0 ];\n\t\t\tthat.close( event, true );\n\t\t} );\n\n\t\t// Remove title attributes to prevent native tooltips\n\t\tthis.disabledTitles = this.disabledTitles.add(\n\t\t\tthis.element.find( this.options.items ).addBack()\n\t\t\t\t.filter( function() {\n\t\t\t\t\tvar element = $( this );\n\t\t\t\t\tif ( element.is( \"[title]\" ) ) {\n\t\t\t\t\t\treturn element\n\t\t\t\t\t\t\t.data( \"ui-tooltip-title\", element.attr( \"title\" ) )\n\t\t\t\t\t\t\t.removeAttr( \"title\" );\n\t\t\t\t\t}\n\t\t\t\t} )\n\t\t);\n\t},\n\n\t_enable: function() {\n\n\t\t// restore title attributes\n\t\tthis.disabledTitles.each( function() {\n\t\t\tvar element = $( this );\n\t\t\tif ( element.data( \"ui-tooltip-title\" ) ) {\n\t\t\t\telement.attr( \"title\", element.data( \"ui-tooltip-title\" ) );\n\t\t\t}\n\t\t} );\n\t\tthis.disabledTitles = $( [] );\n\t},\n\n\topen: function( event ) {\n\t\tvar that = this,\n\t\t\ttarget = $( event ? event.target : this.element )\n\n\t\t\t\t// we need closest here due to mouseover bubbling,\n\t\t\t\t// but always pointing at the same event target\n\t\t\t\t.closest( this.options.items );\n\n\t\t// No element to show a tooltip for or the tooltip is already open\n\t\tif ( !target.length || target.data( \"ui-tooltip-id\" ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( target.attr( \"title\" ) ) {\n\t\t\ttarget.data( \"ui-tooltip-title\", target.attr( \"title\" ) );\n\t\t}\n\n\t\ttarget.data( \"ui-tooltip-open\", true );\n\n\t\t// Kill parent tooltips, custom or native, for hover\n\t\tif ( event && event.type === \"mouseover\" ) {\n\t\t\ttarget.parents().each( function() {\n\t\t\t\tvar parent = $( this ),\n\t\t\t\t\tblurEvent;\n\t\t\t\tif ( parent.data( \"ui-tooltip-open\" ) ) {\n\t\t\t\t\tblurEvent = $.Event( \"blur\" );\n\t\t\t\t\tblurEvent.target = blurEvent.currentTarget = this;\n\t\t\t\t\tthat.close( blurEvent, true );\n\t\t\t\t}\n\t\t\t\tif ( parent.attr( \"title\" ) ) {\n\t\t\t\t\tparent.uniqueId();\n\t\t\t\t\tthat.parents[ this.id ] = {\n\t\t\t\t\t\telement: this,\n\t\t\t\t\t\ttitle: parent.attr( \"title\" )\n\t\t\t\t\t};\n\t\t\t\t\tparent.attr( \"title\", \"\" );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\tthis._registerCloseHandlers( event, target );\n\t\tthis._updateContent( target, event );\n\t},\n\n\t_updateContent: function( target, event ) {\n\t\tvar content,\n\t\t\tcontentOption = this.options.content,\n\t\t\tthat = this,\n\t\t\teventType = event ? event.type : null;\n\n\t\tif ( typeof contentOption === \"string\" || contentOption.nodeType ||\n\t\t\t\tcontentOption.jquery ) {\n\t\t\treturn this._open( event, target, contentOption );\n\t\t}\n\n\t\tcontent = contentOption.call( target[ 0 ], function( response ) {\n\n\t\t\t// IE may instantly serve a cached response for ajax requests\n\t\t\t// delay this call to _open so the other call to _open runs first\n\t\t\tthat._delay( function() {\n\n\t\t\t\t// Ignore async response if tooltip was closed already\n\t\t\t\tif ( !target.data( \"ui-tooltip-open\" ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// JQuery creates a special event for focusin when it doesn't\n\t\t\t\t// exist natively. To improve performance, the native event\n\t\t\t\t// object is reused and the type is changed. Therefore, we can't\n\t\t\t\t// rely on the type being correct after the event finished\n\t\t\t\t// bubbling, so we set it back to the previous value. (#8740)\n\t\t\t\tif ( event ) {\n\t\t\t\t\tevent.type = eventType;\n\t\t\t\t}\n\t\t\t\tthis._open( event, target, response );\n\t\t\t} );\n\t\t} );\n\t\tif ( content ) {\n\t\t\tthis._open( event, target, content );\n\t\t}\n\t},\n\n\t_open: function( event, target, content ) {\n\t\tvar tooltipData, tooltip, delayedShow, a11yContent,\n\t\t\tpositionOption = $.extend( {}, this.options.position );\n\n\t\tif ( !content ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Content can be updated multiple times. If the tooltip already\n\t\t// exists, then just update the content and bail.\n\t\ttooltipData = this._find( target );\n\t\tif ( tooltipData ) {\n\t\t\ttooltipData.tooltip.find( \".ui-tooltip-content\" ).html( content );\n\t\t\treturn;\n\t\t}\n\n\t\t// If we have a title, clear it to prevent the native tooltip\n\t\t// we have to check first to avoid defining a title if none exists\n\t\t// (we don't want to cause an element to start matching [title])\n\t\t//\n\t\t// We use removeAttr only for key events, to allow IE to export the correct\n\t\t// accessible attributes. For mouse events, set to empty string to avoid\n\t\t// native tooltip showing up (happens only when removing inside mouseover).\n\t\tif ( target.is( \"[title]\" ) ) {\n\t\t\tif ( event && event.type === \"mouseover\" ) {\n\t\t\t\ttarget.attr( \"title\", \"\" );\n\t\t\t} else {\n\t\t\t\ttarget.removeAttr( \"title\" );\n\t\t\t}\n\t\t}\n\n\t\ttooltipData = this._tooltip( target );\n\t\ttooltip = tooltipData.tooltip;\n\t\tthis._addDescribedBy( target, tooltip.attr( \"id\" ) );\n\t\ttooltip.find( \".ui-tooltip-content\" ).html( content );\n\n\t\t// Support: Voiceover on OS X, JAWS on IE <= 9\n\t\t// JAWS announces deletions even when aria-relevant=\"additions\"\n\t\t// Voiceover will sometimes re-read the entire log region's contents from the beginning\n\t\tthis.liveRegion.children().hide();\n\t\ta11yContent = $( \"<div>\" ).html( tooltip.find( \".ui-tooltip-content\" ).html() );\n\t\ta11yContent.removeAttr( \"name\" ).find( \"[name]\" ).removeAttr( \"name\" );\n\t\ta11yContent.removeAttr( \"id\" ).find( \"[id]\" ).removeAttr( \"id\" );\n\t\ta11yContent.appendTo( this.liveRegion );\n\n\t\tfunction position( event ) {\n\t\t\tpositionOption.of = event;\n\t\t\tif ( tooltip.is( \":hidden\" ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\ttooltip.position( positionOption );\n\t\t}\n\t\tif ( this.options.track && event && /^mouse/.test( event.type ) ) {\n\t\t\tthis._on( this.document, {\n\t\t\t\tmousemove: position\n\t\t\t} );\n\n\t\t\t// trigger once to override element-relative positioning\n\t\t\tposition( event );\n\t\t} else {\n\t\t\ttooltip.position( $.extend( {\n\t\t\t\tof: target\n\t\t\t}, this.options.position ) );\n\t\t}\n\n\t\ttooltip.hide();\n\n\t\tthis._show( tooltip, this.options.show );\n\n\t\t// Handle tracking tooltips that are shown with a delay (#8644). As soon\n\t\t// as the tooltip is visible, position the tooltip using the most recent\n\t\t// event.\n\t\t// Adds the check to add the timers only when both delay and track options are set (#14682)\n\t\tif ( this.options.track && this.options.show && this.options.show.delay ) {\n\t\t\tdelayedShow = this.delayedShow = setInterval( function() {\n\t\t\t\tif ( tooltip.is( \":visible\" ) ) {\n\t\t\t\t\tposition( positionOption.of );\n\t\t\t\t\tclearInterval( delayedShow );\n\t\t\t\t}\n\t\t\t}, $.fx.interval );\n\t\t}\n\n\t\tthis._trigger( \"open\", event, { tooltip: tooltip } );\n\t},\n\n\t_registerCloseHandlers: function( event, target ) {\n\t\tvar events = {\n\t\t\tkeyup: function( event ) {\n\t\t\t\tif ( event.keyCode === $.ui.keyCode.ESCAPE ) {\n\t\t\t\t\tvar fakeEvent = $.Event( event );\n\t\t\t\t\tfakeEvent.currentTarget = target[ 0 ];\n\t\t\t\t\tthis.close( fakeEvent, true );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t// Only bind remove handler for delegated targets. Non-delegated\n\t\t// tooltips will handle this in destroy.\n\t\tif ( target[ 0 ] !== this.element[ 0 ] ) {\n\t\t\tevents.remove = function() {\n\t\t\t\tthis._removeTooltip( this._find( target ).tooltip );\n\t\t\t};\n\t\t}\n\n\t\tif ( !event || event.type === \"mouseover\" ) {\n\t\t\tevents.mouseleave = \"close\";\n\t\t}\n\t\tif ( !event || event.type === \"focusin\" ) {\n\t\t\tevents.focusout = \"close\";\n\t\t}\n\t\tthis._on( true, target, events );\n\t},\n\n\tclose: function( event ) {\n\t\tvar tooltip,\n\t\t\tthat = this,\n\t\t\ttarget = $( event ? event.currentTarget : this.element ),\n\t\t\ttooltipData = this._find( target );\n\n\t\t// The tooltip may already be closed\n\t\tif ( !tooltipData ) {\n\n\t\t\t// We set ui-tooltip-open immediately upon open (in open()), but only set the\n\t\t\t// additional data once there's actually content to show (in _open()). So even if the\n\t\t\t// tooltip doesn't have full data, we always remove ui-tooltip-open in case we're in\n\t\t\t// the period between open() and _open().\n\t\t\ttarget.removeData( \"ui-tooltip-open\" );\n\t\t\treturn;\n\t\t}\n\n\t\ttooltip = tooltipData.tooltip;\n\n\t\t// Disabling closes the tooltip, so we need to track when we're closing\n\t\t// to avoid an infinite loop in case the tooltip becomes disabled on close\n\t\tif ( tooltipData.closing ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Clear the interval for delayed tracking tooltips\n\t\tclearInterval( this.delayedShow );\n\n\t\t// Only set title if we had one before (see comment in _open())\n\t\t// If the title attribute has changed since open(), don't restore\n\t\tif ( target.data( \"ui-tooltip-title\" ) && !target.attr( \"title\" ) ) {\n\t\t\ttarget.attr( \"title\", target.data( \"ui-tooltip-title\" ) );\n\t\t}\n\n\t\tthis._removeDescribedBy( target );\n\n\t\ttooltipData.hiding = true;\n\t\ttooltip.stop( true );\n\t\tthis._hide( tooltip, this.options.hide, function() {\n\t\t\tthat._removeTooltip( $( this ) );\n\t\t} );\n\n\t\ttarget.removeData( \"ui-tooltip-open\" );\n\t\tthis._off( target, \"mouseleave focusout keyup\" );\n\n\t\t// Remove 'remove' binding only on delegated targets\n\t\tif ( target[ 0 ] !== this.element[ 0 ] ) {\n\t\t\tthis._off( target, \"remove\" );\n\t\t}\n\t\tthis._off( this.document, \"mousemove\" );\n\n\t\tif ( event && event.type === \"mouseleave\" ) {\n\t\t\t$.each( this.parents, function( id, parent ) {\n\t\t\t\t$( parent.element ).attr( \"title\", parent.title );\n\t\t\t\tdelete that.parents[ id ];\n\t\t\t} );\n\t\t}\n\n\t\ttooltipData.closing = true;\n\t\tthis._trigger( \"close\", event, { tooltip: tooltip } );\n\t\tif ( !tooltipData.hiding ) {\n\t\t\ttooltipData.closing = false;\n\t\t}\n\t},\n\n\t_tooltip: function( element ) {\n\t\tvar tooltip = $( \"<div>\" ).attr( \"role\", \"tooltip\" ),\n\t\t\tcontent = $( \"<div>\" ).appendTo( tooltip ),\n\t\t\tid = tooltip.uniqueId().attr( \"id\" );\n\n\t\tthis._addClass( content, \"ui-tooltip-content\" );\n\t\tthis._addClass( tooltip, \"ui-tooltip\", \"ui-widget ui-widget-content\" );\n\n\t\ttooltip.appendTo( this._appendTo( element ) );\n\n\t\treturn this.tooltips[ id ] = {\n\t\t\telement: element,\n\t\t\ttooltip: tooltip\n\t\t};\n\t},\n\n\t_find: function( target ) {\n\t\tvar id = target.data( \"ui-tooltip-id\" );\n\t\treturn id ? this.tooltips[ id ] : null;\n\t},\n\n\t_removeTooltip: function( tooltip ) {\n\t\ttooltip.remove();\n\t\tdelete this.tooltips[ tooltip.attr( \"id\" ) ];\n\t},\n\n\t_appendTo: function( target ) {\n\t\tvar element = target.closest( \".ui-front, dialog\" );\n\n\t\tif ( !element.length ) {\n\t\t\telement = this.document[ 0 ].body;\n\t\t}\n\n\t\treturn element;\n\t},\n\n\t_destroy: function() {\n\t\tvar that = this;\n\n\t\t// Close open tooltips\n\t\t$.each( this.tooltips, function( id, tooltipData ) {\n\n\t\t\t// Delegate to close method to handle common cleanup\n\t\t\tvar event = $.Event( \"blur\" ),\n\t\t\t\telement = tooltipData.element;\n\t\t\tevent.target = event.currentTarget = element[ 0 ];\n\t\t\tthat.close( event, true );\n\n\t\t\t// Remove immediately; destroying an open tooltip doesn't use the\n\t\t\t// hide animation\n\t\t\t$( \"#\" + id ).remove();\n\n\t\t\t// Restore the title\n\t\t\tif ( element.data( \"ui-tooltip-title\" ) ) {\n\n\t\t\t\t// If the title attribute has changed since open(), don't restore\n\t\t\t\tif ( !element.attr( \"title\" ) ) {\n\t\t\t\t\telement.attr( \"title\", element.data( \"ui-tooltip-title\" ) );\n\t\t\t\t}\n\t\t\t\telement.removeData( \"ui-tooltip-title\" );\n\t\t\t}\n\t\t} );\n\t\tthis.liveRegion.remove();\n\t}\n} );\n\n// DEPRECATED\n// TODO: Switch return back to widget declaration at top of file when this is removed\nif ( $.uiBackCompat !== false ) {\n\n\t// Backcompat for tooltipClass option\n\t$.widget( \"ui.tooltip\", $.ui.tooltip, {\n\t\toptions: {\n\t\t\ttooltipClass: null\n\t\t},\n\t\t_tooltip: function() {\n\t\t\tvar tooltipData = this._superApply( arguments );\n\t\t\tif ( this.options.tooltipClass ) {\n\t\t\t\ttooltipData.tooltip.addClass( this.options.tooltipClass );\n\t\t\t}\n\t\t\treturn tooltipData;\n\t\t}\n\t} );\n}\n\nvar widgetsTooltip = $.ui.tooltip;\n\n\n\n\n}));"
  },
  {
    "path": "automatic/static/js/jquery.wheelmenu.js",
    "content": "/* ===========================================================\n * jquery-wheelmenu.js v1\n * ===========================================================\n * Copyright 2013 Pete Rojwongsuriya.\n * http://www.thepetedesign.com\n *\n * A small jQuery plugin that adds a beautiful\n * Path-like menu button to your website\n * https://github.com/peachananr/wheel-menu\n *\n * ========================================================== */\n\n!function($){\n  \n  var defaults = {\n\t\ttrigger: \"click\",\n\t\tanimation: \"fade\",\n\t\tangle: [0,360],\n\t\tanimationSpeed: \"medium\"\n\t};\n\t\n\t$.fn.centerAround = function (button) {\n    var offset = button.offset(),\n        width = button.outerWidth(),\n        height = button.outerHeight(),\n        buttonX = (offset.left - $(document).scrollLeft() ) + width / 2,\n        buttonY = (offset.top -  $(document).scrollTop() ) + height / 2,\n        objectOffset = this.offset();\n    this.css(\"position\",\"fixed\");\n    this.css(\"top\", buttonY  - (this.outerHeight() / 2)  + \"px\");\n    this.css(\"left\", buttonX - (this.outerWidth() / 2)   + \"px\");\n    return this;\n  }\n  \n  $.fn.flyIn = function (el, button, width, height, angle, step, radius, settings) {\n    var d = 0;\n    this.stop(true,true);\n    this.each(function(index) {\n      angle = (settings.angle[0] + (step * index)) * (Math.PI/180);\n      var x = Math.round(width/2 + radius * Math.cos(angle) - $(this).find(\"a\").outerWidth()/2),\n          y = Math.round(height/2 + radius * Math.sin(angle) - $(this).find(\"a\").outerHeight()/2);\n      $(this).animateRotate(360).css({\n          position: 'absolute',\n          opacity: 0,\n          left: \"50%\",\n          top: \"50%\",\n          marginLeft: \"-\" + $(this).outerWidth() / 2,\n          marginTop: \"-\" + $(this).outerHeight() / 2\n      }).delay(d).animate({\n        opacity:1,\n        left: x + 'px',\n        top: y + 'px'\n      }, settings.animationSpeed[1]);\n      d += settings.animationSpeed[0];\n    });\n  }\n  \n  $.fn.flyOut = function (el, button) {\n    var d = 0;\n    this.stop(true,true);\n    $(this.get().reverse()).each(function() {\n\t    $(this).animateRotate(-360).delay(d).animate({\n\t      opacity:0,\n\t      left: el.outerWidth() / 2 + \"px\",\n        top: el.outerHeight() / 2 + \"px\"\n\t    }, 150);\n      d += 15;\n\t  }).promise().done( function() {\n      el.removeClass(\"active\").css(\"visibility\", \"hidden\").hide();\n      button.removeClass(\"active\")\n    });\n  }\n  \n  $.fn.fadeInIcon = function (el, button, width, height, angle, step, radius, settings) {\n    var d = 0;\n    this.stop(true,true);\n    this.each(function(index) {\n      angle = (settings.angle[0] + (step * index)) * (Math.PI/180); \n      var x = Math.round(width/2 + radius * Math.cos(angle) - $(this).find(\"a\").outerWidth()/2),\n          y = Math.round(height/2 + radius * Math.sin(angle) - $(this).find(\"a\").outerHeight()/2);\n      $(this).css({\n          position: 'absolute',\n          left: x + 'px',\n          top: y + 'px',\n          opacity: 0\n      }).delay(d).animate({opacity:1}, settings.animationSpeed[1]);\n      \n      d += settings.animationSpeed[0];\n    });\n  }\n  \n  $.fn.fadeOutIcon = function (el, button) {\n    var d = 0;\n    this.stop(true,true);\n    \n    $(this.get().reverse()).each(function() {\n\t    $(this).delay(d).animate({opacity:0}, 150);\n      d += 15;\n\t  }).promise().done( function() {\n      el.removeClass(\"active\").css(\"visibility\", \"hidden\").hide();\n      button.removeClass(\"active\")\n    });\n  }\n\t\n\t$.fn.hideIcon = function (button, settings) {\n\t  var fields = this.find(\".item\"),\n\t      el = this;\n\t  switch (settings.animation) { \n      case 'fade': \n        fields.fadeOutIcon(el, button)\n        break; \n    \n      case 'fly': \n        fields.flyOut(el, button)\n        break; \n    }\n\t  \n\t}\n\t\n\t$.fn.showIcon = function (button, settings) {\n\t  var el = this,\n\t      zindex = '6';\n\t  if (settings.trigger == \"hover\") {\n\t    var zindex = '3';\n    }\n\t  button.addClass(\"active\").css({\n      'z-index': zindex\n    });\n    \n    \n    \n\t  el.show().css({\n        position: 'absolute',\n        'z-index': '5',\n        'padding': '30px' // add safe zone for mouseover\n    }).centerAround(button); \n    el.addClass(\"wheel active\").css(\"visibility\", \"visible\").show();\n\t  \n\t  if (el.attr('data-angle')) {\n      settings.angle = el.attr('data-angle')\n    }\n    \n    settings = predefineAngle(settings);\n\t  var radius = el.width() / 2,\n      fields = el.find(\".item\"),\n      container = el,\n      width = container.innerWidth(),\n      height = container.innerHeight(),\n      angle =  0,\n      step = (settings.angle[1] - settings.angle[0]) / fields.length;\n     \n     \n      switch (settings.animation) { \n        case 'fade': \n          fields.fadeInIcon(el, button, width, height, angle, step, radius, settings)\n          break; \n          \n        case 'fly': \n          fields.flyIn(el, button, width, height, angle, step, radius, settings)\n          break; \n      }\n    \n\t}\n\t\n\t$.fn.animateRotate = function(angle, duration, easing, complete) {\n      return this.each(function() {\n          var $elem = $(this);\n\n          $({deg: 0}).animate({deg: angle}, {\n              duration: duration,\n              easing: easing,\n              step: function(now) {\n                  $elem.css({\n                      transform: 'rotate(' + now + 'deg)'\n                  });\n              },\n              complete: complete || $.noop\n          });\n      });\n  };\n  \n\t\n\tfunction predefineAngle (settings) {\n\t  var convert = false\n\t  if ($.type(settings.angle) == \"string\") {\n\t    try {\n        if (eval(settings.angle).length > 1) convert = true\n      }\n      catch(err) {\n        convert = false\n      }\n\t    if (convert == true) {\n\t      settings.angle = JSON.parse(settings.angle);\n\t    } else {\n\t      switch (settings.angle) { \n          case 'N':\n            settings.angle = [180,380]\n            break;\n          case 'NE':\n            settings.angle = [270,380]\n            break;\n          case 'E':\n            settings.angle = [270,470]\n            break;\n          case 'SE':\n            settings.angle = [360,470]\n            break;\n          case 'S':\n            settings.angle = [360,560]\n            break;\n          case 'SW':\n            settings.angle = [90,200]\n            break;\n          case 'W':\n            settings.angle = [90,290]\n            break;\n          case 'NW':\n            settings.angle = [180,290]\n            break;\n          case 'all':\n            settings.angle = [0,360]\n            break;\n        }\n\t    } \n    }\n    return settings;\n\t}\n\t\n\tfunction predefineSpeed(settings) {\n\t  if ($.type(settings.animationSpeed) == \"string\") { \n      switch (settings.animationSpeed) { \n        case 'slow':\n          settings.animationSpeed = [75,700]\n          break;\n        case 'medium':\n          settings.animationSpeed = [50,500]\n          break;\n        case 'fast':\n          settings.animationSpeed = [25,250]\n          break;\n        case 'instant':\n          settings.animationSpeed = [0,0]\n          break;\n      }\n    }\n    return settings;\n\t}\n  \n  $.fn.wheelmenu = function(options){\n    var settings = $.extend({}, defaults, options);\n    \n    settings = predefineSpeed(settings);\n    \n    return this.each(function(){\n      var button = $(this)\n      var el = $($(this).attr(\"href\"));\n      el.addClass(\"wheel\");\n      \n      button.css(\"opacity\", 0).animate({\n        opacity: 1\n      })\n      if (settings.trigger == \"hover\") {\n\n        button.bind({\n          mouseenter: function() {\n            el.showIcon(button, settings);\n          }\n        });\n        \n        el.bind({\n          mouseleave: function() {\n            el.hideIcon(button, settings);\n          }\n        });\n        \n      } else {\n        button.click( function() {\n          if (el.css('visibility') == \"visible\") {\n            el.hideIcon(button, settings);\n          } else {\n            el.showIcon(button, settings);\n          }\n        });\n      }\n    });\n  }\n  \n}(window.jQuery);\n\n\n"
  },
  {
    "path": "automatic/static/js/keyword.js",
    "content": "/**\n * Created by Ray on 16-11-11.\n */\n\n/*    点击关键字编辑按钮    */\nfunction setkeywordValue(id){\n\n    $.ajax({\n        type:\"GET\",\n        data:{'keywordid':id},\n        url: \"/func/keyword/setedit/\",\n        cache: false,\n        dataType:'json',\n\n        success: function(result,TextStatus) {\n            if (result.length >0){\n                for(var i=0; i<result.length; i++) {\n                    // $('#editKeywordModal [name=\"productid\"]').val(result[i].productid);\n                    $('#editKeywordModal [name=\"productname\"]').find(\"option[value=\"+result[i].productid+\"]\").attr(\"selected\",true);\n                    $('#editKeywordModal [name=\"keywordid\"]').val(result[i].id);\n                    $('#editKeywordModal [name=\"kwdescr\"]').val(result[i].descr);\n                    $('#editKeywordModal [name=\"keyword\"]').val(result[i].name);\n                }\n\n         }\n         // alert(result[i].projectid);\n        },\n        error:function (result) {\n            alert(result)\n        }\n     });\n\n}\n\n/*     编辑关键字     */\n   $('#keyword_edit').submit(function () {\n       $.ajax({\n           type:\"POST\",\n           data: $(this).serialize(),\n           url:\"/func/keyword/update/\",\n           cache: false,\n           dataType:\"html\",\n           success:function (result, statues,xml) {\n               $('#editProductModal').hide()\n               $('#log_info').addClass('bg-primary');\n               $('#log_info').css('display','block');\n               $('#log_info').html(result);\n               setTimeout(\"location.reload()\",1200);\n           },\n           error:function () {\n               $('#log_info').addClass('bg-primary');\n               $('#log_info').css('display','block');\n               $('#log_info').html('创建失败');\n               alert('创建失败')\n           }\n       });\n       return false;\n   });"
  },
  {
    "path": "automatic/static/js/taskmanage.js",
    "content": "/**\n * Created by ray on 16-11-2.\n */\n\t\tvar MoveTest = {\n\t\t\terrorMsg: \"放错了...请选择正确的类别！\",\n\t\t\tcurTarget: null,\n\t\t\tcurTmpTarget: null,\n\t\t\tnoSel: function() {\n\t\t\t\ttry {\n\t\t\t\t\twindow.getSelection ? window.getSelection().removeAllRanges() : document.selection.empty();\n\t\t\t\t} catch(e){}\n\t\t\t},\n\t\t\tdragTree2Dom: function(treeId, treeNodes) {\n\t\t\t\treturn !treeNodes[0].isParent;\n\t\t\t},\n\t\t\tprevTree: function(treeId, treeNodes, targetNode) {\n\t\t\t\treturn !targetNode.isParent && targetNode.parentTId == treeNodes[0].parentTId;\n\t\t\t},\n\t\t\tnextTree: function(treeId, treeNodes, targetNode) {\n\t\t\t\treturn !targetNode.isParent && targetNode.parentTId == treeNodes[0].parentTId;\n\t\t\t},\n\t\t\tinnerTree: function(treeId, treeNodes, targetNode) {\n\t\t\t\treturn targetNode!=null && targetNode.isParent && targetNode.tId == treeNodes[0].parentTId;\n\t\t\t},\n\t\t\tdragMove: function(e, treeId, treeNodes) {\n\t\t\t\tvar p = null, pId = 'dom_' + treeNodes[0].pId;\n\t\t\t\tif (e.target.id == pId) {\n\t\t\t\t\tp = $(e.target);\n\t\t\t\t} else {\n\t\t\t\t\tp = $(e.target).parent('#' + pId);\n\t\t\t\t\tif (!p.get(0)) {\n\t\t\t\t\t\tp = null;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// $('.domBtnDiv .active').removeClass('active');\n\t\t\t\t// if (p) {\n\t\t\t\t// \tp.addClass('active');\n\t\t\t\t// }\n\t\t\t},\n\t\t\t// dropTree2Dom: function(e, treeId, treeNodes, targetNode, moveType) {\n\t\t\t// \tvar domId = \"dom_\" + treeNodes[0].getParentNode().id;\n\t\t\t// \tif (moveType == null && (domId == e.target.id || $(e.target).parents(\"#\" + domId).length > 0)) {\n\t\t\t// \t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\");\n\t\t\t// \t\tzTree.removeNode(treeNodes[0]);\n            //\n\t\t\t// \t\tvar newDom = $(\"span[domId=\" + treeNodes[0].id + \"]\");\n\t\t\t// \t\tif (newDom.length > 0) {\n\t\t\t// \t\t\tnewDom.removeClass(\"domBtn_Disabled\");\n\t\t\t// \t\t\tnewDom.addClass(\"domBtn\");\n\t\t\t// \t\t} else {\n\t\t\t// \t\t\t$(\"#\" + domId).append(\"<span class='domBtn' domId='\" + treeNodes[0].id + \"'>\" + treeNodes[0].name + \"</span>\");\n\t\t\t// \t\t}\n\t\t\t// \t\tMoveTest.updateType();\n\t\t\t// \t} else if ( $(e.target).parents(\".domBtnDiv\").length > 0) {\n\t\t\t// \t\talert(MoveTest.errorMsg);\n\t\t\t// \t}\n\t\t\t// },\n\t\t\tdom2Tree: function(e, treeId, treeNode) {\n\t\t\t\tvar target = MoveTest.curTarget, tmpTarget = MoveTest.curTmpTarget;\n\t\t\t\tif (!target) return;\n\t\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\"), parentNode;\n\t\t\t\tif (treeNode != null && treeNode.isParent && \"dom_\" + treeNode.id == target.parent().attr(\"id\")) {\n\t\t\t\t\tparentNode = treeNode;\n\t\t\t\t} else if (treeNode != null && !treeNode.isParent && \"dom_\" + treeNode.getParentNode().id == target.parent().attr(\"id\")) {\n\t\t\t\t\tparentNode = treeNode.getParentNode();\n\t\t\t\t}\n\n\t\t\t\tif (tmpTarget) tmpTarget.remove();\n\t\t\t\tif (!!parentNode) {\n\t\t\t\t\tvar nodes = zTree.addNodes(parentNode, {id:target.attr(\"domId\"), name: target.text()});\n\t\t\t\t\tzTree.selectNode(nodes[0]);\n\t\t\t\t} else {\n\t\t\t\t\ttarget.removeClass(\"domBtn_Disabled\");\n\t\t\t\t\ttarget.addClass(\"domBtn\");\n\t\t\t\t\talert(MoveTest.errorMsg);\n\t\t\t\t}\n\t\t\t\tMoveTest.updateType();\n\t\t\t\tMoveTest.curTarget = null;\n\t\t\t\tMoveTest.curTmpTarget = null;\n\t\t\t},\n\t\t\tupdateType: function() {\n\t\t\t\tvar zTree = $.fn.zTree.getZTreeObj(\"treeDemo\"),\n\t\t\t\tnodes = zTree.getNodes();\n\t\t\t\tfor (var i=0, l=nodes.length; i<l; i++) {\n\t\t\t\t\tvar num = nodes[i].children ? nodes[i].children.length : 0;\n\t\t\t\t\tnodes[i].name = nodes[i].name.replace(/ \\(.*\\)/gi, \"\") + \" (\" + num + \")\";\n\t\t\t\t\tzTree.updateNode(nodes[i]);\n\t\t\t\t}\n\t\t\t},\n\t\t\tbindDom: function() {\n\t\t\t\t$(\".domBtnDiv\").bind(\"mousedown\", MoveTest.bindMouseDown);\n\t\t\t},\n\t\t\tbindMouseDown: function(e) {\n\t\t\t\tvar target = e.target;\n\t\t\t\tif (target!=null && target.className==\"domBtn\") {\n\t\t\t\t\tvar doc = $(document), target = $(target),\n\t\t\t\t\tdocScrollTop = doc.scrollTop(),\n\t\t\t\t\tdocScrollLeft = doc.scrollLeft();\n\t\t\t\t\ttarget.addClass(\"domBtn_Disabled\");\n\t\t\t\t\ttarget.removeClass(\"domBtn\");\n\t\t\t\t\tcurDom = $(\"<span class='dom_tmp domBtn'>\" + target.text() + \"</span>\");\n\t\t\t\t\tcurDom.appendTo(\"body\");\n\n\t\t\t\t\tcurDom.css({\n\t\t\t\t\t\t\"top\": (e.clientY + docScrollTop + 3) + \"px\",\n\t\t\t\t\t\t\"left\": (e.clientX + docScrollLeft + 3) + \"px\"\n\t\t\t\t\t});\n\t\t\t\t\tMoveTest.curTarget = target;\n\t\t\t\t\tMoveTest.curTmpTarget = curDom;\n\n\t\t\t\t\tdoc.bind(\"mousemove\", MoveTest.bindMouseMove);\n\t\t\t\t\tdoc.bind(\"mouseup\", MoveTest.bindMouseUp);\n\t\t\t\t\tdoc.bind(\"selectstart\", MoveTest.docSelect);\n\t\t\t\t}\n\t\t\t\tif(e.preventDefault) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t}\n\t\t\t},\n\t\t\tbindMouseMove: function(e) {\n\t\t\t\tMoveTest.noSel();\n\t\t\t\tvar doc = $(document),\n\t\t\t\tdocScrollTop = doc.scrollTop(),\n\t\t\t\tdocScrollLeft = doc.scrollLeft(),\n\t\t\t\ttmpTarget = MoveTest.curTmpTarget;\n\t\t\t\tif (tmpTarget) {\n\t\t\t\t\ttmpTarget.css({\n\t\t\t\t\t\t\"top\": (e.clientY + docScrollTop + 3) + \"px\",\n\t\t\t\t\t\t\"left\": (e.clientX + docScrollLeft + 3) + \"px\"\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\tbindMouseUp: function(e) {\n\t\t\t\tvar doc = $(document);\n\t\t\t\tdoc.unbind(\"mousemove\", MoveTest.bindMouseMove);\n\t\t\t\tdoc.unbind(\"mouseup\", MoveTest.bindMouseUp);\n\t\t\t\tdoc.unbind(\"selectstart\", MoveTest.docSelect);\n\n\t\t\t\tvar target = MoveTest.curTarget, tmpTarget = MoveTest.curTmpTarget;\n\t\t\t\tif (tmpTarget) tmpTarget.remove();\n\n\t\t\t\tif ($(e.target).parents(\"#treeDemo\").length == 0) {\n\t\t\t\t\tif (target) {\n\t\t\t\t\t\ttarget.removeClass(\"domBtn_Disabled\");\n\t\t\t\t\t\ttarget.addClass(\"domBtn\");\n\t\t\t\t\t}\n\t\t\t\t\tMoveTest.curTarget = null;\n\t\t\t\t\tMoveTest.curTmpTarget = null;\n\t\t\t\t}\n\t\t\t},\n\t\t\tbindSelect: function() {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t};\n\n\t\tvar setting = {\n\t\t    check: {\n                enable: true,\n                chkboxType: {\n                    \"Y\": \"ps\",\n                    \"N\": \"ps\"\n                }\n            },\n\t\t\tedit: {\n\t\t\t\tenable: true,\n\t\t\t\tshowRemoveBtn: false,\n\t\t\t\tshowRenameBtn: false,\n\t\t\t\tdrag: {\n\t\t\t\t\tprev: MoveTest.prevTree,\n\t\t\t\t\tnext: MoveTest.nextTree,\n\t\t\t\t\tinner: MoveTest.innerTree\n\t\t\t\t}\n\t\t\t},\n\t\t\tdata: {\n\t\t\t\tkeep: {\n\t\t\t\t\tparent: true,\n\t\t\t\t\tleaf: true\n\t\t\t\t},\n\t\t\t\tsimpleData: {\n\t\t\t\t\tenable: true\n\t\t\t\t}\n\t\t\t},\n\t\t\tcallback: {\n\t\t\t\tbeforeDrag: MoveTest.dragTree2Dom,\n\t\t\t\tonDrop: MoveTest.dropTree2Dom,\n\t\t\t\tonDragMove: MoveTest.dragMove,\n\t\t\t\tonMouseUp: MoveTest.dom2Tree\n\t\t\t},\n\t\t\tview: {\n\t\t\t\tselectedMulti: false\n\t\t\t}\n\t\t};\n\n\t\t// var zNodes =[\n\t\t// \t{ id:1, pId:0, name:\"植物\", isParent: true, open:true},\n\t\t// \t{ id:2, pId:0, name:\"动物\", isParent: true, open:true},\n\t\t// \t{ id:20, pId:2, name:\"大象\"},\n\t\t// \t{ id:29, pId:2, name:\"鲨鱼\"},\n\t\t// \t{ id:10, pId:1, name:\"大白菜\"},\n\t\t// \t{ id:19, pId:1, name:\"西红柿\"}\n\t\t// ];\n\n\t\t// $(document).ready(function(){\n\t\t// \t$.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n\t\t// \tMoveTest.updateType();\n\t\t// \tMoveTest.bindDom();\n\t\t// });\n//\n// var setting = {\n//     check: {\n//         enable: true,\n//         chkboxType: {\n//             \"Y\": \"ps\",\n//             \"N\": \"ps\"\n//         }\n//     },\n//     data: {\n//         simpleData: {\n//             enable: true\n//         }\n//     }\n// };\n\nfunction sortNumber(a,b){\n  return a-b;\n}\n\n/*    编辑任务页面 设置选中的case状态    */\nfunction setTreeValue(caselist){\n    var treeObj = $.fn.zTree.getZTreeObj(\"treeDemo\");\n    var nodes = treeObj.transformToArray(treeObj.getNodes());\n    var newObj = JSON.parse(caselist.replace(/&quot;/ig, '\"'));\n    var strArray = _.values(newObj);\n    var strNew = [];\n    var strOld = [];\n    var tempNode = [];\n    var x;\n    _.each(strArray, function(str){\n        strOld = _.union(strOld, str.split(','));\n        strNew = _.union(strNew, str.split(',').sort(sortNumber));\n    });\n    for (x in nodes){\n        for( j=0; j<strOld.length; j++){\n            if (nodes[x].id == strOld[j]){\n                var newNode = {};\n                newNode.id = nodes[x].id;\n                newNode.name = nodes[x].name;\n                tempNode.push(newNode);\n                treeObj.checkNode(nodes[x],true,true);\n            }\n        }\n    }\n    for (x in nodes){\n        for( j=0; j<strNew.length; j++){\n            if (nodes[x].id == strNew[j] && strNew[j]!=strOld[j]){\n                for(index in tempNode){\n                    if(tempNode[index].id == strOld[j]){\n                        nodes[x].name = tempNode[index].name;\n                        nodes[x].id = tempNode[index].id;\n                        break;\n                    }\n                }\n                break;\n            }\n        }\n    }\n}\nvar zNodes = [];\n\n$(document).ready(function () {\n    $.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n    MoveTest.updateType();\n    MoveTest.bindDom();\n    /*    通过project关联module树   */\n    $(\"#selprojectid_task\").bind(\"change\", function () {\n        var s1SelectedVal = $('#selprojectid_task').val();\n        var issmoke = $('#issmoke').val();\n        $.ajax({\n            type: \"GET\",\n            data: {'projectid': s1SelectedVal,'issmoke':issmoke},//$(this).serialize()\n            url: \"/setting/get/moduleList/\", //后台处理函数的url 这里用的是static url 需要与urls.py中的name一致\n            cache: false,\n            dataType: 'text',\n            success: function (result, TextStatus) {\n                zNodes = eval(result)\n                $.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n            },\n            error: function (result) {\n                alert(result)\n            }\n\n        });\n    });\n\n    $(\"#selprojectid_task_edit\").change();\n\n});\n\n\n//行添加\nfunction addtr() {\n    rowid = $('#rowid').val();\n    var len = parseInt($(\"#linecounter\").val()) + 1;\n\n    $(\"#tab tbody\").append('<tr id=row' + len + ' name=\"rowstep\">'\n        + '<td>' + len + '</td>'\n        + '<td><input name=\"codedescr\" class=\"ac-acaseedit-input\" placeholder=\"参数描述\" type=\"input\" required=\"\"></td>'\n        + '<td><input name=\"codename\" class=\"ac-acaseedit-input\" placeholder=\"参数编码(MWIP)\" type=\"input\" required=\"\"></td>'\n        + '<td><input name=\"codevalue\" class=\"ac-acaseedit-input ac-acode-desc\" placeholder=\"参数值\" type=\"input\" required=\"\"></td>'\n        + '<td><a class=\"btn btn-small btn-link\" onclick=\"deltr(' + len + ')\">删除</a></td>'\n        + '</tr>');\n    $(\"#linecounter\").val(len);\n    if (rowid != '') {\n        $('#row' + len).insertAfter('#row' + rowid);\n    }\n    $('#rowid').val('');\n}\n//行删除\nfunction deltr(index) {\n    $(\"tr[id='row\" + index + \"']\").remove();//删除当前行\n}"
  },
  {
    "path": "automatic/static/muti_select/css/multi.css",
    "content": "\n.multi_select {\n\theight:auto;\n\toverflow:hidden;\n\tfloat:left;\n    top:40px;\n}\n.multi_select_focus {\n    position:absolute;\n    left:4px;\n    top:6px;\n    border:1px solid #ccc;\n    background:#fff;\n    z-index:999;\n    font-family: '微软雅黑', 'Microsoft Yahei';\n    font-size: 12px;\n    color:#555;\n    font-weight: 300; !important;\n\n}\n/*.multi_select input:first-child{*/\n\t/*margin: 2px;*/\n/*}*/\n.container {\n    width: 100%;\n\tmargin-left: -2px;margin-top:5px;\n}\n\n.top {\n    background: #DBEAF9;\n\tborder-bottom: 1px solid gray;\n    height: 22px;\n}\n.content {\n    width: 100%;\n\tbackground-color: #fff;\n\toverflow-y: auto;\n\n}\n.content div{\n\tborder-bottom: 1px solid gray;\n\tmargin-top:0px;\n\theight:24px;\n    padding: 5px auto;\n    line-height: 30px;\n}\n.content div:last-child{\n    border-bottom: none;\n} \n.ok {\n\n\tdisplay: block;\n\tfloat: right;\n\theight: 22px;\n}\n\n.hidden {\n\tdisplay:none;\n}\n.select_rel{\n    border:1px solid #ccc;\n    background:transparent!important;\n}"
  },
  {
    "path": "automatic/static/muti_select/css/style.css",
    "content": ".multi_select {\nwidth: 100%;\nheight: 200px;\nbackground-color: #fff;\nmargin-top: -9px;\noverflow-y: auto;\n}\n.multi_select div{\n border-bottom: 1px solid gray;\n //border-top: 1px solid gray;\n margin-top:0px;\n height:24px;\n}\n#container {\nwidth:157px;\nborder: 1px solid gray;\n//position:absolute;\nmargin-left: -2px;\n}\n.hidden {\n\n display:none;\n}\n\nlabel {\n\n  font-size: 16px;\n}"
  },
  {
    "path": "automatic/static/muti_select/src/MultiSelectDropList.js",
    "content": "﻿/*\n@copyright:rwang\n@email:172247097@qq.com\n@date:2014-08-02\n*/\n\n(function ($){\n   \n   $.fn.extend({\n        MSDL: function (options){/*MultiSelectDropList*/\n\t\t //各种属性参数\n\t\t \n\t\t var defaults = {\n\t\t\twidth: '150',//下拉列表宽 \n\t\t\tmaxheight: '180',//下拉列表最大高度\n            data: ['item1','item2','item3','item4','item5','item6'],//下拉列表中的数据\t\n\t\t\tselectallTxt: 'All',//全选文本\n\t\t\tselectokTxt: 'ok',//确认文本\n\t\t };\n\t\t var options = $.extend(defaults, options);\n\t\t \n\t\t return this.each(function (){\n\t\t \n\t\t //插件实现代码\n\t\t\t//创建 input输入框\n\t\t\t//readonly:锁住键盘，不能向文本框输入内容  \n\t\t\tvar $ipt = $('<input type=\"text\" readonly value=\"\" class=\"select_rel form-control\" />');\n             var $selvalue = $('<input type=\"text\" hidden=\"true\"  id=\"selvalue\"/>');\n\t\t\t$ipt.width(options.width - 8);//设定文本框宽度\n\t\t\tvar $this = $(this);\n\t\t\t$this.width(options.width);\n\t\t\t$ipt.appendTo($this);\n            $selvalue.appendTo($this);\n\t\t    \n\t\t\t//创建 下拉选项 \n\t\t\t\n\t\t\t//1.下拉选项包裹\n\t\t\tvar $container = $('<div class=\"container\"></div>');\n\t\t\t\n\t\t\t//2.创建 全选和确认按钮  top层 \n\t\t\tvar $top = $('<div class=\"top\"></div>');//外层div包裹\n\t\t\tvar $all = $('<input type=\"checkbox\" class=\"select_all\"/><label>'+options.selectallTxt+'</label>');//全选\n            var $btn = $('<button type=\"button\" class=\"ok\">'+options.selectokTxt+'</button>');\n            $all.appendTo($top);\n            $btn.appendTo($top);\n\t\t\t\n\t\t\t//3.下拉中的内容 content层\n\t\t\tvar $content = $('<div class=\"content\"></div>');//外层div包裹\n\t\t\tvar count = options.data.length;\n\t\t\tvar h = ( (count * 22) > parseInt(options.maxheight) ) ? options.maxheight : \"'\" + count * 22 + \"'\";\n\t\t\t$content.height(h);\n\t\t\tfor(var i = count-1; i >= 0; i--){\n\t\t\t  \n\t\t\t   var $list = $('<div><input type=\"checkbox\" value='+options.data[i].key+' /><label>'+options.data[i].value+'</label><br></div>');\n\t\t\t   $list.appendTo($content);\n\t\t\t}\n           \n\t\t\t//4把top层和content层加到$container下\n\t\t\t$top.appendTo($container);\n            $content.appendTo($container);\t\n\n            //把$container加到$(this)下\n\t\t\t$container.appendTo($this);\t\n\n\t\t\t\n            //js Effect\n\t\t\tvar $dropList = $content.children().children('input');\n\t\t\t\n\t\t\t$all.change(function (){//点击all\n\t\t\t\t\n\t\t\t\t  var opt_arr = [];\n                  var opt_arry = [];\n\t\t\t\t  $dropList.each(function (){\n\t\t\t\t\t  if($all.is(':checked')){\n\t\t\t\t\t\t  $(this)[0].checked = 'checked';\n\t\t\t\t\t\t  opt_arr.push($(this).val());\n                          opt_arry.push($(this).next().text());\n\t\t\t\t\t  }else{\n\t\t\t\t\t\t  $(this)[0].checked = '';\n\t\t\t\t\t\t  opt_arr=[];\n                          opt_arry= [];\n\t\t\t\t\t  }\n\t\t\t\t  }); \n\t\t\t\t  \n\t\t\t\t  $ipt.val(opt_arry.join(';'));\n                  $selvalue.val(opt_arr.join(';'));\n\t\t\t});\n\t\t\t\n\t\t\t$container.addClass('hidden');//开始隐藏\n\t\t\t\n\t\t\t$ipt.focus(function (){//文本框处于编辑\n\t\t\t\t$container.removeClass('hidden');\n\t\t\t\t$this.addClass('multi_select_focus');\n\t\t\t});\n\t\t\t\n\t\t\t$btn.click(function (){//点击 ok按钮 \n\t\t\t    $container.addClass('hidden');\n\t\t\t\t$this.removeClass('multi_select_focus');\n\t\t\t});\n\t\t\t\n\t\t\t\n\t\t\t$dropList.change(function (){//勾选选项\n\t\t\t\t var opt_arr = [];\n                var opt_arry = [];\n\t\t\t\t $dropList.each(function (){\n\t\t\t\t   if ($(this).is(':checked')){\n\t\t\t\t       opt_arr.push($(this).val());\n                       opt_arry.push($(this).next().text());\n                       }\n\t\t\t\t   \n\t\t\t\t });\n\t\t\t\t var $dropList_selected = $content.children().children('input:checked');\n                 $selvalue.val(opt_arr.join(';'));\n\t\t\t\t $ipt.val(opt_arry.join(';'));\n\t\t\t\t var o = $all[0];\n\t\t\t\t var n1 = $dropList_selected.length;\n\t\t\t\t var n2 = $dropList.length;\n\t\t\t\t o.checked = (n1 === n2) ? 'checked' : '';\n\t\t\t});\n\t\t });\n\t },\n   });\n})(jQuery);"
  },
  {
    "path": "automatic/static/zTree_v3/css/awesomeStyle/awesome.css",
    "content": "/*-------------------------------------\nzTree Style using fontawesome instead of images\n\nversion:    1.1\nauthor:     Mike King\nemail:      mikkelking @ hotmail . com\nwebsite:    http://code.google.com/p/jquerytree/\n\n-------------------------------------*/\n/* Definitions ----------------------*/\n/* End of Definitions ---------------*/\n/* Imports  -------------------------*/\n/* End of Imports  ------------------*/\n.ztree * {\n  padding: 0;\n  margin: 0;\n  font-size: 12px;\n  font-family: Verdana, Arial, Helvetica, AppleGothic, sans-serif;\n  background-color: #af0000;\n}\n.ztree {\n  margin: 0;\n  padding: 5px;\n  color: #ffffff;\n  background-color: #af0000;\n}\n.ztree li {\n  padding: 0;\n  margin: 0;\n  list-style: none;\n  line-height: 17px;\n  text-align: left;\n  white-space: nowrap;\n  outline: 0;\n}\n.ztree li ul {\n  margin: 0px;\n  padding: 0 0 0 18px;\n}\n.ztree li a {\n  padding-right: 3px;\n  margin: 0;\n  cursor: pointer;\n  height: 17px;\n  color: #ffffff;\n  background-color: transparent;\n  text-decoration: none;\n  vertical-align: top;\n  display: inline-block;\n}\n.ztree li a input.rename {\n  height: 14px;\n  width: 80px;\n  padding: 0;\n  margin: 0;\n  color: #af0000;\n  background-color: #ffffff;\n  font-size: 12px;\n  border: 1px #585956 solid;\n  *border: 0px;\n}\n.ztree li a:hover {\n  text-decoration: underline;\n}\n.ztree li a.curSelectedNode {\n  padding-top: 0px;\n  background-color: #af4040;\n  color: #ffff00;\n  height: 17px;\n  opacity: 0.8;\n}\n.ztree li a.curSelectedNode_Edit {\n  padding-top: 0px;\n  background-color: transparent;\n  color: #ffff00;\n  height: 17px;\n  border: 1px #666 solid;\n  opacity: 0.8;\n}\n.ztree li a.tmpTargetNode_inner {\n  padding-top: 0px;\n  background-color: #aaa;\n  color: #ffff00;\n  height: 17px;\n  border: 1px #666 solid;\n  opacity: 0.8;\n  filter: alpha(opacity=80);\n}\n.ztree li span {\n  line-height: 17px;\n  margin-right: 2px;\n  background-color: transparent;\n}\n.ztree li span.button {\n  line-height: 0;\n  margin: 0;\n  padding: 0;\n  width: 15px;\n  height: 17px;\n  display: inline-block;\n  vertical-align: top;\n  border: 0px solid;\n  cursor: pointer;\n  outline: none;\n  background-color: transparent;\n  background-repeat: no-repeat;\n  background-attachment: scroll;\n}\n.ztree li span.button::before {\n  color: #ffffff;\n  font-family: FontAwesome;\n  padding-top: 10px;\n}\n.ztree li span.button.chk {\n  margin: 0px;\n  cursor: auto;\n  width: 12px;\n  display: inline-block;\n  padding-top: 10px;\n  padding-left: 2px;\n}\n.ztree li span.button.chk.checkbox_false_full::before {\n  content: \"\\f096\";\n}\n.ztree li span.button.chk.checkbox_false_full_focus::before {\n  content: \"\\f096\";\n  color: #ffff00;\n}\n.ztree li span.button.chk.checkbox_false_part::before {\n  content: \"\\f096\";\n  color: #aaaaaa;\n}\n.ztree li span.button.chk.checkbox_false_part_focus::before {\n  content: \"\\f096\";\n  color: #cad96c;\n}\n.ztree li span.button.chk.checkbox_false_disable::before {\n  content: \"\\f096\";\n  color: #808080;\n}\n.ztree li span.button.chk.checkbox_true_full::before {\n  content: \"\\f046\";\n}\n.ztree li span.button.chk.checkbox_true_full_focus::before {\n  content: \"\\f046\";\n}\n.ztree li span.button.chk.checkbox_true_part::before {\n  content: \"\\f14a\";\n}\n.ztree li span.button.chk.checkbox_true_part_focus::before {\n  content: \"\\f14a\";\n  color: #ffff00;\n}\n.ztree li span.button.chk.checkbox_true_full_focus::before {\n  content: \"\\f046\";\n  color: #ffff00;\n}\n.ztree li span.button.chk.checkbox_true_part::before {\n  content: \"\\f046\";\n  color: #aaaaaa;\n}\n.ztree li span.button.chk.checkbox_true_part_focus::before {\n  content: \"\\f046\";\n  color: #cad96c;\n}\n.ztree li span.button.chk.checkbox_true_disable::before {\n  content: \"\\f046\";\n  color: #808080;\n}\n.ztree li span.button.chk.radio_false_full::before {\n  content: \"\\f10c\";\n}\n.ztree li span.button.chk.radio_false_full_focus::before {\n  content: \"\\f10c\";\n  color: #ffff00;\n}\n.ztree li span.button.chk.radio_false_part::before {\n  content: \"\\f10c\";\n  color: #aaaaaa;\n}\n.ztree li span.button.chk.radio_false_part_focus::before {\n  content: \"\\f10c\";\n  color: #ffff00;\n}\n.ztree li span.button.chk.radio_false_disable::before {\n  content: \"\\f1db\";\n  color: #808080;\n}\n.ztree li span.button.chk.radio_true_full::before {\n  content: \"\\f192\";\n}\n.ztree li span.button.chk.radio_true_full_focus::before {\n  content: \"\\f192\";\n  color: #ffff00;\n}\n.ztree li span.button.chk.radio_true_part::before {\n  content: \"\\f192\";\n  color: #aaaaaa;\n}\n.ztree li span.button.chk.radio_true_part_focus::before {\n  content: \"\\f192\";\n  color: #aaaaaa;\n}\n.ztree li span.button.chk.radio_true_disable::before {\n  content: \"\\f1db\";\n  color: #808080;\n}\n.ztree li span.button.switch {\n  width: 15px;\n  height: 17px;\n}\n.ztree li span.button.root_open::before {\n  content: \"\\f078\";\n  padding-top: 10px;\n  padding-left: 2px;\n  display: inline-block;\n}\n.ztree li span.button.root_close::before {\n  content: \"\\f115\";\n  padding-top: 10px;\n  padding-left: 2px;\n  display: inline-block;\n}\n.ztree li span.button.roots_open::before {\n  content: \"\\f078\";\n  padding-top: 10px;\n  padding-left: 2px;\n  display: inline-block;\n}\n.ztree li span.button.roots_close::before {\n  content: \"\\f054\";\n  padding-top: 10px;\n  padding-left: 2px;\n  display: inline-block;\n}\n.ztree li span.button.center_open::before {\n  content: \"\\f078\";\n  padding-top: 10px;\n  padding-left: 2px;\n  display: inline-block;\n}\n.ztree li span.button.center_close::before {\n  content: \"\\f054\";\n  padding-top: 10px;\n  padding-left: 2px;\n  display: inline-block;\n}\n.ztree li span.button.bottom_open::before {\n  content: \"\\f078\";\n  padding-top: 10px;\n  padding-left: 2px;\n  display: inline-block;\n}\n.ztree li span.button.bottom_close::before {\n  content: \"\\f054\";\n  padding-top: 10px;\n  padding-left: 2px;\n  display: inline-block;\n}\n.ztree li span.button.root_docu {\n  background: none;\n}\n.ztree li span.button.roots_docu::before {\n  content: \"\\f022\";\n  padding-left: 2px;\n  display: inline-block;\n  color: #ffffff;\n}\n.ztree li span.button.center_docu::before {\n  padding-top: 10px;\n  padding-left: 2px;\n  display: inline-block;\n  color: #ffffff;\n}\n.ztree li span.button.bottom_docu::before {\n  padding-top: 10px;\n  padding-left: 2px;\n  display: inline-block;\n  color: #ffffff;\n}\n.ztree li span.button.noline_docu {\n  background: none;\n}\n.ztree li span.button.ico_open::before {\n  content: \"\\f115\";\n  font-family: FontAwesome;\n  padding-top: 10px;\n  padding-left: 2px;\n  display: inline-block;\n  color: #ffffff;\n}\n.ztree li span.button.ico_close::before {\n  content: \"\\f114\";\n  font-family: FontAwesome;\n  padding-top: 10px;\n  padding-left: 2px;\n  display: inline-block;\n  color: #ffffff;\n}\n.ztree li span.button.ico_docu::before {\n  content: \"\\f022\";\n  font-family: FontAwesome;\n  padding-top: 10px;\n  padding-left: 2px;\n  display: inline-block;\n  color: #ffffff;\n}\n.ztree li span.button.edit {\n  margin-left: 4px;\n  margin-right: -1px;\n  vertical-align: top;\n  *vertical-align: middle;\n  padding-top: 10px;\n}\n.ztree li span.button.edit::before {\n  content: \"\\f044\";\n  font-family: FontAwesome;\n}\n.ztree li span.button.remove {\n  margin-left: 4px;\n  margin-right: -1px;\n  vertical-align: top;\n  *vertical-align: middle;\n  padding-top: 10px;\n}\n.ztree li span.button.remove::before {\n  content: \"\\f1f8\";\n  font-family: FontAwesome;\n}\n.ztree li span.button.add {\n  margin-left: 4px;\n  margin-right: -1px;\n  vertical-align: top;\n  *vertical-align: middle;\n  padding-top: 10px;\n}\n.ztree li span.button.add::before {\n  content: \"\\f067\";\n  font-family: FontAwesome;\n}\n.ztree li span.button.ico_loading {\n  margin-right: 2px;\n  background: url(./img/loading.gif) no-repeat scroll 0 0 transparent;\n  vertical-align: top;\n  *vertical-align: middle;\n}\nul.tmpTargetzTree {\n  background-color: #FFE6B0;\n  opacity: 0.8;\n  filter: alpha(opacity=80);\n}\nspan.tmpzTreeMove_arrow {\n  width: 16px;\n  height: 17px;\n  display: inline-block;\n  padding: 0;\n  margin: 2px 0 0 1px;\n  border: 0 none;\n  position: absolute;\n  background-color: transparent;\n  background-attachment: scroll;\n}\nspan.tmpzTreeMove_arrow::before {\n  content: \"\\f04b\";\n  font-family: FontAwesome;\n  color: #ffff00;\n}\nul.ztree.zTreeDragUL {\n  margin: 0;\n  padding: 0;\n  position: absolute;\n  width: auto;\n  height: auto;\n  overflow: hidden;\n  background-color: #cfcfcf;\n  border: 1px #ffff00 dotted;\n  opacity: 0.8;\n  filter: alpha(opacity=80);\n}\n.ztreeMask {\n  z-index: 10000;\n  background-color: #cfcfcf;\n  opacity: 0.0;\n  filter: alpha(opacity=0);\n  position: absolute;\n}\n"
  },
  {
    "path": "automatic/static/zTree_v3/css/awesomeStyle/awesome.less",
    "content": "/*-------------------------------------\nzTree Style using fontawesome instead of images\n\nversion:    1.1\nauthor:     Mike King\nemail:      mikkelking @ hotmail . com\nwebsite:    http://code.google.com/p/jquerytree/\n\n-------------------------------------*/\n\n/* Definitions ----------------------*/\n@font-size: 12px;\n// Regular icon and text color is white, which suits any medium -> dark background \n@color-normal: white;\n// Background color\n@color-bg: #af0000;\n// Highlight color\n@color-highlight: yellow;\n// Partially selected (checkboxes, radio buttons)\n@color-partial: #aaaaaa;\n// Partially selected and focused (checkboxes, radio buttons)\n@color-partfocus: #cad96c;\n// Disabled altogether\n@color-disabled: #808080;\n// Editing color\n@color-edit: yellow;\n@w: 15px;\n@h: 17px;\n@pad-left: 2px;\n@pad-top: 10px;\n/* End of Definitions ---------------*/\n\n/* Imports  -------------------------*/\n@import \"fa.less\";\n/* End of Imports  ------------------*/\n\n.ztree * {padding:0; margin:0; font-size:@font-size; font-family: Verdana, Arial, Helvetica, AppleGothic, sans-serif; background-color: @color-bg;}\n.ztree {\n    margin:0; padding:5px; color:@color-normal; background-color: @color-bg;\n    li {\n        padding:0; margin:0; list-style:none; line-height:17px; text-align:left; white-space:nowrap; outline:0;\n        ul { \n            margin: 0px; padding:0 0 0 18px;\n        }\n        ul.line { }\n        a {padding-right:3px; margin:0; cursor:pointer; height:@h; color:@color-normal; background-color: transparent; \n            text-decoration:none; vertical-align:top; display: inline-block;\n            input.rename {height:14px; width:80px; padding:0; margin:0;\n                          color: @color-bg; background-color: @color-normal;\n                        font-size:@font-size; border:1px #585956 solid; *border:0px}\n        }\n        a:hover {text-decoration:underline}\n        a.curSelectedNode {padding-top:0px; background-color:#af4040; color:@color-highlight; height:@h; opacity:0.8;}\n        a.curSelectedNode_Edit {padding-top:0px; background-color:transparent; color:@color-highlight; height:@h; border:1px #666 solid; opacity:0.8;}\n        a.tmpTargetNode_inner {padding-top:0px; background-color:#aaa; color:@color-highlight; height:@h; border:1px #666 solid;\n          opacity:0.8; filter:alpha(opacity=80)}\n        a.tmpTargetNode_prev {}\n        a.tmpTargetNode_next {}\n        span {line-height:@h; margin-right:2px; background-color:transparent;}\n        span.button {line-height:0; margin:0; padding: 0; width:@w; height:@h; display: inline-block; vertical-align:top;\n          border:0px solid; cursor: pointer;outline:none;\n          background-color:transparent; background-repeat:no-repeat; background-attachment: scroll;\n \n            &::before{color: @color-normal; font-family: FontAwesome; padding-top:@pad-top;}\n            &.chk { margin:0px; cursor: auto; width: 12px;\n                display: inline-block;padding-top:@pad-top;padding-left:@pad-left;\n                \n                &.checkbox_false_full::before {content: @fa-square-o;}\n                &.checkbox_false_full_focus::before {content: @fa-square-o; color:@color-highlight;}\n                &.checkbox_false_part::before {content: @fa-square-o;color: @color-partial;}\n                &.checkbox_false_part_focus::before {content: @fa-square-o; color:@color-partfocus;}\n                &.checkbox_false_disable::before {content: @fa-square-o; color:@color-disabled;}\n                &.checkbox_true_full::before {content: @fa-check-square-o;}\n                &.checkbox_true_full_focus::before {content: @fa-check-square-o;}\n                &.checkbox_true_part::before {content: @fa-check-square;}\n                &.checkbox_true_part_focus::before {content: @fa-check-square; color: @color-highlight}\n                &.checkbox_true_full_focus::before {content: @fa-check-square-o; color: @color-highlight}\n                &.checkbox_true_part::before {content: @fa-check-square-o;color: @color-partial}\n                &.checkbox_true_part_focus::before {content: @fa-check-square-o;color: @color-partfocus;}\n                &.checkbox_true_disable::before {content: @fa-check-square-o;color: @color-disabled}\n                 \n                &.radio_false_full::before {content: @fa-circle-o;}\n                &.radio_false_full_focus::before {content: @fa-circle-o;color: @color-highlight}\n                &.radio_false_part::before {content: @fa-circle-o;color: @color-partial}\n                &.radio_false_part_focus::before {content: @fa-circle-o;color: @color-highlight}\n                &.radio_false_disable::before {content: @fa-circle-thin;color: @color-disabled}\n                &.radio_true_full::before {content: @fa-dot-circle-o;}\n                &.radio_true_full_focus::before {content: @fa-dot-circle-o;color: @color-highlight}\n                &.radio_true_part::before {content: @fa-dot-circle-o;color: @color-partial}\n                &.radio_true_part_focus::before {content: @fa-dot-circle-o;color: @color-partial;}\n                &.radio_true_disable::before {content: @fa-circle-thin;color: @color-disabled}\n                \n            }\n            &.switch  {width:@w; height:@h}\n            &.root_open::before{content: @fa-chevron-down;padding-top:@pad-top;padding-left:@pad-left;display: inline-block;}\n            &.root_close::before{content: @fa-folder-open-o;padding-top:@pad-top;padding-left:@pad-left;display: inline-block;}\n            &.roots_open::before{content: @fa-chevron-down;padding-top:@pad-top;padding-left:@pad-left;display: inline-block;}\n            &.roots_close::before{content: @fa-chevron-right;padding-top:@pad-top;padding-left:@pad-left;display: inline-block;}\n            &.center_open::before{content: @fa-chevron-down;padding-top:@pad-top;padding-left:@pad-left;display: inline-block;}\n            &.center_close::before{content: @fa-chevron-right;padding-top:@pad-top;padding-left:@pad-left;display: inline-block;}\n            &.bottom_open::before{content: @fa-chevron-down;padding-top:@pad-top;padding-left:@pad-left;display: inline-block;}\n            &.bottom_close::before{content: @fa-chevron-right;padding-top:@pad-top;padding-left:@pad-left;display: inline-block;}  \n            &.noline_open{}\n            &.noline_close{}\n            &.root_docu{ background:none;}\n            &.roots_docu::before{content: @fa-list-alt;padding-left:@pad-left;display: inline-block;color:@color-normal;}\n            &.center_docu::before{padding-top:@pad-top;padding-left:@pad-left;display: inline-block;color:@color-normal;}\n            &.bottom_docu::before{padding-top:@pad-top;padding-left:@pad-left;display: inline-block;color:@color-normal;}\n            &.noline_docu{ background:none;}\n    \n            &.ico_open::before {content: @fa-folder-open-o;font-family: FontAwesome;padding-top:@pad-top;padding-left:@pad-left;display: inline-block;color:@color-normal;}\n            &.ico_close::before {content: @fa-folder-o;font-family: FontAwesome;padding-top:@pad-top;padding-left:@pad-left;display: inline-block;color:@color-normal;}\n            &.ico_docu::before{content: @fa-list-alt;font-family: FontAwesome;padding-top:@pad-top;padding-left:@pad-left;display: inline-block;color:@color-normal;}\n            \n            &.edit {margin-left:4px; margin-right: -1px;  vertical-align:top; *vertical-align:middle;padding-top:@pad-top;}\n            &.edit::before{content: @fa-pencil-square-o;font-family: FontAwesome;}\n    \n            &.remove {margin-left:4px; margin-right: -1px;  vertical-align:top; *vertical-align:middle;padding-top:@pad-top;}\n            &.remove::before{content: @fa-trash;font-family: FontAwesome;}\n\n    \n            &.add {margin-left:4px; margin-right: -1px; vertical-align:top; *vertical-align:middle;padding-top:@pad-top;}\n            &.add::before{content: @fa-plus;font-family: FontAwesome;}\n\n            &.ico_loading{margin-right:2px; background:url(./img/loading.gif) no-repeat scroll 0 0 transparent; vertical-align:top; *vertical-align:middle}\n        }\n\n    }\n}\n\n\nul.tmpTargetzTree {background-color:#FFE6B0; opacity:0.8; filter:alpha(opacity=80)}\n\n// this is the arrow that moves \nspan.tmpzTreeMove_arrow{width:16px; height:@h; display: inline-block; \n                                padding:0; margin:2px 0 0 1px; border:0 none; position:absolute;\n                                background-color:transparent;  background-attachment: scroll;\n                                 }\nspan.tmpzTreeMove_arrow::before{content: @fa-play;font-family: FontAwesome;color: @color-highlight;\n                                 }\n// outline\n\nul.ztree.zTreeDragUL {margin:0; padding:0; position:absolute; width:auto; height:auto;overflow:hidden; \n             background-color:#cfcfcf; border:1px @color-highlight dotted; opacity:0.8; filter:alpha(opacity=80)}\n.ztreeMask {z-index:10000; background-color:#cfcfcf; opacity:0.0; filter:alpha(opacity=0); position:absolute}\n\n"
  },
  {
    "path": "automatic/static/zTree_v3/css/awesomeStyle/fa.less",
    "content": "@fa-glass: \"\\f000\";\n@fa-music: \"\\f001\";\n@fa-search: \"\\f002\";\n@fa-envelope-o: \"\\f003\";\n@fa-heart: \"\\f004\";\n@fa-star: \"\\f005\";\n@fa-star-o: \"\\f006\";\n@fa-user: \"\\f007\";\n@fa-film: \"\\f008\";\n@fa-th-large: \"\\f009\";\n@fa-th: \"\\f00a\";\n@fa-th-list: \"\\f00b\";\n@fa-check: \"\\f00c\";\n@fa-times: \"\\f00d\";\n@fa-search-plus: \"\\f00e\";\n@fa-search-minus: \"\\f010\";\n@fa-power-off: \"\\f011\";\n@fa-signal: \"\\f012\";\n@fa-cog: \"\\f013\";\n@fa-trash-o: \"\\f014\";\n@fa-home: \"\\f015\";\n@fa-file-o: \"\\f016\";\n@fa-clock-o: \"\\f017\";\n@fa-road: \"\\f018\";\n@fa-download: \"\\f019\";\n@fa-arrow-circle-o-down: \"\\f01a\";\n@fa-arrow-circle-o-up: \"\\f01b\";\n@fa-inbox: \"\\f01c\";\n@fa-play-circle-o: \"\\f01d\";\n@fa-repeat: \"\\f01e\";\n@fa-refresh: \"\\f021\";\n@fa-list-alt: \"\\f022\";\n@fa-lock: \"\\f023\";\n@fa-flag: \"\\f024\";\n@fa-headphones: \"\\f025\";\n@fa-volume-off: \"\\f026\";\n@fa-volume-down: \"\\f027\";\n@fa-volume-up: \"\\f028\";\n@fa-qrcode: \"\\f029\";\n@fa-barcode: \"\\f02a\";\n@fa-tag: \"\\f02b\";\n@fa-tags: \"\\f02c\";\n@fa-book: \"\\f02d\";\n@fa-bookmark: \"\\f02e\";\n@fa-print: \"\\f02f\";\n@fa-camera: \"\\f030\";\n@fa-font: \"\\f031\";\n@fa-bold: \"\\f032\";\n@fa-italic: \"\\f033\";\n@fa-text-height: \"\\f034\";\n@fa-text-width: \"\\f035\";\n@fa-align-left: \"\\f036\";\n@fa-align-center: \"\\f037\";\n@fa-align-right: \"\\f038\";\n@fa-align-justify: \"\\f039\";\n@fa-list: \"\\f03a\";\n@fa-outdent: \"\\f03b\";\n@fa-indent: \"\\f03c\";\n@fa-video-camera: \"\\f03d\";\n@fa-picture-o: \"\\f03e\";\n@fa-pencil: \"\\f040\";\n@fa-map-marker: \"\\f041\";\n@fa-adjust: \"\\f042\";\n@fa-tint: \"\\f043\";\n@fa-pencil-square-o: \"\\f044\";\n@fa-share-square-o: \"\\f045\";\n@fa-check-square-o: \"\\f046\";\n@fa-arrows: \"\\f047\";\n@fa-step-backward: \"\\f048\";\n@fa-fast-backward: \"\\f049\";\n@fa-backward: \"\\f04a\";\n@fa-play: \"\\f04b\";\n@fa-pause: \"\\f04c\";\n@fa-stop: \"\\f04d\";\n@fa-forward: \"\\f04e\";\n@fa-fast-forward: \"\\f050\";\n@fa-step-forward: \"\\f051\";\n@fa-eject: \"\\f052\";\n@fa-chevron-left: \"\\f053\";\n@fa-chevron-right: \"\\f054\";\n@fa-plus-circle: \"\\f055\";\n@fa-minus-circle: \"\\f056\";\n@fa-times-circle: \"\\f057\";\n@fa-check-circle: \"\\f058\";\n@fa-question-circle: \"\\f059\";\n@fa-info-circle: \"\\f05a\";\n@fa-crosshairs: \"\\f05b\";\n@fa-times-circle-o: \"\\f05c\";\n@fa-check-circle-o: \"\\f05d\";\n@fa-ban: \"\\f05e\";\n@fa-arrow-left: \"\\f060\";\n@fa-arrow-right: \"\\f061\";\n@fa-arrow-up: \"\\f062\";\n@fa-arrow-down: \"\\f063\";\n@fa-share: \"\\f064\";\n@fa-expand: \"\\f065\";\n@fa-compress: \"\\f066\";\n@fa-plus: \"\\f067\";\n@fa-minus: \"\\f068\";\n@fa-asterisk: \"\\f069\";\n@fa-exclamation-circle: \"\\f06a\";\n@fa-gift: \"\\f06b\";\n@fa-leaf: \"\\f06c\";\n@fa-fire: \"\\f06d\";\n@fa-eye: \"\\f06e\";\n@fa-eye-slash: \"\\f070\";\n@fa-exclamation-triangle: \"\\f071\";\n@fa-plane: \"\\f072\";\n@fa-calendar: \"\\f073\";\n@fa-random: \"\\f074\";\n@fa-comment: \"\\f075\";\n@fa-magnet: \"\\f076\";\n@fa-chevron-up: \"\\f077\";\n@fa-chevron-down: \"\\f078\";\n@fa-retweet: \"\\f079\";\n@fa-shopping-cart: \"\\f07a\";\n@fa-folder: \"\\f07b\";\n@fa-folder-open: \"\\f07c\";\n@fa-arrows-v: \"\\f07d\";\n@fa-arrows-h: \"\\f07e\";\n@fa-bar-chart: \"\\f080\";\n@fa-twitter-square: \"\\f081\";\n@fa-facebook-square: \"\\f082\";\n@fa-camera-retro: \"\\f083\";\n@fa-key: \"\\f084\";\n@fa-cogs: \"\\f085\";\n@fa-comments: \"\\f086\";\n@fa-thumbs-o-up: \"\\f087\";\n@fa-thumbs-o-down: \"\\f088\";\n@fa-star-half: \"\\f089\";\n@fa-heart-o: \"\\f08a\";\n@fa-sign-out: \"\\f08b\";\n@fa-linkedin-square: \"\\f08c\";\n@fa-thumb-tack: \"\\f08d\";\n@fa-external-link: \"\\f08e\";\n@fa-sign-in: \"\\f090\";\n@fa-trophy: \"\\f091\";\n@fa-github-square: \"\\f092\";\n@fa-upload: \"\\f093\";\n@fa-lemon-o: \"\\f094\";\n@fa-phone: \"\\f095\";\n@fa-square-o: \"\\f096\";\n@fa-bookmark-o: \"\\f097\";\n@fa-phone-square: \"\\f098\";\n@fa-twitter: \"\\f099\";\n@fa-facebook: \"\\f09a\";\n@fa-github: \"\\f09b\";\n@fa-unlock: \"\\f09c\";\n@fa-credit-card: \"\\f09d\";\n@fa-rss: \"\\f09e\";\n@fa-hdd-o: \"\\f0a0\";\n@fa-bullhorn: \"\\f0a1\";\n@fa-bell: \"\\f0f3\";\n@fa-certificate: \"\\f0a3\";\n@fa-hand-o-right: \"\\f0a4\";\n@fa-hand-o-left: \"\\f0a5\";\n@fa-hand-o-up: \"\\f0a6\";\n@fa-hand-o-down: \"\\f0a7\";\n@fa-arrow-circle-left: \"\\f0a8\";\n@fa-arrow-circle-right: \"\\f0a9\";\n@fa-arrow-circle-up: \"\\f0aa\";\n@fa-arrow-circle-down: \"\\f0ab\";\n@fa-globe: \"\\f0ac\";\n@fa-wrench: \"\\f0ad\";\n@fa-tasks: \"\\f0ae\";\n@fa-filter: \"\\f0b0\";\n@fa-briefcase: \"\\f0b1\";\n@fa-arrows-alt: \"\\f0b2\";\n@fa-users: \"\\f0c0\";\n@fa-link: \"\\f0c1\";\n@fa-cloud: \"\\f0c2\";\n@fa-flask: \"\\f0c3\";\n@fa-scissors: \"\\f0c4\";\n@fa-files-o: \"\\f0c5\";\n@fa-paperclip: \"\\f0c6\";\n@fa-floppy-o: \"\\f0c7\";\n@fa-square: \"\\f0c8\";\n@fa-bars: \"\\f0c9\";\n@fa-list-ul: \"\\f0ca\";\n@fa-list-ol: \"\\f0cb\";\n@fa-strikethrough: \"\\f0cc\";\n@fa-underline: \"\\f0cd\";\n@fa-table: \"\\f0ce\";\n@fa-magic: \"\\f0d0\";\n@fa-truck: \"\\f0d1\";\n@fa-pinterest: \"\\f0d2\";\n@fa-pinterest-square: \"\\f0d3\";\n@fa-google-plus-square: \"\\f0d4\";\n@fa-google-plus: \"\\f0d5\";\n@fa-money: \"\\f0d6\";\n@fa-caret-down: \"\\f0d7\";\n@fa-caret-up: \"\\f0d8\";\n@fa-caret-left: \"\\f0d9\";\n@fa-caret-right: \"\\f0da\";\n@fa-columns: \"\\f0db\";\n@fa-sort: \"\\f0dc\";\n@fa-sort-desc: \"\\f0dd\";\n@fa-sort-asc: \"\\f0de\";\n@fa-envelope: \"\\f0e0\";\n@fa-linkedin: \"\\f0e1\";\n@fa-undo: \"\\f0e2\";\n@fa-gavel: \"\\f0e3\";\n@fa-tachometer: \"\\f0e4\";\n@fa-comment-o: \"\\f0e5\";\n@fa-comments-o: \"\\f0e6\";\n@fa-bolt: \"\\f0e7\";\n@fa-sitemap: \"\\f0e8\";\n@fa-umbrella: \"\\f0e9\";\n@fa-clipboard: \"\\f0ea\";\n@fa-lightbulb-o: \"\\f0eb\";\n@fa-exchange: \"\\f0ec\";\n@fa-cloud-download: \"\\f0ed\";\n@fa-cloud-upload: \"\\f0ee\";\n@fa-user-md: \"\\f0f0\";\n@fa-stethoscope: \"\\f0f1\";\n@fa-suitcase: \"\\f0f2\";\n@fa-bell-o: \"\\f0a2\";\n@fa-coffee: \"\\f0f4\";\n@fa-cutlery: \"\\f0f5\";\n@fa-file-text-o: \"\\f0f6\";\n@fa-building-o: \"\\f0f7\";\n@fa-hospital-o: \"\\f0f8\";\n@fa-ambulance: \"\\f0f9\";\n@fa-medkit: \"\\f0fa\";\n@fa-fighter-jet: \"\\f0fb\";\n@fa-beer: \"\\f0fc\";\n@fa-h-square: \"\\f0fd\";\n@fa-plus-square: \"\\f0fe\";\n@fa-angle-double-left: \"\\f100\";\n@fa-angle-double-right: \"\\f101\";\n@fa-angle-double-up: \"\\f102\";\n@fa-angle-double-down: \"\\f103\";\n@fa-angle-left: \"\\f104\";\n@fa-angle-right: \"\\f105\";\n@fa-angle-up: \"\\f106\";\n@fa-angle-down: \"\\f107\";\n@fa-desktop: \"\\f108\";\n@fa-laptop: \"\\f109\";\n@fa-tablet: \"\\f10a\";\n@fa-mobile: \"\\f10b\";\n@fa-circle-o: \"\\f10c\";\n@fa-quote-left: \"\\f10d\";\n@fa-quote-right: \"\\f10e\";\n@fa-spinner: \"\\f110\";\n@fa-circle: \"\\f111\";\n@fa-reply: \"\\f112\";\n@fa-github-alt: \"\\f113\";\n@fa-folder-o: \"\\f114\";\n@fa-folder-open-o: \"\\f115\";\n@fa-smile-o: \"\\f118\";\n@fa-frown-o: \"\\f119\";\n@fa-meh-o: \"\\f11a\";\n@fa-gamepad: \"\\f11b\";\n@fa-keyboard-o: \"\\f11c\";\n@fa-flag-o: \"\\f11d\";\n@fa-flag-checkered: \"\\f11e\";\n@fa-terminal: \"\\f120\";\n@fa-code: \"\\f121\";\n@fa-reply-all: \"\\f122\";\n@fa-star-half-o: \"\\f123\";\n@fa-location-arrow: \"\\f124\";\n@fa-crop: \"\\f125\";\n@fa-code-fork: \"\\f126\";\n@fa-chain-broken: \"\\f127\";\n@fa-question: \"\\f128\";\n@fa-info: \"\\f129\";\n@fa-exclamation: \"\\f12a\";\n@fa-superscript: \"\\f12b\";\n@fa-subscript: \"\\f12c\";\n@fa-eraser: \"\\f12d\";\n@fa-puzzle-piece: \"\\f12e\";\n@fa-microphone: \"\\f130\";\n@fa-microphone-slash: \"\\f131\";\n@fa-shield: \"\\f132\";\n@fa-calendar-o: \"\\f133\";\n@fa-fire-extinguisher: \"\\f134\";\n@fa-rocket: \"\\f135\";\n@fa-maxcdn: \"\\f136\";\n@fa-chevron-circle-left: \"\\f137\";\n@fa-chevron-circle-right: \"\\f138\";\n@fa-chevron-circle-up: \"\\f139\";\n@fa-chevron-circle-down: \"\\f13a\";\n@fa-html5: \"\\f13b\";\n@fa-css3: \"\\f13c\";\n@fa-anchor: \"\\f13d\";\n@fa-unlock-alt: \"\\f13e\";\n@fa-bullseye: \"\\f140\";\n@fa-ellipsis-h: \"\\f141\";\n@fa-ellipsis-v: \"\\f142\";\n@fa-rss-square: \"\\f143\";\n@fa-play-circle: \"\\f144\";\n@fa-ticket: \"\\f145\";\n@fa-minus-square: \"\\f146\";\n@fa-minus-square-o: \"\\f147\";\n@fa-level-up: \"\\f148\";\n@fa-level-down: \"\\f149\";\n@fa-check-square: \"\\f14a\";\n@fa-pencil-square: \"\\f14b\";\n@fa-external-link-square: \"\\f14c\";\n@fa-share-square: \"\\f14d\";\n@fa-compass: \"\\f14e\";\n@fa-caret-square-o-down: \"\\f150\";\n@fa-caret-square-o-up: \"\\f151\";\n@fa-caret-square-o-right: \"\\f152\";\n@fa-eur: \"\\f153\";\n@fa-gbp: \"\\f154\";\n@fa-usd: \"\\f155\";\n@fa-inr: \"\\f156\";\n@fa-jpy: \"\\f157\";\n@fa-rub: \"\\f158\";\n@fa-krw: \"\\f159\";\n@fa-btc: \"\\f15a\";\n@fa-file: \"\\f15b\";\n@fa-file-text: \"\\f15c\";\n@fa-sort-alpha-asc: \"\\f15d\";\n@fa-sort-alpha-desc: \"\\f15e\";\n@fa-sort-amount-asc: \"\\f160\";\n@fa-sort-amount-desc: \"\\f161\";\n@fa-sort-numeric-asc: \"\\f162\";\n@fa-sort-numeric-desc: \"\\f163\";\n@fa-thumbs-up: \"\\f164\";\n@fa-thumbs-down: \"\\f165\";\n@fa-youtube-square: \"\\f166\";\n@fa-youtube: \"\\f167\";\n@fa-xing: \"\\f168\";\n@fa-xing-square: \"\\f169\";\n@fa-youtube-play: \"\\f16a\";\n@fa-dropbox: \"\\f16b\";\n@fa-stack-overflow: \"\\f16c\";\n@fa-instagram: \"\\f16d\";\n@fa-flickr: \"\\f16e\";\n@fa-adn: \"\\f170\";\n@fa-bitbucket: \"\\f171\";\n@fa-bitbucket-square: \"\\f172\";\n@fa-tumblr: \"\\f173\";\n@fa-tumblr-square: \"\\f174\";\n@fa-long-arrow-down: \"\\f175\";\n@fa-long-arrow-up: \"\\f176\";\n@fa-long-arrow-left: \"\\f177\";\n@fa-long-arrow-right: \"\\f178\";\n@fa-apple: \"\\f179\";\n@fa-windows: \"\\f17a\";\n@fa-android: \"\\f17b\";\n@fa-linux: \"\\f17c\";\n@fa-dribbble: \"\\f17d\";\n@fa-skype: \"\\f17e\";\n@fa-foursquare: \"\\f180\";\n@fa-trello: \"\\f181\";\n@fa-female: \"\\f182\";\n@fa-male: \"\\f183\";\n@fa-gittip: \"\\f184\";\n@fa-sun-o: \"\\f185\";\n@fa-moon-o: \"\\f186\";\n@fa-archive: \"\\f187\";\n@fa-bug: \"\\f188\";\n@fa-vk: \"\\f189\";\n@fa-weibo: \"\\f18a\";\n@fa-renren: \"\\f18b\";\n@fa-pagelines: \"\\f18c\";\n@fa-stack-exchange: \"\\f18d\";\n@fa-arrow-circle-o-right: \"\\f18e\";\n@fa-arrow-circle-o-left: \"\\f190\";\n@fa-caret-square-o-left: \"\\f191\";\n@fa-dot-circle-o: \"\\f192\";\n@fa-wheelchair: \"\\f193\";\n@fa-vimeo-square: \"\\f194\";\n@fa-try: \"\\f195\";\n@fa-plus-square-o: \"\\f196\";\n@fa-space-shuttle: \"\\f197\";\n@fa-slack: \"\\f198\";\n@fa-envelope-square: \"\\f199\";\n@fa-wordpress: \"\\f19a\";\n@fa-openid: \"\\f19b\";\n@fa-university: \"\\f19c\";\n@fa-graduation-cap: \"\\f19d\";\n@fa-yahoo: \"\\f19e\";\n@fa-google: \"\\f1a0\";\n@fa-reddit: \"\\f1a1\";\n@fa-reddit-square: \"\\f1a2\";\n@fa-stumbleupon-circle: \"\\f1a3\";\n@fa-stumbleupon: \"\\f1a4\";\n@fa-delicious: \"\\f1a5\";\n@fa-digg: \"\\f1a6\";\n@fa-pied-piper: \"\\f1a7\";\n@fa-pied-piper-alt: \"\\f1a8\";\n@fa-drupal: \"\\f1a9\";\n@fa-joomla: \"\\f1aa\";\n@fa-language: \"\\f1ab\";\n@fa-fax: \"\\f1ac\";\n@fa-building: \"\\f1ad\";\n@fa-child: \"\\f1ae\";\n@fa-paw: \"\\f1b0\";\n@fa-spoon: \"\\f1b1\";\n@fa-cube: \"\\f1b2\";\n@fa-cubes: \"\\f1b3\";\n@fa-behance: \"\\f1b4\";\n@fa-behance-square: \"\\f1b5\";\n@fa-steam: \"\\f1b6\";\n@fa-steam-square: \"\\f1b7\";\n@fa-recycle: \"\\f1b8\";\n@fa-car: \"\\f1b9\";\n@fa-taxi: \"\\f1ba\";\n@fa-tree: \"\\f1bb\";\n@fa-spotify: \"\\f1bc\";\n@fa-deviantart: \"\\f1bd\";\n@fa-soundcloud: \"\\f1be\";\n@fa-database: \"\\f1c0\";\n@fa-file-pdf-o: \"\\f1c1\";\n@fa-file-word-o: \"\\f1c2\";\n@fa-file-excel-o: \"\\f1c3\";\n@fa-file-powerpoint-o: \"\\f1c4\";\n@fa-file-image-o: \"\\f1c5\";\n@fa-file-archive-o: \"\\f1c6\";\n@fa-file-audio-o: \"\\f1c7\";\n@fa-file-video-o: \"\\f1c8\";\n@fa-file-code-o: \"\\f1c9\";\n@fa-vine: \"\\f1ca\";\n@fa-codepen: \"\\f1cb\";\n@fa-jsfiddle: \"\\f1cc\";\n@fa-life-ring: \"\\f1cd\";\n@fa-circle-o-notch: \"\\f1ce\";\n@fa-rebel: \"\\f1d0\";\n@fa-empire: \"\\f1d1\";\n@fa-git-square: \"\\f1d2\";\n@fa-git: \"\\f1d3\";\n@fa-hacker-news: \"\\f1d4\";\n@fa-tencent-weibo: \"\\f1d5\";\n@fa-qq: \"\\f1d6\";\n@fa-weixin: \"\\f1d7\";\n@fa-paper-plane: \"\\f1d8\";\n@fa-paper-plane-o: \"\\f1d9\";\n@fa-history: \"\\f1da\";\n@fa-circle-thin: \"\\f1db\";\n@fa-header: \"\\f1dc\";\n@fa-paragraph: \"\\f1dd\";\n@fa-sliders: \"\\f1de\";\n@fa-share-alt: \"\\f1e0\";\n@fa-share-alt-square: \"\\f1e1\";\n@fa-bomb: \"\\f1e2\";\n@fa-futbol-o: \"\\f1e3\";\n@fa-tty: \"\\f1e4\";\n@fa-binoculars: \"\\f1e5\";\n@fa-plug: \"\\f1e6\";\n@fa-slideshare: \"\\f1e7\";\n@fa-twitch: \"\\f1e8\";\n@fa-yelp: \"\\f1e9\";\n@fa-newspaper-o: \"\\f1ea\";\n@fa-wifi: \"\\f1eb\";\n@fa-calculator: \"\\f1ec\";\n@fa-paypal: \"\\f1ed\";\n@fa-google-wallet: \"\\f1ee\";\n@fa-cc-visa: \"\\f1f0\";\n@fa-cc-mastercard: \"\\f1f1\";\n@fa-cc-discover: \"\\f1f2\";\n@fa-cc-amex: \"\\f1f3\";\n@fa-cc-paypal: \"\\f1f4\";\n@fa-cc-stripe: \"\\f1f5\";\n@fa-bell-slash: \"\\f1f6\";\n@fa-bell-slash-o: \"\\f1f7\";\n@fa-trash: \"\\f1f8\";\n@fa-copyright: \"\\f1f9\";\n@fa-at: \"\\f1fa\";\n@fa-eyedropper: \"\\f1fb\";\n@fa-paint-brush: \"\\f1fc\";\n@fa-birthday-cake: \"\\f1fd\";\n@fa-area-chart: \"\\f1fe\";\n@fa-pie-chart: \"\\f200\";\n@fa-line-chart: \"\\f201\";\n@fa-lastfm: \"\\f202\";\n@fa-lastfm-square: \"\\f203\";\n@fa-toggle-off: \"\\f204\";\n@fa-toggle-on: \"\\f205\";\n@fa-bicycle: \"\\f206\";\n@fa-bus: \"\\f207\";\n@fa-ioxhost: \"\\f208\";\n@fa-angellist: \"\\f209\";\n@fa-cc: \"\\f20a\";\n@fa-ils: \"\\f20b\";\n@fa-meanpath: \"\\f20c\";\n\n"
  },
  {
    "path": "automatic/static/zTree_v3/css/demo.css",
    "content": "html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, font, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td {\n\tmargin: 0;padding: 0;border: 0;outline: 0;font-weight: inherit;font-style: inherit;font-size: 100%;font-family: inherit;vertical-align: baseline;}\nbody {color: #2f332a;font: 15px/21px Arial, Helvetica, simsun, sans-serif;background: #f0f6e4 \\9;}\nh1, h2, h3, h4, h5, h6 {color: #2f332a;font-weight: bold;font-family: Helvetica, Arial, sans-serif;padding-bottom: 5px;}\nh1 {font-size: 24px;line-height: 34px;text-align: center;}\nh2 {font-size: 14px;line-height: 24px;padding-top: 5px;}\nh6 {font-weight: normal;font-size: 12px;letter-spacing: 1px;line-height: 24px;text-align: center;}\na {color:#3C6E31;text-decoration: underline;}\na:hover {background-color:#3C6E31;color:white;}\ninput.radio {margin: 0 2px 0 8px;}\ninput.radio.first {margin-left:0;}\ninput.empty {color: lightgray;}\ncode {color: #2f332a;}\n.highlight_red {color:#A60000;}\n.highlight_green {color:#A7F43D;}\nli {list-style: circle;font-size: 12px;}\nli.title {list-style: none;}\nul.list {margin-left: 17px;}\n\ndiv.content_wrap {width: 600px;height:380px;}\ndiv.content_wrap div.left{float: left;width: 250px;}\ndiv.content_wrap div.right{float: right;width: 340px;}\ndiv.zTreeDemoBackground {width:250px;height:362px;text-align:left;}\n\nul.ztree {margin-top: 10px;border: 1px solid #617775;background: #f0f6e4;width:220px;height:360px;overflow-y:scroll;overflow-x:auto;}\nul.log {border: 1px solid #617775;background: #f0f6e4;width:300px;height:170px;overflow: hidden;}\nul.log.small {height:45px;}\nul.log li {color: #666666;list-style: none;padding-left: 10px;}\nul.log li.dark {background-color: #E3E3E3;}\n\n/* ruler */\ndiv.ruler {height:20px; width:220px; background-color:#f0f6e4;border: 1px solid #333; margin-bottom: 5px; cursor: pointer}\ndiv.ruler div.cursor {height:20px; width:30px; background-color:#3C6E31; color:white; text-align: right; padding-right: 5px; cursor: pointer}"
  },
  {
    "path": "automatic/static/zTree_v3/css/metroStyle/metroStyle.css",
    "content": "/*-------------------------------------\nzTree Style\n\nversion:    3.4\nauthor:     Hunter.z\nemail:      hunter.z@263.net\nwebsite:    http://code.google.com/p/jquerytree/\n\n-------------------------------------*/\n\n.ztree * {padding:0; margin:0; font-size:12px; font-family: Verdana, Arial, Helvetica, AppleGothic, sans-serif}\n.ztree {margin:0; padding:5px; color:#333}\n.ztree li{padding:0; margin:0; list-style:none; line-height:17px; text-align:left; white-space:nowrap; outline:0}\n.ztree li ul{ margin:0; padding:0 0 0 18px}\n.ztree li ul.line{ background:url(./img/line_conn.png) 0 0 repeat-y;}\n\n.ztree li a {padding-right:3px; margin:0; cursor:pointer; height:21px; color:#333; background-color: transparent; text-decoration:none; vertical-align:top; display: inline-block}\n.ztree li a:hover {text-decoration:underline}\n.ztree li a.curSelectedNode {padding-top:0px; background-color:#e5e5e5; color:black; height:21px; opacity:0.8;}\n.ztree li a.curSelectedNode_Edit {padding-top:0px; background-color:#e5e5e5; color:black; height:21px; border:1px #666 solid; opacity:0.8;}\n.ztree li a.tmpTargetNode_inner {padding-top:0px; background-color:#aaa; color:white; height:21px; border:1px #666 solid;\n  opacity:0.8; filter:alpha(opacity=80)}\n.ztree li a.tmpTargetNode_prev {}\n.ztree li a.tmpTargetNode_next {}\n.ztree li a input.rename {height:14px; width:80px; padding:0; margin:0;\n  font-size:12px; border:1px #585956 solid; *border:0px}\n.ztree li span {line-height:21px; margin-right:2px}\n.ztree li span.button {line-height:0; margin:0; padding: 0; width:21px; height:21px; display: inline-block; vertical-align:middle;\n  border:0 none; cursor: pointer;outline:none;\n  background-color:transparent; background-repeat:no-repeat; background-attachment: scroll;\n  background-image:url(\"./img/metro.png\"); *background-image:url(\"./img/metro.gif\")}\n\n.ztree li span.button.chk {width:13px; height:13px; margin:0 2px; cursor: auto}\n.ztree li span.button.chk.checkbox_false_full {background-position: -5px -5px;}\n.ztree li span.button.chk.checkbox_false_full_focus {background-position: -5px -26px;}\n.ztree li span.button.chk.checkbox_false_part {background-position: -5px -48px;}\n.ztree li span.button.chk.checkbox_false_part_focus {background-position: -5px -68px;}\n.ztree li span.button.chk.checkbox_false_disable {background-position: -5px -89px;}\n.ztree li span.button.chk.checkbox_true_full {background-position: -26px -5px;}\n.ztree li span.button.chk.checkbox_true_full_focus {background-position: -26px -26px;}\n.ztree li span.button.chk.checkbox_true_part {background-position: -26px -48px;}\n.ztree li span.button.chk.checkbox_true_part_focus {background-position: -26px -68px;}\n.ztree li span.button.chk.checkbox_true_disable {background-position: -26px -89px;}\n.ztree li span.button.chk.radio_false_full {background-position: -47px -5px;}\n.ztree li span.button.chk.radio_false_full_focus {background-position: -47px -26px;}\n.ztree li span.button.chk.radio_false_part {background-position: -47px -47px;}\n.ztree li span.button.chk.radio_false_part_focus {background-position: -47px -68px;}\n.ztree li span.button.chk.radio_false_disable {background-position: -47px -89px;}\n.ztree li span.button.chk.radio_true_full {background-position: -68px -5px;}\n.ztree li span.button.chk.radio_true_full_focus {background-position: -68px -26px;}\n.ztree li span.button.chk.radio_true_part {background-position: -68px -47px;}\n.ztree li span.button.chk.radio_true_part_focus {background-position: -68px -68px;}\n.ztree li span.button.chk.radio_true_disable {background-position: -68px -89px;}\n\n.ztree li span.button.switch {width:21px; height:21px}\n.ztree li span.button.root_open{background-position:-105px -63px}\n.ztree li span.button.root_close{background-position:-126px -63px}\n.ztree li span.button.roots_open{background-position: -105px 0;}\n.ztree li span.button.roots_close{background-position: -126px 0;}\n.ztree li span.button.center_open{background-position: -105px -21px;}\n.ztree li span.button.center_close{background-position: -126px -21px;}\n.ztree li span.button.bottom_open{background-position: -105px -42px;}\n.ztree li span.button.bottom_close{background-position: -126px -42px;}\n.ztree li span.button.noline_open{background-position: -105px -84px;}\n.ztree li span.button.noline_close{background-position: -126px -84px;}\n.ztree li span.button.root_docu{ background:none;}\n.ztree li span.button.roots_docu{background-position: -84px 0;}\n.ztree li span.button.center_docu{background-position: -84px -21px;}\n.ztree li span.button.bottom_docu{background-position: -84px -42px;}\n.ztree li span.button.noline_docu{ background:none;}\n\n.ztree li span.button.ico_open{margin-right:2px; background-position: -147px -21px; vertical-align:top; *vertical-align:middle}\n.ztree li span.button.ico_close{margin-right:2px; margin-right:2px; background-position: -147px 0; vertical-align:top; *vertical-align:middle}\n.ztree li span.button.ico_docu{margin-right:2px; background-position: -147px -42px; vertical-align:top; *vertical-align:middle}\n.ztree li span.button.edit {margin-left:2px; margin-right: -1px; background-position: -189px -21px; vertical-align:top; *vertical-align:middle}\n.ztree li span.button.edit:hover {\n  background-position: -168px -21px;\n}\n.ztree li span.button.remove {margin-left:2px; margin-right: -1px; background-position: -189px -42px; vertical-align:top; *vertical-align:middle}\n.ztree li span.button.remove:hover {\n  background-position: -168px -42px;\n}\n.ztree li span.button.add {margin-left:2px; margin-right: -1px; background-position: -189px 0; vertical-align:top; *vertical-align:middle}\n.ztree li span.button.add:hover {\n  background-position: -168px 0;\n}\n.ztree li span.button.ico_loading{margin-right:2px; background:url(./img/loading.gif) no-repeat scroll 0 0 transparent; vertical-align:top; *vertical-align:middle}\n\nul.tmpTargetzTree {background-color:#FFE6B0; opacity:0.8; filter:alpha(opacity=80)}\n\nspan.tmpzTreeMove_arrow {width:16px; height:21px; display: inline-block; padding:0; margin:2px 0 0 1px; border:0 none; position:absolute;\n    background-color:transparent; background-repeat:no-repeat; background-attachment: scroll;\n    background-position:-168px -84px; background-image:url(\"./img/metro.png\"); *background-image:url(\"./img/metro.gif\")}\n\nul.ztree.zTreeDragUL {margin:0; padding:0; position:absolute; width:auto; height:auto;overflow:hidden; background-color:#cfcfcf; border:1px #00B83F dotted; opacity:0.8; filter:alpha(opacity=80)}\n.ztreeMask {z-index:10000; background-color:#cfcfcf; opacity:0.0; filter:alpha(opacity=0); position:absolute}\n"
  },
  {
    "path": "automatic/static/zTree_v3/css/zTreeStyle/zTreeStyle.css",
    "content": "/*-------------------------------------\nzTree Style\n\nversion:\t3.5.19\nauthor:\t\tHunter.z\nemail:\t\thunter.z@263.net\nwebsite:\thttp://code.google.com/p/jquerytree/\n\n-------------------------------------*/\n\n.ztree * {padding:0; margin:0; font-size:12px; font-family: Verdana, Arial, Helvetica, AppleGothic, sans-serif}\n.ztree {margin:0; padding:5px; color:#333}\n.ztree li{padding:0; margin:0; list-style:none; line-height:14px; text-align:left; white-space:nowrap; outline:0}\n.ztree li ul{ margin:0; padding:0 0 0 18px}\n.ztree li ul.line{ background:url(./img/line_conn.gif) 0 0 repeat-y;}\n\n.ztree li a {padding:1px 3px 0 0; margin:0; cursor:pointer; height:17px; color:#333; background-color: transparent;\n\ttext-decoration:none; vertical-align:top; display: inline-block}\n.ztree li a:hover {text-decoration:underline}\n.ztree li a.curSelectedNode {padding-top:0px; background-color:#FFE6B0; color:black; height:16px; border:1px #FFB951 solid; opacity:0.8;}\n.ztree li a.curSelectedNode_Edit {padding-top:0px; background-color:#FFE6B0; color:black; height:16px; border:1px #FFB951 solid; opacity:0.8;}\n.ztree li a.tmpTargetNode_inner {padding-top:0px; background-color:#316AC5; color:white; height:16px; border:1px #316AC5 solid;\n\topacity:0.8; filter:alpha(opacity=80)}\n.ztree li a.tmpTargetNode_prev {}\n.ztree li a.tmpTargetNode_next {}\n.ztree li a input.rename {height:14px; width:80px; padding:0; margin:0;\n\tfont-size:12px; border:1px #7EC4CC solid; *border:0px}\n.ztree li span {line-height:16px; margin-right:2px}\n.ztree li span.button {line-height:0; margin:0; width:16px; height:16px; display: inline-block; vertical-align:middle;\n\tborder:0 none; cursor: pointer;outline:none;\n\tbackground-color:transparent; background-repeat:no-repeat; background-attachment: scroll;\n\tbackground-image:url(\"./img/zTreeStandard.png\"); *background-image:url(\"./img/zTreeStandard.gif\")}\n\n.ztree li span.button.chk {width:13px; height:13px; margin:0 3px 0 0; cursor: auto}\n.ztree li span.button.chk.checkbox_false_full {background-position:0 0}\n.ztree li span.button.chk.checkbox_false_full_focus {background-position:0 -14px}\n.ztree li span.button.chk.checkbox_false_part {background-position:0 -28px}\n.ztree li span.button.chk.checkbox_false_part_focus {background-position:0 -42px}\n.ztree li span.button.chk.checkbox_false_disable {background-position:0 -56px}\n.ztree li span.button.chk.checkbox_true_full {background-position:-14px 0}\n.ztree li span.button.chk.checkbox_true_full_focus {background-position:-14px -14px}\n.ztree li span.button.chk.checkbox_true_part {background-position:-14px -28px}\n.ztree li span.button.chk.checkbox_true_part_focus {background-position:-14px -42px}\n.ztree li span.button.chk.checkbox_true_disable {background-position:-14px -56px}\n.ztree li span.button.chk.radio_false_full {background-position:-28px 0}\n.ztree li span.button.chk.radio_false_full_focus {background-position:-28px -14px}\n.ztree li span.button.chk.radio_false_part {background-position:-28px -28px}\n.ztree li span.button.chk.radio_false_part_focus {background-position:-28px -42px}\n.ztree li span.button.chk.radio_false_disable {background-position:-28px -56px}\n.ztree li span.button.chk.radio_true_full {background-position:-42px 0}\n.ztree li span.button.chk.radio_true_full_focus {background-position:-42px -14px}\n.ztree li span.button.chk.radio_true_part {background-position:-42px -28px}\n.ztree li span.button.chk.radio_true_part_focus {background-position:-42px -42px}\n.ztree li span.button.chk.radio_true_disable {background-position:-42px -56px}\n\n.ztree li span.button.switch {width:18px; height:18px}\n.ztree li span.button.root_open{background-position:-92px -54px}\n.ztree li span.button.root_close{background-position:-74px -54px}\n.ztree li span.button.roots_open{background-position:-92px 0}\n.ztree li span.button.roots_close{background-position:-74px 0}\n.ztree li span.button.center_open{background-position:-92px -18px}\n.ztree li span.button.center_close{background-position:-74px -18px}\n.ztree li span.button.bottom_open{background-position:-92px -36px}\n.ztree li span.button.bottom_close{background-position:-74px -36px}\n.ztree li span.button.noline_open{background-position:-92px -72px}\n.ztree li span.button.noline_close{background-position:-74px -72px}\n.ztree li span.button.root_docu{ background:none;}\n.ztree li span.button.roots_docu{background-position:-56px 0}\n.ztree li span.button.center_docu{background-position:-56px -18px}\n.ztree li span.button.bottom_docu{background-position:-56px -36px}\n.ztree li span.button.noline_docu{ background:none;}\n\n.ztree li span.button.ico_open{margin-right:2px; background-position:-110px -16px; vertical-align:top; *vertical-align:middle}\n.ztree li span.button.ico_close{margin-right:2px; background-position:-110px 0; vertical-align:top; *vertical-align:middle}\n.ztree li span.button.ico_docu{margin-right:2px; background-position:-110px -32px; vertical-align:top; *vertical-align:middle}\n.ztree li span.button.edit {margin-right:2px; background-position:-110px -48px; vertical-align:top; *vertical-align:middle}\n.ztree li span.button.remove {margin-right:2px; background-position:-110px -64px; vertical-align:top; *vertical-align:middle}\n\n.ztree li span.button.ico_loading{margin-right:2px; background:url(./img/loading.gif) no-repeat scroll 0 0 transparent; vertical-align:top; *vertical-align:middle}\n\nul.tmpTargetzTree {background-color:#FFE6B0; opacity:0.8; filter:alpha(opacity=80)}\n\nspan.tmpzTreeMove_arrow {width:16px; height:16px; display: inline-block; padding:0; margin:2px 0 0 1px; border:0 none; position:absolute;\n\tbackground-color:transparent; background-repeat:no-repeat; background-attachment: scroll;\n\tbackground-position:-110px -80px; background-image:url(\"./img/zTreeStandard.png\"); *background-image:url(\"./img/zTreeStandard.gif\")}\n\nul.ztree.zTreeDragUL {margin:0; padding:0; position:absolute; width:auto; height:auto;overflow:hidden; background-color:#cfcfcf; border:1px #00B83F dotted; opacity:0.8; filter:alpha(opacity=80)}\n.zTreeMask {z-index:10000; background-color:#cfcfcf; opacity:0.0; filter:alpha(opacity=0); position:absolute}\n\n/* level style*/\n/*.ztree li span.button.level0 {\n\tdisplay:none;\n}\n.ztree li ul.level0 {\n\tpadding:0;\n\tbackground:none;\n}*/"
  },
  {
    "path": "automatic/static/zTree_v3/js/jquery.ztree.all.js",
    "content": "\n/*\n * JQuery zTree core v3.5.25\n * http://zTree.me/\n *\n * Copyright (c) 2010 Hunter.z\n *\n * Licensed same as jquery - MIT License\n * http://www.opensource.org/licenses/mit-license.php\n *\n * email: hunter.z@263.net\n * Date: 2016-09-27\n */\n(function($){\n\tvar settings = {}, roots = {}, caches = {},\n\t//default consts of core\n\t_consts = {\n\t\tclassName: {\n\t\t\tBUTTON: \"button\",\n\t\t\tLEVEL: \"level\",\n\t\t\tICO_LOADING: \"ico_loading\",\n\t\t\tSWITCH: \"switch\",\n\t\t\tNAME: 'node_name'\n\t\t},\n\t\tevent: {\n\t\t\tNODECREATED: \"ztree_nodeCreated\",\n\t\t\tCLICK: \"ztree_click\",\n\t\t\tEXPAND: \"ztree_expand\",\n\t\t\tCOLLAPSE: \"ztree_collapse\",\n\t\t\tASYNC_SUCCESS: \"ztree_async_success\",\n\t\t\tASYNC_ERROR: \"ztree_async_error\",\n\t\t\tREMOVE: \"ztree_remove\",\n\t\t\tSELECTED: \"ztree_selected\",\n\t\t\tUNSELECTED: \"ztree_unselected\"\n\t\t},\n\t\tid: {\n\t\t\tA: \"_a\",\n\t\t\tICON: \"_ico\",\n\t\t\tSPAN: \"_span\",\n\t\t\tSWITCH: \"_switch\",\n\t\t\tUL: \"_ul\"\n\t\t},\n\t\tline: {\n\t\t\tROOT: \"root\",\n\t\t\tROOTS: \"roots\",\n\t\t\tCENTER: \"center\",\n\t\t\tBOTTOM: \"bottom\",\n\t\t\tNOLINE: \"noline\",\n\t\t\tLINE: \"line\"\n\t\t},\n\t\tfolder: {\n\t\t\tOPEN: \"open\",\n\t\t\tCLOSE: \"close\",\n\t\t\tDOCU: \"docu\"\n\t\t},\n\t\tnode: {\n\t\t\tCURSELECTED: \"curSelectedNode\"\n\t\t}\n\t},\n\t//default setting of core\n\t_setting = {\n\t\ttreeId: \"\",\n\t\ttreeObj: null,\n\t\tview: {\n\t\t\taddDiyDom: null,\n\t\t\tautoCancelSelected: true,\n\t\t\tdblClickExpand: true,\n\t\t\texpandSpeed: \"fast\",\n\t\t\tfontCss: {},\n\t\t\tnameIsHTML: false,\n\t\t\tselectedMulti: true,\n\t\t\tshowIcon: true,\n\t\t\tshowLine: true,\n\t\t\tshowTitle: true,\n\t\t\ttxtSelectedEnable: false\n\t\t},\n\t\tdata: {\n\t\t\tkey: {\n\t\t\t\tchildren: \"children\",\n\t\t\t\tname: \"name\",\n\t\t\t\ttitle: \"\",\n\t\t\t\turl: \"url\",\n\t\t\t\ticon: \"icon\"\n\t\t\t},\n\t\t\tsimpleData: {\n\t\t\t\tenable: false,\n\t\t\t\tidKey: \"id\",\n\t\t\t\tpIdKey: \"pId\",\n\t\t\t\trootPId: null\n\t\t\t},\n\t\t\tkeep: {\n\t\t\t\tparent: false,\n\t\t\t\tleaf: false\n\t\t\t}\n\t\t},\n\t\tasync: {\n\t\t\tenable: false,\n\t\t\tcontentType: \"application/x-www-form-urlencoded\",\n\t\t\ttype: \"post\",\n\t\t\tdataType: \"text\",\n\t\t\turl: \"\",\n\t\t\tautoParam: [],\n\t\t\totherParam: [],\n\t\t\tdataFilter: null\n\t\t},\n\t\tcallback: {\n\t\t\tbeforeAsync:null,\n\t\t\tbeforeClick:null,\n\t\t\tbeforeDblClick:null,\n\t\t\tbeforeRightClick:null,\n\t\t\tbeforeMouseDown:null,\n\t\t\tbeforeMouseUp:null,\n\t\t\tbeforeExpand:null,\n\t\t\tbeforeCollapse:null,\n\t\t\tbeforeRemove:null,\n\n\t\t\tonAsyncError:null,\n\t\t\tonAsyncSuccess:null,\n\t\t\tonNodeCreated:null,\n\t\t\tonClick:null,\n\t\t\tonDblClick:null,\n\t\t\tonRightClick:null,\n\t\t\tonMouseDown:null,\n\t\t\tonMouseUp:null,\n\t\t\tonExpand:null,\n\t\t\tonCollapse:null,\n\t\t\tonRemove:null\n\t\t}\n\t},\n\t//default root of core\n\t//zTree use root to save full data\n\t_initRoot = function (setting) {\n\t\tvar r = data.getRoot(setting);\n\t\tif (!r) {\n\t\t\tr = {};\n\t\t\tdata.setRoot(setting, r);\n\t\t}\n\t\tr[setting.data.key.children] = [];\n\t\tr.expandTriggerFlag = false;\n\t\tr.curSelectedList = [];\n\t\tr.noSelection = true;\n\t\tr.createdNodes = [];\n\t\tr.zId = 0;\n\t\tr._ver = (new Date()).getTime();\n\t},\n\t//default cache of core\n\t_initCache = function(setting) {\n\t\tvar c = data.getCache(setting);\n\t\tif (!c) {\n\t\t\tc = {};\n\t\t\tdata.setCache(setting, c);\n\t\t}\n\t\tc.nodes = [];\n\t\tc.doms = [];\n\t},\n\t//default bindEvent of core\n\t_bindEvent = function(setting) {\n\t\tvar o = setting.treeObj,\n\t\tc = consts.event;\n\t\to.bind(c.NODECREATED, function (event, treeId, node) {\n\t\t\ttools.apply(setting.callback.onNodeCreated, [event, treeId, node]);\n\t\t});\n\n\t\to.bind(c.CLICK, function (event, srcEvent, treeId, node, clickFlag) {\n\t\t\ttools.apply(setting.callback.onClick, [srcEvent, treeId, node, clickFlag]);\n\t\t});\n\n\t\to.bind(c.EXPAND, function (event, treeId, node) {\n\t\t\ttools.apply(setting.callback.onExpand, [event, treeId, node]);\n\t\t});\n\n\t\to.bind(c.COLLAPSE, function (event, treeId, node) {\n\t\t\ttools.apply(setting.callback.onCollapse, [event, treeId, node]);\n\t\t});\n\n\t\to.bind(c.ASYNC_SUCCESS, function (event, treeId, node, msg) {\n\t\t\ttools.apply(setting.callback.onAsyncSuccess, [event, treeId, node, msg]);\n\t\t});\n\n\t\to.bind(c.ASYNC_ERROR, function (event, treeId, node, XMLHttpRequest, textStatus, errorThrown) {\n\t\t\ttools.apply(setting.callback.onAsyncError, [event, treeId, node, XMLHttpRequest, textStatus, errorThrown]);\n\t\t});\n\n\t\to.bind(c.REMOVE, function (event, treeId, treeNode) {\n\t\t\ttools.apply(setting.callback.onRemove, [event, treeId, treeNode]);\n\t\t});\n\n\t\to.bind(c.SELECTED, function (event, treeId, node) {\n\t\t\ttools.apply(setting.callback.onSelected, [treeId, node]);\n\t\t});\n\t\to.bind(c.UNSELECTED, function (event, treeId, node) {\n\t\t\ttools.apply(setting.callback.onUnSelected, [treeId, node]);\n\t\t});\n\t},\n\t_unbindEvent = function(setting) {\n\t\tvar o = setting.treeObj,\n\t\tc = consts.event;\n\t\to.unbind(c.NODECREATED)\n\t\t.unbind(c.CLICK)\n\t\t.unbind(c.EXPAND)\n\t\t.unbind(c.COLLAPSE)\n\t\t.unbind(c.ASYNC_SUCCESS)\n\t\t.unbind(c.ASYNC_ERROR)\n\t\t.unbind(c.REMOVE)\n\t\t.unbind(c.SELECTED)\n\t\t.unbind(c.UNSELECTED);\n\t},\n\t//default event proxy of core\n\t_eventProxy = function(event) {\n\t\tvar target = event.target,\n\t\tsetting = data.getSetting(event.data.treeId),\n\t\ttId = \"\", node = null,\n\t\tnodeEventType = \"\", treeEventType = \"\",\n\t\tnodeEventCallback = null, treeEventCallback = null,\n\t\ttmp = null;\n\n\t\tif (tools.eqs(event.type, \"mousedown\")) {\n\t\t\ttreeEventType = \"mousedown\";\n\t\t} else if (tools.eqs(event.type, \"mouseup\")) {\n\t\t\ttreeEventType = \"mouseup\";\n\t\t} else if (tools.eqs(event.type, \"contextmenu\")) {\n\t\t\ttreeEventType = \"contextmenu\";\n\t\t} else if (tools.eqs(event.type, \"click\")) {\n\t\t\tif (tools.eqs(target.tagName, \"span\") && target.getAttribute(\"treeNode\"+ consts.id.SWITCH) !== null) {\n\t\t\t\ttId = tools.getNodeMainDom(target).id;\n\t\t\t\tnodeEventType = \"switchNode\";\n\t\t\t} else {\n\t\t\t\ttmp = tools.getMDom(setting, target, [{tagName:\"a\", attrName:\"treeNode\"+consts.id.A}]);\n\t\t\t\tif (tmp) {\n\t\t\t\t\ttId = tools.getNodeMainDom(tmp).id;\n\t\t\t\t\tnodeEventType = \"clickNode\";\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (tools.eqs(event.type, \"dblclick\")) {\n\t\t\ttreeEventType = \"dblclick\";\n\t\t\ttmp = tools.getMDom(setting, target, [{tagName:\"a\", attrName:\"treeNode\"+consts.id.A}]);\n\t\t\tif (tmp) {\n\t\t\t\ttId = tools.getNodeMainDom(tmp).id;\n\t\t\t\tnodeEventType = \"switchNode\";\n\t\t\t}\n\t\t}\n\t\tif (treeEventType.length > 0 && tId.length == 0) {\n\t\t\ttmp = tools.getMDom(setting, target, [{tagName:\"a\", attrName:\"treeNode\"+consts.id.A}]);\n\t\t\tif (tmp) {tId = tools.getNodeMainDom(tmp).id;}\n\t\t}\n\t\t// event to node\n\t\tif (tId.length>0) {\n\t\t\tnode = data.getNodeCache(setting, tId);\n\t\t\tswitch (nodeEventType) {\n\t\t\t\tcase \"switchNode\" :\n\t\t\t\t\tif (!node.isParent) {\n\t\t\t\t\t\tnodeEventType = \"\";\n\t\t\t\t\t} else if (tools.eqs(event.type, \"click\")\n\t\t\t\t\t\t|| (tools.eqs(event.type, \"dblclick\") && tools.apply(setting.view.dblClickExpand, [setting.treeId, node], setting.view.dblClickExpand))) {\n\t\t\t\t\t\tnodeEventCallback = handler.onSwitchNode;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnodeEventType = \"\";\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"clickNode\" :\n\t\t\t\t\tnodeEventCallback = handler.onClickNode;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\t// event to zTree\n\t\tswitch (treeEventType) {\n\t\t\tcase \"mousedown\" :\n\t\t\t\ttreeEventCallback = handler.onZTreeMousedown;\n\t\t\t\tbreak;\n\t\t\tcase \"mouseup\" :\n\t\t\t\ttreeEventCallback = handler.onZTreeMouseup;\n\t\t\t\tbreak;\n\t\t\tcase \"dblclick\" :\n\t\t\t\ttreeEventCallback = handler.onZTreeDblclick;\n\t\t\t\tbreak;\n\t\t\tcase \"contextmenu\" :\n\t\t\t\ttreeEventCallback = handler.onZTreeContextmenu;\n\t\t\t\tbreak;\n\t\t}\n\t\tvar proxyResult = {\n\t\t\tstop: false,\n\t\t\tnode: node,\n\t\t\tnodeEventType: nodeEventType,\n\t\t\tnodeEventCallback: nodeEventCallback,\n\t\t\ttreeEventType: treeEventType,\n\t\t\ttreeEventCallback: treeEventCallback\n\t\t};\n\t\treturn proxyResult\n\t},\n\t//default init node of core\n\t_initNode = function(setting, level, n, parentNode, isFirstNode, isLastNode, openFlag) {\n\t\tif (!n) return;\n\t\tvar r = data.getRoot(setting),\n\t\tchildKey = setting.data.key.children;\n\t\tn.level = level;\n\t\tn.tId = setting.treeId + \"_\" + (++r.zId);\n\t\tn.parentTId = parentNode ? parentNode.tId : null;\n\t\tn.open = (typeof n.open == \"string\") ? tools.eqs(n.open, \"true\") : !!n.open;\n\t\tif (n[childKey] && n[childKey].length > 0) {\n\t\t\tn.isParent = true;\n\t\t\tn.zAsync = true;\n\t\t} else {\n\t\t\tn.isParent = (typeof n.isParent == \"string\") ? tools.eqs(n.isParent, \"true\") : !!n.isParent;\n\t\t\tn.open = (n.isParent && !setting.async.enable) ? n.open : false;\n\t\t\tn.zAsync = !n.isParent;\n\t\t}\n\t\tn.isFirstNode = isFirstNode;\n\t\tn.isLastNode = isLastNode;\n\t\tn.getParentNode = function() {return data.getNodeCache(setting, n.parentTId);};\n\t\tn.getPreNode = function() {return data.getPreNode(setting, n);};\n\t\tn.getNextNode = function() {return data.getNextNode(setting, n);};\n\t\tn.getIndex = function() {return data.getNodeIndex(setting, n);};\n\t\tn.getPath = function() {return data.getNodePath(setting, n);};\n\t\tn.isAjaxing = false;\n\t\tdata.fixPIdKeyValue(setting, n);\n\t},\n\t_init = {\n\t\tbind: [_bindEvent],\n\t\tunbind: [_unbindEvent],\n\t\tcaches: [_initCache],\n\t\tnodes: [_initNode],\n\t\tproxys: [_eventProxy],\n\t\troots: [_initRoot],\n\t\tbeforeA: [],\n\t\tafterA: [],\n\t\tinnerBeforeA: [],\n\t\tinnerAfterA: [],\n\t\tzTreeTools: []\n\t},\n\t//method of operate data\n\tdata = {\n\t\taddNodeCache: function(setting, node) {\n\t\t\tdata.getCache(setting).nodes[data.getNodeCacheId(node.tId)] = node;\n\t\t},\n\t\tgetNodeCacheId: function(tId) {\n\t\t\treturn tId.substring(tId.lastIndexOf(\"_\")+1);\n\t\t},\n\t\taddAfterA: function(afterA) {\n\t\t\t_init.afterA.push(afterA);\n\t\t},\n\t\taddBeforeA: function(beforeA) {\n\t\t\t_init.beforeA.push(beforeA);\n\t\t},\n\t\taddInnerAfterA: function(innerAfterA) {\n\t\t\t_init.innerAfterA.push(innerAfterA);\n\t\t},\n\t\taddInnerBeforeA: function(innerBeforeA) {\n\t\t\t_init.innerBeforeA.push(innerBeforeA);\n\t\t},\n\t\taddInitBind: function(bindEvent) {\n\t\t\t_init.bind.push(bindEvent);\n\t\t},\n\t\taddInitUnBind: function(unbindEvent) {\n\t\t\t_init.unbind.push(unbindEvent);\n\t\t},\n\t\taddInitCache: function(initCache) {\n\t\t\t_init.caches.push(initCache);\n\t\t},\n\t\taddInitNode: function(initNode) {\n\t\t\t_init.nodes.push(initNode);\n\t\t},\n\t\taddInitProxy: function(initProxy, isFirst) {\n\t\t\tif (!!isFirst) {\n\t\t\t\t_init.proxys.splice(0,0,initProxy);\n\t\t\t} else {\n\t\t\t\t_init.proxys.push(initProxy);\n\t\t\t}\n\t\t},\n\t\taddInitRoot: function(initRoot) {\n\t\t\t_init.roots.push(initRoot);\n\t\t},\n\t\taddNodesData: function(setting, parentNode, index, nodes) {\n\t\t\tvar childKey = setting.data.key.children, params;\n\t\t\tif (!parentNode[childKey]) {\n\t\t\t\tparentNode[childKey] = [];\n\t\t\t\tindex = -1;\n\t\t\t} else if (index >= parentNode[childKey].length) {\n\t\t\t\tindex = -1;\n\t\t\t}\n\n\t\t\tif (parentNode[childKey].length > 0 && index === 0) {\n\t\t\t\tparentNode[childKey][0].isFirstNode = false;\n\t\t\t\tview.setNodeLineIcos(setting, parentNode[childKey][0]);\n\t\t\t} else if (parentNode[childKey].length > 0 && index < 0) {\n\t\t\t\tparentNode[childKey][parentNode[childKey].length - 1].isLastNode = false;\n\t\t\t\tview.setNodeLineIcos(setting, parentNode[childKey][parentNode[childKey].length - 1]);\n\t\t\t}\n\t\t\tparentNode.isParent = true;\n\n\t\t\tif (index<0) {\n\t\t\t\tparentNode[childKey] = parentNode[childKey].concat(nodes);\n\t\t\t} else {\n\t\t\t\tparams = [index, 0].concat(nodes);\n\t\t\t\tparentNode[childKey].splice.apply(parentNode[childKey], params);\n\t\t\t}\n\t\t},\n\t\taddSelectedNode: function(setting, node) {\n\t\t\tvar root = data.getRoot(setting);\n\t\t\tif (!data.isSelectedNode(setting, node)) {\n\t\t\t\troot.curSelectedList.push(node);\n\t\t\t}\n\t\t},\n\t\taddCreatedNode: function(setting, node) {\n\t\t\tif (!!setting.callback.onNodeCreated || !!setting.view.addDiyDom) {\n\t\t\t\tvar root = data.getRoot(setting);\n\t\t\t\troot.createdNodes.push(node);\n\t\t\t}\n\t\t},\n\t\taddZTreeTools: function(zTreeTools) {\n\t\t\t_init.zTreeTools.push(zTreeTools);\n\t\t},\n\t\texSetting: function(s) {\n\t\t\t$.extend(true, _setting, s);\n\t\t},\n\t\tfixPIdKeyValue: function(setting, node) {\n\t\t\tif (setting.data.simpleData.enable) {\n\t\t\t\tnode[setting.data.simpleData.pIdKey] = node.parentTId ? node.getParentNode()[setting.data.simpleData.idKey] : setting.data.simpleData.rootPId;\n\t\t\t}\n\t\t},\n\t\tgetAfterA: function(setting, node, array) {\n\t\t\tfor (var i=0, j=_init.afterA.length; i<j; i++) {\n\t\t\t\t_init.afterA[i].apply(this, arguments);\n\t\t\t}\n\t\t},\n\t\tgetBeforeA: function(setting, node, array) {\n\t\t\tfor (var i=0, j=_init.beforeA.length; i<j; i++) {\n\t\t\t\t_init.beforeA[i].apply(this, arguments);\n\t\t\t}\n\t\t},\n\t\tgetInnerAfterA: function(setting, node, array) {\n\t\t\tfor (var i=0, j=_init.innerAfterA.length; i<j; i++) {\n\t\t\t\t_init.innerAfterA[i].apply(this, arguments);\n\t\t\t}\n\t\t},\n\t\tgetInnerBeforeA: function(setting, node, array) {\n\t\t\tfor (var i=0, j=_init.innerBeforeA.length; i<j; i++) {\n\t\t\t\t_init.innerBeforeA[i].apply(this, arguments);\n\t\t\t}\n\t\t},\n\t\tgetCache: function(setting) {\n\t\t\treturn caches[setting.treeId];\n\t\t},\n\t\tgetNodeIndex: function(setting, node) {\n\t\t\tif (!node) return null;\n\t\t\tvar childKey = setting.data.key.children,\n\t\t\tp = node.parentTId ? node.getParentNode() : data.getRoot(setting);\n\t\t\tfor (var i=0, l=p[childKey].length-1; i<=l; i++) {\n\t\t\t\tif (p[childKey][i] === node) {\n\t\t\t\t\treturn i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn -1;\n\t\t},\n\t\tgetNextNode: function(setting, node) {\n\t\t\tif (!node) return null;\n\t\t\tvar childKey = setting.data.key.children,\n\t\t\tp = node.parentTId ? node.getParentNode() : data.getRoot(setting);\n\t\t\tfor (var i=0, l=p[childKey].length-1; i<=l; i++) {\n\t\t\t\tif (p[childKey][i] === node) {\n\t\t\t\t\treturn (i==l ? null : p[childKey][i+1]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tgetNodeByParam: function(setting, nodes, key, value) {\n\t\t\tif (!nodes || !key) return null;\n\t\t\tvar childKey = setting.data.key.children;\n\t\t\tfor (var i = 0, l = nodes.length; i < l; i++) {\n\t\t\t\tif (nodes[i][key] == value) {\n\t\t\t\t\treturn nodes[i];\n\t\t\t\t}\n\t\t\t\tvar tmp = data.getNodeByParam(setting, nodes[i][childKey], key, value);\n\t\t\t\tif (tmp) return tmp;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tgetNodeCache: function(setting, tId) {\n\t\t\tif (!tId) return null;\n\t\t\tvar n = caches[setting.treeId].nodes[data.getNodeCacheId(tId)];\n\t\t\treturn n ? n : null;\n\t\t},\n\t\tgetNodeName: function(setting, node) {\n\t\t\tvar nameKey = setting.data.key.name;\n\t\t\treturn \"\" + node[nameKey];\n\t\t},\n\t\tgetNodePath: function(setting, node) {\n\t\t\tif (!node) return null;\n\n\t\t\tvar path;\n\t\t\tif(node.parentTId) {\n\t\t\t\tpath = node.getParentNode().getPath();\n\t\t\t} else {\n\t\t\t\tpath = [];\n\t\t\t}\n\n\t\t\tif (path) {\n\t\t\t\tpath.push(node);\n\t\t\t}\n\n\t\t\treturn path;\n\t\t},\n\t\tgetNodeTitle: function(setting, node) {\n\t\t\tvar t = setting.data.key.title === \"\" ? setting.data.key.name : setting.data.key.title;\n\t\t\treturn \"\" + node[t];\n\t\t},\n\t\tgetNodes: function(setting) {\n\t\t\treturn data.getRoot(setting)[setting.data.key.children];\n\t\t},\n\t\tgetNodesByParam: function(setting, nodes, key, value) {\n\t\t\tif (!nodes || !key) return [];\n\t\t\tvar childKey = setting.data.key.children,\n\t\t\tresult = [];\n\t\t\tfor (var i = 0, l = nodes.length; i < l; i++) {\n\t\t\t\tif (nodes[i][key] == value) {\n\t\t\t\t\tresult.push(nodes[i]);\n\t\t\t\t}\n\t\t\t\tresult = result.concat(data.getNodesByParam(setting, nodes[i][childKey], key, value));\n\t\t\t}\n\t\t\treturn result;\n\t\t},\n\t\tgetNodesByParamFuzzy: function(setting, nodes, key, value) {\n\t\t\tif (!nodes || !key) return [];\n\t\t\tvar childKey = setting.data.key.children,\n\t\t\tresult = [];\n\t\t\tvalue = value.toLowerCase();\n\t\t\tfor (var i = 0, l = nodes.length; i < l; i++) {\n\t\t\t\tif (typeof nodes[i][key] == \"string\" && nodes[i][key].toLowerCase().indexOf(value)>-1) {\n\t\t\t\t\tresult.push(nodes[i]);\n\t\t\t\t}\n\t\t\t\tresult = result.concat(data.getNodesByParamFuzzy(setting, nodes[i][childKey], key, value));\n\t\t\t}\n\t\t\treturn result;\n\t\t},\n\t\tgetNodesByFilter: function(setting, nodes, filter, isSingle, invokeParam) {\n\t\t\tif (!nodes) return (isSingle ? null : []);\n\t\t\tvar childKey = setting.data.key.children,\n\t\t\tresult = isSingle ? null : [];\n\t\t\tfor (var i = 0, l = nodes.length; i < l; i++) {\n\t\t\t\tif (tools.apply(filter, [nodes[i], invokeParam], false)) {\n\t\t\t\t\tif (isSingle) {return nodes[i];}\n\t\t\t\t\tresult.push(nodes[i]);\n\t\t\t\t}\n\t\t\t\tvar tmpResult = data.getNodesByFilter(setting, nodes[i][childKey], filter, isSingle, invokeParam);\n\t\t\t\tif (isSingle && !!tmpResult) {return tmpResult;}\n\t\t\t\tresult = isSingle ? tmpResult : result.concat(tmpResult);\n\t\t\t}\n\t\t\treturn result;\n\t\t},\n\t\tgetPreNode: function(setting, node) {\n\t\t\tif (!node) return null;\n\t\t\tvar childKey = setting.data.key.children,\n\t\t\tp = node.parentTId ? node.getParentNode() : data.getRoot(setting);\n\t\t\tfor (var i=0, l=p[childKey].length; i<l; i++) {\n\t\t\t\tif (p[childKey][i] === node) {\n\t\t\t\t\treturn (i==0 ? null : p[childKey][i-1]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tgetRoot: function(setting) {\n\t\t\treturn setting ? roots[setting.treeId] : null;\n\t\t},\n\t\tgetRoots: function() {\n\t\t\treturn roots;\n\t\t},\n\t\tgetSetting: function(treeId) {\n\t\t\treturn settings[treeId];\n\t\t},\n\t\tgetSettings: function() {\n\t\t\treturn settings;\n\t\t},\n\t\tgetZTreeTools: function(treeId) {\n\t\t\tvar r = this.getRoot(this.getSetting(treeId));\n\t\t\treturn r ? r.treeTools : null;\n\t\t},\n\t\tinitCache: function(setting) {\n\t\t\tfor (var i=0, j=_init.caches.length; i<j; i++) {\n\t\t\t\t_init.caches[i].apply(this, arguments);\n\t\t\t}\n\t\t},\n\t\tinitNode: function(setting, level, node, parentNode, preNode, nextNode) {\n\t\t\tfor (var i=0, j=_init.nodes.length; i<j; i++) {\n\t\t\t\t_init.nodes[i].apply(this, arguments);\n\t\t\t}\n\t\t},\n\t\tinitRoot: function(setting) {\n\t\t\tfor (var i=0, j=_init.roots.length; i<j; i++) {\n\t\t\t\t_init.roots[i].apply(this, arguments);\n\t\t\t}\n\t\t},\n\t\tisSelectedNode: function(setting, node) {\n\t\t\tvar root = data.getRoot(setting);\n\t\t\tfor (var i=0, j=root.curSelectedList.length; i<j; i++) {\n\t\t\t\tif(node === root.curSelectedList[i]) return true;\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\tremoveNodeCache: function(setting, node) {\n\t\t\tvar childKey = setting.data.key.children;\n\t\t\tif (node[childKey]) {\n\t\t\t\tfor (var i=0, l=node[childKey].length; i<l; i++) {\n\t\t\t\t\tdata.removeNodeCache(setting, node[childKey][i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tdata.getCache(setting).nodes[data.getNodeCacheId(node.tId)] = null;\n\t\t},\n\t\tremoveSelectedNode: function(setting, node) {\n\t\t\tvar root = data.getRoot(setting);\n\t\t\tfor (var i=0, j=root.curSelectedList.length; i<j; i++) {\n\t\t\t\tif(node === root.curSelectedList[i] || !data.getNodeCache(setting, root.curSelectedList[i].tId)) {\n\t\t\t\t\troot.curSelectedList.splice(i, 1);\n\t\t\t\t\tsetting.treeObj.trigger(consts.event.UNSELECTED, [setting.treeId, node]);\n\t\t\t\t\ti--;j--;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tsetCache: function(setting, cache) {\n\t\t\tcaches[setting.treeId] = cache;\n\t\t},\n\t\tsetRoot: function(setting, root) {\n\t\t\troots[setting.treeId] = root;\n\t\t},\n\t\tsetZTreeTools: function(setting, zTreeTools) {\n\t\t\tfor (var i=0, j=_init.zTreeTools.length; i<j; i++) {\n\t\t\t\t_init.zTreeTools[i].apply(this, arguments);\n\t\t\t}\n\t\t},\n\t\ttransformToArrayFormat: function (setting, nodes) {\n\t\t\tif (!nodes) return [];\n\t\t\tvar childKey = setting.data.key.children,\n\t\t\tr = [];\n\t\t\tif (tools.isArray(nodes)) {\n\t\t\t\tfor (var i=0, l=nodes.length; i<l; i++) {\n\t\t\t\t\tr.push(nodes[i]);\n\t\t\t\t\tif (nodes[i][childKey])\n\t\t\t\t\t\tr = r.concat(data.transformToArrayFormat(setting, nodes[i][childKey]));\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tr.push(nodes);\n\t\t\t\tif (nodes[childKey])\n\t\t\t\t\tr = r.concat(data.transformToArrayFormat(setting, nodes[childKey]));\n\t\t\t}\n\t\t\treturn r;\n\t\t},\n\t\ttransformTozTreeFormat: function(setting, sNodes) {\n\t\t\tvar i,l,\n\t\t\tkey = setting.data.simpleData.idKey,\n\t\t\tparentKey = setting.data.simpleData.pIdKey,\n\t\t\tchildKey = setting.data.key.children;\n\t\t\tif (!key || key==\"\" || !sNodes) return [];\n\n\t\t\tif (tools.isArray(sNodes)) {\n\t\t\t\tvar r = [];\n\t\t\t\tvar tmpMap = {};\n\t\t\t\tfor (i=0, l=sNodes.length; i<l; i++) {\n\t\t\t\t\ttmpMap[sNodes[i][key]] = sNodes[i];\n\t\t\t\t}\n\t\t\t\tfor (i=0, l=sNodes.length; i<l; i++) {\n\t\t\t\t\tif (tmpMap[sNodes[i][parentKey]] && sNodes[i][key] != sNodes[i][parentKey]) {\n\t\t\t\t\t\tif (!tmpMap[sNodes[i][parentKey]][childKey])\n\t\t\t\t\t\t\ttmpMap[sNodes[i][parentKey]][childKey] = [];\n\t\t\t\t\t\ttmpMap[sNodes[i][parentKey]][childKey].push(sNodes[i]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tr.push(sNodes[i]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn r;\n\t\t\t}else {\n\t\t\t\treturn [sNodes];\n\t\t\t}\n\t\t}\n\t},\n\t//method of event proxy\n\tevent = {\n\t\tbindEvent: function(setting) {\n\t\t\tfor (var i=0, j=_init.bind.length; i<j; i++) {\n\t\t\t\t_init.bind[i].apply(this, arguments);\n\t\t\t}\n\t\t},\n\t\tunbindEvent: function(setting) {\n\t\t\tfor (var i=0, j=_init.unbind.length; i<j; i++) {\n\t\t\t\t_init.unbind[i].apply(this, arguments);\n\t\t\t}\n\t\t},\n\t\tbindTree: function(setting) {\n\t\t\tvar eventParam = {\n\t\t\t\ttreeId: setting.treeId\n\t\t\t},\n\t\t\to = setting.treeObj;\n\t\t\tif (!setting.view.txtSelectedEnable) {\n\t\t\t\t// for can't select text\n\t\t\t\to.bind('selectstart', handler.onSelectStart).css({\n\t\t\t\t\t\"-moz-user-select\":\"-moz-none\"\n\t\t\t\t});\n\t\t\t}\n\t\t\to.bind('click', eventParam, event.proxy);\n\t\t\to.bind('dblclick', eventParam, event.proxy);\n\t\t\to.bind('mouseover', eventParam, event.proxy);\n\t\t\to.bind('mouseout', eventParam, event.proxy);\n\t\t\to.bind('mousedown', eventParam, event.proxy);\n\t\t\to.bind('mouseup', eventParam, event.proxy);\n\t\t\to.bind('contextmenu', eventParam, event.proxy);\n\t\t},\n\t\tunbindTree: function(setting) {\n\t\t\tvar o = setting.treeObj;\n\t\t\to.unbind('selectstart', handler.onSelectStart)\n\t\t\t\t.unbind('click', event.proxy)\n\t\t\t\t.unbind('dblclick', event.proxy)\n\t\t\t\t.unbind('mouseover', event.proxy)\n\t\t\t\t.unbind('mouseout', event.proxy)\n\t\t\t\t.unbind('mousedown', event.proxy)\n\t\t\t\t.unbind('mouseup', event.proxy)\n\t\t\t\t.unbind('contextmenu', event.proxy);\n\t\t},\n\t\tdoProxy: function(e) {\n\t\t\tvar results = [];\n\t\t\tfor (var i=0, j=_init.proxys.length; i<j; i++) {\n\t\t\t\tvar proxyResult = _init.proxys[i].apply(this, arguments);\n\t\t\t\tresults.push(proxyResult);\n\t\t\t\tif (proxyResult.stop) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn results;\n\t\t},\n\t\tproxy: function(e) {\n\t\t\tvar setting = data.getSetting(e.data.treeId);\n\t\t\tif (!tools.uCanDo(setting, e)) return true;\n\t\t\tvar results = event.doProxy(e),\n\t\t\tr = true, x = false;\n\t\t\tfor (var i=0, l=results.length; i<l; i++) {\n\t\t\t\tvar proxyResult = results[i];\n\t\t\t\tif (proxyResult.nodeEventCallback) {\n\t\t\t\t\tx = true;\n\t\t\t\t\tr = proxyResult.nodeEventCallback.apply(proxyResult, [e, proxyResult.node]) && r;\n\t\t\t\t}\n\t\t\t\tif (proxyResult.treeEventCallback) {\n\t\t\t\t\tx = true;\n\t\t\t\t\tr = proxyResult.treeEventCallback.apply(proxyResult, [e, proxyResult.node]) && r;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn r;\n\t\t}\n\t},\n\t//method of event handler\n\thandler = {\n\t\tonSwitchNode: function (event, node) {\n\t\t\tvar setting = data.getSetting(event.data.treeId);\n\t\t\tif (node.open) {\n\t\t\t\tif (tools.apply(setting.callback.beforeCollapse, [setting.treeId, node], true) == false) return true;\n\t\t\t\tdata.getRoot(setting).expandTriggerFlag = true;\n\t\t\t\tview.switchNode(setting, node);\n\t\t\t} else {\n\t\t\t\tif (tools.apply(setting.callback.beforeExpand, [setting.treeId, node], true) == false) return true;\n\t\t\t\tdata.getRoot(setting).expandTriggerFlag = true;\n\t\t\t\tview.switchNode(setting, node);\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\t\tonClickNode: function (event, node) {\n\t\t\tvar setting = data.getSetting(event.data.treeId),\n\t\t\tclickFlag = ( (setting.view.autoCancelSelected && (event.ctrlKey || event.metaKey)) && data.isSelectedNode(setting, node)) ? 0 : (setting.view.autoCancelSelected && (event.ctrlKey || event.metaKey) && setting.view.selectedMulti) ? 2 : 1;\n\t\t\tif (tools.apply(setting.callback.beforeClick, [setting.treeId, node, clickFlag], true) == false) return true;\n\t\t\tif (clickFlag === 0) {\n\t\t\t\tview.cancelPreSelectedNode(setting, node);\n\t\t\t} else {\n\t\t\t\tview.selectNode(setting, node, clickFlag === 2);\n\t\t\t}\n\t\t\tsetting.treeObj.trigger(consts.event.CLICK, [event, setting.treeId, node, clickFlag]);\n\t\t\treturn true;\n\t\t},\n\t\tonZTreeMousedown: function(event, node) {\n\t\t\tvar setting = data.getSetting(event.data.treeId);\n\t\t\tif (tools.apply(setting.callback.beforeMouseDown, [setting.treeId, node], true)) {\n\t\t\t\ttools.apply(setting.callback.onMouseDown, [event, setting.treeId, node]);\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\t\tonZTreeMouseup: function(event, node) {\n\t\t\tvar setting = data.getSetting(event.data.treeId);\n\t\t\tif (tools.apply(setting.callback.beforeMouseUp, [setting.treeId, node], true)) {\n\t\t\t\ttools.apply(setting.callback.onMouseUp, [event, setting.treeId, node]);\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\t\tonZTreeDblclick: function(event, node) {\n\t\t\tvar setting = data.getSetting(event.data.treeId);\n\t\t\tif (tools.apply(setting.callback.beforeDblClick, [setting.treeId, node], true)) {\n\t\t\t\ttools.apply(setting.callback.onDblClick, [event, setting.treeId, node]);\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\t\tonZTreeContextmenu: function(event, node) {\n\t\t\tvar setting = data.getSetting(event.data.treeId);\n\t\t\tif (tools.apply(setting.callback.beforeRightClick, [setting.treeId, node], true)) {\n\t\t\t\ttools.apply(setting.callback.onRightClick, [event, setting.treeId, node]);\n\t\t\t}\n\t\t\treturn (typeof setting.callback.onRightClick) != \"function\";\n\t\t},\n\t\tonSelectStart: function(e){\n\t\t\tvar n = e.originalEvent.srcElement.nodeName.toLowerCase();\n\t\t\treturn (n === \"input\" || n === \"textarea\" );\n\t\t}\n\t},\n\t//method of tools for zTree\n\ttools = {\n\t\tapply: function(fun, param, defaultValue) {\n\t\t\tif ((typeof fun) == \"function\") {\n\t\t\t\treturn fun.apply(zt, param?param:[]);\n\t\t\t}\n\t\t\treturn defaultValue;\n\t\t},\n\t\tcanAsync: function(setting, node) {\n\t\t\tvar childKey = setting.data.key.children;\n\t\t\treturn (setting.async.enable && node && node.isParent && !(node.zAsync || (node[childKey] && node[childKey].length > 0)));\n\t\t},\n\t\tclone: function (obj){\n\t\t\tif (obj === null) return null;\n\t\t\tvar o = tools.isArray(obj) ? [] : {};\n\t\t\tfor(var i in obj){\n\t\t\t\to[i] = (obj[i] instanceof Date) ? new Date(obj[i].getTime()) : (typeof obj[i] === \"object\" ? tools.clone(obj[i]) : obj[i]);\n\t\t\t}\n\t\t\treturn o;\n\t\t},\n\t\teqs: function(str1, str2) {\n\t\t\treturn str1.toLowerCase() === str2.toLowerCase();\n\t\t},\n\t\tisArray: function(arr) {\n\t\t\treturn Object.prototype.toString.apply(arr) === \"[object Array]\";\n\t\t},\n\t\t$: function(node, exp, setting) {\n\t\t\tif (!!exp && typeof exp != \"string\") {\n\t\t\t\tsetting = exp;\n\t\t\t\texp = \"\";\n\t\t\t}\n\t\t\tif (typeof node == \"string\") {\n\t\t\t\treturn $(node, setting ? setting.treeObj.get(0).ownerDocument : null);\n\t\t\t} else {\n\t\t\t\treturn $(\"#\" + node.tId + exp, setting ? setting.treeObj : null);\n\t\t\t}\n\t\t},\n\t\tgetMDom: function (setting, curDom, targetExpr) {\n\t\t\tif (!curDom) return null;\n\t\t\twhile (curDom && curDom.id !== setting.treeId) {\n\t\t\t\tfor (var i=0, l=targetExpr.length; curDom.tagName && i<l; i++) {\n\t\t\t\t\tif (tools.eqs(curDom.tagName, targetExpr[i].tagName) && curDom.getAttribute(targetExpr[i].attrName) !== null) {\n\t\t\t\t\t\treturn curDom;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcurDom = curDom.parentNode;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tgetNodeMainDom:function(target) {\n\t\t\treturn ($(target).parent(\"li\").get(0) || $(target).parentsUntil(\"li\").parent().get(0));\n\t\t},\n\t\tisChildOrSelf: function(dom, parentId) {\n\t\t\treturn ( $(dom).closest(\"#\" + parentId).length> 0 );\n\t\t},\n\t\tuCanDo: function(setting, e) {\n\t\t\treturn true;\n\t\t}\n\t},\n\t//method of operate ztree dom\n\tview = {\n\t\taddNodes: function(setting, parentNode, index, newNodes, isSilent) {\n\t\t\tif (setting.data.keep.leaf && parentNode && !parentNode.isParent) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (!tools.isArray(newNodes)) {\n\t\t\t\tnewNodes = [newNodes];\n\t\t\t}\n\t\t\tif (setting.data.simpleData.enable) {\n\t\t\t\tnewNodes = data.transformTozTreeFormat(setting, newNodes);\n\t\t\t}\n\t\t\tif (parentNode) {\n\t\t\t\tvar target_switchObj = $$(parentNode, consts.id.SWITCH, setting),\n\t\t\t\ttarget_icoObj = $$(parentNode, consts.id.ICON, setting),\n\t\t\t\ttarget_ulObj = $$(parentNode, consts.id.UL, setting);\n\n\t\t\t\tif (!parentNode.open) {\n\t\t\t\t\tview.replaceSwitchClass(parentNode, target_switchObj, consts.folder.CLOSE);\n\t\t\t\t\tview.replaceIcoClass(parentNode, target_icoObj, consts.folder.CLOSE);\n\t\t\t\t\tparentNode.open = false;\n\t\t\t\t\ttarget_ulObj.css({\n\t\t\t\t\t\t\"display\": \"none\"\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tdata.addNodesData(setting, parentNode, index, newNodes);\n\t\t\t\tview.createNodes(setting, parentNode.level + 1, newNodes, parentNode, index);\n\t\t\t\tif (!isSilent) {\n\t\t\t\t\tview.expandCollapseParentNode(setting, parentNode, true);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdata.addNodesData(setting, data.getRoot(setting), index, newNodes);\n\t\t\t\tview.createNodes(setting, 0, newNodes, null, index);\n\t\t\t}\n\t\t},\n\t\tappendNodes: function(setting, level, nodes, parentNode, index, initFlag, openFlag) {\n\t\t\tif (!nodes) return [];\n\t\t\tvar html = [],\n\t\t\tchildKey = setting.data.key.children;\n\n\t\t\tvar tmpPNode = (parentNode) ? parentNode: data.getRoot(setting),\n\t\t\t\ttmpPChild = tmpPNode[childKey],\n\t\t\t\tisFirstNode, isLastNode;\n\n\t\t\tif (!tmpPChild || index >= tmpPChild.length) {\n\t\t\t\tindex = -1;\n\t\t\t}\n\n\t\t\tfor (var i = 0, l = nodes.length; i < l; i++) {\n\t\t\t\tvar node = nodes[i];\n\t\t\t\tif (initFlag) {\n\t\t\t\t\tisFirstNode = ((index===0 || tmpPChild.length == nodes.length) && (i == 0));\n\t\t\t\t\tisLastNode = (index < 0 && i == (nodes.length - 1));\n\t\t\t\t\tdata.initNode(setting, level, node, parentNode, isFirstNode, isLastNode, openFlag);\n\t\t\t\t\tdata.addNodeCache(setting, node);\n\t\t\t\t}\n\n\t\t\t\tvar childHtml = [];\n\t\t\t\tif (node[childKey] && node[childKey].length > 0) {\n\t\t\t\t\t//make child html first, because checkType\n\t\t\t\t\tchildHtml = view.appendNodes(setting, level + 1, node[childKey], node, -1, initFlag, openFlag && node.open);\n\t\t\t\t}\n\t\t\t\tif (openFlag) {\n\n\t\t\t\t\tview.makeDOMNodeMainBefore(html, setting, node);\n\t\t\t\t\tview.makeDOMNodeLine(html, setting, node);\n\t\t\t\t\tdata.getBeforeA(setting, node, html);\n\t\t\t\t\tview.makeDOMNodeNameBefore(html, setting, node);\n\t\t\t\t\tdata.getInnerBeforeA(setting, node, html);\n\t\t\t\t\tview.makeDOMNodeIcon(html, setting, node);\n\t\t\t\t\tdata.getInnerAfterA(setting, node, html);\n\t\t\t\t\tview.makeDOMNodeNameAfter(html, setting, node);\n\t\t\t\t\tdata.getAfterA(setting, node, html);\n\t\t\t\t\tif (node.isParent && node.open) {\n\t\t\t\t\t\tview.makeUlHtml(setting, node, html, childHtml.join(''));\n\t\t\t\t\t}\n\t\t\t\t\tview.makeDOMNodeMainAfter(html, setting, node);\n\t\t\t\t\tdata.addCreatedNode(setting, node);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn html;\n\t\t},\n\t\tappendParentULDom: function(setting, node) {\n\t\t\tvar html = [],\n\t\t\tnObj = $$(node, setting);\n\t\t\tif (!nObj.get(0) && !!node.parentTId) {\n\t\t\t\tview.appendParentULDom(setting, node.getParentNode());\n\t\t\t\tnObj = $$(node, setting);\n\t\t\t}\n\t\t\tvar ulObj = $$(node, consts.id.UL, setting);\n\t\t\tif (ulObj.get(0)) {\n\t\t\t\tulObj.remove();\n\t\t\t}\n\t\t\tvar childKey = setting.data.key.children,\n\t\t\tchildHtml = view.appendNodes(setting, node.level+1, node[childKey], node, -1, false, true);\n\t\t\tview.makeUlHtml(setting, node, html, childHtml.join(''));\n\t\t\tnObj.append(html.join(''));\n\t\t},\n\t\tasyncNode: function(setting, node, isSilent, callback) {\n\t\t\tvar i, l;\n\t\t\tif (node && !node.isParent) {\n\t\t\t\ttools.apply(callback);\n\t\t\t\treturn false;\n\t\t\t} else if (node && node.isAjaxing) {\n\t\t\t\treturn false;\n\t\t\t} else if (tools.apply(setting.callback.beforeAsync, [setting.treeId, node], true) == false) {\n\t\t\t\ttools.apply(callback);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (node) {\n\t\t\t\tnode.isAjaxing = true;\n\t\t\t\tvar icoObj = $$(node, consts.id.ICON, setting);\n\t\t\t\ticoObj.attr({\"style\":\"\", \"class\":consts.className.BUTTON + \" \" + consts.className.ICO_LOADING});\n\t\t\t}\n\n\t\t\tvar tmpParam = {};\n\t\t\tfor (i = 0, l = setting.async.autoParam.length; node && i < l; i++) {\n\t\t\t\tvar pKey = setting.async.autoParam[i].split(\"=\"), spKey = pKey;\n\t\t\t\tif (pKey.length>1) {\n\t\t\t\t\tspKey = pKey[1];\n\t\t\t\t\tpKey = pKey[0];\n\t\t\t\t}\n\t\t\t\ttmpParam[spKey] = node[pKey];\n\t\t\t}\n\t\t\tif (tools.isArray(setting.async.otherParam)) {\n\t\t\t\tfor (i = 0, l = setting.async.otherParam.length; i < l; i += 2) {\n\t\t\t\t\ttmpParam[setting.async.otherParam[i]] = setting.async.otherParam[i + 1];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor (var p in setting.async.otherParam) {\n\t\t\t\t\ttmpParam[p] = setting.async.otherParam[p];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar _tmpV = data.getRoot(setting)._ver;\n\t\t\t$.ajax({\n\t\t\t\tcontentType: setting.async.contentType,\n                cache: false,\n\t\t\t\ttype: setting.async.type,\n\t\t\t\turl: tools.apply(setting.async.url, [setting.treeId, node], setting.async.url),\n\t\t\t\tdata: setting.async.contentType.indexOf('application/json') > -1 ? JSON.stringify(tmpParam) : tmpParam,\n\t\t\t\tdataType: setting.async.dataType,\n\t\t\t\tsuccess: function(msg) {\n\t\t\t\t\tif (_tmpV != data.getRoot(setting)._ver) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tvar newNodes = [];\n\t\t\t\t\ttry {\n\t\t\t\t\t\tif (!msg || msg.length == 0) {\n\t\t\t\t\t\t\tnewNodes = [];\n\t\t\t\t\t\t} else if (typeof msg == \"string\") {\n\t\t\t\t\t\t\tnewNodes = eval(\"(\" + msg + \")\");\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tnewNodes = msg;\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch(err) {\n\t\t\t\t\t\tnewNodes = msg;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (node) {\n\t\t\t\t\t\tnode.isAjaxing = null;\n\t\t\t\t\t\tnode.zAsync = true;\n\t\t\t\t\t}\n\t\t\t\t\tview.setNodeLineIcos(setting, node);\n\t\t\t\t\tif (newNodes && newNodes !== \"\") {\n\t\t\t\t\t\tnewNodes = tools.apply(setting.async.dataFilter, [setting.treeId, node, newNodes], newNodes);\n\t\t\t\t\t\tview.addNodes(setting, node, -1, !!newNodes ? tools.clone(newNodes) : [], !!isSilent);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tview.addNodes(setting, node, -1, [], !!isSilent);\n\t\t\t\t\t}\n\t\t\t\t\tsetting.treeObj.trigger(consts.event.ASYNC_SUCCESS, [setting.treeId, node, msg]);\n\t\t\t\t\ttools.apply(callback);\n\t\t\t\t},\n\t\t\t\terror: function(XMLHttpRequest, textStatus, errorThrown) {\n\t\t\t\t\tif (_tmpV != data.getRoot(setting)._ver) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (node) node.isAjaxing = null;\n\t\t\t\t\tview.setNodeLineIcos(setting, node);\n\t\t\t\t\tsetting.treeObj.trigger(consts.event.ASYNC_ERROR, [setting.treeId, node, XMLHttpRequest, textStatus, errorThrown]);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn true;\n\t\t},\n\t\tcancelPreSelectedNode: function (setting, node, excludeNode) {\n\t\t\tvar list = data.getRoot(setting).curSelectedList,\n\t\t\t\ti, n;\n\t\t\tfor (i=list.length-1; i>=0; i--) {\n\t\t\t\tn = list[i];\n\t\t\t\tif (node === n || (!node && (!excludeNode || excludeNode !== n))) {\n\t\t\t\t\t$$(n, consts.id.A, setting).removeClass(consts.node.CURSELECTED);\n\t\t\t\t\tif (node) {\n\t\t\t\t\t\tdata.removeSelectedNode(setting, node);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlist.splice(i, 1);\n\t\t\t\t\t\tsetting.treeObj.trigger(consts.event.UNSELECTED, [setting.treeId, n]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tcreateNodeCallback: function(setting) {\n\t\t\tif (!!setting.callback.onNodeCreated || !!setting.view.addDiyDom) {\n\t\t\t\tvar root = data.getRoot(setting);\n\t\t\t\twhile (root.createdNodes.length>0) {\n\t\t\t\t\tvar node = root.createdNodes.shift();\n\t\t\t\t\ttools.apply(setting.view.addDiyDom, [setting.treeId, node]);\n\t\t\t\t\tif (!!setting.callback.onNodeCreated) {\n\t\t\t\t\t\tsetting.treeObj.trigger(consts.event.NODECREATED, [setting.treeId, node]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tcreateNodes: function(setting, level, nodes, parentNode, index) {\n\t\t\tif (!nodes || nodes.length == 0) return;\n\t\t\tvar root = data.getRoot(setting),\n\t\t\tchildKey = setting.data.key.children,\n\t\t\topenFlag = !parentNode || parentNode.open || !!$$(parentNode[childKey][0], setting).get(0);\n\t\t\troot.createdNodes = [];\n\t\t\tvar zTreeHtml = view.appendNodes(setting, level, nodes, parentNode, index, true, openFlag),\n\t\t\t\tparentObj, nextObj;\n\n\t\t\tif (!parentNode) {\n\t\t\t\tparentObj = setting.treeObj;\n\t\t\t\t//setting.treeObj.append(zTreeHtml.join(''));\n\t\t\t} else {\n\t\t\t\tvar ulObj = $$(parentNode, consts.id.UL, setting);\n\t\t\t\tif (ulObj.get(0)) {\n\t\t\t\t\tparentObj = ulObj;\n\t\t\t\t\t//ulObj.append(zTreeHtml.join(''));\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (parentObj) {\n\t\t\t\tif (index >= 0) {\n\t\t\t\t\tnextObj = parentObj.children()[index];\n\t\t\t\t}\n\t\t\t\tif (index >=0 && nextObj) {\n\t\t\t\t\t$(nextObj).before(zTreeHtml.join(''));\n\t\t\t\t} else {\n\t\t\t\t\tparentObj.append(zTreeHtml.join(''));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tview.createNodeCallback(setting);\n\t\t},\n\t\tdestroy: function(setting) {\n\t\t\tif (!setting) return;\n\t\t\tdata.initCache(setting);\n\t\t\tdata.initRoot(setting);\n\t\t\tevent.unbindTree(setting);\n\t\t\tevent.unbindEvent(setting);\n\t\t\tsetting.treeObj.empty();\n\t\t\tdelete settings[setting.treeId];\n\t\t},\n\t\texpandCollapseNode: function(setting, node, expandFlag, animateFlag, callback) {\n\t\t\tvar root = data.getRoot(setting),\n\t\t\tchildKey = setting.data.key.children;\n\t\t\tvar tmpCb, _callback;\n\t\t\tif (!node) {\n\t\t\t\ttools.apply(callback, []);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (root.expandTriggerFlag) {\n\t\t\t\t_callback = callback;\n\t\t\t\ttmpCb = function(){\n\t\t\t\t\tif (_callback) _callback();\n\t\t\t\t\tif (node.open) {\n\t\t\t\t\t\tsetting.treeObj.trigger(consts.event.EXPAND, [setting.treeId, node]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsetting.treeObj.trigger(consts.event.COLLAPSE, [setting.treeId, node]);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tcallback = tmpCb;\n\t\t\t\troot.expandTriggerFlag = false;\n\t\t\t}\n\t\t\tif (!node.open && node.isParent && ((!$$(node, consts.id.UL, setting).get(0)) || (node[childKey] && node[childKey].length>0 && !$$(node[childKey][0], setting).get(0)))) {\n\t\t\t\tview.appendParentULDom(setting, node);\n\t\t\t\tview.createNodeCallback(setting);\n\t\t\t}\n\t\t\tif (node.open == expandFlag) {\n\t\t\t\ttools.apply(callback, []);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar ulObj = $$(node, consts.id.UL, setting),\n\t\t\tswitchObj = $$(node, consts.id.SWITCH, setting),\n\t\t\ticoObj = $$(node, consts.id.ICON, setting);\n\n\t\t\tif (node.isParent) {\n\t\t\t\tnode.open = !node.open;\n\t\t\t\tif (node.iconOpen && node.iconClose) {\n\t\t\t\t\ticoObj.attr(\"style\", view.makeNodeIcoStyle(setting, node));\n\t\t\t\t}\n\n\t\t\t\tif (node.open) {\n\t\t\t\t\tview.replaceSwitchClass(node, switchObj, consts.folder.OPEN);\n\t\t\t\t\tview.replaceIcoClass(node, icoObj, consts.folder.OPEN);\n\t\t\t\t\tif (animateFlag == false || setting.view.expandSpeed == \"\") {\n\t\t\t\t\t\tulObj.show();\n\t\t\t\t\t\ttools.apply(callback, []);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (node[childKey] && node[childKey].length > 0) {\n\t\t\t\t\t\t\tulObj.slideDown(setting.view.expandSpeed, callback);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tulObj.show();\n\t\t\t\t\t\t\ttools.apply(callback, []);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tview.replaceSwitchClass(node, switchObj, consts.folder.CLOSE);\n\t\t\t\t\tview.replaceIcoClass(node, icoObj, consts.folder.CLOSE);\n\t\t\t\t\tif (animateFlag == false || setting.view.expandSpeed == \"\" || !(node[childKey] && node[childKey].length > 0)) {\n\t\t\t\t\t\tulObj.hide();\n\t\t\t\t\t\ttools.apply(callback, []);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tulObj.slideUp(setting.view.expandSpeed, callback);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\ttools.apply(callback, []);\n\t\t\t}\n\t\t},\n\t\texpandCollapseParentNode: function(setting, node, expandFlag, animateFlag, callback) {\n\t\t\tif (!node) return;\n\t\t\tif (!node.parentTId) {\n\t\t\t\tview.expandCollapseNode(setting, node, expandFlag, animateFlag, callback);\n\t\t\t\treturn;\n\t\t\t} else {\n\t\t\t\tview.expandCollapseNode(setting, node, expandFlag, animateFlag);\n\t\t\t}\n\t\t\tif (node.parentTId) {\n\t\t\t\tview.expandCollapseParentNode(setting, node.getParentNode(), expandFlag, animateFlag, callback);\n\t\t\t}\n\t\t},\n\t\texpandCollapseSonNode: function(setting, node, expandFlag, animateFlag, callback) {\n\t\t\tvar root = data.getRoot(setting),\n\t\t\tchildKey = setting.data.key.children,\n\t\t\ttreeNodes = (node) ? node[childKey]: root[childKey],\n\t\t\tselfAnimateSign = (node) ? false : animateFlag,\n\t\t\texpandTriggerFlag = data.getRoot(setting).expandTriggerFlag;\n\t\t\tdata.getRoot(setting).expandTriggerFlag = false;\n\t\t\tif (treeNodes) {\n\t\t\t\tfor (var i = 0, l = treeNodes.length; i < l; i++) {\n\t\t\t\t\tif (treeNodes[i]) view.expandCollapseSonNode(setting, treeNodes[i], expandFlag, selfAnimateSign);\n\t\t\t\t}\n\t\t\t}\n\t\t\tdata.getRoot(setting).expandTriggerFlag = expandTriggerFlag;\n\t\t\tview.expandCollapseNode(setting, node, expandFlag, animateFlag, callback );\n\t\t},\n\t\tisSelectedNode: function (setting, node) {\n\t\t\tif (!node) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar list = data.getRoot(setting).curSelectedList,\n\t\t\t\ti;\n\t\t\tfor (i=list.length-1; i>=0; i--) {\n\t\t\t\tif (node === list[i]) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\tmakeDOMNodeIcon: function(html, setting, node) {\n\t\t\tvar nameStr = data.getNodeName(setting, node),\n\t\t\tname = setting.view.nameIsHTML ? nameStr : nameStr.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');\n\t\t\thtml.push(\"<span id='\", node.tId, consts.id.ICON,\n\t\t\t\t\"' title='' treeNode\", consts.id.ICON,\" class='\", view.makeNodeIcoClass(setting, node),\n\t\t\t\t\"' style='\", view.makeNodeIcoStyle(setting, node), \"'></span><span id='\", node.tId, consts.id.SPAN,\n\t\t\t\t\"' class='\", consts.className.NAME,\n\t\t\t\t\"'>\",name,\"</span>\");\n\t\t},\n\t\tmakeDOMNodeLine: function(html, setting, node) {\n\t\t\thtml.push(\"<span id='\", node.tId, consts.id.SWITCH,\t\"' title='' class='\", view.makeNodeLineClass(setting, node), \"' treeNode\", consts.id.SWITCH,\"></span>\");\n\t\t},\n\t\tmakeDOMNodeMainAfter: function(html, setting, node) {\n\t\t\thtml.push(\"</li>\");\n\t\t},\n\t\tmakeDOMNodeMainBefore: function(html, setting, node) {\n\t\t\thtml.push(\"<li id='\", node.tId, \"' class='\", consts.className.LEVEL, node.level,\"' tabindex='0' hidefocus='true' treenode>\");\n\t\t},\n\t\tmakeDOMNodeNameAfter: function(html, setting, node) {\n\t\t\thtml.push(\"</a>\");\n\t\t},\n\t\tmakeDOMNodeNameBefore: function(html, setting, node) {\n\t\t\tvar title = data.getNodeTitle(setting, node),\n\t\t\turl = view.makeNodeUrl(setting, node),\n\t\t\tfontcss = view.makeNodeFontCss(setting, node),\n\t\t\tfontStyle = [];\n\t\t\tfor (var f in fontcss) {\n\t\t\t\tfontStyle.push(f, \":\", fontcss[f], \";\");\n\t\t\t}\n\t\t\thtml.push(\"<a id='\", node.tId, consts.id.A, \"' class='\", consts.className.LEVEL, node.level,\"' treeNode\", consts.id.A,\" onclick=\\\"\", (node.click || ''),\n\t\t\t\t\"\\\" \", ((url != null && url.length > 0) ? \"href='\" + url + \"'\" : \"\"), \" target='\",view.makeNodeTarget(node),\"' style='\", fontStyle.join(''),\n\t\t\t\t\"'\");\n\t\t\tif (tools.apply(setting.view.showTitle, [setting.treeId, node], setting.view.showTitle) && title) {html.push(\"title='\", title.replace(/'/g,\"&#39;\").replace(/</g,'&lt;').replace(/>/g,'&gt;'),\"'\");}\n\t\t\thtml.push(\">\");\n\t\t},\n\t\tmakeNodeFontCss: function(setting, node) {\n\t\t\tvar fontCss = tools.apply(setting.view.fontCss, [setting.treeId, node], setting.view.fontCss);\n\t\t\treturn (fontCss && ((typeof fontCss) != \"function\")) ? fontCss : {};\n\t\t},\n\t\tmakeNodeIcoClass: function(setting, node) {\n\t\t\tvar icoCss = [\"ico\"];\n\t\t\tif (!node.isAjaxing) {\n\t\t\t\ticoCss[0] = (node.iconSkin ? node.iconSkin + \"_\" : \"\") + icoCss[0];\n\t\t\t\tif (node.isParent) {\n\t\t\t\t\ticoCss.push(node.open ? consts.folder.OPEN : consts.folder.CLOSE);\n\t\t\t\t} else {\n\t\t\t\t\ticoCss.push(consts.folder.DOCU);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn consts.className.BUTTON + \" \" + icoCss.join('_');\n\t\t},\n\t\tmakeNodeIcoStyle: function(setting, node) {\n\t\t\tvar icoStyle = [];\n\t\t\tif (!node.isAjaxing) {\n\t\t\t\tvar icon = (node.isParent && node.iconOpen && node.iconClose) ? (node.open ? node.iconOpen : node.iconClose) : node[setting.data.key.icon];\n\t\t\t\tif (icon) icoStyle.push(\"background:url(\", icon, \") 0 0 no-repeat;\");\n\t\t\t\tif (setting.view.showIcon == false || !tools.apply(setting.view.showIcon, [setting.treeId, node], true)) {\n\t\t\t\t\ticoStyle.push(\"width:0px;height:0px;\");\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn icoStyle.join('');\n\t\t},\n\t\tmakeNodeLineClass: function(setting, node) {\n\t\t\tvar lineClass = [];\n\t\t\tif (setting.view.showLine) {\n\t\t\t\tif (node.level == 0 && node.isFirstNode && node.isLastNode) {\n\t\t\t\t\tlineClass.push(consts.line.ROOT);\n\t\t\t\t} else if (node.level == 0 && node.isFirstNode) {\n\t\t\t\t\tlineClass.push(consts.line.ROOTS);\n\t\t\t\t} else if (node.isLastNode) {\n\t\t\t\t\tlineClass.push(consts.line.BOTTOM);\n\t\t\t\t} else {\n\t\t\t\t\tlineClass.push(consts.line.CENTER);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tlineClass.push(consts.line.NOLINE);\n\t\t\t}\n\t\t\tif (node.isParent) {\n\t\t\t\tlineClass.push(node.open ? consts.folder.OPEN : consts.folder.CLOSE);\n\t\t\t} else {\n\t\t\t\tlineClass.push(consts.folder.DOCU);\n\t\t\t}\n\t\t\treturn view.makeNodeLineClassEx(node) + lineClass.join('_');\n\t\t},\n\t\tmakeNodeLineClassEx: function(node) {\n\t\t\treturn consts.className.BUTTON + \" \" + consts.className.LEVEL + node.level + \" \" + consts.className.SWITCH + \" \";\n\t\t},\n\t\tmakeNodeTarget: function(node) {\n\t\t\treturn (node.target || \"_blank\");\n\t\t},\n\t\tmakeNodeUrl: function(setting, node) {\n\t\t\tvar urlKey = setting.data.key.url;\n\t\t\treturn node[urlKey] ? node[urlKey] : null;\n\t\t},\n\t\tmakeUlHtml: function(setting, node, html, content) {\n\t\t\thtml.push(\"<ul id='\", node.tId, consts.id.UL, \"' class='\", consts.className.LEVEL, node.level, \" \", view.makeUlLineClass(setting, node), \"' style='display:\", (node.open ? \"block\": \"none\"),\"'>\");\n\t\t\thtml.push(content);\n\t\t\thtml.push(\"</ul>\");\n\t\t},\n\t\tmakeUlLineClass: function(setting, node) {\n\t\t\treturn ((setting.view.showLine && !node.isLastNode) ? consts.line.LINE : \"\");\n\t\t},\n\t\tremoveChildNodes: function(setting, node) {\n\t\t\tif (!node) return;\n\t\t\tvar childKey = setting.data.key.children,\n\t\t\tnodes = node[childKey];\n\t\t\tif (!nodes) return;\n\n\t\t\tfor (var i = 0, l = nodes.length; i < l; i++) {\n\t\t\t\tdata.removeNodeCache(setting, nodes[i]);\n\t\t\t}\n\t\t\tdata.removeSelectedNode(setting);\n\t\t\tdelete node[childKey];\n\n\t\t\tif (!setting.data.keep.parent) {\n\t\t\t\tnode.isParent = false;\n\t\t\t\tnode.open = false;\n\t\t\t\tvar tmp_switchObj = $$(node, consts.id.SWITCH, setting),\n\t\t\t\ttmp_icoObj = $$(node, consts.id.ICON, setting);\n\t\t\t\tview.replaceSwitchClass(node, tmp_switchObj, consts.folder.DOCU);\n\t\t\t\tview.replaceIcoClass(node, tmp_icoObj, consts.folder.DOCU);\n\t\t\t\t$$(node, consts.id.UL, setting).remove();\n\t\t\t} else {\n\t\t\t\t$$(node, consts.id.UL, setting).empty();\n\t\t\t}\n\t\t},\n\t\tscrollIntoView: function(dom) {\n\t\t\tif (!dom) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (dom.scrollIntoViewIfNeeded) {\n\t\t\t\tdom.scrollIntoViewIfNeeded();\n\t\t\t} else if (dom.scrollIntoView) {\n\t\t\t\tdom.scrollIntoView(false);\n\t\t\t} else {\n\t\t\t\ttry{dom.focus().blur();}catch(e){}\n\t\t\t}\n\t\t},\n\t\tsetFirstNode: function(setting, parentNode) {\n\t\t\tvar childKey = setting.data.key.children, childLength = parentNode[childKey].length;\n\t\t\tif ( childLength > 0) {\n\t\t\t\tparentNode[childKey][0].isFirstNode = true;\n\t\t\t}\n\t\t},\n\t\tsetLastNode: function(setting, parentNode) {\n\t\t\tvar childKey = setting.data.key.children, childLength = parentNode[childKey].length;\n\t\t\tif ( childLength > 0) {\n\t\t\t\tparentNode[childKey][childLength - 1].isLastNode = true;\n\t\t\t}\n\t\t},\n\t\tremoveNode: function(setting, node) {\n\t\t\tvar root = data.getRoot(setting),\n\t\t\tchildKey = setting.data.key.children,\n\t\t\tparentNode = (node.parentTId) ? node.getParentNode() : root;\n\n\t\t\tnode.isFirstNode = false;\n\t\t\tnode.isLastNode = false;\n\t\t\tnode.getPreNode = function() {return null;};\n\t\t\tnode.getNextNode = function() {return null;};\n\n\t\t\tif (!data.getNodeCache(setting, node.tId)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t$$(node, setting).remove();\n\t\t\tdata.removeNodeCache(setting, node);\n\t\t\tdata.removeSelectedNode(setting, node);\n\n\t\t\tfor (var i = 0, l = parentNode[childKey].length; i < l; i++) {\n\t\t\t\tif (parentNode[childKey][i].tId == node.tId) {\n\t\t\t\t\tparentNode[childKey].splice(i, 1);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tview.setFirstNode(setting, parentNode);\n\t\t\tview.setLastNode(setting, parentNode);\n\n\t\t\tvar tmp_ulObj,tmp_switchObj,tmp_icoObj,\n\t\t\tchildLength = parentNode[childKey].length;\n\n\t\t\t//repair nodes old parent\n\t\t\tif (!setting.data.keep.parent && childLength == 0) {\n\t\t\t\t//old parentNode has no child nodes\n\t\t\t\tparentNode.isParent = false;\n\t\t\t\tparentNode.open = false;\n\t\t\t\ttmp_ulObj = $$(parentNode, consts.id.UL, setting);\n\t\t\t\ttmp_switchObj = $$(parentNode, consts.id.SWITCH, setting);\n\t\t\t\ttmp_icoObj = $$(parentNode, consts.id.ICON, setting);\n\t\t\t\tview.replaceSwitchClass(parentNode, tmp_switchObj, consts.folder.DOCU);\n\t\t\t\tview.replaceIcoClass(parentNode, tmp_icoObj, consts.folder.DOCU);\n\t\t\t\ttmp_ulObj.css(\"display\", \"none\");\n\n\t\t\t} else if (setting.view.showLine && childLength > 0) {\n\t\t\t\t//old parentNode has child nodes\n\t\t\t\tvar newLast = parentNode[childKey][childLength - 1];\n\t\t\t\ttmp_ulObj = $$(newLast, consts.id.UL, setting);\n\t\t\t\ttmp_switchObj = $$(newLast, consts.id.SWITCH, setting);\n\t\t\t\ttmp_icoObj = $$(newLast, consts.id.ICON, setting);\n\t\t\t\tif (parentNode == root) {\n\t\t\t\t\tif (parentNode[childKey].length == 1) {\n\t\t\t\t\t\t//node was root, and ztree has only one root after move node\n\t\t\t\t\t\tview.replaceSwitchClass(newLast, tmp_switchObj, consts.line.ROOT);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar tmp_first_switchObj = $$(parentNode[childKey][0], consts.id.SWITCH, setting);\n\t\t\t\t\t\tview.replaceSwitchClass(parentNode[childKey][0], tmp_first_switchObj, consts.line.ROOTS);\n\t\t\t\t\t\tview.replaceSwitchClass(newLast, tmp_switchObj, consts.line.BOTTOM);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tview.replaceSwitchClass(newLast, tmp_switchObj, consts.line.BOTTOM);\n\t\t\t\t}\n\t\t\t\ttmp_ulObj.removeClass(consts.line.LINE);\n\t\t\t}\n\t\t},\n\t\treplaceIcoClass: function(node, obj, newName) {\n\t\t\tif (!obj || node.isAjaxing) return;\n\t\t\tvar tmpName = obj.attr(\"class\");\n\t\t\tif (tmpName == undefined) return;\n\t\t\tvar tmpList = tmpName.split(\"_\");\n\t\t\tswitch (newName) {\n\t\t\t\tcase consts.folder.OPEN:\n\t\t\t\tcase consts.folder.CLOSE:\n\t\t\t\tcase consts.folder.DOCU:\n\t\t\t\t\ttmpList[tmpList.length-1] = newName;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tobj.attr(\"class\", tmpList.join(\"_\"));\n\t\t},\n\t\treplaceSwitchClass: function(node, obj, newName) {\n\t\t\tif (!obj) return;\n\t\t\tvar tmpName = obj.attr(\"class\");\n\t\t\tif (tmpName == undefined) return;\n\t\t\tvar tmpList = tmpName.split(\"_\");\n\t\t\tswitch (newName) {\n\t\t\t\tcase consts.line.ROOT:\n\t\t\t\tcase consts.line.ROOTS:\n\t\t\t\tcase consts.line.CENTER:\n\t\t\t\tcase consts.line.BOTTOM:\n\t\t\t\tcase consts.line.NOLINE:\n\t\t\t\t\ttmpList[0] = view.makeNodeLineClassEx(node) + newName;\n\t\t\t\t\tbreak;\n\t\t\t\tcase consts.folder.OPEN:\n\t\t\t\tcase consts.folder.CLOSE:\n\t\t\t\tcase consts.folder.DOCU:\n\t\t\t\t\ttmpList[1] = newName;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tobj.attr(\"class\", tmpList.join(\"_\"));\n\t\t\tif (newName !== consts.folder.DOCU) {\n\t\t\t\tobj.removeAttr(\"disabled\");\n\t\t\t} else {\n\t\t\t\tobj.attr(\"disabled\", \"disabled\");\n\t\t\t}\n\t\t},\n\t\tselectNode: function(setting, node, addFlag) {\n\t\t\tif (!addFlag) {\n\t\t\t\tview.cancelPreSelectedNode(setting, null, node);\n\t\t\t}\n\t\t\t$$(node, consts.id.A, setting).addClass(consts.node.CURSELECTED);\n\t\t\tdata.addSelectedNode(setting, node);\n\t\t\tsetting.treeObj.trigger(consts.event.SELECTED, [setting.treeId, node]);\n\t\t},\n\t\tsetNodeFontCss: function(setting, treeNode) {\n\t\t\tvar aObj = $$(treeNode, consts.id.A, setting),\n\t\t\tfontCss = view.makeNodeFontCss(setting, treeNode);\n\t\t\tif (fontCss) {\n\t\t\t\taObj.css(fontCss);\n\t\t\t}\n\t\t},\n\t\tsetNodeLineIcos: function(setting, node) {\n\t\t\tif (!node) return;\n\t\t\tvar switchObj = $$(node, consts.id.SWITCH, setting),\n\t\t\tulObj = $$(node, consts.id.UL, setting),\n\t\t\ticoObj = $$(node, consts.id.ICON, setting),\n\t\t\tulLine = view.makeUlLineClass(setting, node);\n\t\t\tif (ulLine.length==0) {\n\t\t\t\tulObj.removeClass(consts.line.LINE);\n\t\t\t} else {\n\t\t\t\tulObj.addClass(ulLine);\n\t\t\t}\n\t\t\tswitchObj.attr(\"class\", view.makeNodeLineClass(setting, node));\n\t\t\tif (node.isParent) {\n\t\t\t\tswitchObj.removeAttr(\"disabled\");\n\t\t\t} else {\n\t\t\t\tswitchObj.attr(\"disabled\", \"disabled\");\n\t\t\t}\n\t\t\ticoObj.removeAttr(\"style\");\n\t\t\ticoObj.attr(\"style\", view.makeNodeIcoStyle(setting, node));\n\t\t\ticoObj.attr(\"class\", view.makeNodeIcoClass(setting, node));\n\t\t},\n\t\tsetNodeName: function(setting, node) {\n\t\t\tvar title = data.getNodeTitle(setting, node),\n\t\t\tnObj = $$(node, consts.id.SPAN, setting);\n\t\t\tnObj.empty();\n\t\t\tif (setting.view.nameIsHTML) {\n\t\t\t\tnObj.html(data.getNodeName(setting, node));\n\t\t\t} else {\n\t\t\t\tnObj.text(data.getNodeName(setting, node));\n\t\t\t}\n\t\t\tif (tools.apply(setting.view.showTitle, [setting.treeId, node], setting.view.showTitle)) {\n\t\t\t\tvar aObj = $$(node, consts.id.A, setting);\n\t\t\t\taObj.attr(\"title\", !title ? \"\" : title);\n\t\t\t}\n\t\t},\n\t\tsetNodeTarget: function(setting, node) {\n\t\t\tvar aObj = $$(node, consts.id.A, setting);\n\t\t\taObj.attr(\"target\", view.makeNodeTarget(node));\n\t\t},\n\t\tsetNodeUrl: function(setting, node) {\n\t\t\tvar aObj = $$(node, consts.id.A, setting),\n\t\t\turl = view.makeNodeUrl(setting, node);\n\t\t\tif (url == null || url.length == 0) {\n\t\t\t\taObj.removeAttr(\"href\");\n\t\t\t} else {\n\t\t\t\taObj.attr(\"href\", url);\n\t\t\t}\n\t\t},\n\t\tswitchNode: function(setting, node) {\n\t\t\tif (node.open || !tools.canAsync(setting, node)) {\n\t\t\t\tview.expandCollapseNode(setting, node, !node.open);\n\t\t\t} else if (setting.async.enable) {\n\t\t\t\tif (!view.asyncNode(setting, node)) {\n\t\t\t\t\tview.expandCollapseNode(setting, node, !node.open);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} else if (node) {\n\t\t\t\tview.expandCollapseNode(setting, node, !node.open);\n\t\t\t}\n\t\t}\n\t};\n\t// zTree defind\n\t$.fn.zTree = {\n\t\tconsts : _consts,\n\t\t_z : {\n\t\t\ttools: tools,\n\t\t\tview: view,\n\t\t\tevent: event,\n\t\t\tdata: data\n\t\t},\n\t\tgetZTreeObj: function(treeId) {\n\t\t\tvar o = data.getZTreeTools(treeId);\n\t\t\treturn o ? o : null;\n\t\t},\n\t\tdestroy: function(treeId) {\n\t\t\tif (!!treeId && treeId.length > 0) {\n\t\t\t\tview.destroy(data.getSetting(treeId));\n\t\t\t} else {\n\t\t\t\tfor(var s in settings) {\n\t\t\t\t\tview.destroy(settings[s]);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tinit: function(obj, zSetting, zNodes) {\n\t\t\tvar setting = tools.clone(_setting);\n\t\t\t$.extend(true, setting, zSetting);\n\t\t\tsetting.treeId = obj.attr(\"id\");\n\t\t\tsetting.treeObj = obj;\n\t\t\tsetting.treeObj.empty();\n\t\t\tsettings[setting.treeId] = setting;\n\t\t\t//For some older browser,(e.g., ie6)\n\t\t\tif(typeof document.body.style.maxHeight === \"undefined\") {\n\t\t\t\tsetting.view.expandSpeed = \"\";\n\t\t\t}\n\t\t\tdata.initRoot(setting);\n\t\t\tvar root = data.getRoot(setting),\n\t\t\tchildKey = setting.data.key.children;\n\t\t\tzNodes = zNodes ? tools.clone(tools.isArray(zNodes)? zNodes : [zNodes]) : [];\n\t\t\tif (setting.data.simpleData.enable) {\n\t\t\t\troot[childKey] = data.transformTozTreeFormat(setting, zNodes);\n\t\t\t} else {\n\t\t\t\troot[childKey] = zNodes;\n\t\t\t}\n\n\t\t\tdata.initCache(setting);\n\t\t\tevent.unbindTree(setting);\n\t\t\tevent.bindTree(setting);\n\t\t\tevent.unbindEvent(setting);\n\t\t\tevent.bindEvent(setting);\n\n\t\t\tvar zTreeTools = {\n\t\t\t\tsetting : setting,\n\t\t\t\taddNodes : function(parentNode, index, newNodes, isSilent) {\n\t\t\t\t\tif (!parentNode) parentNode = null;\n\t\t\t\t\tif (parentNode && !parentNode.isParent && setting.data.keep.leaf) return null;\n\n\t\t\t\t\tvar i = parseInt(index, 10);\n\t\t\t\t\tif (isNaN(i)) {\n\t\t\t\t\t\tisSilent = !!newNodes;\n\t\t\t\t\t\tnewNodes = index;\n\t\t\t\t\t\tindex = -1;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tindex = i;\n\t\t\t\t\t}\n\t\t\t\t\tif (!newNodes) return null;\n\n\n\t\t\t\t\tvar xNewNodes = tools.clone(tools.isArray(newNodes)? newNodes: [newNodes]);\n\t\t\t\t\tfunction addCallback() {\n\t\t\t\t\t\tview.addNodes(setting, parentNode, index, xNewNodes, (isSilent==true));\n\t\t\t\t\t}\n\n\t\t\t\t\tif (tools.canAsync(setting, parentNode)) {\n\t\t\t\t\t\tview.asyncNode(setting, parentNode, isSilent, addCallback);\n\t\t\t\t\t} else {\n\t\t\t\t\t\taddCallback();\n\t\t\t\t\t}\n\t\t\t\t\treturn xNewNodes;\n\t\t\t\t},\n\t\t\t\tcancelSelectedNode : function(node) {\n\t\t\t\t\tview.cancelPreSelectedNode(setting, node);\n\t\t\t\t},\n\t\t\t\tdestroy : function() {\n\t\t\t\t\tview.destroy(setting);\n\t\t\t\t},\n\t\t\t\texpandAll : function(expandFlag) {\n\t\t\t\t\texpandFlag = !!expandFlag;\n\t\t\t\t\tview.expandCollapseSonNode(setting, null, expandFlag, true);\n\t\t\t\t\treturn expandFlag;\n\t\t\t\t},\n\t\t\t\texpandNode : function(node, expandFlag, sonSign, focus, callbackFlag) {\n\t\t\t\t\tif (!node || !node.isParent) return null;\n\t\t\t\t\tif (expandFlag !== true && expandFlag !== false) {\n\t\t\t\t\t\texpandFlag = !node.open;\n\t\t\t\t\t}\n\t\t\t\t\tcallbackFlag = !!callbackFlag;\n\n\t\t\t\t\tif (callbackFlag && expandFlag && (tools.apply(setting.callback.beforeExpand, [setting.treeId, node], true) == false)) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t} else if (callbackFlag && !expandFlag && (tools.apply(setting.callback.beforeCollapse, [setting.treeId, node], true) == false)) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\t\t\t\t\tif (expandFlag && node.parentTId) {\n\t\t\t\t\t\tview.expandCollapseParentNode(setting, node.getParentNode(), expandFlag, false);\n\t\t\t\t\t}\n\t\t\t\t\tif (expandFlag === node.open && !sonSign) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\n\t\t\t\t\tdata.getRoot(setting).expandTriggerFlag = callbackFlag;\n\t\t\t\t\tif (!tools.canAsync(setting, node) && sonSign) {\n\t\t\t\t\t\tview.expandCollapseSonNode(setting, node, expandFlag, true, showNodeFocus);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnode.open = !expandFlag;\n\t\t\t\t\t\tview.switchNode(this.setting, node);\n\t\t\t\t\t\tshowNodeFocus();\n\t\t\t\t\t}\n\t\t\t\t\treturn expandFlag;\n\n\t\t\t\t\tfunction showNodeFocus() {\n\t\t\t\t\t\tvar a = $$(node, setting).get(0);\n\t\t\t\t\t\tif (a && focus !== false) {\n\t\t\t\t\t\t\tview.scrollIntoView(a);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tgetNodes : function() {\n\t\t\t\t\treturn data.getNodes(setting);\n\t\t\t\t},\n\t\t\t\tgetNodeByParam : function(key, value, parentNode) {\n\t\t\t\t\tif (!key) return null;\n\t\t\t\t\treturn data.getNodeByParam(setting, parentNode?parentNode[setting.data.key.children]:data.getNodes(setting), key, value);\n\t\t\t\t},\n\t\t\t\tgetNodeByTId : function(tId) {\n\t\t\t\t\treturn data.getNodeCache(setting, tId);\n\t\t\t\t},\n\t\t\t\tgetNodesByParam : function(key, value, parentNode) {\n\t\t\t\t\tif (!key) return null;\n\t\t\t\t\treturn data.getNodesByParam(setting, parentNode?parentNode[setting.data.key.children]:data.getNodes(setting), key, value);\n\t\t\t\t},\n\t\t\t\tgetNodesByParamFuzzy : function(key, value, parentNode) {\n\t\t\t\t\tif (!key) return null;\n\t\t\t\t\treturn data.getNodesByParamFuzzy(setting, parentNode?parentNode[setting.data.key.children]:data.getNodes(setting), key, value);\n\t\t\t\t},\n\t\t\t\tgetNodesByFilter: function(filter, isSingle, parentNode, invokeParam) {\n\t\t\t\t\tisSingle = !!isSingle;\n\t\t\t\t\tif (!filter || (typeof filter != \"function\")) return (isSingle ? null : []);\n\t\t\t\t\treturn data.getNodesByFilter(setting, parentNode?parentNode[setting.data.key.children]:data.getNodes(setting), filter, isSingle, invokeParam);\n\t\t\t\t},\n\t\t\t\tgetNodeIndex : function(node) {\n\t\t\t\t\tif (!node) return null;\n\t\t\t\t\tvar childKey = setting.data.key.children,\n\t\t\t\t\tparentNode = (node.parentTId) ? node.getParentNode() : data.getRoot(setting);\n\t\t\t\t\tfor (var i=0, l = parentNode[childKey].length; i < l; i++) {\n\t\t\t\t\t\tif (parentNode[childKey][i] == node) return i;\n\t\t\t\t\t}\n\t\t\t\t\treturn -1;\n\t\t\t\t},\n\t\t\t\tgetSelectedNodes : function() {\n\t\t\t\t\tvar r = [], list = data.getRoot(setting).curSelectedList;\n\t\t\t\t\tfor (var i=0, l=list.length; i<l; i++) {\n\t\t\t\t\t\tr.push(list[i]);\n\t\t\t\t\t}\n\t\t\t\t\treturn r;\n\t\t\t\t},\n\t\t\t\tisSelectedNode : function(node) {\n\t\t\t\t\treturn data.isSelectedNode(setting, node);\n\t\t\t\t},\n\t\t\t\treAsyncChildNodes : function(parentNode, reloadType, isSilent) {\n\t\t\t\t\tif (!this.setting.async.enable) return;\n\t\t\t\t\tvar isRoot = !parentNode;\n\t\t\t\t\tif (isRoot) {\n\t\t\t\t\t\tparentNode = data.getRoot(setting);\n\t\t\t\t\t}\n\t\t\t\t\tif (reloadType==\"refresh\") {\n\t\t\t\t\t\tvar childKey = this.setting.data.key.children;\n\t\t\t\t\t\tfor (var i = 0, l = parentNode[childKey] ? parentNode[childKey].length : 0; i < l; i++) {\n\t\t\t\t\t\t\tdata.removeNodeCache(setting, parentNode[childKey][i]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdata.removeSelectedNode(setting);\n\t\t\t\t\t\tparentNode[childKey] = [];\n\t\t\t\t\t\tif (isRoot) {\n\t\t\t\t\t\t\tthis.setting.treeObj.empty();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tvar ulObj = $$(parentNode, consts.id.UL, setting);\n\t\t\t\t\t\t\tulObj.empty();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tview.asyncNode(this.setting, isRoot? null:parentNode, !!isSilent);\n\t\t\t\t},\n\t\t\t\trefresh : function() {\n\t\t\t\t\tthis.setting.treeObj.empty();\n\t\t\t\t\tvar root = data.getRoot(setting),\n\t\t\t\t\tnodes = root[setting.data.key.children]\n\t\t\t\t\tdata.initRoot(setting);\n\t\t\t\t\troot[setting.data.key.children] = nodes\n\t\t\t\t\tdata.initCache(setting);\n\t\t\t\t\tview.createNodes(setting, 0, root[setting.data.key.children], null, -1);\n\t\t\t\t},\n\t\t\t\tremoveChildNodes : function(node) {\n\t\t\t\t\tif (!node) return null;\n\t\t\t\t\tvar childKey = setting.data.key.children,\n\t\t\t\t\tnodes = node[childKey];\n\t\t\t\t\tview.removeChildNodes(setting, node);\n\t\t\t\t\treturn nodes ? nodes : null;\n\t\t\t\t},\n\t\t\t\tremoveNode : function(node, callbackFlag) {\n\t\t\t\t\tif (!node) return;\n\t\t\t\t\tcallbackFlag = !!callbackFlag;\n\t\t\t\t\tif (callbackFlag && tools.apply(setting.callback.beforeRemove, [setting.treeId, node], true) == false) return;\n\t\t\t\t\tview.removeNode(setting, node);\n\t\t\t\t\tif (callbackFlag) {\n\t\t\t\t\t\tthis.setting.treeObj.trigger(consts.event.REMOVE, [setting.treeId, node]);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tselectNode : function(node, addFlag, isSilent) {\n\t\t\t\t\tif (!node) return;\n\t\t\t\t\tif (tools.uCanDo(setting)) {\n\t\t\t\t\t\taddFlag = setting.view.selectedMulti && addFlag;\n\t\t\t\t\t\tif (node.parentTId) {\n\t\t\t\t\t\t\tview.expandCollapseParentNode(setting, node.getParentNode(), true, false, showNodeFocus);\n\t\t\t\t\t\t} else if (!isSilent) {\n\t\t\t\t\t\t\ttry{$$(node, setting).focus().blur();}catch(e){}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tview.selectNode(setting, node, addFlag);\n\t\t\t\t\t}\n\n\t\t\t\t\tfunction showNodeFocus() {\n\t\t\t\t\t\tif (isSilent) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvar a = $$(node, setting).get(0);\n\t\t\t\t\t\tview.scrollIntoView(a);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\ttransformTozTreeNodes : function(simpleNodes) {\n\t\t\t\t\treturn data.transformTozTreeFormat(setting, simpleNodes);\n\t\t\t\t},\n\t\t\t\ttransformToArray : function(nodes) {\n\t\t\t\t\treturn data.transformToArrayFormat(setting, nodes);\n\t\t\t\t},\n\t\t\t\tupdateNode : function(node, checkTypeFlag) {\n\t\t\t\t\tif (!node) return;\n\t\t\t\t\tvar nObj = $$(node, setting);\n\t\t\t\t\tif (nObj.get(0) && tools.uCanDo(setting)) {\n\t\t\t\t\t\tview.setNodeName(setting, node);\n\t\t\t\t\t\tview.setNodeTarget(setting, node);\n\t\t\t\t\t\tview.setNodeUrl(setting, node);\n\t\t\t\t\t\tview.setNodeLineIcos(setting, node);\n\t\t\t\t\t\tview.setNodeFontCss(setting, node);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\troot.treeTools = zTreeTools;\n\t\t\tdata.setZTreeTools(setting, zTreeTools);\n\n\t\t\tif (root[childKey] && root[childKey].length > 0) {\n\t\t\t\tview.createNodes(setting, 0, root[childKey], null, -1);\n\t\t\t} else if (setting.async.enable && setting.async.url && setting.async.url !== '') {\n\t\t\t\tview.asyncNode(setting);\n\t\t\t}\n\t\t\treturn zTreeTools;\n\t\t}\n\t};\n\n\tvar zt = $.fn.zTree,\n\t$$ = tools.$,\n\tconsts = zt.consts;\n})(jQuery);\n/*\n * JQuery zTree excheck v3.5.25\n * http://zTree.me/\n *\n * Copyright (c) 2010 Hunter.z\n *\n * Licensed same as jquery - MIT License\n * http://www.opensource.org/licenses/mit-license.php\n *\n * email: hunter.z@263.net\n * Date: 2016-09-27\n */\n(function($){\n\t//default consts of excheck\n\tvar _consts = {\n\t\tevent: {\n\t\t\tCHECK: \"ztree_check\"\n\t\t},\n\t\tid: {\n\t\t\tCHECK: \"_check\"\n\t\t},\n\t\tcheckbox: {\n\t\t\tSTYLE: \"checkbox\",\n\t\t\tDEFAULT: \"chk\",\n\t\t\tDISABLED: \"disable\",\n\t\t\tFALSE: \"false\",\n\t\t\tTRUE: \"true\",\n\t\t\tFULL: \"full\",\n\t\t\tPART: \"part\",\n\t\t\tFOCUS: \"focus\"\n\t\t},\n\t\tradio: {\n\t\t\tSTYLE: \"radio\",\n\t\t\tTYPE_ALL: \"all\",\n\t\t\tTYPE_LEVEL: \"level\"\n\t\t}\n\t},\n\t//default setting of excheck\n\t_setting = {\n\t\tcheck: {\n\t\t\tenable: false,\n\t\t\tautoCheckTrigger: false,\n\t\t\tchkStyle: _consts.checkbox.STYLE,\n\t\t\tnocheckInherit: false,\n\t\t\tchkDisabledInherit: false,\n\t\t\tradioType: _consts.radio.TYPE_LEVEL,\n\t\t\tchkboxType: {\n\t\t\t\t\"Y\": \"ps\",\n\t\t\t\t\"N\": \"ps\"\n\t\t\t}\n\t\t},\n\t\tdata: {\n\t\t\tkey: {\n\t\t\t\tchecked: \"checked\"\n\t\t\t}\n\t\t},\n\t\tcallback: {\n\t\t\tbeforeCheck:null,\n\t\t\tonCheck:null\n\t\t}\n\t},\n\t//default root of excheck\n\t_initRoot = function (setting) {\n\t\tvar r = data.getRoot(setting);\n\t\tr.radioCheckedList = [];\n\t},\n\t//default cache of excheck\n\t_initCache = function(treeId) {},\n\t//default bind event of excheck\n\t_bindEvent = function(setting) {\n\t\tvar o = setting.treeObj,\n\t\tc = consts.event;\n\t\to.bind(c.CHECK, function (event, srcEvent, treeId, node) {\n\t\t\tevent.srcEvent = srcEvent;\n\t\t\ttools.apply(setting.callback.onCheck, [event, treeId, node]);\n\t\t});\n\t},\n\t_unbindEvent = function(setting) {\n\t\tvar o = setting.treeObj,\n\t\tc = consts.event;\n\t\to.unbind(c.CHECK);\n\t},\n\t//default event proxy of excheck\n\t_eventProxy = function(e) {\n\t\tvar target = e.target,\n\t\tsetting = data.getSetting(e.data.treeId),\n\t\ttId = \"\", node = null,\n\t\tnodeEventType = \"\", treeEventType = \"\",\n\t\tnodeEventCallback = null, treeEventCallback = null;\n\n\t\tif (tools.eqs(e.type, \"mouseover\")) {\n\t\t\tif (setting.check.enable && tools.eqs(target.tagName, \"span\") && target.getAttribute(\"treeNode\"+ consts.id.CHECK) !== null) {\n\t\t\t\ttId = tools.getNodeMainDom(target).id;\n\t\t\t\tnodeEventType = \"mouseoverCheck\";\n\t\t\t}\n\t\t} else if (tools.eqs(e.type, \"mouseout\")) {\n\t\t\tif (setting.check.enable && tools.eqs(target.tagName, \"span\") && target.getAttribute(\"treeNode\"+ consts.id.CHECK) !== null) {\n\t\t\t\ttId = tools.getNodeMainDom(target).id;\n\t\t\t\tnodeEventType = \"mouseoutCheck\";\n\t\t\t}\n\t\t} else if (tools.eqs(e.type, \"click\")) {\n\t\t\tif (setting.check.enable && tools.eqs(target.tagName, \"span\") && target.getAttribute(\"treeNode\"+ consts.id.CHECK) !== null) {\n\t\t\t\ttId = tools.getNodeMainDom(target).id;\n\t\t\t\tnodeEventType = \"checkNode\";\n\t\t\t}\n\t\t}\n\t\tif (tId.length>0) {\n\t\t\tnode = data.getNodeCache(setting, tId);\n\t\t\tswitch (nodeEventType) {\n\t\t\t\tcase \"checkNode\" :\n\t\t\t\t\tnodeEventCallback = _handler.onCheckNode;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"mouseoverCheck\" :\n\t\t\t\t\tnodeEventCallback = _handler.onMouseoverCheck;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"mouseoutCheck\" :\n\t\t\t\t\tnodeEventCallback = _handler.onMouseoutCheck;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tvar proxyResult = {\n\t\t\tstop: nodeEventType === \"checkNode\",\n\t\t\tnode: node,\n\t\t\tnodeEventType: nodeEventType,\n\t\t\tnodeEventCallback: nodeEventCallback,\n\t\t\ttreeEventType: treeEventType,\n\t\t\ttreeEventCallback: treeEventCallback\n\t\t};\n\t\treturn proxyResult\n\t},\n\t//default init node of excheck\n\t_initNode = function(setting, level, n, parentNode, isFirstNode, isLastNode, openFlag) {\n\t\tif (!n) return;\n\t\tvar checkedKey = setting.data.key.checked;\n\t\tif (typeof n[checkedKey] == \"string\") n[checkedKey] = tools.eqs(n[checkedKey], \"true\");\n\t\tn[checkedKey] = !!n[checkedKey];\n\t\tn.checkedOld = n[checkedKey];\n\t\tif (typeof n.nocheck == \"string\") n.nocheck = tools.eqs(n.nocheck, \"true\");\n\t\tn.nocheck = !!n.nocheck || (setting.check.nocheckInherit && parentNode && !!parentNode.nocheck);\n\t\tif (typeof n.chkDisabled == \"string\") n.chkDisabled = tools.eqs(n.chkDisabled, \"true\");\n\t\tn.chkDisabled = !!n.chkDisabled || (setting.check.chkDisabledInherit && parentNode && !!parentNode.chkDisabled);\n\t\tif (typeof n.halfCheck == \"string\") n.halfCheck = tools.eqs(n.halfCheck, \"true\");\n\t\tn.halfCheck = !!n.halfCheck;\n\t\tn.check_Child_State = -1;\n\t\tn.check_Focus = false;\n\t\tn.getCheckStatus = function() {return data.getCheckStatus(setting, n);};\n\n\t\tif (setting.check.chkStyle == consts.radio.STYLE && setting.check.radioType == consts.radio.TYPE_ALL && n[checkedKey] ) {\n\t\t\tvar r = data.getRoot(setting);\n\t\t\tr.radioCheckedList.push(n);\n\t\t}\n\t},\n\t//add dom for check\n\t_beforeA = function(setting, node, html) {\n\t\tvar checkedKey = setting.data.key.checked;\n\t\tif (setting.check.enable) {\n\t\t\tdata.makeChkFlag(setting, node);\n\t\t\thtml.push(\"<span ID='\", node.tId, consts.id.CHECK, \"' class='\", view.makeChkClass(setting, node), \"' treeNode\", consts.id.CHECK, (node.nocheck === true?\" style='display:none;'\":\"\"),\"></span>\");\n\t\t}\n\t},\n\t//update zTreeObj, add method of check\n\t_zTreeTools = function(setting, zTreeTools) {\n\t\tzTreeTools.checkNode = function(node, checked, checkTypeFlag, callbackFlag) {\n\t\t\tvar checkedKey = this.setting.data.key.checked;\n\t\t\tif (node.chkDisabled === true) return;\n\t\t\tif (checked !== true && checked !== false) {\n\t\t\t\tchecked = !node[checkedKey];\n\t\t\t}\n\t\t\tcallbackFlag = !!callbackFlag;\n\n\t\t\tif (node[checkedKey] === checked && !checkTypeFlag) {\n\t\t\t\treturn;\n\t\t\t} else if (callbackFlag && tools.apply(this.setting.callback.beforeCheck, [this.setting.treeId, node], true) == false) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (tools.uCanDo(this.setting) && this.setting.check.enable && node.nocheck !== true) {\n\t\t\t\tnode[checkedKey] = checked;\n\t\t\t\tvar checkObj = $$(node, consts.id.CHECK, this.setting);\n\t\t\t\tif (checkTypeFlag || this.setting.check.chkStyle === consts.radio.STYLE) view.checkNodeRelation(this.setting, node);\n\t\t\t\tview.setChkClass(this.setting, checkObj, node);\n\t\t\t\tview.repairParentChkClassWithSelf(this.setting, node);\n\t\t\t\tif (callbackFlag) {\n\t\t\t\t\tthis.setting.treeObj.trigger(consts.event.CHECK, [null, this.setting.treeId, node]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tzTreeTools.checkAllNodes = function(checked) {\n\t\t\tview.repairAllChk(this.setting, !!checked);\n\t\t}\n\n\t\tzTreeTools.getCheckedNodes = function(checked) {\n\t\t\tvar childKey = this.setting.data.key.children;\n\t\t\tchecked = (checked !== false);\n\t\t\treturn data.getTreeCheckedNodes(this.setting, data.getRoot(this.setting)[childKey], checked);\n\t\t}\n\n\t\tzTreeTools.getChangeCheckedNodes = function() {\n\t\t\tvar childKey = this.setting.data.key.children;\n\t\t\treturn data.getTreeChangeCheckedNodes(this.setting, data.getRoot(this.setting)[childKey]);\n\t\t}\n\n\t\tzTreeTools.setChkDisabled = function(node, disabled, inheritParent, inheritChildren) {\n\t\t\tdisabled = !!disabled;\n\t\t\tinheritParent = !!inheritParent;\n\t\t\tinheritChildren = !!inheritChildren;\n\t\t\tview.repairSonChkDisabled(this.setting, node, disabled, inheritChildren);\n\t\t\tview.repairParentChkDisabled(this.setting, node.getParentNode(), disabled, inheritParent);\n\t\t}\n\n\t\tvar _updateNode = zTreeTools.updateNode;\n\t\tzTreeTools.updateNode = function(node, checkTypeFlag) {\n\t\t\tif (_updateNode) _updateNode.apply(zTreeTools, arguments);\n\t\t\tif (!node || !this.setting.check.enable) return;\n\t\t\tvar nObj = $$(node, this.setting);\n\t\t\tif (nObj.get(0) && tools.uCanDo(this.setting)) {\n\t\t\t\tvar checkObj = $$(node, consts.id.CHECK, this.setting);\n\t\t\t\tif (checkTypeFlag == true || this.setting.check.chkStyle === consts.radio.STYLE) view.checkNodeRelation(this.setting, node);\n\t\t\t\tview.setChkClass(this.setting, checkObj, node);\n\t\t\t\tview.repairParentChkClassWithSelf(this.setting, node);\n\t\t\t}\n\t\t}\n\t},\n\t//method of operate data\n\t_data = {\n\t\tgetRadioCheckedList: function(setting) {\n\t\t\tvar checkedList = data.getRoot(setting).radioCheckedList;\n\t\t\tfor (var i=0, j=checkedList.length; i<j; i++) {\n\t\t\t\tif(!data.getNodeCache(setting, checkedList[i].tId)) {\n\t\t\t\t\tcheckedList.splice(i, 1);\n\t\t\t\t\ti--; j--;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn checkedList;\n\t\t},\n\t\tgetCheckStatus: function(setting, node) {\n\t\t\tif (!setting.check.enable || node.nocheck || node.chkDisabled) return null;\n\t\t\tvar checkedKey = setting.data.key.checked,\n\t\t\tr = {\n\t\t\t\tchecked: node[checkedKey],\n\t\t\t\thalf: node.halfCheck ? node.halfCheck : (setting.check.chkStyle == consts.radio.STYLE ? (node.check_Child_State === 2) : (node[checkedKey] ? (node.check_Child_State > -1 && node.check_Child_State < 2) : (node.check_Child_State > 0)))\n\t\t\t};\n\t\t\treturn r;\n\t\t},\n\t\tgetTreeCheckedNodes: function(setting, nodes, checked, results) {\n\t\t\tif (!nodes) return [];\n\t\t\tvar childKey = setting.data.key.children,\n\t\t\tcheckedKey = setting.data.key.checked,\n\t\t\tonlyOne = (checked && setting.check.chkStyle == consts.radio.STYLE && setting.check.radioType == consts.radio.TYPE_ALL);\n\t\t\tresults = !results ? [] : results;\n\t\t\tfor (var i = 0, l = nodes.length; i < l; i++) {\n\t\t\t\tif (nodes[i].nocheck !== true && nodes[i].chkDisabled !== true && nodes[i][checkedKey] == checked) {\n\t\t\t\t\tresults.push(nodes[i]);\n\t\t\t\t\tif(onlyOne) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tdata.getTreeCheckedNodes(setting, nodes[i][childKey], checked, results);\n\t\t\t\tif(onlyOne && results.length > 0) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn results;\n\t\t},\n\t\tgetTreeChangeCheckedNodes: function(setting, nodes, results) {\n\t\t\tif (!nodes) return [];\n\t\t\tvar childKey = setting.data.key.children,\n\t\t\tcheckedKey = setting.data.key.checked;\n\t\t\tresults = !results ? [] : results;\n\t\t\tfor (var i = 0, l = nodes.length; i < l; i++) {\n\t\t\t\tif (nodes[i].nocheck !== true && nodes[i].chkDisabled !== true && nodes[i][checkedKey] != nodes[i].checkedOld) {\n\t\t\t\t\tresults.push(nodes[i]);\n\t\t\t\t}\n\t\t\t\tdata.getTreeChangeCheckedNodes(setting, nodes[i][childKey], results);\n\t\t\t}\n\t\t\treturn results;\n\t\t},\n\t\tmakeChkFlag: function(setting, node) {\n\t\t\tif (!node) return;\n\t\t\tvar childKey = setting.data.key.children,\n\t\t\tcheckedKey = setting.data.key.checked,\n\t\t\tchkFlag = -1;\n\t\t\tif (node[childKey]) {\n\t\t\t\tfor (var i = 0, l = node[childKey].length; i < l; i++) {\n\t\t\t\t\tvar cNode = node[childKey][i];\n\t\t\t\t\tvar tmp = -1;\n\t\t\t\t\tif (setting.check.chkStyle == consts.radio.STYLE) {\n\t\t\t\t\t\tif (cNode.nocheck === true || cNode.chkDisabled === true) {\n\t\t\t\t\t\t\ttmp = cNode.check_Child_State;\n\t\t\t\t\t\t} else if (cNode.halfCheck === true) {\n\t\t\t\t\t\t\ttmp = 2;\n\t\t\t\t\t\t} else if (cNode[checkedKey]) {\n\t\t\t\t\t\t\ttmp = 2;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttmp = cNode.check_Child_State > 0 ? 2:0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (tmp == 2) {\n\t\t\t\t\t\t\tchkFlag = 2; break;\n\t\t\t\t\t\t} else if (tmp == 0){\n\t\t\t\t\t\t\tchkFlag = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (setting.check.chkStyle == consts.checkbox.STYLE) {\n\t\t\t\t\t\tif (cNode.nocheck === true || cNode.chkDisabled === true) {\n\t\t\t\t\t\t\ttmp = cNode.check_Child_State;\n\t\t\t\t\t\t} else if (cNode.halfCheck === true) {\n\t\t\t\t\t\t\ttmp = 1;\n\t\t\t\t\t\t} else if (cNode[checkedKey] ) {\n\t\t\t\t\t\t\ttmp = (cNode.check_Child_State === -1 || cNode.check_Child_State === 2) ? 2 : 1;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttmp = (cNode.check_Child_State > 0) ? 1 : 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (tmp === 1) {\n\t\t\t\t\t\t\tchkFlag = 1; break;\n\t\t\t\t\t\t} else if (tmp === 2 && chkFlag > -1 && i > 0 && tmp !== chkFlag) {\n\t\t\t\t\t\t\tchkFlag = 1; break;\n\t\t\t\t\t\t} else if (chkFlag === 2 && tmp > -1 && tmp < 2) {\n\t\t\t\t\t\t\tchkFlag = 1; break;\n\t\t\t\t\t\t} else if (tmp > -1) {\n\t\t\t\t\t\t\tchkFlag = tmp;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tnode.check_Child_State = chkFlag;\n\t\t}\n\t},\n\t//method of event proxy\n\t_event = {\n\n\t},\n\t//method of event handler\n\t_handler = {\n\t\tonCheckNode: function (event, node) {\n\t\t\tif (node.chkDisabled === true) return false;\n\t\t\tvar setting = data.getSetting(event.data.treeId),\n\t\t\tcheckedKey = setting.data.key.checked;\n\t\t\tif (tools.apply(setting.callback.beforeCheck, [setting.treeId, node], true) == false) return true;\n\t\t\tnode[checkedKey] = !node[checkedKey];\n\t\t\tview.checkNodeRelation(setting, node);\n\t\t\tvar checkObj = $$(node, consts.id.CHECK, setting);\n\t\t\tview.setChkClass(setting, checkObj, node);\n\t\t\tview.repairParentChkClassWithSelf(setting, node);\n\t\t\tsetting.treeObj.trigger(consts.event.CHECK, [event, setting.treeId, node]);\n\t\t\treturn true;\n\t\t},\n\t\tonMouseoverCheck: function(event, node) {\n\t\t\tif (node.chkDisabled === true) return false;\n\t\t\tvar setting = data.getSetting(event.data.treeId),\n\t\t\tcheckObj = $$(node, consts.id.CHECK, setting);\n\t\t\tnode.check_Focus = true;\n\t\t\tview.setChkClass(setting, checkObj, node);\n\t\t\treturn true;\n\t\t},\n\t\tonMouseoutCheck: function(event, node) {\n\t\t\tif (node.chkDisabled === true) return false;\n\t\t\tvar setting = data.getSetting(event.data.treeId),\n\t\t\tcheckObj = $$(node, consts.id.CHECK, setting);\n\t\t\tnode.check_Focus = false;\n\t\t\tview.setChkClass(setting, checkObj, node);\n\t\t\treturn true;\n\t\t}\n\t},\n\t//method of tools for zTree\n\t_tools = {\n\n\t},\n\t//method of operate ztree dom\n\t_view = {\n\t\tcheckNodeRelation: function(setting, node) {\n\t\t\tvar pNode, i, l,\n\t\t\tchildKey = setting.data.key.children,\n\t\t\tcheckedKey = setting.data.key.checked,\n\t\t\tr = consts.radio;\n\t\t\tif (setting.check.chkStyle == r.STYLE) {\n\t\t\t\tvar checkedList = data.getRadioCheckedList(setting);\n\t\t\t\tif (node[checkedKey]) {\n\t\t\t\t\tif (setting.check.radioType == r.TYPE_ALL) {\n\t\t\t\t\t\tfor (i = checkedList.length-1; i >= 0; i--) {\n\t\t\t\t\t\t\tpNode = checkedList[i];\n\t\t\t\t\t\t\tif (pNode[checkedKey] && pNode != node) {\n\t\t\t\t\t\t\t\tpNode[checkedKey] = false;\n\t\t\t\t\t\t\t\tcheckedList.splice(i, 1);\n\n\t\t\t\t\t\t\t\tview.setChkClass(setting, $$(pNode, consts.id.CHECK, setting), pNode);\n\t\t\t\t\t\t\t\tif (pNode.parentTId != node.parentTId) {\n\t\t\t\t\t\t\t\t\tview.repairParentChkClassWithSelf(setting, pNode);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcheckedList.push(node);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar parentNode = (node.parentTId) ? node.getParentNode() : data.getRoot(setting);\n\t\t\t\t\t\tfor (i = 0, l = parentNode[childKey].length; i < l; i++) {\n\t\t\t\t\t\t\tpNode = parentNode[childKey][i];\n\t\t\t\t\t\t\tif (pNode[checkedKey] && pNode != node) {\n\t\t\t\t\t\t\t\tpNode[checkedKey] = false;\n\t\t\t\t\t\t\t\tview.setChkClass(setting, $$(pNode, consts.id.CHECK, setting), pNode);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else if (setting.check.radioType == r.TYPE_ALL) {\n\t\t\t\t\tfor (i = 0, l = checkedList.length; i < l; i++) {\n\t\t\t\t\t\tif (node == checkedList[i]) {\n\t\t\t\t\t\t\tcheckedList.splice(i, 1);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t} else {\n\t\t\t\tif (node[checkedKey] && (!node[childKey] || node[childKey].length==0 || setting.check.chkboxType.Y.indexOf(\"s\") > -1)) {\n\t\t\t\t\tview.setSonNodeCheckBox(setting, node, true);\n\t\t\t\t}\n\t\t\t\tif (!node[checkedKey] && (!node[childKey] || node[childKey].length==0 || setting.check.chkboxType.N.indexOf(\"s\") > -1)) {\n\t\t\t\t\tview.setSonNodeCheckBox(setting, node, false);\n\t\t\t\t}\n\t\t\t\tif (node[checkedKey] && setting.check.chkboxType.Y.indexOf(\"p\") > -1) {\n\t\t\t\t\tview.setParentNodeCheckBox(setting, node, true);\n\t\t\t\t}\n\t\t\t\tif (!node[checkedKey] && setting.check.chkboxType.N.indexOf(\"p\") > -1) {\n\t\t\t\t\tview.setParentNodeCheckBox(setting, node, false);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tmakeChkClass: function(setting, node) {\n\t\t\tvar checkedKey = setting.data.key.checked,\n\t\t\tc = consts.checkbox, r = consts.radio,\n\t\t\tfullStyle = \"\";\n\t\t\tif (node.chkDisabled === true) {\n\t\t\t\tfullStyle = c.DISABLED;\n\t\t\t} else if (node.halfCheck) {\n\t\t\t\tfullStyle = c.PART;\n\t\t\t} else if (setting.check.chkStyle == r.STYLE) {\n\t\t\t\tfullStyle = (node.check_Child_State < 1)? c.FULL:c.PART;\n\t\t\t} else {\n\t\t\t\tfullStyle = node[checkedKey] ? ((node.check_Child_State === 2 || node.check_Child_State === -1) ? c.FULL:c.PART) : ((node.check_Child_State < 1)? c.FULL:c.PART);\n\t\t\t}\n\t\t\tvar chkName = setting.check.chkStyle + \"_\" + (node[checkedKey] ? c.TRUE : c.FALSE) + \"_\" + fullStyle;\n\t\t\tchkName = (node.check_Focus && node.chkDisabled !== true) ? chkName + \"_\" + c.FOCUS : chkName;\n\t\t\treturn consts.className.BUTTON + \" \" + c.DEFAULT + \" \" + chkName;\n\t\t},\n\t\trepairAllChk: function(setting, checked) {\n\t\t\tif (setting.check.enable && setting.check.chkStyle === consts.checkbox.STYLE) {\n\t\t\t\tvar checkedKey = setting.data.key.checked,\n\t\t\t\tchildKey = setting.data.key.children,\n\t\t\t\troot = data.getRoot(setting);\n\t\t\t\tfor (var i = 0, l = root[childKey].length; i<l ; i++) {\n\t\t\t\t\tvar node = root[childKey][i];\n\t\t\t\t\tif (node.nocheck !== true && node.chkDisabled !== true) {\n\t\t\t\t\t\tnode[checkedKey] = checked;\n\t\t\t\t\t}\n\t\t\t\t\tview.setSonNodeCheckBox(setting, node, checked);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\trepairChkClass: function(setting, node) {\n\t\t\tif (!node) return;\n\t\t\tdata.makeChkFlag(setting, node);\n\t\t\tif (node.nocheck !== true) {\n\t\t\t\tvar checkObj = $$(node, consts.id.CHECK, setting);\n\t\t\t\tview.setChkClass(setting, checkObj, node);\n\t\t\t}\n\t\t},\n\t\trepairParentChkClass: function(setting, node) {\n\t\t\tif (!node || !node.parentTId) return;\n\t\t\tvar pNode = node.getParentNode();\n\t\t\tview.repairChkClass(setting, pNode);\n\t\t\tview.repairParentChkClass(setting, pNode);\n\t\t},\n\t\trepairParentChkClassWithSelf: function(setting, node) {\n\t\t\tif (!node) return;\n\t\t\tvar childKey = setting.data.key.children;\n\t\t\tif (node[childKey] && node[childKey].length > 0) {\n\t\t\t\tview.repairParentChkClass(setting, node[childKey][0]);\n\t\t\t} else {\n\t\t\t\tview.repairParentChkClass(setting, node);\n\t\t\t}\n\t\t},\n\t\trepairSonChkDisabled: function(setting, node, chkDisabled, inherit) {\n\t\t\tif (!node) return;\n\t\t\tvar childKey = setting.data.key.children;\n\t\t\tif (node.chkDisabled != chkDisabled) {\n\t\t\t\tnode.chkDisabled = chkDisabled;\n\t\t\t}\n\t\t\tview.repairChkClass(setting, node);\n\t\t\tif (node[childKey] && inherit) {\n\t\t\t\tfor (var i = 0, l = node[childKey].length; i < l; i++) {\n\t\t\t\t\tvar sNode = node[childKey][i];\n\t\t\t\t\tview.repairSonChkDisabled(setting, sNode, chkDisabled, inherit);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\trepairParentChkDisabled: function(setting, node, chkDisabled, inherit) {\n\t\t\tif (!node) return;\n\t\t\tif (node.chkDisabled != chkDisabled && inherit) {\n\t\t\t\tnode.chkDisabled = chkDisabled;\n\t\t\t}\n\t\t\tview.repairChkClass(setting, node);\n\t\t\tview.repairParentChkDisabled(setting, node.getParentNode(), chkDisabled, inherit);\n\t\t},\n\t\tsetChkClass: function(setting, obj, node) {\n\t\t\tif (!obj) return;\n\t\t\tif (node.nocheck === true) {\n\t\t\t\tobj.hide();\n\t\t\t} else {\n\t\t\t\tobj.show();\n\t\t\t}\n            obj.attr('class', view.makeChkClass(setting, node));\n\t\t},\n\t\tsetParentNodeCheckBox: function(setting, node, value, srcNode) {\n\t\t\tvar childKey = setting.data.key.children,\n\t\t\tcheckedKey = setting.data.key.checked,\n\t\t\tcheckObj = $$(node, consts.id.CHECK, setting);\n\t\t\tif (!srcNode) srcNode = node;\n\t\t\tdata.makeChkFlag(setting, node);\n\t\t\tif (node.nocheck !== true && node.chkDisabled !== true) {\n\t\t\t\tnode[checkedKey] = value;\n\t\t\t\tview.setChkClass(setting, checkObj, node);\n\t\t\t\tif (setting.check.autoCheckTrigger && node != srcNode) {\n\t\t\t\t\tsetting.treeObj.trigger(consts.event.CHECK, [null, setting.treeId, node]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (node.parentTId) {\n\t\t\t\tvar pSign = true;\n\t\t\t\tif (!value) {\n\t\t\t\t\tvar pNodes = node.getParentNode()[childKey];\n\t\t\t\t\tfor (var i = 0, l = pNodes.length; i < l; i++) {\n\t\t\t\t\t\tif ((pNodes[i].nocheck !== true && pNodes[i].chkDisabled !== true && pNodes[i][checkedKey])\n\t\t\t\t\t\t|| ((pNodes[i].nocheck === true || pNodes[i].chkDisabled === true) && pNodes[i].check_Child_State > 0)) {\n\t\t\t\t\t\t\tpSign = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (pSign) {\n\t\t\t\t\tview.setParentNodeCheckBox(setting, node.getParentNode(), value, srcNode);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tsetSonNodeCheckBox: function(setting, node, value, srcNode) {\n\t\t\tif (!node) return;\n\t\t\tvar childKey = setting.data.key.children,\n\t\t\tcheckedKey = setting.data.key.checked,\n\t\t\tcheckObj = $$(node, consts.id.CHECK, setting);\n\t\t\tif (!srcNode) srcNode = node;\n\n\t\t\tvar hasDisable = false;\n\t\t\tif (node[childKey]) {\n\t\t\t\tfor (var i = 0, l = node[childKey].length; i < l; i++) {\n\t\t\t\t\tvar sNode = node[childKey][i];\n\t\t\t\t\tview.setSonNodeCheckBox(setting, sNode, value, srcNode);\n\t\t\t\t\tif (sNode.chkDisabled === true) hasDisable = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (node != data.getRoot(setting) && node.chkDisabled !== true) {\n\t\t\t\tif (hasDisable && node.nocheck !== true) {\n\t\t\t\t\tdata.makeChkFlag(setting, node);\n\t\t\t\t}\n\t\t\t\tif (node.nocheck !== true && node.chkDisabled !== true) {\n\t\t\t\t\tnode[checkedKey] = value;\n\t\t\t\t\tif (!hasDisable) node.check_Child_State = (node[childKey] && node[childKey].length > 0) ? (value ? 2 : 0) : -1;\n\t\t\t\t} else {\n\t\t\t\t\tnode.check_Child_State = -1;\n\t\t\t\t}\n\t\t\t\tview.setChkClass(setting, checkObj, node);\n\t\t\t\tif (setting.check.autoCheckTrigger && node != srcNode && node.nocheck !== true && node.chkDisabled !== true) {\n\t\t\t\t\tsetting.treeObj.trigger(consts.event.CHECK, [null, setting.treeId, node]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\t},\n\n\t_z = {\n\t\ttools: _tools,\n\t\tview: _view,\n\t\tevent: _event,\n\t\tdata: _data\n\t};\n\t$.extend(true, $.fn.zTree.consts, _consts);\n\t$.extend(true, $.fn.zTree._z, _z);\n\n\tvar zt = $.fn.zTree,\n\ttools = zt._z.tools,\n\tconsts = zt.consts,\n\tview = zt._z.view,\n\tdata = zt._z.data,\n\tevent = zt._z.event,\n\t$$ = tools.$;\n\n\tdata.exSetting(_setting);\n\tdata.addInitBind(_bindEvent);\n\tdata.addInitUnBind(_unbindEvent);\n\tdata.addInitCache(_initCache);\n\tdata.addInitNode(_initNode);\n\tdata.addInitProxy(_eventProxy, true);\n\tdata.addInitRoot(_initRoot);\n\tdata.addBeforeA(_beforeA);\n\tdata.addZTreeTools(_zTreeTools);\n\n\tvar _createNodes = view.createNodes;\n\tview.createNodes = function(setting, level, nodes, parentNode, index) {\n\t\tif (_createNodes) _createNodes.apply(view, arguments);\n\t\tif (!nodes) return;\n\t\tview.repairParentChkClassWithSelf(setting, parentNode);\n\t}\n\tvar _removeNode = view.removeNode;\n\tview.removeNode = function(setting, node) {\n\t\tvar parentNode = node.getParentNode();\n\t\tif (_removeNode) _removeNode.apply(view, arguments);\n\t\tif (!node || !parentNode) return;\n\t\tview.repairChkClass(setting, parentNode);\n\t\tview.repairParentChkClass(setting, parentNode);\n\t}\n\n\tvar _appendNodes = view.appendNodes;\n\tview.appendNodes = function(setting, level, nodes, parentNode, index, initFlag, openFlag) {\n\t\tvar html = \"\";\n\t\tif (_appendNodes) {\n\t\t\thtml = _appendNodes.apply(view, arguments);\n\t\t}\n\t\tif (parentNode) {\n\t\t\tdata.makeChkFlag(setting, parentNode);\n\t\t}\n\t\treturn html;\n\t}\n})(jQuery);\n/*\n * JQuery zTree exedit v3.5.25\n * http://zTree.me/\n *\n * Copyright (c) 2010 Hunter.z\n *\n * Licensed same as jquery - MIT License\n * http://www.opensource.org/licenses/mit-license.php\n *\n * email: hunter.z@263.net\n * Date: 2016-09-27\n */\n(function($){\n\t//default consts of exedit\n\tvar _consts = {\n\t\tevent: {\n\t\t\tDRAG: \"ztree_drag\",\n\t\t\tDROP: \"ztree_drop\",\n\t\t\tRENAME: \"ztree_rename\",\n\t\t\tDRAGMOVE:\"ztree_dragmove\"\n\t\t},\n\t\tid: {\n\t\t\tEDIT: \"_edit\",\n\t\t\tINPUT: \"_input\",\n\t\t\tREMOVE: \"_remove\"\n\t\t},\n\t\tmove: {\n\t\t\tTYPE_INNER: \"inner\",\n\t\t\tTYPE_PREV: \"prev\",\n\t\t\tTYPE_NEXT: \"next\"\n\t\t},\n\t\tnode: {\n\t\t\tCURSELECTED_EDIT: \"curSelectedNode_Edit\",\n\t\t\tTMPTARGET_TREE: \"tmpTargetzTree\",\n\t\t\tTMPTARGET_NODE: \"tmpTargetNode\"\n\t\t}\n\t},\n\t//default setting of exedit\n\t_setting = {\n\t\tedit: {\n\t\t\tenable: false,\n\t\t\teditNameSelectAll: false,\n\t\t\tshowRemoveBtn: true,\n\t\t\tshowRenameBtn: true,\n\t\t\tremoveTitle: \"remove\",\n\t\t\trenameTitle: \"rename\",\n\t\t\tdrag: {\n\t\t\t\tautoExpandTrigger: false,\n\t\t\t\tisCopy: true,\n\t\t\t\tisMove: true,\n\t\t\t\tprev: true,\n\t\t\t\tnext: true,\n\t\t\t\tinner: true,\n\t\t\t\tminMoveSize: 5,\n\t\t\t\tborderMax: 10,\n\t\t\t\tborderMin: -5,\n\t\t\t\tmaxShowNodeNum: 5,\n\t\t\t\tautoOpenTime: 500\n\t\t\t}\n\t\t},\n\t\tview: {\n\t\t\taddHoverDom: null,\n\t\t\tremoveHoverDom: null\n\t\t},\n\t\tcallback: {\n\t\t\tbeforeDrag:null,\n\t\t\tbeforeDragOpen:null,\n\t\t\tbeforeDrop:null,\n\t\t\tbeforeEditName:null,\n\t\t\tbeforeRename:null,\n\t\t\tonDrag:null,\n\t\t\tonDragMove:null,\n\t\t\tonDrop:null,\n\t\t\tonRename:null\n\t\t}\n\t},\n\t//default root of exedit\n\t_initRoot = function (setting) {\n\t\tvar r = data.getRoot(setting), rs = data.getRoots();\n\t\tr.curEditNode = null;\n\t\tr.curEditInput = null;\n\t\tr.curHoverNode = null;\n\t\tr.dragFlag = 0;\n\t\tr.dragNodeShowBefore = [];\n\t\tr.dragMaskList = new Array();\n\t\trs.showHoverDom = true;\n\t},\n\t//default cache of exedit\n\t_initCache = function(treeId) {},\n\t//default bind event of exedit\n\t_bindEvent = function(setting) {\n\t\tvar o = setting.treeObj;\n\t\tvar c = consts.event;\n\t\to.bind(c.RENAME, function (event, treeId, treeNode, isCancel) {\n\t\t\ttools.apply(setting.callback.onRename, [event, treeId, treeNode, isCancel]);\n\t\t});\n\n\t\to.bind(c.DRAG, function (event, srcEvent, treeId, treeNodes) {\n\t\t\ttools.apply(setting.callback.onDrag, [srcEvent, treeId, treeNodes]);\n\t\t});\n\n\t\to.bind(c.DRAGMOVE,function(event, srcEvent, treeId, treeNodes){\n\t\t\ttools.apply(setting.callback.onDragMove,[srcEvent, treeId, treeNodes]);\n\t\t});\n\n\t\to.bind(c.DROP, function (event, srcEvent, treeId, treeNodes, targetNode, moveType, isCopy) {\n\t\t\ttools.apply(setting.callback.onDrop, [srcEvent, treeId, treeNodes, targetNode, moveType, isCopy]);\n\t\t});\n\t},\n\t_unbindEvent = function(setting) {\n\t\tvar o = setting.treeObj;\n\t\tvar c = consts.event;\n\t\to.unbind(c.RENAME);\n\t\to.unbind(c.DRAG);\n\t\to.unbind(c.DRAGMOVE);\n\t\to.unbind(c.DROP);\n\t},\n\t//default event proxy of exedit\n\t_eventProxy = function(e) {\n\t\tvar target = e.target,\n\t\tsetting = data.getSetting(e.data.treeId),\n\t\trelatedTarget = e.relatedTarget,\n\t\ttId = \"\", node = null,\n\t\tnodeEventType = \"\", treeEventType = \"\",\n\t\tnodeEventCallback = null, treeEventCallback = null,\n\t\ttmp = null;\n\n\t\tif (tools.eqs(e.type, \"mouseover\")) {\n\t\t\ttmp = tools.getMDom(setting, target, [{tagName:\"a\", attrName:\"treeNode\"+consts.id.A}]);\n\t\t\tif (tmp) {\n\t\t\t\ttId = tools.getNodeMainDom(tmp).id;\n\t\t\t\tnodeEventType = \"hoverOverNode\";\n\t\t\t}\n\t\t} else if (tools.eqs(e.type, \"mouseout\")) {\n\t\t\ttmp = tools.getMDom(setting, relatedTarget, [{tagName:\"a\", attrName:\"treeNode\"+consts.id.A}]);\n\t\t\tif (!tmp) {\n\t\t\t\ttId = \"remove\";\n\t\t\t\tnodeEventType = \"hoverOutNode\";\n\t\t\t}\n\t\t} else if (tools.eqs(e.type, \"mousedown\")) {\n\t\t\ttmp = tools.getMDom(setting, target, [{tagName:\"a\", attrName:\"treeNode\"+consts.id.A}]);\n\t\t\tif (tmp) {\n\t\t\t\ttId = tools.getNodeMainDom(tmp).id;\n\t\t\t\tnodeEventType = \"mousedownNode\";\n\t\t\t}\n\t\t}\n\t\tif (tId.length>0) {\n\t\t\tnode = data.getNodeCache(setting, tId);\n\t\t\tswitch (nodeEventType) {\n\t\t\t\tcase \"mousedownNode\" :\n\t\t\t\t\tnodeEventCallback = _handler.onMousedownNode;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"hoverOverNode\" :\n\t\t\t\t\tnodeEventCallback = _handler.onHoverOverNode;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"hoverOutNode\" :\n\t\t\t\t\tnodeEventCallback = _handler.onHoverOutNode;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tvar proxyResult = {\n\t\t\tstop: false,\n\t\t\tnode: node,\n\t\t\tnodeEventType: nodeEventType,\n\t\t\tnodeEventCallback: nodeEventCallback,\n\t\t\ttreeEventType: treeEventType,\n\t\t\ttreeEventCallback: treeEventCallback\n\t\t};\n\t\treturn proxyResult\n\t},\n\t//default init node of exedit\n\t_initNode = function(setting, level, n, parentNode, isFirstNode, isLastNode, openFlag) {\n\t\tif (!n) return;\n\t\tn.isHover = false;\n\t\tn.editNameFlag = false;\n\t},\n\t//update zTreeObj, add method of edit\n\t_zTreeTools = function(setting, zTreeTools) {\n\t\tzTreeTools.cancelEditName = function(newName) {\n\t\t\tvar root = data.getRoot(this.setting);\n\t\t\tif (!root.curEditNode) return;\n\t\t\tview.cancelCurEditNode(this.setting, newName?newName:null, true);\n\t\t}\n\t\tzTreeTools.copyNode = function(targetNode, node, moveType, isSilent) {\n\t\t\tif (!node) return null;\n\t\t\tif (targetNode && !targetNode.isParent && this.setting.data.keep.leaf && moveType === consts.move.TYPE_INNER) return null;\n\t\t\tvar _this = this,\n\t\t\t\tnewNode = tools.clone(node);\n\t\t\tif (!targetNode) {\n\t\t\t\ttargetNode = null;\n\t\t\t\tmoveType = consts.move.TYPE_INNER;\n\t\t\t}\n\t\t\tif (moveType == consts.move.TYPE_INNER) {\n\t\t\t\tfunction copyCallback() {\n\t\t\t\t\tview.addNodes(_this.setting, targetNode, -1, [newNode], isSilent);\n\t\t\t\t}\n\n\t\t\t\tif (tools.canAsync(this.setting, targetNode)) {\n\t\t\t\t\tview.asyncNode(this.setting, targetNode, isSilent, copyCallback);\n\t\t\t\t} else {\n\t\t\t\t\tcopyCallback();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tview.addNodes(this.setting, targetNode.parentNode, -1, [newNode], isSilent);\n\t\t\t\tview.moveNode(this.setting, targetNode, newNode, moveType, false, isSilent);\n\t\t\t}\n\t\t\treturn newNode;\n\t\t}\n\t\tzTreeTools.editName = function(node) {\n\t\t\tif (!node || !node.tId || node !== data.getNodeCache(this.setting, node.tId)) return;\n\t\t\tif (node.parentTId) view.expandCollapseParentNode(this.setting, node.getParentNode(), true);\n\t\t\tview.editNode(this.setting, node)\n\t\t}\n\t\tzTreeTools.moveNode = function(targetNode, node, moveType, isSilent) {\n\t\t\tif (!node) return node;\n\t\t\tif (targetNode && !targetNode.isParent && this.setting.data.keep.leaf && moveType === consts.move.TYPE_INNER) {\n\t\t\t\treturn null;\n\t\t\t} else if (targetNode && ((node.parentTId == targetNode.tId && moveType == consts.move.TYPE_INNER) || $$(node, this.setting).find(\"#\" + targetNode.tId).length > 0)) {\n\t\t\t\treturn null;\n\t\t\t} else if (!targetNode) {\n\t\t\t\ttargetNode = null;\n\t\t\t}\n\t\t\tvar _this = this;\n\t\t\tfunction moveCallback() {\n\t\t\t\tview.moveNode(_this.setting, targetNode, node, moveType, false, isSilent);\n\t\t\t}\n\t\t\tif (tools.canAsync(this.setting, targetNode) && moveType === consts.move.TYPE_INNER) {\n\t\t\t\tview.asyncNode(this.setting, targetNode, isSilent, moveCallback);\n\t\t\t} else {\n\t\t\t\tmoveCallback();\n\t\t\t}\n\t\t\treturn node;\n\t\t}\n\t\tzTreeTools.setEditable = function(editable) {\n\t\t\tthis.setting.edit.enable = editable;\n\t\t\treturn this.refresh();\n\t\t}\n\t},\n\t//method of operate data\n\t_data = {\n\t\tsetSonNodeLevel: function(setting, parentNode, node) {\n\t\t\tif (!node) return;\n\t\t\tvar childKey = setting.data.key.children;\n\t\t\tnode.level = (parentNode)? parentNode.level + 1 : 0;\n\t\t\tif (!node[childKey]) return;\n\t\t\tfor (var i = 0, l = node[childKey].length; i < l; i++) {\n\t\t\t\tif (node[childKey][i]) data.setSonNodeLevel(setting, node, node[childKey][i]);\n\t\t\t}\n\t\t}\n\t},\n\t//method of event proxy\n\t_event = {\n\n\t},\n\t//method of event handler\n\t_handler = {\n\t\tonHoverOverNode: function(event, node) {\n\t\t\tvar setting = data.getSetting(event.data.treeId),\n\t\t\troot = data.getRoot(setting);\n\t\t\tif (root.curHoverNode != node) {\n\t\t\t\t_handler.onHoverOutNode(event);\n\t\t\t}\n\t\t\troot.curHoverNode = node;\n\t\t\tview.addHoverDom(setting, node);\n\t\t},\n\t\tonHoverOutNode: function(event, node) {\n\t\t\tvar setting = data.getSetting(event.data.treeId),\n\t\t\troot = data.getRoot(setting);\n\t\t\tif (root.curHoverNode && !data.isSelectedNode(setting, root.curHoverNode)) {\n\t\t\t\tview.removeTreeDom(setting, root.curHoverNode);\n\t\t\t\troot.curHoverNode = null;\n\t\t\t}\n\t\t},\n\t\tonMousedownNode: function(eventMouseDown, _node) {\n\t\t\tvar i,l,\n\t\t\tsetting = data.getSetting(eventMouseDown.data.treeId),\n\t\t\troot = data.getRoot(setting), roots = data.getRoots();\n\t\t\t//right click can't drag & drop\n\t\t\tif (eventMouseDown.button == 2 || !setting.edit.enable || (!setting.edit.drag.isCopy && !setting.edit.drag.isMove)) return true;\n\n\t\t\t//input of edit node name can't drag & drop\n\t\t\tvar target = eventMouseDown.target,\n\t\t\t_nodes = data.getRoot(setting).curSelectedList,\n\t\t\tnodes = [];\n\t\t\tif (!data.isSelectedNode(setting, _node)) {\n\t\t\t\tnodes = [_node];\n\t\t\t} else {\n\t\t\t\tfor (i=0, l=_nodes.length; i<l; i++) {\n\t\t\t\t\tif (_nodes[i].editNameFlag && tools.eqs(target.tagName, \"input\") && target.getAttribute(\"treeNode\"+consts.id.INPUT) !== null) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\tnodes.push(_nodes[i]);\n\t\t\t\t\tif (nodes[0].parentTId !== _nodes[i].parentTId) {\n\t\t\t\t\t\tnodes = [_node];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tview.editNodeBlur = true;\n\t\t\tview.cancelCurEditNode(setting);\n\n\t\t\tvar doc = $(setting.treeObj.get(0).ownerDocument),\n\t\t\tbody = $(setting.treeObj.get(0).ownerDocument.body), curNode, tmpArrow, tmpTarget,\n\t\t\tisOtherTree = false,\n\t\t\ttargetSetting = setting,\n\t\t\tsourceSetting = setting,\n\t\t\tpreNode, nextNode,\n\t\t\tpreTmpTargetNodeId = null,\n\t\t\tpreTmpMoveType = null,\n\t\t\ttmpTargetNodeId = null,\n\t\t\tmoveType = consts.move.TYPE_INNER,\n\t\t\tmouseDownX = eventMouseDown.clientX,\n\t\t\tmouseDownY = eventMouseDown.clientY,\n\t\t\tstartTime = (new Date()).getTime();\n\n\t\t\tif (tools.uCanDo(setting)) {\n\t\t\t\tdoc.bind(\"mousemove\", _docMouseMove);\n\t\t\t}\n\t\t\tfunction _docMouseMove(event) {\n\t\t\t\t//avoid start drag after click node\n\t\t\t\tif (root.dragFlag == 0 && Math.abs(mouseDownX - event.clientX) < setting.edit.drag.minMoveSize\n\t\t\t\t\t&& Math.abs(mouseDownY - event.clientY) < setting.edit.drag.minMoveSize) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tvar i, l, tmpNode, tmpDom, tmpNodes,\n\t\t\t\tchildKey = setting.data.key.children;\n\t\t\t\tbody.css(\"cursor\", \"pointer\");\n\n\t\t\t\tif (root.dragFlag == 0) {\n\t\t\t\t\tif (tools.apply(setting.callback.beforeDrag, [setting.treeId, nodes], true) == false) {\n\t\t\t\t\t\t_docMouseUp(event);\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (i=0, l=nodes.length; i<l; i++) {\n\t\t\t\t\t\tif (i==0) {\n\t\t\t\t\t\t\troot.dragNodeShowBefore = [];\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttmpNode = nodes[i];\n\t\t\t\t\t\tif (tmpNode.isParent && tmpNode.open) {\n\t\t\t\t\t\t\tview.expandCollapseNode(setting, tmpNode, !tmpNode.open);\n\t\t\t\t\t\t\troot.dragNodeShowBefore[tmpNode.tId] = true;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\troot.dragNodeShowBefore[tmpNode.tId] = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\troot.dragFlag = 1;\n\t\t\t\t\troots.showHoverDom = false;\n\t\t\t\t\ttools.showIfameMask(setting, true);\n\n\t\t\t\t\t//sort\n\t\t\t\t\tvar isOrder = true, lastIndex = -1;\n\t\t\t\t\tif (nodes.length>1) {\n\t\t\t\t\t\tvar pNodes = nodes[0].parentTId ? nodes[0].getParentNode()[childKey] : data.getNodes(setting);\n\t\t\t\t\t\ttmpNodes = [];\n\t\t\t\t\t\tfor (i=0, l=pNodes.length; i<l; i++) {\n\t\t\t\t\t\t\tif (root.dragNodeShowBefore[pNodes[i].tId] !== undefined) {\n\t\t\t\t\t\t\t\tif (isOrder && lastIndex > -1 && (lastIndex+1) !== i) {\n\t\t\t\t\t\t\t\t\tisOrder = false;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\ttmpNodes.push(pNodes[i]);\n\t\t\t\t\t\t\t\tlastIndex = i;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (nodes.length === tmpNodes.length) {\n\t\t\t\t\t\t\t\tnodes = tmpNodes;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (isOrder) {\n\t\t\t\t\t\tpreNode = nodes[0].getPreNode();\n\t\t\t\t\t\tnextNode = nodes[nodes.length-1].getNextNode();\n\t\t\t\t\t}\n\n\t\t\t\t\t//set node in selected\n\t\t\t\t\tcurNode = $$(\"<ul class='zTreeDragUL'></ul>\", setting);\n\t\t\t\t\tfor (i=0, l=nodes.length; i<l; i++) {\n\t\t\t\t\t\ttmpNode = nodes[i];\n\t\t\t\t\t\ttmpNode.editNameFlag = false;\n\t\t\t\t\t\tview.selectNode(setting, tmpNode, i>0);\n\t\t\t\t\t\tview.removeTreeDom(setting, tmpNode);\n\n\t\t\t\t\t\tif (i > setting.edit.drag.maxShowNodeNum-1) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttmpDom = $$(\"<li id='\"+ tmpNode.tId +\"_tmp'></li>\", setting);\n\t\t\t\t\t\ttmpDom.append($$(tmpNode, consts.id.A, setting).clone());\n\t\t\t\t\t\ttmpDom.css(\"padding\", \"0\");\n\t\t\t\t\t\ttmpDom.children(\"#\" + tmpNode.tId + consts.id.A).removeClass(consts.node.CURSELECTED);\n\t\t\t\t\t\tcurNode.append(tmpDom);\n\t\t\t\t\t\tif (i == setting.edit.drag.maxShowNodeNum-1) {\n\t\t\t\t\t\t\ttmpDom = $$(\"<li id='\"+ tmpNode.tId +\"_moretmp'><a>  ...  </a></li>\", setting);\n\t\t\t\t\t\t\tcurNode.append(tmpDom);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tcurNode.attr(\"id\", nodes[0].tId + consts.id.UL + \"_tmp\");\n\t\t\t\t\tcurNode.addClass(setting.treeObj.attr(\"class\"));\n\t\t\t\t\tcurNode.appendTo(body);\n\n\t\t\t\t\ttmpArrow = $$(\"<span class='tmpzTreeMove_arrow'></span>\", setting);\n\t\t\t\t\ttmpArrow.attr(\"id\", \"zTreeMove_arrow_tmp\");\n\t\t\t\t\ttmpArrow.appendTo(body);\n\n\t\t\t\t\tsetting.treeObj.trigger(consts.event.DRAG, [event, setting.treeId, nodes]);\n\t\t\t\t}\n\n\t\t\t\tif (root.dragFlag == 1) {\n\t\t\t\t\tif (tmpTarget && tmpArrow.attr(\"id\") == event.target.id && tmpTargetNodeId && (event.clientX + doc.scrollLeft()+2) > ($(\"#\" + tmpTargetNodeId + consts.id.A, tmpTarget).offset().left)) {\n\t\t\t\t\t\tvar xT = $(\"#\" + tmpTargetNodeId + consts.id.A, tmpTarget);\n\t\t\t\t\t\tevent.target = (xT.length > 0) ? xT.get(0) : event.target;\n\t\t\t\t\t} else if (tmpTarget) {\n\t\t\t\t\t\ttmpTarget.removeClass(consts.node.TMPTARGET_TREE);\n\t\t\t\t\t\tif (tmpTargetNodeId) $(\"#\" + tmpTargetNodeId + consts.id.A, tmpTarget).removeClass(consts.node.TMPTARGET_NODE + \"_\" + consts.move.TYPE_PREV)\n\t\t\t\t\t\t\t.removeClass(consts.node.TMPTARGET_NODE + \"_\" + _consts.move.TYPE_NEXT).removeClass(consts.node.TMPTARGET_NODE + \"_\" + _consts.move.TYPE_INNER);\n\t\t\t\t\t}\n\t\t\t\t\ttmpTarget = null;\n\t\t\t\t\ttmpTargetNodeId = null;\n\n\t\t\t\t\t//judge drag & drop in multi ztree\n\t\t\t\t\tisOtherTree = false;\n\t\t\t\t\ttargetSetting = setting;\n\t\t\t\t\tvar settings = data.getSettings();\n\t\t\t\t\tfor (var s in settings) {\n\t\t\t\t\t\tif (settings[s].treeId && settings[s].edit.enable && settings[s].treeId != setting.treeId\n\t\t\t\t\t\t\t&& (event.target.id == settings[s].treeId || $(event.target).parents(\"#\" + settings[s].treeId).length>0)) {\n\t\t\t\t\t\t\tisOtherTree = true;\n\t\t\t\t\t\t\ttargetSetting = settings[s];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tvar docScrollTop = doc.scrollTop(),\n\t\t\t\t\tdocScrollLeft = doc.scrollLeft(),\n\t\t\t\t\ttreeOffset = targetSetting.treeObj.offset(),\n\t\t\t\t\tscrollHeight = targetSetting.treeObj.get(0).scrollHeight,\n\t\t\t\t\tscrollWidth = targetSetting.treeObj.get(0).scrollWidth,\n\t\t\t\t\tdTop = (event.clientY + docScrollTop - treeOffset.top),\n\t\t\t\t\tdBottom = (targetSetting.treeObj.height() + treeOffset.top - event.clientY - docScrollTop),\n\t\t\t\t\tdLeft = (event.clientX + docScrollLeft - treeOffset.left),\n\t\t\t\t\tdRight = (targetSetting.treeObj.width() + treeOffset.left - event.clientX - docScrollLeft),\n\t\t\t\t\tisTop = (dTop < setting.edit.drag.borderMax && dTop > setting.edit.drag.borderMin),\n\t\t\t\t\tisBottom = (dBottom < setting.edit.drag.borderMax && dBottom > setting.edit.drag.borderMin),\n\t\t\t\t\tisLeft = (dLeft < setting.edit.drag.borderMax && dLeft > setting.edit.drag.borderMin),\n\t\t\t\t\tisRight = (dRight < setting.edit.drag.borderMax && dRight > setting.edit.drag.borderMin),\n\t\t\t\t\tisTreeInner = dTop > setting.edit.drag.borderMin && dBottom > setting.edit.drag.borderMin && dLeft > setting.edit.drag.borderMin && dRight > setting.edit.drag.borderMin,\n\t\t\t\t\tisTreeTop = (isTop && targetSetting.treeObj.scrollTop() <= 0),\n\t\t\t\t\tisTreeBottom = (isBottom && (targetSetting.treeObj.scrollTop() + targetSetting.treeObj.height()+10) >= scrollHeight),\n\t\t\t\t\tisTreeLeft = (isLeft && targetSetting.treeObj.scrollLeft() <= 0),\n\t\t\t\t\tisTreeRight = (isRight && (targetSetting.treeObj.scrollLeft() + targetSetting.treeObj.width()+10) >= scrollWidth);\n\n\t\t\t\t\tif (event.target && tools.isChildOrSelf(event.target, targetSetting.treeId)) {\n\t\t\t\t\t\t//get node <li> dom\n\t\t\t\t\t\tvar targetObj = event.target;\n\t\t\t\t\t\twhile (targetObj && targetObj.tagName && !tools.eqs(targetObj.tagName, \"li\") && targetObj.id != targetSetting.treeId) {\n\t\t\t\t\t\t\ttargetObj = targetObj.parentNode;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar canMove = true;\n\t\t\t\t\t\t//don't move to self or children of self\n\t\t\t\t\t\tfor (i=0, l=nodes.length; i<l; i++) {\n\t\t\t\t\t\t\ttmpNode = nodes[i];\n\t\t\t\t\t\t\tif (targetObj.id === tmpNode.tId) {\n\t\t\t\t\t\t\t\tcanMove = false;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t} else if ($$(tmpNode, setting).find(\"#\" + targetObj.id).length > 0) {\n\t\t\t\t\t\t\t\tcanMove = false;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (canMove && event.target && tools.isChildOrSelf(event.target, targetObj.id + consts.id.A)) {\n\t\t\t\t\t\t\ttmpTarget = $(targetObj);\n\t\t\t\t\t\t\ttmpTargetNodeId = targetObj.id;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t//the mouse must be in zTree\n\t\t\t\t\ttmpNode = nodes[0];\n\t\t\t\t\tif (isTreeInner && tools.isChildOrSelf(event.target, targetSetting.treeId)) {\n\t\t\t\t\t\t//judge mouse move in root of ztree\n\t\t\t\t\t\tif (!tmpTarget && (event.target.id == targetSetting.treeId || isTreeTop || isTreeBottom || isTreeLeft || isTreeRight) && (isOtherTree || (!isOtherTree && tmpNode.parentTId))) {\n\t\t\t\t\t\t\ttmpTarget = targetSetting.treeObj;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t//auto scroll top\n\t\t\t\t\t\tif (isTop) {\n\t\t\t\t\t\t\ttargetSetting.treeObj.scrollTop(targetSetting.treeObj.scrollTop()-10);\n\t\t\t\t\t\t} else if (isBottom)  {\n\t\t\t\t\t\t\ttargetSetting.treeObj.scrollTop(targetSetting.treeObj.scrollTop()+10);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (isLeft) {\n\t\t\t\t\t\t\ttargetSetting.treeObj.scrollLeft(targetSetting.treeObj.scrollLeft()-10);\n\t\t\t\t\t\t} else if (isRight) {\n\t\t\t\t\t\t\ttargetSetting.treeObj.scrollLeft(targetSetting.treeObj.scrollLeft()+10);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t//auto scroll left\n\t\t\t\t\t\tif (tmpTarget && tmpTarget != targetSetting.treeObj && tmpTarget.offset().left < targetSetting.treeObj.offset().left) {\n\t\t\t\t\t\t\ttargetSetting.treeObj.scrollLeft(targetSetting.treeObj.scrollLeft()+ tmpTarget.offset().left - targetSetting.treeObj.offset().left);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tcurNode.css({\n\t\t\t\t\t\t\"top\": (event.clientY + docScrollTop + 3) + \"px\",\n\t\t\t\t\t\t\"left\": (event.clientX + docScrollLeft + 3) + \"px\"\n\t\t\t\t\t});\n\n\t\t\t\t\tvar dX = 0;\n\t\t\t\t\tvar dY = 0;\n\t\t\t\t\tif (tmpTarget && tmpTarget.attr(\"id\")!=targetSetting.treeId) {\n\t\t\t\t\t\tvar tmpTargetNode = tmpTargetNodeId == null ? null: data.getNodeCache(targetSetting, tmpTargetNodeId),\n\t\t\t\t\t\t\tisCopy = ((event.ctrlKey || event.metaKey) && setting.edit.drag.isMove && setting.edit.drag.isCopy) || (!setting.edit.drag.isMove && setting.edit.drag.isCopy),\n\t\t\t\t\t\t\tisPrev = !!(preNode && tmpTargetNodeId === preNode.tId),\n\t\t\t\t\t\t\tisNext = !!(nextNode && tmpTargetNodeId === nextNode.tId),\n\t\t\t\t\t\t\tisInner = (tmpNode.parentTId && tmpNode.parentTId == tmpTargetNodeId),\n\t\t\t\t\t\t\tcanPrev = (isCopy || !isNext) && tools.apply(targetSetting.edit.drag.prev, [targetSetting.treeId, nodes, tmpTargetNode], !!targetSetting.edit.drag.prev),\n\t\t\t\t\t\t\tcanNext = (isCopy || !isPrev) && tools.apply(targetSetting.edit.drag.next, [targetSetting.treeId, nodes, tmpTargetNode], !!targetSetting.edit.drag.next),\n\t\t\t\t\t\t\tcanInner = (isCopy || !isInner) && !(targetSetting.data.keep.leaf && !tmpTargetNode.isParent) && tools.apply(targetSetting.edit.drag.inner, [targetSetting.treeId, nodes, tmpTargetNode], !!targetSetting.edit.drag.inner);\n\n\t\t\t\t\t\tfunction clearMove() {\n\t\t\t\t\t\t\ttmpTarget = null;\n\t\t\t\t\t\t\ttmpTargetNodeId = \"\";\n\t\t\t\t\t\t\tmoveType = consts.move.TYPE_INNER;\n\t\t\t\t\t\t\ttmpArrow.css({\n\t\t\t\t\t\t\t\t\"display\":\"none\"\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tif (window.zTreeMoveTimer) {\n\t\t\t\t\t\t\t\tclearTimeout(window.zTreeMoveTimer);\n\t\t\t\t\t\t\t\twindow.zTreeMoveTargetNodeTId = null\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!canPrev && !canNext && !canInner) {\n\t\t\t\t\t\t\tclearMove();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tvar tmpTargetA = $(\"#\" + tmpTargetNodeId + consts.id.A, tmpTarget),\n\t\t\t\t\t\t\t\ttmpNextA = tmpTargetNode.isLastNode ? null : $(\"#\" + tmpTargetNode.getNextNode().tId + consts.id.A, tmpTarget.next()),\n\t\t\t\t\t\t\t\ttmpTop = tmpTargetA.offset().top,\n\t\t\t\t\t\t\t\ttmpLeft = tmpTargetA.offset().left,\n\t\t\t\t\t\t\t\tprevPercent = canPrev ? (canInner ? 0.25 : (canNext ? 0.5 : 1) ) : -1,\n\t\t\t\t\t\t\t\tnextPercent = canNext ? (canInner ? 0.75 : (canPrev ? 0.5 : 0) ) : -1,\n\t\t\t\t\t\t\t\tdY_percent = (event.clientY + docScrollTop - tmpTop)/tmpTargetA.height();\n\n\t\t\t\t\t\t\tif ((prevPercent==1 || dY_percent<=prevPercent && dY_percent>=-.2) && canPrev) {\n\t\t\t\t\t\t\t\tdX = 1 - tmpArrow.width();\n\t\t\t\t\t\t\t\tdY = tmpTop - tmpArrow.height()/2;\n\t\t\t\t\t\t\t\tmoveType = consts.move.TYPE_PREV;\n\t\t\t\t\t\t\t} else if ((nextPercent==0 || dY_percent>=nextPercent && dY_percent<=1.2) && canNext) {\n\t\t\t\t\t\t\t\tdX = 1 - tmpArrow.width();\n\t\t\t\t\t\t\t\tdY = (tmpNextA == null || (tmpTargetNode.isParent && tmpTargetNode.open)) ? (tmpTop + tmpTargetA.height() - tmpArrow.height()/2) : (tmpNextA.offset().top - tmpArrow.height()/2);\n\t\t\t\t\t\t\t\tmoveType = consts.move.TYPE_NEXT;\n\t\t\t\t\t\t\t} else if (canInner) {\n\t\t\t\t\t\t\t\tdX = 5 - tmpArrow.width();\n\t\t\t\t\t\t\t\tdY = tmpTop;\n\t\t\t\t\t\t\t\tmoveType = consts.move.TYPE_INNER;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tclearMove();\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (tmpTarget) {\n\t\t\t\t\t\t\t\ttmpArrow.css({\n\t\t\t\t\t\t\t\t\t\"display\":\"block\",\n\t\t\t\t\t\t\t\t\t\"top\": dY + \"px\",\n\t\t\t\t\t\t\t\t\t\"left\": (tmpLeft + dX) + \"px\"\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\ttmpTargetA.addClass(consts.node.TMPTARGET_NODE + \"_\" + moveType);\n\n\t\t\t\t\t\t\t\tif (preTmpTargetNodeId != tmpTargetNodeId || preTmpMoveType != moveType) {\n\t\t\t\t\t\t\t\t\tstartTime = (new Date()).getTime();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (tmpTargetNode && tmpTargetNode.isParent && moveType == consts.move.TYPE_INNER) {\n\t\t\t\t\t\t\t\t\tvar startTimer = true;\n\t\t\t\t\t\t\t\t\tif (window.zTreeMoveTimer && window.zTreeMoveTargetNodeTId !== tmpTargetNode.tId) {\n\t\t\t\t\t\t\t\t\t\tclearTimeout(window.zTreeMoveTimer);\n\t\t\t\t\t\t\t\t\t\twindow.zTreeMoveTargetNodeTId = null;\n\t\t\t\t\t\t\t\t\t} else if (window.zTreeMoveTimer && window.zTreeMoveTargetNodeTId === tmpTargetNode.tId) {\n\t\t\t\t\t\t\t\t\t\tstartTimer = false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tif (startTimer) {\n\t\t\t\t\t\t\t\t\t\twindow.zTreeMoveTimer = setTimeout(function() {\n\t\t\t\t\t\t\t\t\t\t\tif (moveType != consts.move.TYPE_INNER) return;\n\t\t\t\t\t\t\t\t\t\t\tif (tmpTargetNode && tmpTargetNode.isParent && !tmpTargetNode.open && (new Date()).getTime() - startTime > targetSetting.edit.drag.autoOpenTime\n\t\t\t\t\t\t\t\t\t\t\t\t&& tools.apply(targetSetting.callback.beforeDragOpen, [targetSetting.treeId, tmpTargetNode], true)) {\n\t\t\t\t\t\t\t\t\t\t\t\tview.switchNode(targetSetting, tmpTargetNode);\n\t\t\t\t\t\t\t\t\t\t\t\tif (targetSetting.edit.drag.autoExpandTrigger) {\n\t\t\t\t\t\t\t\t\t\t\t\t\ttargetSetting.treeObj.trigger(consts.event.EXPAND, [targetSetting.treeId, tmpTargetNode]);\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}, targetSetting.edit.drag.autoOpenTime+50);\n\t\t\t\t\t\t\t\t\t\twindow.zTreeMoveTargetNodeTId = tmpTargetNode.tId;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmoveType = consts.move.TYPE_INNER;\n\t\t\t\t\t\tif (tmpTarget && tools.apply(targetSetting.edit.drag.inner, [targetSetting.treeId, nodes, null], !!targetSetting.edit.drag.inner)) {\n\t\t\t\t\t\t\ttmpTarget.addClass(consts.node.TMPTARGET_TREE);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttmpTarget = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttmpArrow.css({\n\t\t\t\t\t\t\t\"display\":\"none\"\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (window.zTreeMoveTimer) {\n\t\t\t\t\t\t\tclearTimeout(window.zTreeMoveTimer);\n\t\t\t\t\t\t\twindow.zTreeMoveTargetNodeTId = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpreTmpTargetNodeId = tmpTargetNodeId;\n\t\t\t\t\tpreTmpMoveType = moveType;\n\n\t\t\t\t\tsetting.treeObj.trigger(consts.event.DRAGMOVE, [event, setting.treeId, nodes]);\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tdoc.bind(\"mouseup\", _docMouseUp);\n\t\t\tfunction _docMouseUp(event) {\n\t\t\t\tif (window.zTreeMoveTimer) {\n\t\t\t\t\tclearTimeout(window.zTreeMoveTimer);\n\t\t\t\t\twindow.zTreeMoveTargetNodeTId = null;\n\t\t\t\t}\n\t\t\t\tpreTmpTargetNodeId = null;\n\t\t\t\tpreTmpMoveType = null;\n\t\t\t\tdoc.unbind(\"mousemove\", _docMouseMove);\n\t\t\t\tdoc.unbind(\"mouseup\", _docMouseUp);\n\t\t\t\tdoc.unbind(\"selectstart\", _docSelect);\n\t\t\t\tbody.css(\"cursor\", \"auto\");\n\t\t\t\tif (tmpTarget) {\n\t\t\t\t\ttmpTarget.removeClass(consts.node.TMPTARGET_TREE);\n\t\t\t\t\tif (tmpTargetNodeId) $(\"#\" + tmpTargetNodeId + consts.id.A, tmpTarget).removeClass(consts.node.TMPTARGET_NODE + \"_\" + consts.move.TYPE_PREV)\n\t\t\t\t\t\t\t.removeClass(consts.node.TMPTARGET_NODE + \"_\" + _consts.move.TYPE_NEXT).removeClass(consts.node.TMPTARGET_NODE + \"_\" + _consts.move.TYPE_INNER);\n\t\t\t\t}\n\t\t\t\ttools.showIfameMask(setting, false);\n\n\t\t\t\troots.showHoverDom = true;\n\t\t\t\tif (root.dragFlag == 0) return;\n\t\t\t\troot.dragFlag = 0;\n\n\t\t\t\tvar i, l, tmpNode;\n\t\t\t\tfor (i=0, l=nodes.length; i<l; i++) {\n\t\t\t\t\ttmpNode = nodes[i];\n\t\t\t\t\tif (tmpNode.isParent && root.dragNodeShowBefore[tmpNode.tId] && !tmpNode.open) {\n\t\t\t\t\t\tview.expandCollapseNode(setting, tmpNode, !tmpNode.open);\n\t\t\t\t\t\tdelete root.dragNodeShowBefore[tmpNode.tId];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (curNode) curNode.remove();\n\t\t\t\tif (tmpArrow) tmpArrow.remove();\n\n\t\t\t\tvar isCopy = ((event.ctrlKey || event.metaKey) && setting.edit.drag.isMove && setting.edit.drag.isCopy) || (!setting.edit.drag.isMove && setting.edit.drag.isCopy);\n\t\t\t\tif (!isCopy && tmpTarget && tmpTargetNodeId && nodes[0].parentTId && tmpTargetNodeId==nodes[0].parentTId && moveType == consts.move.TYPE_INNER) {\n\t\t\t\t\ttmpTarget = null;\n\t\t\t\t}\n\t\t\t\tif (tmpTarget) {\n\t\t\t\t\tvar dragTargetNode = tmpTargetNodeId == null ? null: data.getNodeCache(targetSetting, tmpTargetNodeId);\n\t\t\t\t\tif (tools.apply(setting.callback.beforeDrop, [targetSetting.treeId, nodes, dragTargetNode, moveType, isCopy], true) == false) {\n\t\t\t\t\t\tview.selectNodes(sourceSetting, nodes);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tvar newNodes = isCopy ? tools.clone(nodes) : nodes;\n\n\t\t\t\t\tfunction dropCallback() {\n\t\t\t\t\t\tif (isOtherTree) {\n\t\t\t\t\t\t\tif (!isCopy) {\n\t\t\t\t\t\t\t\tfor(var i=0, l=nodes.length; i<l; i++) {\n\t\t\t\t\t\t\t\t\tview.removeNode(setting, nodes[i]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (moveType == consts.move.TYPE_INNER) {\n\t\t\t\t\t\t\t\tview.addNodes(targetSetting, dragTargetNode, -1, newNodes);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tview.addNodes(targetSetting, dragTargetNode.getParentNode(), moveType == consts.move.TYPE_PREV ? dragTargetNode.getIndex() : dragTargetNode.getIndex()+1, newNodes);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (isCopy && moveType == consts.move.TYPE_INNER) {\n\t\t\t\t\t\t\t\tview.addNodes(targetSetting, dragTargetNode, -1, newNodes);\n\t\t\t\t\t\t\t} else if (isCopy) {\n\t\t\t\t\t\t\t\tview.addNodes(targetSetting, dragTargetNode.getParentNode(), moveType == consts.move.TYPE_PREV ? dragTargetNode.getIndex() : dragTargetNode.getIndex()+1, newNodes);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tif (moveType != consts.move.TYPE_NEXT) {\n\t\t\t\t\t\t\t\t\tfor (i=0, l=newNodes.length; i<l; i++) {\n\t\t\t\t\t\t\t\t\t\tview.moveNode(targetSetting, dragTargetNode, newNodes[i], moveType, false);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tfor (i=-1, l=newNodes.length-1; i<l; l--) {\n\t\t\t\t\t\t\t\t\t\tview.moveNode(targetSetting, dragTargetNode, newNodes[l], moveType, false);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tview.selectNodes(targetSetting, newNodes);\n\n\t\t\t\t\t\tvar a = $$(newNodes[0], setting).get(0);\n\t\t\t\t\t\tview.scrollIntoView(a);\n\n\t\t\t\t\t\tsetting.treeObj.trigger(consts.event.DROP, [event, targetSetting.treeId, newNodes, dragTargetNode, moveType, isCopy]);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (moveType == consts.move.TYPE_INNER && tools.canAsync(targetSetting, dragTargetNode)) {\n\t\t\t\t\t\tview.asyncNode(targetSetting, dragTargetNode, false, dropCallback);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdropCallback();\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\t\t\t\t\tview.selectNodes(sourceSetting, nodes);\n\t\t\t\t\tsetting.treeObj.trigger(consts.event.DROP, [event, setting.treeId, nodes, null, null, null]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tdoc.bind(\"selectstart\", _docSelect);\n\t\t\tfunction _docSelect() {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t//Avoid FireFox's Bug\n\t\t\t//If zTree Div CSS set 'overflow', so drag node outside of zTree, and event.target is error.\n\t\t\tif(eventMouseDown.preventDefault) {\n\t\t\t\teventMouseDown.preventDefault();\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t},\n\t//method of tools for zTree\n\t_tools = {\n\t\tgetAbs: function (obj) {\n\t\t\tvar oRect = obj.getBoundingClientRect(),\n\t\t\tscrollTop = document.body.scrollTop+document.documentElement.scrollTop,\n\t\t\tscrollLeft = document.body.scrollLeft+document.documentElement.scrollLeft;\n\t\t\treturn [oRect.left+scrollLeft,oRect.top+scrollTop];\n\t\t},\n\t\tinputFocus: function(inputObj) {\n\t\t\tif (inputObj.get(0)) {\n\t\t\t\tinputObj.focus();\n\t\t\t\ttools.setCursorPosition(inputObj.get(0), inputObj.val().length);\n\t\t\t}\n\t\t},\n\t\tinputSelect: function(inputObj) {\n\t\t\tif (inputObj.get(0)) {\n\t\t\t\tinputObj.focus();\n\t\t\t\tinputObj.select();\n\t\t\t}\n\t\t},\n\t\tsetCursorPosition: function(obj, pos){\n\t\t\tif(obj.setSelectionRange) {\n\t\t\t\tobj.focus();\n\t\t\t\tobj.setSelectionRange(pos,pos);\n\t\t\t} else if (obj.createTextRange) {\n\t\t\t\tvar range = obj.createTextRange();\n\t\t\t\trange.collapse(true);\n\t\t\t\trange.moveEnd('character', pos);\n\t\t\t\trange.moveStart('character', pos);\n\t\t\t\trange.select();\n\t\t\t}\n\t\t},\n\t\tshowIfameMask: function(setting, showSign) {\n\t\t\tvar root = data.getRoot(setting);\n\t\t\t//clear full mask\n\t\t\twhile (root.dragMaskList.length > 0) {\n\t\t\t\troot.dragMaskList[0].remove();\n\t\t\t\troot.dragMaskList.shift();\n\t\t\t}\n\t\t\tif (showSign) {\n\t\t\t\t//show mask\n\t\t\t\tvar iframeList = $$(\"iframe\", setting);\n\t\t\t\tfor (var i = 0, l = iframeList.length; i < l; i++) {\n\t\t\t\t\tvar obj = iframeList.get(i),\n\t\t\t\t\tr = tools.getAbs(obj),\n\t\t\t\t\tdragMask = $$(\"<div id='zTreeMask_\" + i + \"' class='zTreeMask' style='top:\" + r[1] + \"px; left:\" + r[0] + \"px; width:\" + obj.offsetWidth + \"px; height:\" + obj.offsetHeight + \"px;'></div>\", setting);\n\t\t\t\t\tdragMask.appendTo($$(\"body\", setting));\n\t\t\t\t\troot.dragMaskList.push(dragMask);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\t//method of operate ztree dom\n\t_view = {\n\t\taddEditBtn: function(setting, node) {\n\t\t\tif (node.editNameFlag || $$(node, consts.id.EDIT, setting).length > 0) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (!tools.apply(setting.edit.showRenameBtn, [setting.treeId, node], setting.edit.showRenameBtn)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar aObj = $$(node, consts.id.A, setting),\n\t\t\teditStr = \"<span class='\" + consts.className.BUTTON + \" edit' id='\" + node.tId + consts.id.EDIT + \"' title='\"+tools.apply(setting.edit.renameTitle, [setting.treeId, node], setting.edit.renameTitle)+\"' treeNode\"+consts.id.EDIT+\" style='display:none;'></span>\";\n\t\t\taObj.append(editStr);\n\n\t\t\t$$(node, consts.id.EDIT, setting).bind('click',\n\t\t\t\tfunction() {\n\t\t\t\t\tif (!tools.uCanDo(setting) || tools.apply(setting.callback.beforeEditName, [setting.treeId, node], true) == false) return false;\n\t\t\t\t\tview.editNode(setting, node);\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\t).show();\n\t\t},\n\t\taddRemoveBtn: function(setting, node) {\n\t\t\tif (node.editNameFlag || $$(node, consts.id.REMOVE, setting).length > 0) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (!tools.apply(setting.edit.showRemoveBtn, [setting.treeId, node], setting.edit.showRemoveBtn)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar aObj = $$(node, consts.id.A, setting),\n\t\t\tremoveStr = \"<span class='\" + consts.className.BUTTON + \" remove' id='\" + node.tId + consts.id.REMOVE + \"' title='\"+tools.apply(setting.edit.removeTitle, [setting.treeId, node], setting.edit.removeTitle)+\"' treeNode\"+consts.id.REMOVE+\" style='display:none;'></span>\";\n\t\t\taObj.append(removeStr);\n\n\t\t\t$$(node, consts.id.REMOVE, setting).bind('click',\n\t\t\t\tfunction() {\n\t\t\t\t\tif (!tools.uCanDo(setting) || tools.apply(setting.callback.beforeRemove, [setting.treeId, node], true) == false) return false;\n\t\t\t\t\tview.removeNode(setting, node);\n\t\t\t\t\tsetting.treeObj.trigger(consts.event.REMOVE, [setting.treeId, node]);\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\t).bind('mousedown',\n\t\t\t\tfunction(eventMouseDown) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\t).show();\n\t\t},\n\t\taddHoverDom: function(setting, node) {\n\t\t\tif (data.getRoots().showHoverDom) {\n\t\t\t\tnode.isHover = true;\n\t\t\t\tif (setting.edit.enable) {\n\t\t\t\t\tview.addEditBtn(setting, node);\n\t\t\t\t\tview.addRemoveBtn(setting, node);\n\t\t\t\t}\n\t\t\t\ttools.apply(setting.view.addHoverDom, [setting.treeId, node]);\n\t\t\t}\n\t\t},\n\t\tcancelCurEditNode: function (setting, forceName, isCancel) {\n\t\t\tvar root = data.getRoot(setting),\n\t\t\tnameKey = setting.data.key.name,\n\t\t\tnode = root.curEditNode;\n\n\t\t\tif (node) {\n\t\t\t\tvar inputObj = root.curEditInput,\n\t\t\t\tnewName = forceName ? forceName:(isCancel ? node[nameKey]: inputObj.val());\n\t\t\t\tif (tools.apply(setting.callback.beforeRename, [setting.treeId, node, newName, isCancel], true) === false) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n                node[nameKey] = newName;\n                var aObj = $$(node, consts.id.A, setting);\n\t\t\t\taObj.removeClass(consts.node.CURSELECTED_EDIT);\n\t\t\t\tinputObj.unbind();\n\t\t\t\tview.setNodeName(setting, node);\n\t\t\t\tnode.editNameFlag = false;\n\t\t\t\troot.curEditNode = null;\n\t\t\t\troot.curEditInput = null;\n\t\t\t\tview.selectNode(setting, node, false);\n                setting.treeObj.trigger(consts.event.RENAME, [setting.treeId, node, isCancel]);\n\t\t\t}\n\t\t\troot.noSelection = true;\n\t\t\treturn true;\n\t\t},\n\t\teditNode: function(setting, node) {\n\t\t\tvar root = data.getRoot(setting);\n\t\t\tview.editNodeBlur = false;\n\t\t\tif (data.isSelectedNode(setting, node) && root.curEditNode == node && node.editNameFlag) {\n\t\t\t\tsetTimeout(function() {tools.inputFocus(root.curEditInput);}, 0);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar nameKey = setting.data.key.name;\n\t\t\tnode.editNameFlag = true;\n\t\t\tview.removeTreeDom(setting, node);\n\t\t\tview.cancelCurEditNode(setting);\n\t\t\tview.selectNode(setting, node, false);\n\t\t\t$$(node, consts.id.SPAN, setting).html(\"<input type=text class='rename' id='\" + node.tId + consts.id.INPUT + \"' treeNode\" + consts.id.INPUT + \" >\");\n\t\t\tvar inputObj = $$(node, consts.id.INPUT, setting);\n\t\t\tinputObj.attr(\"value\", node[nameKey]);\n\t\t\tif (setting.edit.editNameSelectAll) {\n\t\t\t\ttools.inputSelect(inputObj);\n\t\t\t} else {\n\t\t\t\ttools.inputFocus(inputObj);\n\t\t\t}\n\n\t\t\tinputObj.bind('blur', function(event) {\n\t\t\t\tif (!view.editNodeBlur) {\n\t\t\t\t\tview.cancelCurEditNode(setting);\n\t\t\t\t}\n\t\t\t}).bind('keydown', function(event) {\n\t\t\t\tif (event.keyCode==\"13\") {\n\t\t\t\t\tview.editNodeBlur = true;\n\t\t\t\t\tview.cancelCurEditNode(setting);\n\t\t\t\t} else if (event.keyCode==\"27\") {\n\t\t\t\t\tview.cancelCurEditNode(setting, null, true);\n\t\t\t\t}\n\t\t\t}).bind('click', function(event) {\n\t\t\t\treturn false;\n\t\t\t}).bind('dblclick', function(event) {\n\t\t\t\treturn false;\n\t\t\t});\n\n\t\t\t$$(node, consts.id.A, setting).addClass(consts.node.CURSELECTED_EDIT);\n\t\t\troot.curEditInput = inputObj;\n\t\t\troot.noSelection = false;\n\t\t\troot.curEditNode = node;\n\t\t},\n\t\tmoveNode: function(setting, targetNode, node, moveType, animateFlag, isSilent) {\n\t\t\tvar root = data.getRoot(setting),\n\t\t\tchildKey = setting.data.key.children;\n\t\t\tif (targetNode == node) return;\n\t\t\tif (setting.data.keep.leaf && targetNode && !targetNode.isParent && moveType == consts.move.TYPE_INNER) return;\n\t\t\tvar oldParentNode = (node.parentTId ? node.getParentNode(): root),\n\t\t\ttargetNodeIsRoot = (targetNode === null || targetNode == root);\n\t\t\tif (targetNodeIsRoot && targetNode === null) targetNode = root;\n\t\t\tif (targetNodeIsRoot) moveType = consts.move.TYPE_INNER;\n\t\t\tvar targetParentNode = (targetNode.parentTId ? targetNode.getParentNode() : root);\n\n\t\t\tif (moveType != consts.move.TYPE_PREV && moveType != consts.move.TYPE_NEXT) {\n\t\t\t\tmoveType = consts.move.TYPE_INNER;\n\t\t\t}\n\n\t\t\tif (moveType == consts.move.TYPE_INNER) {\n\t\t\t\tif (targetNodeIsRoot) {\n\t\t\t\t\t//parentTId of root node is null\n\t\t\t\t\tnode.parentTId = null;\n\t\t\t\t} else {\n\t\t\t\t\tif (!targetNode.isParent) {\n\t\t\t\t\t\ttargetNode.isParent = true;\n\t\t\t\t\t\ttargetNode.open = !!targetNode.open;\n\t\t\t\t\t\tview.setNodeLineIcos(setting, targetNode);\n\t\t\t\t\t}\n\t\t\t\t\tnode.parentTId = targetNode.tId;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//move node Dom\n\t\t\tvar targetObj, target_ulObj;\n\t\t\tif (targetNodeIsRoot) {\n\t\t\t\ttargetObj = setting.treeObj;\n\t\t\t\ttarget_ulObj = targetObj;\n\t\t\t} else {\n\t\t\t\tif (!isSilent && moveType == consts.move.TYPE_INNER) {\n\t\t\t\t\tview.expandCollapseNode(setting, targetNode, true, false);\n\t\t\t\t} else if (!isSilent) {\n\t\t\t\t\tview.expandCollapseNode(setting, targetNode.getParentNode(), true, false);\n\t\t\t\t}\n\t\t\t\ttargetObj = $$(targetNode, setting);\n\t\t\t\ttarget_ulObj = $$(targetNode, consts.id.UL, setting);\n\t\t\t\tif (!!targetObj.get(0) && !target_ulObj.get(0)) {\n\t\t\t\t\tvar ulstr = [];\n\t\t\t\t\tview.makeUlHtml(setting, targetNode, ulstr, '');\n\t\t\t\t\ttargetObj.append(ulstr.join(''));\n\t\t\t\t}\n\t\t\t\ttarget_ulObj = $$(targetNode, consts.id.UL, setting);\n\t\t\t}\n\t\t\tvar nodeDom = $$(node, setting);\n\t\t\tif (!nodeDom.get(0)) {\n\t\t\t\tnodeDom = view.appendNodes(setting, node.level, [node], null, -1, false, true).join('');\n\t\t\t} else if (!targetObj.get(0)) {\n\t\t\t\tnodeDom.remove();\n\t\t\t}\n\t\t\tif (target_ulObj.get(0) && moveType == consts.move.TYPE_INNER) {\n\t\t\t\ttarget_ulObj.append(nodeDom);\n\t\t\t} else if (targetObj.get(0) && moveType == consts.move.TYPE_PREV) {\n\t\t\t\ttargetObj.before(nodeDom);\n\t\t\t} else if (targetObj.get(0) && moveType == consts.move.TYPE_NEXT) {\n\t\t\t\ttargetObj.after(nodeDom);\n\t\t\t}\n\n\t\t\t//repair the data after move\n\t\t\tvar i,l,\n\t\t\ttmpSrcIndex = -1,\n\t\t\ttmpTargetIndex = 0,\n\t\t\toldNeighbor = null,\n\t\t\tnewNeighbor = null,\n\t\t\toldLevel = node.level;\n\t\t\tif (node.isFirstNode) {\n\t\t\t\ttmpSrcIndex = 0;\n\t\t\t\tif (oldParentNode[childKey].length > 1 ) {\n\t\t\t\t\toldNeighbor = oldParentNode[childKey][1];\n\t\t\t\t\toldNeighbor.isFirstNode = true;\n\t\t\t\t}\n\t\t\t} else if (node.isLastNode) {\n\t\t\t\ttmpSrcIndex = oldParentNode[childKey].length -1;\n\t\t\t\toldNeighbor = oldParentNode[childKey][tmpSrcIndex - 1];\n\t\t\t\toldNeighbor.isLastNode = true;\n\t\t\t} else {\n\t\t\t\tfor (i = 0, l = oldParentNode[childKey].length; i < l; i++) {\n\t\t\t\t\tif (oldParentNode[childKey][i].tId == node.tId) {\n\t\t\t\t\t\ttmpSrcIndex = i;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (tmpSrcIndex >= 0) {\n\t\t\t\toldParentNode[childKey].splice(tmpSrcIndex, 1);\n\t\t\t}\n\t\t\tif (moveType != consts.move.TYPE_INNER) {\n\t\t\t\tfor (i = 0, l = targetParentNode[childKey].length; i < l; i++) {\n\t\t\t\t\tif (targetParentNode[childKey][i].tId == targetNode.tId) tmpTargetIndex = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (moveType == consts.move.TYPE_INNER) {\n\t\t\t\tif (!targetNode[childKey]) targetNode[childKey] = new Array();\n\t\t\t\tif (targetNode[childKey].length > 0) {\n\t\t\t\t\tnewNeighbor = targetNode[childKey][targetNode[childKey].length - 1];\n\t\t\t\t\tnewNeighbor.isLastNode = false;\n\t\t\t\t}\n\t\t\t\ttargetNode[childKey].splice(targetNode[childKey].length, 0, node);\n\t\t\t\tnode.isLastNode = true;\n\t\t\t\tnode.isFirstNode = (targetNode[childKey].length == 1);\n\t\t\t} else if (targetNode.isFirstNode && moveType == consts.move.TYPE_PREV) {\n\t\t\t\ttargetParentNode[childKey].splice(tmpTargetIndex, 0, node);\n\t\t\t\tnewNeighbor = targetNode;\n\t\t\t\tnewNeighbor.isFirstNode = false;\n\t\t\t\tnode.parentTId = targetNode.parentTId;\n\t\t\t\tnode.isFirstNode = true;\n\t\t\t\tnode.isLastNode = false;\n\n\t\t\t} else if (targetNode.isLastNode && moveType == consts.move.TYPE_NEXT) {\n\t\t\t\ttargetParentNode[childKey].splice(tmpTargetIndex + 1, 0, node);\n\t\t\t\tnewNeighbor = targetNode;\n\t\t\t\tnewNeighbor.isLastNode = false;\n\t\t\t\tnode.parentTId = targetNode.parentTId;\n\t\t\t\tnode.isFirstNode = false;\n\t\t\t\tnode.isLastNode = true;\n\n\t\t\t} else {\n\t\t\t\tif (moveType == consts.move.TYPE_PREV) {\n\t\t\t\t\ttargetParentNode[childKey].splice(tmpTargetIndex, 0, node);\n\t\t\t\t} else {\n\t\t\t\t\ttargetParentNode[childKey].splice(tmpTargetIndex + 1, 0, node);\n\t\t\t\t}\n\t\t\t\tnode.parentTId = targetNode.parentTId;\n\t\t\t\tnode.isFirstNode = false;\n\t\t\t\tnode.isLastNode = false;\n\t\t\t}\n\t\t\tdata.fixPIdKeyValue(setting, node);\n\t\t\tdata.setSonNodeLevel(setting, node.getParentNode(), node);\n\n\t\t\t//repair node what been moved\n\t\t\tview.setNodeLineIcos(setting, node);\n\t\t\tview.repairNodeLevelClass(setting, node, oldLevel)\n\n\t\t\t//repair node's old parentNode dom\n\t\t\tif (!setting.data.keep.parent && oldParentNode[childKey].length < 1) {\n\t\t\t\t//old parentNode has no child nodes\n\t\t\t\toldParentNode.isParent = false;\n\t\t\t\toldParentNode.open = false;\n\t\t\t\tvar tmp_ulObj = $$(oldParentNode, consts.id.UL, setting),\n\t\t\t\ttmp_switchObj = $$(oldParentNode, consts.id.SWITCH, setting),\n\t\t\t\ttmp_icoObj = $$(oldParentNode, consts.id.ICON, setting);\n\t\t\t\tview.replaceSwitchClass(oldParentNode, tmp_switchObj, consts.folder.DOCU);\n\t\t\t\tview.replaceIcoClass(oldParentNode, tmp_icoObj, consts.folder.DOCU);\n\t\t\t\ttmp_ulObj.css(\"display\", \"none\");\n\n\t\t\t} else if (oldNeighbor) {\n\t\t\t\t//old neigbor node\n\t\t\t\tview.setNodeLineIcos(setting, oldNeighbor);\n\t\t\t}\n\n\t\t\t//new neigbor node\n\t\t\tif (newNeighbor) {\n\t\t\t\tview.setNodeLineIcos(setting, newNeighbor);\n\t\t\t}\n\n\t\t\t//repair checkbox / radio\n\t\t\tif (!!setting.check && setting.check.enable && view.repairChkClass) {\n\t\t\t\tview.repairChkClass(setting, oldParentNode);\n\t\t\t\tview.repairParentChkClassWithSelf(setting, oldParentNode);\n\t\t\t\tif (oldParentNode != node.parent)\n\t\t\t\t\tview.repairParentChkClassWithSelf(setting, node);\n\t\t\t}\n\n\t\t\t//expand parents after move\n\t\t\tif (!isSilent) {\n\t\t\t\tview.expandCollapseParentNode(setting, node.getParentNode(), true, animateFlag);\n\t\t\t}\n\t\t},\n\t\tremoveEditBtn: function(setting, node) {\n\t\t\t$$(node, consts.id.EDIT, setting).unbind().remove();\n\t\t},\n\t\tremoveRemoveBtn: function(setting, node) {\n\t\t\t$$(node, consts.id.REMOVE, setting).unbind().remove();\n\t\t},\n\t\tremoveTreeDom: function(setting, node) {\n\t\t\tnode.isHover = false;\n\t\t\tview.removeEditBtn(setting, node);\n\t\t\tview.removeRemoveBtn(setting, node);\n\t\t\ttools.apply(setting.view.removeHoverDom, [setting.treeId, node]);\n\t\t},\n\t\trepairNodeLevelClass: function(setting, node, oldLevel) {\n\t\t\tif (oldLevel === node.level) return;\n\t\t\tvar liObj = $$(node, setting),\n\t\t\taObj = $$(node, consts.id.A, setting),\n\t\t\tulObj = $$(node, consts.id.UL, setting),\n\t\t\toldClass = consts.className.LEVEL + oldLevel,\n\t\t\tnewClass = consts.className.LEVEL + node.level;\n\t\t\tliObj.removeClass(oldClass);\n\t\t\tliObj.addClass(newClass);\n\t\t\taObj.removeClass(oldClass);\n\t\t\taObj.addClass(newClass);\n\t\t\tulObj.removeClass(oldClass);\n\t\t\tulObj.addClass(newClass);\n\t\t},\n\t\tselectNodes : function(setting, nodes) {\n\t\t\tfor (var i=0, l=nodes.length; i<l; i++) {\n\t\t\t\tview.selectNode(setting, nodes[i], i>0);\n\t\t\t}\n\t\t}\n\t},\n\n\t_z = {\n\t\ttools: _tools,\n\t\tview: _view,\n\t\tevent: _event,\n\t\tdata: _data\n\t};\n\t$.extend(true, $.fn.zTree.consts, _consts);\n\t$.extend(true, $.fn.zTree._z, _z);\n\n\tvar zt = $.fn.zTree,\n\ttools = zt._z.tools,\n\tconsts = zt.consts,\n\tview = zt._z.view,\n\tdata = zt._z.data,\n\tevent = zt._z.event,\n\t$$ = tools.$;\n\n\tdata.exSetting(_setting);\n\tdata.addInitBind(_bindEvent);\n\tdata.addInitUnBind(_unbindEvent);\n\tdata.addInitCache(_initCache);\n\tdata.addInitNode(_initNode);\n\tdata.addInitProxy(_eventProxy);\n\tdata.addInitRoot(_initRoot);\n\tdata.addZTreeTools(_zTreeTools);\n\n\tvar _cancelPreSelectedNode = view.cancelPreSelectedNode;\n\tview.cancelPreSelectedNode = function (setting, node) {\n\t\tvar list = data.getRoot(setting).curSelectedList;\n\t\tfor (var i=0, j=list.length; i<j; i++) {\n\t\t\tif (!node || node === list[i]) {\n\t\t\t\tview.removeTreeDom(setting, list[i]);\n\t\t\t\tif (node) break;\n\t\t\t}\n\t\t}\n\t\tif (_cancelPreSelectedNode) _cancelPreSelectedNode.apply(view, arguments);\n\t}\n\n\tvar _createNodes = view.createNodes;\n\tview.createNodes = function(setting, level, nodes, parentNode, index) {\n\t\tif (_createNodes) {\n\t\t\t_createNodes.apply(view, arguments);\n\t\t}\n\t\tif (!nodes) return;\n\t\tif (view.repairParentChkClassWithSelf) {\n\t\t\tview.repairParentChkClassWithSelf(setting, parentNode);\n\t\t}\n\t}\n\n\tvar _makeNodeUrl = view.makeNodeUrl;\n\tview.makeNodeUrl = function(setting, node) {\n\t\treturn setting.edit.enable ? null : (_makeNodeUrl.apply(view, arguments));\n\t}\n\n\tvar _removeNode = view.removeNode;\n\tview.removeNode = function(setting, node) {\n\t\tvar root = data.getRoot(setting);\n\t\tif (root.curEditNode === node) root.curEditNode = null;\n\t\tif (_removeNode) {\n\t\t\t_removeNode.apply(view, arguments);\n\t\t}\n\t}\n\n\tvar _selectNode = view.selectNode;\n\tview.selectNode = function(setting, node, addFlag) {\n\t\tvar root = data.getRoot(setting);\n\t\tif (data.isSelectedNode(setting, node) && root.curEditNode == node && node.editNameFlag) {\n\t\t\treturn false;\n\t\t}\n\t\tif (_selectNode) _selectNode.apply(view, arguments);\n\t\tview.addHoverDom(setting, node);\n\t\treturn true;\n\t}\n\n\tvar _uCanDo = tools.uCanDo;\n\ttools.uCanDo = function(setting, e) {\n\t\tvar root = data.getRoot(setting);\n\t\tif (e && (tools.eqs(e.type, \"mouseover\") || tools.eqs(e.type, \"mouseout\") || tools.eqs(e.type, \"mousedown\") || tools.eqs(e.type, \"mouseup\"))) {\n\t\t\treturn true;\n\t\t}\n\t\tif (root.curEditNode) {\n\t\t\tview.editNodeBlur = false;\n\t\t\troot.curEditInput.focus();\n\t\t}\n\t\treturn (!root.curEditNode) && (_uCanDo ? _uCanDo.apply(view, arguments) : true);\n\t}\n})(jQuery);\n"
  },
  {
    "path": "automatic/static/zTree_v3/js/jquery.ztree.core.js",
    "content": "/*\n * JQuery zTree core v3.5.25\n * http://zTree.me/\n *\n * Copyright (c) 2010 Hunter.z\n *\n * Licensed same as jquery - MIT License\n * http://www.opensource.org/licenses/mit-license.php\n *\n * email: hunter.z@263.net\n * Date: 2016-09-27\n */\n(function($){\n\tvar settings = {}, roots = {}, caches = {},\n\t//default consts of core\n\t_consts = {\n\t\tclassName: {\n\t\t\tBUTTON: \"button\",\n\t\t\tLEVEL: \"level\",\n\t\t\tICO_LOADING: \"ico_loading\",\n\t\t\tSWITCH: \"switch\",\n\t\t\tNAME: 'node_name'\n\t\t},\n\t\tevent: {\n\t\t\tNODECREATED: \"ztree_nodeCreated\",\n\t\t\tCLICK: \"ztree_click\",\n\t\t\tEXPAND: \"ztree_expand\",\n\t\t\tCOLLAPSE: \"ztree_collapse\",\n\t\t\tASYNC_SUCCESS: \"ztree_async_success\",\n\t\t\tASYNC_ERROR: \"ztree_async_error\",\n\t\t\tREMOVE: \"ztree_remove\",\n\t\t\tSELECTED: \"ztree_selected\",\n\t\t\tUNSELECTED: \"ztree_unselected\"\n\t\t},\n\t\tid: {\n\t\t\tA: \"_a\",\n\t\t\tICON: \"_ico\",\n\t\t\tSPAN: \"_span\",\n\t\t\tSWITCH: \"_switch\",\n\t\t\tUL: \"_ul\"\n\t\t},\n\t\tline: {\n\t\t\tROOT: \"root\",\n\t\t\tROOTS: \"roots\",\n\t\t\tCENTER: \"center\",\n\t\t\tBOTTOM: \"bottom\",\n\t\t\tNOLINE: \"noline\",\n\t\t\tLINE: \"line\"\n\t\t},\n\t\tfolder: {\n\t\t\tOPEN: \"open\",\n\t\t\tCLOSE: \"close\",\n\t\t\tDOCU: \"docu\"\n\t\t},\n\t\tnode: {\n\t\t\tCURSELECTED: \"curSelectedNode\"\n\t\t}\n\t},\n\t//default setting of core\n\t_setting = {\n\t\ttreeId: \"\",\n\t\ttreeObj: null,\n\t\tview: {\n\t\t\taddDiyDom: null,\n\t\t\tautoCancelSelected: true,\n\t\t\tdblClickExpand: true,\n\t\t\texpandSpeed: \"fast\",\n\t\t\tfontCss: {},\n\t\t\tnameIsHTML: false,\n\t\t\tselectedMulti: true,\n\t\t\tshowIcon: true,\n\t\t\tshowLine: true,\n\t\t\tshowTitle: true,\n\t\t\ttxtSelectedEnable: false\n\t\t},\n\t\tdata: {\n\t\t\tkey: {\n\t\t\t\tchildren: \"children\",\n\t\t\t\tname: \"name\",\n\t\t\t\ttitle: \"\",\n\t\t\t\turl: \"url\",\n\t\t\t\ticon: \"icon\"\n\t\t\t},\n\t\t\tsimpleData: {\n\t\t\t\tenable: false,\n\t\t\t\tidKey: \"id\",\n\t\t\t\tpIdKey: \"pId\",\n\t\t\t\trootPId: null\n\t\t\t},\n\t\t\tkeep: {\n\t\t\t\tparent: false,\n\t\t\t\tleaf: false\n\t\t\t}\n\t\t},\n\t\tasync: {\n\t\t\tenable: false,\n\t\t\tcontentType: \"application/x-www-form-urlencoded\",\n\t\t\ttype: \"post\",\n\t\t\tdataType: \"text\",\n\t\t\turl: \"\",\n\t\t\tautoParam: [],\n\t\t\totherParam: [],\n\t\t\tdataFilter: null\n\t\t},\n\t\tcallback: {\n\t\t\tbeforeAsync:null,\n\t\t\tbeforeClick:null,\n\t\t\tbeforeDblClick:null,\n\t\t\tbeforeRightClick:null,\n\t\t\tbeforeMouseDown:null,\n\t\t\tbeforeMouseUp:null,\n\t\t\tbeforeExpand:null,\n\t\t\tbeforeCollapse:null,\n\t\t\tbeforeRemove:null,\n\n\t\t\tonAsyncError:null,\n\t\t\tonAsyncSuccess:null,\n\t\t\tonNodeCreated:null,\n\t\t\tonClick:null,\n\t\t\tonDblClick:null,\n\t\t\tonRightClick:null,\n\t\t\tonMouseDown:null,\n\t\t\tonMouseUp:null,\n\t\t\tonExpand:null,\n\t\t\tonCollapse:null,\n\t\t\tonRemove:null\n\t\t}\n\t},\n\t//default root of core\n\t//zTree use root to save full data\n\t_initRoot = function (setting) {\n\t\tvar r = data.getRoot(setting);\n\t\tif (!r) {\n\t\t\tr = {};\n\t\t\tdata.setRoot(setting, r);\n\t\t}\n\t\tr[setting.data.key.children] = [];\n\t\tr.expandTriggerFlag = false;\n\t\tr.curSelectedList = [];\n\t\tr.noSelection = true;\n\t\tr.createdNodes = [];\n\t\tr.zId = 0;\n\t\tr._ver = (new Date()).getTime();\n\t},\n\t//default cache of core\n\t_initCache = function(setting) {\n\t\tvar c = data.getCache(setting);\n\t\tif (!c) {\n\t\t\tc = {};\n\t\t\tdata.setCache(setting, c);\n\t\t}\n\t\tc.nodes = [];\n\t\tc.doms = [];\n\t},\n\t//default bindEvent of core\n\t_bindEvent = function(setting) {\n\t\tvar o = setting.treeObj,\n\t\tc = consts.event;\n\t\to.bind(c.NODECREATED, function (event, treeId, node) {\n\t\t\ttools.apply(setting.callback.onNodeCreated, [event, treeId, node]);\n\t\t});\n\n\t\to.bind(c.CLICK, function (event, srcEvent, treeId, node, clickFlag) {\n\t\t\ttools.apply(setting.callback.onClick, [srcEvent, treeId, node, clickFlag]);\n\t\t});\n\n\t\to.bind(c.EXPAND, function (event, treeId, node) {\n\t\t\ttools.apply(setting.callback.onExpand, [event, treeId, node]);\n\t\t});\n\n\t\to.bind(c.COLLAPSE, function (event, treeId, node) {\n\t\t\ttools.apply(setting.callback.onCollapse, [event, treeId, node]);\n\t\t});\n\n\t\to.bind(c.ASYNC_SUCCESS, function (event, treeId, node, msg) {\n\t\t\ttools.apply(setting.callback.onAsyncSuccess, [event, treeId, node, msg]);\n\t\t});\n\n\t\to.bind(c.ASYNC_ERROR, function (event, treeId, node, XMLHttpRequest, textStatus, errorThrown) {\n\t\t\ttools.apply(setting.callback.onAsyncError, [event, treeId, node, XMLHttpRequest, textStatus, errorThrown]);\n\t\t});\n\n\t\to.bind(c.REMOVE, function (event, treeId, treeNode) {\n\t\t\ttools.apply(setting.callback.onRemove, [event, treeId, treeNode]);\n\t\t});\n\n\t\to.bind(c.SELECTED, function (event, treeId, node) {\n\t\t\ttools.apply(setting.callback.onSelected, [treeId, node]);\n\t\t});\n\t\to.bind(c.UNSELECTED, function (event, treeId, node) {\n\t\t\ttools.apply(setting.callback.onUnSelected, [treeId, node]);\n\t\t});\n\t},\n\t_unbindEvent = function(setting) {\n\t\tvar o = setting.treeObj,\n\t\tc = consts.event;\n\t\to.unbind(c.NODECREATED)\n\t\t.unbind(c.CLICK)\n\t\t.unbind(c.EXPAND)\n\t\t.unbind(c.COLLAPSE)\n\t\t.unbind(c.ASYNC_SUCCESS)\n\t\t.unbind(c.ASYNC_ERROR)\n\t\t.unbind(c.REMOVE)\n\t\t.unbind(c.SELECTED)\n\t\t.unbind(c.UNSELECTED);\n\t},\n\t//default event proxy of core\n\t_eventProxy = function(event) {\n\t\tvar target = event.target,\n\t\tsetting = data.getSetting(event.data.treeId),\n\t\ttId = \"\", node = null,\n\t\tnodeEventType = \"\", treeEventType = \"\",\n\t\tnodeEventCallback = null, treeEventCallback = null,\n\t\ttmp = null;\n\n\t\tif (tools.eqs(event.type, \"mousedown\")) {\n\t\t\ttreeEventType = \"mousedown\";\n\t\t} else if (tools.eqs(event.type, \"mouseup\")) {\n\t\t\ttreeEventType = \"mouseup\";\n\t\t} else if (tools.eqs(event.type, \"contextmenu\")) {\n\t\t\ttreeEventType = \"contextmenu\";\n\t\t} else if (tools.eqs(event.type, \"click\")) {\n\t\t\tif (tools.eqs(target.tagName, \"span\") && target.getAttribute(\"treeNode\"+ consts.id.SWITCH) !== null) {\n\t\t\t\ttId = tools.getNodeMainDom(target).id;\n\t\t\t\tnodeEventType = \"switchNode\";\n\t\t\t} else {\n\t\t\t\ttmp = tools.getMDom(setting, target, [{tagName:\"a\", attrName:\"treeNode\"+consts.id.A}]);\n\t\t\t\tif (tmp) {\n\t\t\t\t\ttId = tools.getNodeMainDom(tmp).id;\n\t\t\t\t\tnodeEventType = \"clickNode\";\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (tools.eqs(event.type, \"dblclick\")) {\n\t\t\ttreeEventType = \"dblclick\";\n\t\t\ttmp = tools.getMDom(setting, target, [{tagName:\"a\", attrName:\"treeNode\"+consts.id.A}]);\n\t\t\tif (tmp) {\n\t\t\t\ttId = tools.getNodeMainDom(tmp).id;\n\t\t\t\tnodeEventType = \"switchNode\";\n\t\t\t}\n\t\t}\n\t\tif (treeEventType.length > 0 && tId.length == 0) {\n\t\t\ttmp = tools.getMDom(setting, target, [{tagName:\"a\", attrName:\"treeNode\"+consts.id.A}]);\n\t\t\tif (tmp) {tId = tools.getNodeMainDom(tmp).id;}\n\t\t}\n\t\t// event to node\n\t\tif (tId.length>0) {\n\t\t\tnode = data.getNodeCache(setting, tId);\n\t\t\tswitch (nodeEventType) {\n\t\t\t\tcase \"switchNode\" :\n\t\t\t\t\tif (!node.isParent) {\n\t\t\t\t\t\tnodeEventType = \"\";\n\t\t\t\t\t} else if (tools.eqs(event.type, \"click\")\n\t\t\t\t\t\t|| (tools.eqs(event.type, \"dblclick\") && tools.apply(setting.view.dblClickExpand, [setting.treeId, node], setting.view.dblClickExpand))) {\n\t\t\t\t\t\tnodeEventCallback = handler.onSwitchNode;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnodeEventType = \"\";\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"clickNode\" :\n\t\t\t\t\tnodeEventCallback = handler.onClickNode;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\t// event to zTree\n\t\tswitch (treeEventType) {\n\t\t\tcase \"mousedown\" :\n\t\t\t\ttreeEventCallback = handler.onZTreeMousedown;\n\t\t\t\tbreak;\n\t\t\tcase \"mouseup\" :\n\t\t\t\ttreeEventCallback = handler.onZTreeMouseup;\n\t\t\t\tbreak;\n\t\t\tcase \"dblclick\" :\n\t\t\t\ttreeEventCallback = handler.onZTreeDblclick;\n\t\t\t\tbreak;\n\t\t\tcase \"contextmenu\" :\n\t\t\t\ttreeEventCallback = handler.onZTreeContextmenu;\n\t\t\t\tbreak;\n\t\t}\n\t\tvar proxyResult = {\n\t\t\tstop: false,\n\t\t\tnode: node,\n\t\t\tnodeEventType: nodeEventType,\n\t\t\tnodeEventCallback: nodeEventCallback,\n\t\t\ttreeEventType: treeEventType,\n\t\t\ttreeEventCallback: treeEventCallback\n\t\t};\n\t\treturn proxyResult\n\t},\n\t//default init node of core\n\t_initNode = function(setting, level, n, parentNode, isFirstNode, isLastNode, openFlag) {\n\t\tif (!n) return;\n\t\tvar r = data.getRoot(setting),\n\t\tchildKey = setting.data.key.children;\n\t\tn.level = level;\n\t\tn.tId = setting.treeId + \"_\" + (++r.zId);\n\t\tn.parentTId = parentNode ? parentNode.tId : null;\n\t\tn.open = (typeof n.open == \"string\") ? tools.eqs(n.open, \"true\") : !!n.open;\n\t\tif (n[childKey] && n[childKey].length > 0) {\n\t\t\tn.isParent = true;\n\t\t\tn.zAsync = true;\n\t\t} else {\n\t\t\tn.isParent = (typeof n.isParent == \"string\") ? tools.eqs(n.isParent, \"true\") : !!n.isParent;\n\t\t\tn.open = (n.isParent && !setting.async.enable) ? n.open : false;\n\t\t\tn.zAsync = !n.isParent;\n\t\t}\n\t\tn.isFirstNode = isFirstNode;\n\t\tn.isLastNode = isLastNode;\n\t\tn.getParentNode = function() {return data.getNodeCache(setting, n.parentTId);};\n\t\tn.getPreNode = function() {return data.getPreNode(setting, n);};\n\t\tn.getNextNode = function() {return data.getNextNode(setting, n);};\n\t\tn.getIndex = function() {return data.getNodeIndex(setting, n);};\n\t\tn.getPath = function() {return data.getNodePath(setting, n);};\n\t\tn.isAjaxing = false;\n\t\tdata.fixPIdKeyValue(setting, n);\n\t},\n\t_init = {\n\t\tbind: [_bindEvent],\n\t\tunbind: [_unbindEvent],\n\t\tcaches: [_initCache],\n\t\tnodes: [_initNode],\n\t\tproxys: [_eventProxy],\n\t\troots: [_initRoot],\n\t\tbeforeA: [],\n\t\tafterA: [],\n\t\tinnerBeforeA: [],\n\t\tinnerAfterA: [],\n\t\tzTreeTools: []\n\t},\n\t//method of operate data\n\tdata = {\n\t\taddNodeCache: function(setting, node) {\n\t\t\tdata.getCache(setting).nodes[data.getNodeCacheId(node.tId)] = node;\n\t\t},\n\t\tgetNodeCacheId: function(tId) {\n\t\t\treturn tId.substring(tId.lastIndexOf(\"_\")+1);\n\t\t},\n\t\taddAfterA: function(afterA) {\n\t\t\t_init.afterA.push(afterA);\n\t\t},\n\t\taddBeforeA: function(beforeA) {\n\t\t\t_init.beforeA.push(beforeA);\n\t\t},\n\t\taddInnerAfterA: function(innerAfterA) {\n\t\t\t_init.innerAfterA.push(innerAfterA);\n\t\t},\n\t\taddInnerBeforeA: function(innerBeforeA) {\n\t\t\t_init.innerBeforeA.push(innerBeforeA);\n\t\t},\n\t\taddInitBind: function(bindEvent) {\n\t\t\t_init.bind.push(bindEvent);\n\t\t},\n\t\taddInitUnBind: function(unbindEvent) {\n\t\t\t_init.unbind.push(unbindEvent);\n\t\t},\n\t\taddInitCache: function(initCache) {\n\t\t\t_init.caches.push(initCache);\n\t\t},\n\t\taddInitNode: function(initNode) {\n\t\t\t_init.nodes.push(initNode);\n\t\t},\n\t\taddInitProxy: function(initProxy, isFirst) {\n\t\t\tif (!!isFirst) {\n\t\t\t\t_init.proxys.splice(0,0,initProxy);\n\t\t\t} else {\n\t\t\t\t_init.proxys.push(initProxy);\n\t\t\t}\n\t\t},\n\t\taddInitRoot: function(initRoot) {\n\t\t\t_init.roots.push(initRoot);\n\t\t},\n\t\taddNodesData: function(setting, parentNode, index, nodes) {\n\t\t\tvar childKey = setting.data.key.children, params;\n\t\t\tif (!parentNode[childKey]) {\n\t\t\t\tparentNode[childKey] = [];\n\t\t\t\tindex = -1;\n\t\t\t} else if (index >= parentNode[childKey].length) {\n\t\t\t\tindex = -1;\n\t\t\t}\n\n\t\t\tif (parentNode[childKey].length > 0 && index === 0) {\n\t\t\t\tparentNode[childKey][0].isFirstNode = false;\n\t\t\t\tview.setNodeLineIcos(setting, parentNode[childKey][0]);\n\t\t\t} else if (parentNode[childKey].length > 0 && index < 0) {\n\t\t\t\tparentNode[childKey][parentNode[childKey].length - 1].isLastNode = false;\n\t\t\t\tview.setNodeLineIcos(setting, parentNode[childKey][parentNode[childKey].length - 1]);\n\t\t\t}\n\t\t\tparentNode.isParent = true;\n\n\t\t\tif (index<0) {\n\t\t\t\tparentNode[childKey] = parentNode[childKey].concat(nodes);\n\t\t\t} else {\n\t\t\t\tparams = [index, 0].concat(nodes);\n\t\t\t\tparentNode[childKey].splice.apply(parentNode[childKey], params);\n\t\t\t}\n\t\t},\n\t\taddSelectedNode: function(setting, node) {\n\t\t\tvar root = data.getRoot(setting);\n\t\t\tif (!data.isSelectedNode(setting, node)) {\n\t\t\t\troot.curSelectedList.push(node);\n\t\t\t}\n\t\t},\n\t\taddCreatedNode: function(setting, node) {\n\t\t\tif (!!setting.callback.onNodeCreated || !!setting.view.addDiyDom) {\n\t\t\t\tvar root = data.getRoot(setting);\n\t\t\t\troot.createdNodes.push(node);\n\t\t\t}\n\t\t},\n\t\taddZTreeTools: function(zTreeTools) {\n\t\t\t_init.zTreeTools.push(zTreeTools);\n\t\t},\n\t\texSetting: function(s) {\n\t\t\t$.extend(true, _setting, s);\n\t\t},\n\t\tfixPIdKeyValue: function(setting, node) {\n\t\t\tif (setting.data.simpleData.enable) {\n\t\t\t\tnode[setting.data.simpleData.pIdKey] = node.parentTId ? node.getParentNode()[setting.data.simpleData.idKey] : setting.data.simpleData.rootPId;\n\t\t\t}\n\t\t},\n\t\tgetAfterA: function(setting, node, array) {\n\t\t\tfor (var i=0, j=_init.afterA.length; i<j; i++) {\n\t\t\t\t_init.afterA[i].apply(this, arguments);\n\t\t\t}\n\t\t},\n\t\tgetBeforeA: function(setting, node, array) {\n\t\t\tfor (var i=0, j=_init.beforeA.length; i<j; i++) {\n\t\t\t\t_init.beforeA[i].apply(this, arguments);\n\t\t\t}\n\t\t},\n\t\tgetInnerAfterA: function(setting, node, array) {\n\t\t\tfor (var i=0, j=_init.innerAfterA.length; i<j; i++) {\n\t\t\t\t_init.innerAfterA[i].apply(this, arguments);\n\t\t\t}\n\t\t},\n\t\tgetInnerBeforeA: function(setting, node, array) {\n\t\t\tfor (var i=0, j=_init.innerBeforeA.length; i<j; i++) {\n\t\t\t\t_init.innerBeforeA[i].apply(this, arguments);\n\t\t\t}\n\t\t},\n\t\tgetCache: function(setting) {\n\t\t\treturn caches[setting.treeId];\n\t\t},\n\t\tgetNodeIndex: function(setting, node) {\n\t\t\tif (!node) return null;\n\t\t\tvar childKey = setting.data.key.children,\n\t\t\tp = node.parentTId ? node.getParentNode() : data.getRoot(setting);\n\t\t\tfor (var i=0, l=p[childKey].length-1; i<=l; i++) {\n\t\t\t\tif (p[childKey][i] === node) {\n\t\t\t\t\treturn i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn -1;\n\t\t},\n\t\tgetNextNode: function(setting, node) {\n\t\t\tif (!node) return null;\n\t\t\tvar childKey = setting.data.key.children,\n\t\t\tp = node.parentTId ? node.getParentNode() : data.getRoot(setting);\n\t\t\tfor (var i=0, l=p[childKey].length-1; i<=l; i++) {\n\t\t\t\tif (p[childKey][i] === node) {\n\t\t\t\t\treturn (i==l ? null : p[childKey][i+1]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tgetNodeByParam: function(setting, nodes, key, value) {\n\t\t\tif (!nodes || !key) return null;\n\t\t\tvar childKey = setting.data.key.children;\n\t\t\tfor (var i = 0, l = nodes.length; i < l; i++) {\n\t\t\t\tif (nodes[i][key] == value) {\n\t\t\t\t\treturn nodes[i];\n\t\t\t\t}\n\t\t\t\tvar tmp = data.getNodeByParam(setting, nodes[i][childKey], key, value);\n\t\t\t\tif (tmp) return tmp;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tgetNodeCache: function(setting, tId) {\n\t\t\tif (!tId) return null;\n\t\t\tvar n = caches[setting.treeId].nodes[data.getNodeCacheId(tId)];\n\t\t\treturn n ? n : null;\n\t\t},\n\t\tgetNodeName: function(setting, node) {\n\t\t\tvar nameKey = setting.data.key.name;\n\t\t\treturn \"\" + node[nameKey];\n\t\t},\n\t\tgetNodePath: function(setting, node) {\n\t\t\tif (!node) return null;\n\n\t\t\tvar path;\n\t\t\tif(node.parentTId) {\n\t\t\t\tpath = node.getParentNode().getPath();\n\t\t\t} else {\n\t\t\t\tpath = [];\n\t\t\t}\n\n\t\t\tif (path) {\n\t\t\t\tpath.push(node);\n\t\t\t}\n\n\t\t\treturn path;\n\t\t},\n\t\tgetNodeTitle: function(setting, node) {\n\t\t\tvar t = setting.data.key.title === \"\" ? setting.data.key.name : setting.data.key.title;\n\t\t\treturn \"\" + node[t];\n\t\t},\n\t\tgetNodes: function(setting) {\n\t\t\treturn data.getRoot(setting)[setting.data.key.children];\n\t\t},\n\t\tgetNodesByParam: function(setting, nodes, key, value) {\n\t\t\tif (!nodes || !key) return [];\n\t\t\tvar childKey = setting.data.key.children,\n\t\t\tresult = [];\n\t\t\tfor (var i = 0, l = nodes.length; i < l; i++) {\n\t\t\t\tif (nodes[i][key] == value) {\n\t\t\t\t\tresult.push(nodes[i]);\n\t\t\t\t}\n\t\t\t\tresult = result.concat(data.getNodesByParam(setting, nodes[i][childKey], key, value));\n\t\t\t}\n\t\t\treturn result;\n\t\t},\n\t\tgetNodesByParamFuzzy: function(setting, nodes, key, value) {\n\t\t\tif (!nodes || !key) return [];\n\t\t\tvar childKey = setting.data.key.children,\n\t\t\tresult = [];\n\t\t\tvalue = value.toLowerCase();\n\t\t\tfor (var i = 0, l = nodes.length; i < l; i++) {\n\t\t\t\tif (typeof nodes[i][key] == \"string\" && nodes[i][key].toLowerCase().indexOf(value)>-1) {\n\t\t\t\t\tresult.push(nodes[i]);\n\t\t\t\t}\n\t\t\t\tresult = result.concat(data.getNodesByParamFuzzy(setting, nodes[i][childKey], key, value));\n\t\t\t}\n\t\t\treturn result;\n\t\t},\n\t\tgetNodesByFilter: function(setting, nodes, filter, isSingle, invokeParam) {\n\t\t\tif (!nodes) return (isSingle ? null : []);\n\t\t\tvar childKey = setting.data.key.children,\n\t\t\tresult = isSingle ? null : [];\n\t\t\tfor (var i = 0, l = nodes.length; i < l; i++) {\n\t\t\t\tif (tools.apply(filter, [nodes[i], invokeParam], false)) {\n\t\t\t\t\tif (isSingle) {return nodes[i];}\n\t\t\t\t\tresult.push(nodes[i]);\n\t\t\t\t}\n\t\t\t\tvar tmpResult = data.getNodesByFilter(setting, nodes[i][childKey], filter, isSingle, invokeParam);\n\t\t\t\tif (isSingle && !!tmpResult) {return tmpResult;}\n\t\t\t\tresult = isSingle ? tmpResult : result.concat(tmpResult);\n\t\t\t}\n\t\t\treturn result;\n\t\t},\n\t\tgetPreNode: function(setting, node) {\n\t\t\tif (!node) return null;\n\t\t\tvar childKey = setting.data.key.children,\n\t\t\tp = node.parentTId ? node.getParentNode() : data.getRoot(setting);\n\t\t\tfor (var i=0, l=p[childKey].length; i<l; i++) {\n\t\t\t\tif (p[childKey][i] === node) {\n\t\t\t\t\treturn (i==0 ? null : p[childKey][i-1]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tgetRoot: function(setting) {\n\t\t\treturn setting ? roots[setting.treeId] : null;\n\t\t},\n\t\tgetRoots: function() {\n\t\t\treturn roots;\n\t\t},\n\t\tgetSetting: function(treeId) {\n\t\t\treturn settings[treeId];\n\t\t},\n\t\tgetSettings: function() {\n\t\t\treturn settings;\n\t\t},\n\t\tgetZTreeTools: function(treeId) {\n\t\t\tvar r = this.getRoot(this.getSetting(treeId));\n\t\t\treturn r ? r.treeTools : null;\n\t\t},\n\t\tinitCache: function(setting) {\n\t\t\tfor (var i=0, j=_init.caches.length; i<j; i++) {\n\t\t\t\t_init.caches[i].apply(this, arguments);\n\t\t\t}\n\t\t},\n\t\tinitNode: function(setting, level, node, parentNode, preNode, nextNode) {\n\t\t\tfor (var i=0, j=_init.nodes.length; i<j; i++) {\n\t\t\t\t_init.nodes[i].apply(this, arguments);\n\t\t\t}\n\t\t},\n\t\tinitRoot: function(setting) {\n\t\t\tfor (var i=0, j=_init.roots.length; i<j; i++) {\n\t\t\t\t_init.roots[i].apply(this, arguments);\n\t\t\t}\n\t\t},\n\t\tisSelectedNode: function(setting, node) {\n\t\t\tvar root = data.getRoot(setting);\n\t\t\tfor (var i=0, j=root.curSelectedList.length; i<j; i++) {\n\t\t\t\tif(node === root.curSelectedList[i]) return true;\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\tremoveNodeCache: function(setting, node) {\n\t\t\tvar childKey = setting.data.key.children;\n\t\t\tif (node[childKey]) {\n\t\t\t\tfor (var i=0, l=node[childKey].length; i<l; i++) {\n\t\t\t\t\tdata.removeNodeCache(setting, node[childKey][i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tdata.getCache(setting).nodes[data.getNodeCacheId(node.tId)] = null;\n\t\t},\n\t\tremoveSelectedNode: function(setting, node) {\n\t\t\tvar root = data.getRoot(setting);\n\t\t\tfor (var i=0, j=root.curSelectedList.length; i<j; i++) {\n\t\t\t\tif(node === root.curSelectedList[i] || !data.getNodeCache(setting, root.curSelectedList[i].tId)) {\n\t\t\t\t\troot.curSelectedList.splice(i, 1);\n\t\t\t\t\tsetting.treeObj.trigger(consts.event.UNSELECTED, [setting.treeId, node]);\n\t\t\t\t\ti--;j--;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tsetCache: function(setting, cache) {\n\t\t\tcaches[setting.treeId] = cache;\n\t\t},\n\t\tsetRoot: function(setting, root) {\n\t\t\troots[setting.treeId] = root;\n\t\t},\n\t\tsetZTreeTools: function(setting, zTreeTools) {\n\t\t\tfor (var i=0, j=_init.zTreeTools.length; i<j; i++) {\n\t\t\t\t_init.zTreeTools[i].apply(this, arguments);\n\t\t\t}\n\t\t},\n\t\ttransformToArrayFormat: function (setting, nodes) {\n\t\t\tif (!nodes) return [];\n\t\t\tvar childKey = setting.data.key.children,\n\t\t\tr = [];\n\t\t\tif (tools.isArray(nodes)) {\n\t\t\t\tfor (var i=0, l=nodes.length; i<l; i++) {\n\t\t\t\t\tr.push(nodes[i]);\n\t\t\t\t\tif (nodes[i][childKey])\n\t\t\t\t\t\tr = r.concat(data.transformToArrayFormat(setting, nodes[i][childKey]));\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tr.push(nodes);\n\t\t\t\tif (nodes[childKey])\n\t\t\t\t\tr = r.concat(data.transformToArrayFormat(setting, nodes[childKey]));\n\t\t\t}\n\t\t\treturn r;\n\t\t},\n\t\ttransformTozTreeFormat: function(setting, sNodes) {\n\t\t\tvar i,l,\n\t\t\tkey = setting.data.simpleData.idKey,\n\t\t\tparentKey = setting.data.simpleData.pIdKey,\n\t\t\tchildKey = setting.data.key.children;\n\t\t\tif (!key || key==\"\" || !sNodes) return [];\n\n\t\t\tif (tools.isArray(sNodes)) {\n\t\t\t\tvar r = [];\n\t\t\t\tvar tmpMap = {};\n\t\t\t\tfor (i=0, l=sNodes.length; i<l; i++) {\n\t\t\t\t\ttmpMap[sNodes[i][key]] = sNodes[i];\n\t\t\t\t}\n\t\t\t\tfor (i=0, l=sNodes.length; i<l; i++) {\n\t\t\t\t\tif (tmpMap[sNodes[i][parentKey]] && sNodes[i][key] != sNodes[i][parentKey]) {\n\t\t\t\t\t\tif (!tmpMap[sNodes[i][parentKey]][childKey])\n\t\t\t\t\t\t\ttmpMap[sNodes[i][parentKey]][childKey] = [];\n\t\t\t\t\t\ttmpMap[sNodes[i][parentKey]][childKey].push(sNodes[i]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tr.push(sNodes[i]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn r;\n\t\t\t}else {\n\t\t\t\treturn [sNodes];\n\t\t\t}\n\t\t}\n\t},\n\t//method of event proxy\n\tevent = {\n\t\tbindEvent: function(setting) {\n\t\t\tfor (var i=0, j=_init.bind.length; i<j; i++) {\n\t\t\t\t_init.bind[i].apply(this, arguments);\n\t\t\t}\n\t\t},\n\t\tunbindEvent: function(setting) {\n\t\t\tfor (var i=0, j=_init.unbind.length; i<j; i++) {\n\t\t\t\t_init.unbind[i].apply(this, arguments);\n\t\t\t}\n\t\t},\n\t\tbindTree: function(setting) {\n\t\t\tvar eventParam = {\n\t\t\t\ttreeId: setting.treeId\n\t\t\t},\n\t\t\to = setting.treeObj;\n\t\t\tif (!setting.view.txtSelectedEnable) {\n\t\t\t\t// for can't select text\n\t\t\t\to.bind('selectstart', handler.onSelectStart).css({\n\t\t\t\t\t\"-moz-user-select\":\"-moz-none\"\n\t\t\t\t});\n\t\t\t}\n\t\t\to.bind('click', eventParam, event.proxy);\n\t\t\to.bind('dblclick', eventParam, event.proxy);\n\t\t\to.bind('mouseover', eventParam, event.proxy);\n\t\t\to.bind('mouseout', eventParam, event.proxy);\n\t\t\to.bind('mousedown', eventParam, event.proxy);\n\t\t\to.bind('mouseup', eventParam, event.proxy);\n\t\t\to.bind('contextmenu', eventParam, event.proxy);\n\t\t},\n\t\tunbindTree: function(setting) {\n\t\t\tvar o = setting.treeObj;\n\t\t\to.unbind('selectstart', handler.onSelectStart)\n\t\t\t\t.unbind('click', event.proxy)\n\t\t\t\t.unbind('dblclick', event.proxy)\n\t\t\t\t.unbind('mouseover', event.proxy)\n\t\t\t\t.unbind('mouseout', event.proxy)\n\t\t\t\t.unbind('mousedown', event.proxy)\n\t\t\t\t.unbind('mouseup', event.proxy)\n\t\t\t\t.unbind('contextmenu', event.proxy);\n\t\t},\n\t\tdoProxy: function(e) {\n\t\t\tvar results = [];\n\t\t\tfor (var i=0, j=_init.proxys.length; i<j; i++) {\n\t\t\t\tvar proxyResult = _init.proxys[i].apply(this, arguments);\n\t\t\t\tresults.push(proxyResult);\n\t\t\t\tif (proxyResult.stop) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn results;\n\t\t},\n\t\tproxy: function(e) {\n\t\t\tvar setting = data.getSetting(e.data.treeId);\n\t\t\tif (!tools.uCanDo(setting, e)) return true;\n\t\t\tvar results = event.doProxy(e),\n\t\t\tr = true, x = false;\n\t\t\tfor (var i=0, l=results.length; i<l; i++) {\n\t\t\t\tvar proxyResult = results[i];\n\t\t\t\tif (proxyResult.nodeEventCallback) {\n\t\t\t\t\tx = true;\n\t\t\t\t\tr = proxyResult.nodeEventCallback.apply(proxyResult, [e, proxyResult.node]) && r;\n\t\t\t\t}\n\t\t\t\tif (proxyResult.treeEventCallback) {\n\t\t\t\t\tx = true;\n\t\t\t\t\tr = proxyResult.treeEventCallback.apply(proxyResult, [e, proxyResult.node]) && r;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn r;\n\t\t}\n\t},\n\t//method of event handler\n\thandler = {\n\t\tonSwitchNode: function (event, node) {\n\t\t\tvar setting = data.getSetting(event.data.treeId);\n\t\t\tif (node.open) {\n\t\t\t\tif (tools.apply(setting.callback.beforeCollapse, [setting.treeId, node], true) == false) return true;\n\t\t\t\tdata.getRoot(setting).expandTriggerFlag = true;\n\t\t\t\tview.switchNode(setting, node);\n\t\t\t} else {\n\t\t\t\tif (tools.apply(setting.callback.beforeExpand, [setting.treeId, node], true) == false) return true;\n\t\t\t\tdata.getRoot(setting).expandTriggerFlag = true;\n\t\t\t\tview.switchNode(setting, node);\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\t\tonClickNode: function (event, node) {\n\t\t\tvar setting = data.getSetting(event.data.treeId),\n\t\t\tclickFlag = ( (setting.view.autoCancelSelected && (event.ctrlKey || event.metaKey)) && data.isSelectedNode(setting, node)) ? 0 : (setting.view.autoCancelSelected && (event.ctrlKey || event.metaKey) && setting.view.selectedMulti) ? 2 : 1;\n\t\t\tif (tools.apply(setting.callback.beforeClick, [setting.treeId, node, clickFlag], true) == false) return true;\n\t\t\tif (clickFlag === 0) {\n\t\t\t\tview.cancelPreSelectedNode(setting, node);\n\t\t\t} else {\n\t\t\t\tview.selectNode(setting, node, clickFlag === 2);\n\t\t\t}\n\t\t\tsetting.treeObj.trigger(consts.event.CLICK, [event, setting.treeId, node, clickFlag]);\n\t\t\treturn true;\n\t\t},\n\t\tonZTreeMousedown: function(event, node) {\n\t\t\tvar setting = data.getSetting(event.data.treeId);\n\t\t\tif (tools.apply(setting.callback.beforeMouseDown, [setting.treeId, node], true)) {\n\t\t\t\ttools.apply(setting.callback.onMouseDown, [event, setting.treeId, node]);\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\t\tonZTreeMouseup: function(event, node) {\n\t\t\tvar setting = data.getSetting(event.data.treeId);\n\t\t\tif (tools.apply(setting.callback.beforeMouseUp, [setting.treeId, node], true)) {\n\t\t\t\ttools.apply(setting.callback.onMouseUp, [event, setting.treeId, node]);\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\t\tonZTreeDblclick: function(event, node) {\n\t\t\tvar setting = data.getSetting(event.data.treeId);\n\t\t\tif (tools.apply(setting.callback.beforeDblClick, [setting.treeId, node], true)) {\n\t\t\t\ttools.apply(setting.callback.onDblClick, [event, setting.treeId, node]);\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\t\tonZTreeContextmenu: function(event, node) {\n\t\t\tvar setting = data.getSetting(event.data.treeId);\n\t\t\tif (tools.apply(setting.callback.beforeRightClick, [setting.treeId, node], true)) {\n\t\t\t\ttools.apply(setting.callback.onRightClick, [event, setting.treeId, node]);\n\t\t\t}\n\t\t\treturn (typeof setting.callback.onRightClick) != \"function\";\n\t\t},\n\t\tonSelectStart: function(e){\n\t\t\tvar n = e.originalEvent.srcElement.nodeName.toLowerCase();\n\t\t\treturn (n === \"input\" || n === \"textarea\" );\n\t\t}\n\t},\n\t//method of tools for zTree\n\ttools = {\n\t\tapply: function(fun, param, defaultValue) {\n\t\t\tif ((typeof fun) == \"function\") {\n\t\t\t\treturn fun.apply(zt, param?param:[]);\n\t\t\t}\n\t\t\treturn defaultValue;\n\t\t},\n\t\tcanAsync: function(setting, node) {\n\t\t\tvar childKey = setting.data.key.children;\n\t\t\treturn (setting.async.enable && node && node.isParent && !(node.zAsync || (node[childKey] && node[childKey].length > 0)));\n\t\t},\n\t\tclone: function (obj){\n\t\t\tif (obj === null) return null;\n\t\t\tvar o = tools.isArray(obj) ? [] : {};\n\t\t\tfor(var i in obj){\n\t\t\t\to[i] = (obj[i] instanceof Date) ? new Date(obj[i].getTime()) : (typeof obj[i] === \"object\" ? tools.clone(obj[i]) : obj[i]);\n\t\t\t}\n\t\t\treturn o;\n\t\t},\n\t\teqs: function(str1, str2) {\n\t\t\treturn str1.toLowerCase() === str2.toLowerCase();\n\t\t},\n\t\tisArray: function(arr) {\n\t\t\treturn Object.prototype.toString.apply(arr) === \"[object Array]\";\n\t\t},\n\t\t$: function(node, exp, setting) {\n\t\t\tif (!!exp && typeof exp != \"string\") {\n\t\t\t\tsetting = exp;\n\t\t\t\texp = \"\";\n\t\t\t}\n\t\t\tif (typeof node == \"string\") {\n\t\t\t\treturn $(node, setting ? setting.treeObj.get(0).ownerDocument : null);\n\t\t\t} else {\n\t\t\t\treturn $(\"#\" + node.tId + exp, setting ? setting.treeObj : null);\n\t\t\t}\n\t\t},\n\t\tgetMDom: function (setting, curDom, targetExpr) {\n\t\t\tif (!curDom) return null;\n\t\t\twhile (curDom && curDom.id !== setting.treeId) {\n\t\t\t\tfor (var i=0, l=targetExpr.length; curDom.tagName && i<l; i++) {\n\t\t\t\t\tif (tools.eqs(curDom.tagName, targetExpr[i].tagName) && curDom.getAttribute(targetExpr[i].attrName) !== null) {\n\t\t\t\t\t\treturn curDom;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcurDom = curDom.parentNode;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tgetNodeMainDom:function(target) {\n\t\t\treturn ($(target).parent(\"li\").get(0) || $(target).parentsUntil(\"li\").parent().get(0));\n\t\t},\n\t\tisChildOrSelf: function(dom, parentId) {\n\t\t\treturn ( $(dom).closest(\"#\" + parentId).length> 0 );\n\t\t},\n\t\tuCanDo: function(setting, e) {\n\t\t\treturn true;\n\t\t}\n\t},\n\t//method of operate ztree dom\n\tview = {\n\t\taddNodes: function(setting, parentNode, index, newNodes, isSilent) {\n\t\t\tif (setting.data.keep.leaf && parentNode && !parentNode.isParent) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (!tools.isArray(newNodes)) {\n\t\t\t\tnewNodes = [newNodes];\n\t\t\t}\n\t\t\tif (setting.data.simpleData.enable) {\n\t\t\t\tnewNodes = data.transformTozTreeFormat(setting, newNodes);\n\t\t\t}\n\t\t\tif (parentNode) {\n\t\t\t\tvar target_switchObj = $$(parentNode, consts.id.SWITCH, setting),\n\t\t\t\ttarget_icoObj = $$(parentNode, consts.id.ICON, setting),\n\t\t\t\ttarget_ulObj = $$(parentNode, consts.id.UL, setting);\n\n\t\t\t\tif (!parentNode.open) {\n\t\t\t\t\tview.replaceSwitchClass(parentNode, target_switchObj, consts.folder.CLOSE);\n\t\t\t\t\tview.replaceIcoClass(parentNode, target_icoObj, consts.folder.CLOSE);\n\t\t\t\t\tparentNode.open = false;\n\t\t\t\t\ttarget_ulObj.css({\n\t\t\t\t\t\t\"display\": \"none\"\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tdata.addNodesData(setting, parentNode, index, newNodes);\n\t\t\t\tview.createNodes(setting, parentNode.level + 1, newNodes, parentNode, index);\n\t\t\t\tif (!isSilent) {\n\t\t\t\t\tview.expandCollapseParentNode(setting, parentNode, true);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdata.addNodesData(setting, data.getRoot(setting), index, newNodes);\n\t\t\t\tview.createNodes(setting, 0, newNodes, null, index);\n\t\t\t}\n\t\t},\n\t\tappendNodes: function(setting, level, nodes, parentNode, index, initFlag, openFlag) {\n\t\t\tif (!nodes) return [];\n\t\t\tvar html = [],\n\t\t\tchildKey = setting.data.key.children;\n\n\t\t\tvar tmpPNode = (parentNode) ? parentNode: data.getRoot(setting),\n\t\t\t\ttmpPChild = tmpPNode[childKey],\n\t\t\t\tisFirstNode, isLastNode;\n\n\t\t\tif (!tmpPChild || index >= tmpPChild.length) {\n\t\t\t\tindex = -1;\n\t\t\t}\n\n\t\t\tfor (var i = 0, l = nodes.length; i < l; i++) {\n\t\t\t\tvar node = nodes[i];\n\t\t\t\tif (initFlag) {\n\t\t\t\t\tisFirstNode = ((index===0 || tmpPChild.length == nodes.length) && (i == 0));\n\t\t\t\t\tisLastNode = (index < 0 && i == (nodes.length - 1));\n\t\t\t\t\tdata.initNode(setting, level, node, parentNode, isFirstNode, isLastNode, openFlag);\n\t\t\t\t\tdata.addNodeCache(setting, node);\n\t\t\t\t}\n\n\t\t\t\tvar childHtml = [];\n\t\t\t\tif (node[childKey] && node[childKey].length > 0) {\n\t\t\t\t\t//make child html first, because checkType\n\t\t\t\t\tchildHtml = view.appendNodes(setting, level + 1, node[childKey], node, -1, initFlag, openFlag && node.open);\n\t\t\t\t}\n\t\t\t\tif (openFlag) {\n\n\t\t\t\t\tview.makeDOMNodeMainBefore(html, setting, node);\n\t\t\t\t\tview.makeDOMNodeLine(html, setting, node);\n\t\t\t\t\tdata.getBeforeA(setting, node, html);\n\t\t\t\t\tview.makeDOMNodeNameBefore(html, setting, node);\n\t\t\t\t\tdata.getInnerBeforeA(setting, node, html);\n\t\t\t\t\tview.makeDOMNodeIcon(html, setting, node);\n\t\t\t\t\tdata.getInnerAfterA(setting, node, html);\n\t\t\t\t\tview.makeDOMNodeNameAfter(html, setting, node);\n\t\t\t\t\tdata.getAfterA(setting, node, html);\n\t\t\t\t\tif (node.isParent && node.open) {\n\t\t\t\t\t\tview.makeUlHtml(setting, node, html, childHtml.join(''));\n\t\t\t\t\t}\n\t\t\t\t\tview.makeDOMNodeMainAfter(html, setting, node);\n\t\t\t\t\tdata.addCreatedNode(setting, node);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn html;\n\t\t},\n\t\tappendParentULDom: function(setting, node) {\n\t\t\tvar html = [],\n\t\t\tnObj = $$(node, setting);\n\t\t\tif (!nObj.get(0) && !!node.parentTId) {\n\t\t\t\tview.appendParentULDom(setting, node.getParentNode());\n\t\t\t\tnObj = $$(node, setting);\n\t\t\t}\n\t\t\tvar ulObj = $$(node, consts.id.UL, setting);\n\t\t\tif (ulObj.get(0)) {\n\t\t\t\tulObj.remove();\n\t\t\t}\n\t\t\tvar childKey = setting.data.key.children,\n\t\t\tchildHtml = view.appendNodes(setting, node.level+1, node[childKey], node, -1, false, true);\n\t\t\tview.makeUlHtml(setting, node, html, childHtml.join(''));\n\t\t\tnObj.append(html.join(''));\n\t\t},\n\t\tasyncNode: function(setting, node, isSilent, callback) {\n\t\t\tvar i, l;\n\t\t\tif (node && !node.isParent) {\n\t\t\t\ttools.apply(callback);\n\t\t\t\treturn false;\n\t\t\t} else if (node && node.isAjaxing) {\n\t\t\t\treturn false;\n\t\t\t} else if (tools.apply(setting.callback.beforeAsync, [setting.treeId, node], true) == false) {\n\t\t\t\ttools.apply(callback);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (node) {\n\t\t\t\tnode.isAjaxing = true;\n\t\t\t\tvar icoObj = $$(node, consts.id.ICON, setting);\n\t\t\t\ticoObj.attr({\"style\":\"\", \"class\":consts.className.BUTTON + \" \" + consts.className.ICO_LOADING});\n\t\t\t}\n\n\t\t\tvar tmpParam = {};\n\t\t\tfor (i = 0, l = setting.async.autoParam.length; node && i < l; i++) {\n\t\t\t\tvar pKey = setting.async.autoParam[i].split(\"=\"), spKey = pKey;\n\t\t\t\tif (pKey.length>1) {\n\t\t\t\t\tspKey = pKey[1];\n\t\t\t\t\tpKey = pKey[0];\n\t\t\t\t}\n\t\t\t\ttmpParam[spKey] = node[pKey];\n\t\t\t}\n\t\t\tif (tools.isArray(setting.async.otherParam)) {\n\t\t\t\tfor (i = 0, l = setting.async.otherParam.length; i < l; i += 2) {\n\t\t\t\t\ttmpParam[setting.async.otherParam[i]] = setting.async.otherParam[i + 1];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor (var p in setting.async.otherParam) {\n\t\t\t\t\ttmpParam[p] = setting.async.otherParam[p];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar _tmpV = data.getRoot(setting)._ver;\n\t\t\t$.ajax({\n\t\t\t\tcontentType: setting.async.contentType,\n                cache: false,\n\t\t\t\ttype: setting.async.type,\n\t\t\t\turl: tools.apply(setting.async.url, [setting.treeId, node], setting.async.url),\n\t\t\t\tdata: setting.async.contentType.indexOf('application/json') > -1 ? JSON.stringify(tmpParam) : tmpParam,\n\t\t\t\tdataType: setting.async.dataType,\n\t\t\t\tsuccess: function(msg) {\n\t\t\t\t\tif (_tmpV != data.getRoot(setting)._ver) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tvar newNodes = [];\n\t\t\t\t\ttry {\n\t\t\t\t\t\tif (!msg || msg.length == 0) {\n\t\t\t\t\t\t\tnewNodes = [];\n\t\t\t\t\t\t} else if (typeof msg == \"string\") {\n\t\t\t\t\t\t\tnewNodes = eval(\"(\" + msg + \")\");\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tnewNodes = msg;\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch(err) {\n\t\t\t\t\t\tnewNodes = msg;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (node) {\n\t\t\t\t\t\tnode.isAjaxing = null;\n\t\t\t\t\t\tnode.zAsync = true;\n\t\t\t\t\t}\n\t\t\t\t\tview.setNodeLineIcos(setting, node);\n\t\t\t\t\tif (newNodes && newNodes !== \"\") {\n\t\t\t\t\t\tnewNodes = tools.apply(setting.async.dataFilter, [setting.treeId, node, newNodes], newNodes);\n\t\t\t\t\t\tview.addNodes(setting, node, -1, !!newNodes ? tools.clone(newNodes) : [], !!isSilent);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tview.addNodes(setting, node, -1, [], !!isSilent);\n\t\t\t\t\t}\n\t\t\t\t\tsetting.treeObj.trigger(consts.event.ASYNC_SUCCESS, [setting.treeId, node, msg]);\n\t\t\t\t\ttools.apply(callback);\n\t\t\t\t},\n\t\t\t\terror: function(XMLHttpRequest, textStatus, errorThrown) {\n\t\t\t\t\tif (_tmpV != data.getRoot(setting)._ver) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (node) node.isAjaxing = null;\n\t\t\t\t\tview.setNodeLineIcos(setting, node);\n\t\t\t\t\tsetting.treeObj.trigger(consts.event.ASYNC_ERROR, [setting.treeId, node, XMLHttpRequest, textStatus, errorThrown]);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn true;\n\t\t},\n\t\tcancelPreSelectedNode: function (setting, node, excludeNode) {\n\t\t\tvar list = data.getRoot(setting).curSelectedList,\n\t\t\t\ti, n;\n\t\t\tfor (i=list.length-1; i>=0; i--) {\n\t\t\t\tn = list[i];\n\t\t\t\tif (node === n || (!node && (!excludeNode || excludeNode !== n))) {\n\t\t\t\t\t$$(n, consts.id.A, setting).removeClass(consts.node.CURSELECTED);\n\t\t\t\t\tif (node) {\n\t\t\t\t\t\tdata.removeSelectedNode(setting, node);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlist.splice(i, 1);\n\t\t\t\t\t\tsetting.treeObj.trigger(consts.event.UNSELECTED, [setting.treeId, n]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tcreateNodeCallback: function(setting) {\n\t\t\tif (!!setting.callback.onNodeCreated || !!setting.view.addDiyDom) {\n\t\t\t\tvar root = data.getRoot(setting);\n\t\t\t\twhile (root.createdNodes.length>0) {\n\t\t\t\t\tvar node = root.createdNodes.shift();\n\t\t\t\t\ttools.apply(setting.view.addDiyDom, [setting.treeId, node]);\n\t\t\t\t\tif (!!setting.callback.onNodeCreated) {\n\t\t\t\t\t\tsetting.treeObj.trigger(consts.event.NODECREATED, [setting.treeId, node]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tcreateNodes: function(setting, level, nodes, parentNode, index) {\n\t\t\tif (!nodes || nodes.length == 0) return;\n\t\t\tvar root = data.getRoot(setting),\n\t\t\tchildKey = setting.data.key.children,\n\t\t\topenFlag = !parentNode || parentNode.open || !!$$(parentNode[childKey][0], setting).get(0);\n\t\t\troot.createdNodes = [];\n\t\t\tvar zTreeHtml = view.appendNodes(setting, level, nodes, parentNode, index, true, openFlag),\n\t\t\t\tparentObj, nextObj;\n\n\t\t\tif (!parentNode) {\n\t\t\t\tparentObj = setting.treeObj;\n\t\t\t\t//setting.treeObj.append(zTreeHtml.join(''));\n\t\t\t} else {\n\t\t\t\tvar ulObj = $$(parentNode, consts.id.UL, setting);\n\t\t\t\tif (ulObj.get(0)) {\n\t\t\t\t\tparentObj = ulObj;\n\t\t\t\t\t//ulObj.append(zTreeHtml.join(''));\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (parentObj) {\n\t\t\t\tif (index >= 0) {\n\t\t\t\t\tnextObj = parentObj.children()[index];\n\t\t\t\t}\n\t\t\t\tif (index >=0 && nextObj) {\n\t\t\t\t\t$(nextObj).before(zTreeHtml.join(''));\n\t\t\t\t} else {\n\t\t\t\t\tparentObj.append(zTreeHtml.join(''));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tview.createNodeCallback(setting);\n\t\t},\n\t\tdestroy: function(setting) {\n\t\t\tif (!setting) return;\n\t\t\tdata.initCache(setting);\n\t\t\tdata.initRoot(setting);\n\t\t\tevent.unbindTree(setting);\n\t\t\tevent.unbindEvent(setting);\n\t\t\tsetting.treeObj.empty();\n\t\t\tdelete settings[setting.treeId];\n\t\t},\n\t\texpandCollapseNode: function(setting, node, expandFlag, animateFlag, callback) {\n\t\t\tvar root = data.getRoot(setting),\n\t\t\tchildKey = setting.data.key.children;\n\t\t\tvar tmpCb, _callback;\n\t\t\tif (!node) {\n\t\t\t\ttools.apply(callback, []);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (root.expandTriggerFlag) {\n\t\t\t\t_callback = callback;\n\t\t\t\ttmpCb = function(){\n\t\t\t\t\tif (_callback) _callback();\n\t\t\t\t\tif (node.open) {\n\t\t\t\t\t\tsetting.treeObj.trigger(consts.event.EXPAND, [setting.treeId, node]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsetting.treeObj.trigger(consts.event.COLLAPSE, [setting.treeId, node]);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tcallback = tmpCb;\n\t\t\t\troot.expandTriggerFlag = false;\n\t\t\t}\n\t\t\tif (!node.open && node.isParent && ((!$$(node, consts.id.UL, setting).get(0)) || (node[childKey] && node[childKey].length>0 && !$$(node[childKey][0], setting).get(0)))) {\n\t\t\t\tview.appendParentULDom(setting, node);\n\t\t\t\tview.createNodeCallback(setting);\n\t\t\t}\n\t\t\tif (node.open == expandFlag) {\n\t\t\t\ttools.apply(callback, []);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar ulObj = $$(node, consts.id.UL, setting),\n\t\t\tswitchObj = $$(node, consts.id.SWITCH, setting),\n\t\t\ticoObj = $$(node, consts.id.ICON, setting);\n\n\t\t\tif (node.isParent) {\n\t\t\t\tnode.open = !node.open;\n\t\t\t\tif (node.iconOpen && node.iconClose) {\n\t\t\t\t\ticoObj.attr(\"style\", view.makeNodeIcoStyle(setting, node));\n\t\t\t\t}\n\n\t\t\t\tif (node.open) {\n\t\t\t\t\tview.replaceSwitchClass(node, switchObj, consts.folder.OPEN);\n\t\t\t\t\tview.replaceIcoClass(node, icoObj, consts.folder.OPEN);\n\t\t\t\t\tif (animateFlag == false || setting.view.expandSpeed == \"\") {\n\t\t\t\t\t\tulObj.show();\n\t\t\t\t\t\ttools.apply(callback, []);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (node[childKey] && node[childKey].length > 0) {\n\t\t\t\t\t\t\tulObj.slideDown(setting.view.expandSpeed, callback);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tulObj.show();\n\t\t\t\t\t\t\ttools.apply(callback, []);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tview.replaceSwitchClass(node, switchObj, consts.folder.CLOSE);\n\t\t\t\t\tview.replaceIcoClass(node, icoObj, consts.folder.CLOSE);\n\t\t\t\t\tif (animateFlag == false || setting.view.expandSpeed == \"\" || !(node[childKey] && node[childKey].length > 0)) {\n\t\t\t\t\t\tulObj.hide();\n\t\t\t\t\t\ttools.apply(callback, []);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tulObj.slideUp(setting.view.expandSpeed, callback);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\ttools.apply(callback, []);\n\t\t\t}\n\t\t},\n\t\texpandCollapseParentNode: function(setting, node, expandFlag, animateFlag, callback) {\n\t\t\tif (!node) return;\n\t\t\tif (!node.parentTId) {\n\t\t\t\tview.expandCollapseNode(setting, node, expandFlag, animateFlag, callback);\n\t\t\t\treturn;\n\t\t\t} else {\n\t\t\t\tview.expandCollapseNode(setting, node, expandFlag, animateFlag);\n\t\t\t}\n\t\t\tif (node.parentTId) {\n\t\t\t\tview.expandCollapseParentNode(setting, node.getParentNode(), expandFlag, animateFlag, callback);\n\t\t\t}\n\t\t},\n\t\texpandCollapseSonNode: function(setting, node, expandFlag, animateFlag, callback) {\n\t\t\tvar root = data.getRoot(setting),\n\t\t\tchildKey = setting.data.key.children,\n\t\t\ttreeNodes = (node) ? node[childKey]: root[childKey],\n\t\t\tselfAnimateSign = (node) ? false : animateFlag,\n\t\t\texpandTriggerFlag = data.getRoot(setting).expandTriggerFlag;\n\t\t\tdata.getRoot(setting).expandTriggerFlag = false;\n\t\t\tif (treeNodes) {\n\t\t\t\tfor (var i = 0, l = treeNodes.length; i < l; i++) {\n\t\t\t\t\tif (treeNodes[i]) view.expandCollapseSonNode(setting, treeNodes[i], expandFlag, selfAnimateSign);\n\t\t\t\t}\n\t\t\t}\n\t\t\tdata.getRoot(setting).expandTriggerFlag = expandTriggerFlag;\n\t\t\tview.expandCollapseNode(setting, node, expandFlag, animateFlag, callback );\n\t\t},\n\t\tisSelectedNode: function (setting, node) {\n\t\t\tif (!node) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar list = data.getRoot(setting).curSelectedList,\n\t\t\t\ti;\n\t\t\tfor (i=list.length-1; i>=0; i--) {\n\t\t\t\tif (node === list[i]) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\tmakeDOMNodeIcon: function(html, setting, node) {\n\t\t\tvar nameStr = data.getNodeName(setting, node),\n\t\t\tname = setting.view.nameIsHTML ? nameStr : nameStr.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');\n\t\t\thtml.push(\"<span id='\", node.tId, consts.id.ICON,\n\t\t\t\t\"' title='' treeNode\", consts.id.ICON,\" class='\", view.makeNodeIcoClass(setting, node),\n\t\t\t\t\"' style='\", view.makeNodeIcoStyle(setting, node), \"'></span><span id='\", node.tId, consts.id.SPAN,\n\t\t\t\t\"' class='\", consts.className.NAME,\n\t\t\t\t\"'>\",name,\"</span>\");\n\t\t},\n\t\tmakeDOMNodeLine: function(html, setting, node) {\n\t\t\thtml.push(\"<span id='\", node.tId, consts.id.SWITCH,\t\"' title='' class='\", view.makeNodeLineClass(setting, node), \"' treeNode\", consts.id.SWITCH,\"></span>\");\n\t\t},\n\t\tmakeDOMNodeMainAfter: function(html, setting, node) {\n\t\t\thtml.push(\"</li>\");\n\t\t},\n\t\tmakeDOMNodeMainBefore: function(html, setting, node) {\n\t\t\thtml.push(\"<li id='\", node.tId, \"' class='\", consts.className.LEVEL, node.level,\"' tabindex='0' hidefocus='true' treenode>\");\n\t\t},\n\t\tmakeDOMNodeNameAfter: function(html, setting, node) {\n\t\t\thtml.push(\"</a>\");\n\t\t},\n\t\tmakeDOMNodeNameBefore: function(html, setting, node) {\n\t\t\tvar title = data.getNodeTitle(setting, node),\n\t\t\turl = view.makeNodeUrl(setting, node),\n\t\t\tfontcss = view.makeNodeFontCss(setting, node),\n\t\t\tfontStyle = [];\n\t\t\tfor (var f in fontcss) {\n\t\t\t\tfontStyle.push(f, \":\", fontcss[f], \";\");\n\t\t\t}\n\t\t\thtml.push(\"<a id='\", node.tId, consts.id.A, \"' class='\", consts.className.LEVEL, node.level,\"' treeNode\", consts.id.A,\" onclick=\\\"\", (node.click || ''),\n\t\t\t\t\"\\\" \", ((url != null && url.length > 0) ? \"href='\" + url + \"'\" : \"\"), \" target='\",view.makeNodeTarget(node),\"' style='\", fontStyle.join(''),\n\t\t\t\t\"'\");\n\t\t\tif (tools.apply(setting.view.showTitle, [setting.treeId, node], setting.view.showTitle) && title) {html.push(\"title='\", title.replace(/'/g,\"&#39;\").replace(/</g,'&lt;').replace(/>/g,'&gt;'),\"'\");}\n\t\t\thtml.push(\">\");\n\t\t},\n\t\tmakeNodeFontCss: function(setting, node) {\n\t\t\tvar fontCss = tools.apply(setting.view.fontCss, [setting.treeId, node], setting.view.fontCss);\n\t\t\treturn (fontCss && ((typeof fontCss) != \"function\")) ? fontCss : {};\n\t\t},\n\t\tmakeNodeIcoClass: function(setting, node) {\n\t\t\tvar icoCss = [\"ico\"];\n\t\t\tif (!node.isAjaxing) {\n\t\t\t\ticoCss[0] = (node.iconSkin ? node.iconSkin + \"_\" : \"\") + icoCss[0];\n\t\t\t\tif (node.isParent) {\n\t\t\t\t\ticoCss.push(node.open ? consts.folder.OPEN : consts.folder.CLOSE);\n\t\t\t\t} else {\n\t\t\t\t\ticoCss.push(consts.folder.DOCU);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn consts.className.BUTTON + \" \" + icoCss.join('_');\n\t\t},\n\t\tmakeNodeIcoStyle: function(setting, node) {\n\t\t\tvar icoStyle = [];\n\t\t\tif (!node.isAjaxing) {\n\t\t\t\tvar icon = (node.isParent && node.iconOpen && node.iconClose) ? (node.open ? node.iconOpen : node.iconClose) : node[setting.data.key.icon];\n\t\t\t\tif (icon) icoStyle.push(\"background:url(\", icon, \") 0 0 no-repeat;\");\n\t\t\t\tif (setting.view.showIcon == false || !tools.apply(setting.view.showIcon, [setting.treeId, node], true)) {\n\t\t\t\t\ticoStyle.push(\"width:0px;height:0px;\");\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn icoStyle.join('');\n\t\t},\n\t\tmakeNodeLineClass: function(setting, node) {\n\t\t\tvar lineClass = [];\n\t\t\tif (setting.view.showLine) {\n\t\t\t\tif (node.level == 0 && node.isFirstNode && node.isLastNode) {\n\t\t\t\t\tlineClass.push(consts.line.ROOT);\n\t\t\t\t} else if (node.level == 0 && node.isFirstNode) {\n\t\t\t\t\tlineClass.push(consts.line.ROOTS);\n\t\t\t\t} else if (node.isLastNode) {\n\t\t\t\t\tlineClass.push(consts.line.BOTTOM);\n\t\t\t\t} else {\n\t\t\t\t\tlineClass.push(consts.line.CENTER);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tlineClass.push(consts.line.NOLINE);\n\t\t\t}\n\t\t\tif (node.isParent) {\n\t\t\t\tlineClass.push(node.open ? consts.folder.OPEN : consts.folder.CLOSE);\n\t\t\t} else {\n\t\t\t\tlineClass.push(consts.folder.DOCU);\n\t\t\t}\n\t\t\treturn view.makeNodeLineClassEx(node) + lineClass.join('_');\n\t\t},\n\t\tmakeNodeLineClassEx: function(node) {\n\t\t\treturn consts.className.BUTTON + \" \" + consts.className.LEVEL + node.level + \" \" + consts.className.SWITCH + \" \";\n\t\t},\n\t\tmakeNodeTarget: function(node) {\n\t\t\treturn (node.target || \"_blank\");\n\t\t},\n\t\tmakeNodeUrl: function(setting, node) {\n\t\t\tvar urlKey = setting.data.key.url;\n\t\t\treturn node[urlKey] ? node[urlKey] : null;\n\t\t},\n\t\tmakeUlHtml: function(setting, node, html, content) {\n\t\t\thtml.push(\"<ul id='\", node.tId, consts.id.UL, \"' class='\", consts.className.LEVEL, node.level, \" \", view.makeUlLineClass(setting, node), \"' style='display:\", (node.open ? \"block\": \"none\"),\"'>\");\n\t\t\thtml.push(content);\n\t\t\thtml.push(\"</ul>\");\n\t\t},\n\t\tmakeUlLineClass: function(setting, node) {\n\t\t\treturn ((setting.view.showLine && !node.isLastNode) ? consts.line.LINE : \"\");\n\t\t},\n\t\tremoveChildNodes: function(setting, node) {\n\t\t\tif (!node) return;\n\t\t\tvar childKey = setting.data.key.children,\n\t\t\tnodes = node[childKey];\n\t\t\tif (!nodes) return;\n\n\t\t\tfor (var i = 0, l = nodes.length; i < l; i++) {\n\t\t\t\tdata.removeNodeCache(setting, nodes[i]);\n\t\t\t}\n\t\t\tdata.removeSelectedNode(setting);\n\t\t\tdelete node[childKey];\n\n\t\t\tif (!setting.data.keep.parent) {\n\t\t\t\tnode.isParent = false;\n\t\t\t\tnode.open = false;\n\t\t\t\tvar tmp_switchObj = $$(node, consts.id.SWITCH, setting),\n\t\t\t\ttmp_icoObj = $$(node, consts.id.ICON, setting);\n\t\t\t\tview.replaceSwitchClass(node, tmp_switchObj, consts.folder.DOCU);\n\t\t\t\tview.replaceIcoClass(node, tmp_icoObj, consts.folder.DOCU);\n\t\t\t\t$$(node, consts.id.UL, setting).remove();\n\t\t\t} else {\n\t\t\t\t$$(node, consts.id.UL, setting).empty();\n\t\t\t}\n\t\t},\n\t\tscrollIntoView: function(dom) {\n\t\t\tif (!dom) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (dom.scrollIntoViewIfNeeded) {\n\t\t\t\tdom.scrollIntoViewIfNeeded();\n\t\t\t} else if (dom.scrollIntoView) {\n\t\t\t\tdom.scrollIntoView(false);\n\t\t\t} else {\n\t\t\t\ttry{dom.focus().blur();}catch(e){}\n\t\t\t}\n\t\t},\n\t\tsetFirstNode: function(setting, parentNode) {\n\t\t\tvar childKey = setting.data.key.children, childLength = parentNode[childKey].length;\n\t\t\tif ( childLength > 0) {\n\t\t\t\tparentNode[childKey][0].isFirstNode = true;\n\t\t\t}\n\t\t},\n\t\tsetLastNode: function(setting, parentNode) {\n\t\t\tvar childKey = setting.data.key.children, childLength = parentNode[childKey].length;\n\t\t\tif ( childLength > 0) {\n\t\t\t\tparentNode[childKey][childLength - 1].isLastNode = true;\n\t\t\t}\n\t\t},\n\t\tremoveNode: function(setting, node) {\n\t\t\tvar root = data.getRoot(setting),\n\t\t\tchildKey = setting.data.key.children,\n\t\t\tparentNode = (node.parentTId) ? node.getParentNode() : root;\n\n\t\t\tnode.isFirstNode = false;\n\t\t\tnode.isLastNode = false;\n\t\t\tnode.getPreNode = function() {return null;};\n\t\t\tnode.getNextNode = function() {return null;};\n\n\t\t\tif (!data.getNodeCache(setting, node.tId)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t$$(node, setting).remove();\n\t\t\tdata.removeNodeCache(setting, node);\n\t\t\tdata.removeSelectedNode(setting, node);\n\n\t\t\tfor (var i = 0, l = parentNode[childKey].length; i < l; i++) {\n\t\t\t\tif (parentNode[childKey][i].tId == node.tId) {\n\t\t\t\t\tparentNode[childKey].splice(i, 1);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tview.setFirstNode(setting, parentNode);\n\t\t\tview.setLastNode(setting, parentNode);\n\n\t\t\tvar tmp_ulObj,tmp_switchObj,tmp_icoObj,\n\t\t\tchildLength = parentNode[childKey].length;\n\n\t\t\t//repair nodes old parent\n\t\t\tif (!setting.data.keep.parent && childLength == 0) {\n\t\t\t\t//old parentNode has no child nodes\n\t\t\t\tparentNode.isParent = false;\n\t\t\t\tparentNode.open = false;\n\t\t\t\ttmp_ulObj = $$(parentNode, consts.id.UL, setting);\n\t\t\t\ttmp_switchObj = $$(parentNode, consts.id.SWITCH, setting);\n\t\t\t\ttmp_icoObj = $$(parentNode, consts.id.ICON, setting);\n\t\t\t\tview.replaceSwitchClass(parentNode, tmp_switchObj, consts.folder.DOCU);\n\t\t\t\tview.replaceIcoClass(parentNode, tmp_icoObj, consts.folder.DOCU);\n\t\t\t\ttmp_ulObj.css(\"display\", \"none\");\n\n\t\t\t} else if (setting.view.showLine && childLength > 0) {\n\t\t\t\t//old parentNode has child nodes\n\t\t\t\tvar newLast = parentNode[childKey][childLength - 1];\n\t\t\t\ttmp_ulObj = $$(newLast, consts.id.UL, setting);\n\t\t\t\ttmp_switchObj = $$(newLast, consts.id.SWITCH, setting);\n\t\t\t\ttmp_icoObj = $$(newLast, consts.id.ICON, setting);\n\t\t\t\tif (parentNode == root) {\n\t\t\t\t\tif (parentNode[childKey].length == 1) {\n\t\t\t\t\t\t//node was root, and ztree has only one root after move node\n\t\t\t\t\t\tview.replaceSwitchClass(newLast, tmp_switchObj, consts.line.ROOT);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar tmp_first_switchObj = $$(parentNode[childKey][0], consts.id.SWITCH, setting);\n\t\t\t\t\t\tview.replaceSwitchClass(parentNode[childKey][0], tmp_first_switchObj, consts.line.ROOTS);\n\t\t\t\t\t\tview.replaceSwitchClass(newLast, tmp_switchObj, consts.line.BOTTOM);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tview.replaceSwitchClass(newLast, tmp_switchObj, consts.line.BOTTOM);\n\t\t\t\t}\n\t\t\t\ttmp_ulObj.removeClass(consts.line.LINE);\n\t\t\t}\n\t\t},\n\t\treplaceIcoClass: function(node, obj, newName) {\n\t\t\tif (!obj || node.isAjaxing) return;\n\t\t\tvar tmpName = obj.attr(\"class\");\n\t\t\tif (tmpName == undefined) return;\n\t\t\tvar tmpList = tmpName.split(\"_\");\n\t\t\tswitch (newName) {\n\t\t\t\tcase consts.folder.OPEN:\n\t\t\t\tcase consts.folder.CLOSE:\n\t\t\t\tcase consts.folder.DOCU:\n\t\t\t\t\ttmpList[tmpList.length-1] = newName;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tobj.attr(\"class\", tmpList.join(\"_\"));\n\t\t},\n\t\treplaceSwitchClass: function(node, obj, newName) {\n\t\t\tif (!obj) return;\n\t\t\tvar tmpName = obj.attr(\"class\");\n\t\t\tif (tmpName == undefined) return;\n\t\t\tvar tmpList = tmpName.split(\"_\");\n\t\t\tswitch (newName) {\n\t\t\t\tcase consts.line.ROOT:\n\t\t\t\tcase consts.line.ROOTS:\n\t\t\t\tcase consts.line.CENTER:\n\t\t\t\tcase consts.line.BOTTOM:\n\t\t\t\tcase consts.line.NOLINE:\n\t\t\t\t\ttmpList[0] = view.makeNodeLineClassEx(node) + newName;\n\t\t\t\t\tbreak;\n\t\t\t\tcase consts.folder.OPEN:\n\t\t\t\tcase consts.folder.CLOSE:\n\t\t\t\tcase consts.folder.DOCU:\n\t\t\t\t\ttmpList[1] = newName;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tobj.attr(\"class\", tmpList.join(\"_\"));\n\t\t\tif (newName !== consts.folder.DOCU) {\n\t\t\t\tobj.removeAttr(\"disabled\");\n\t\t\t} else {\n\t\t\t\tobj.attr(\"disabled\", \"disabled\");\n\t\t\t}\n\t\t},\n\t\tselectNode: function(setting, node, addFlag) {\n\t\t\tif (!addFlag) {\n\t\t\t\tview.cancelPreSelectedNode(setting, null, node);\n\t\t\t}\n\t\t\t$$(node, consts.id.A, setting).addClass(consts.node.CURSELECTED);\n\t\t\tdata.addSelectedNode(setting, node);\n\t\t\tsetting.treeObj.trigger(consts.event.SELECTED, [setting.treeId, node]);\n\t\t},\n\t\tsetNodeFontCss: function(setting, treeNode) {\n\t\t\tvar aObj = $$(treeNode, consts.id.A, setting),\n\t\t\tfontCss = view.makeNodeFontCss(setting, treeNode);\n\t\t\tif (fontCss) {\n\t\t\t\taObj.css(fontCss);\n\t\t\t}\n\t\t},\n\t\tsetNodeLineIcos: function(setting, node) {\n\t\t\tif (!node) return;\n\t\t\tvar switchObj = $$(node, consts.id.SWITCH, setting),\n\t\t\tulObj = $$(node, consts.id.UL, setting),\n\t\t\ticoObj = $$(node, consts.id.ICON, setting),\n\t\t\tulLine = view.makeUlLineClass(setting, node);\n\t\t\tif (ulLine.length==0) {\n\t\t\t\tulObj.removeClass(consts.line.LINE);\n\t\t\t} else {\n\t\t\t\tulObj.addClass(ulLine);\n\t\t\t}\n\t\t\tswitchObj.attr(\"class\", view.makeNodeLineClass(setting, node));\n\t\t\tif (node.isParent) {\n\t\t\t\tswitchObj.removeAttr(\"disabled\");\n\t\t\t} else {\n\t\t\t\tswitchObj.attr(\"disabled\", \"disabled\");\n\t\t\t}\n\t\t\ticoObj.removeAttr(\"style\");\n\t\t\ticoObj.attr(\"style\", view.makeNodeIcoStyle(setting, node));\n\t\t\ticoObj.attr(\"class\", view.makeNodeIcoClass(setting, node));\n\t\t},\n\t\tsetNodeName: function(setting, node) {\n\t\t\tvar title = data.getNodeTitle(setting, node),\n\t\t\tnObj = $$(node, consts.id.SPAN, setting);\n\t\t\tnObj.empty();\n\t\t\tif (setting.view.nameIsHTML) {\n\t\t\t\tnObj.html(data.getNodeName(setting, node));\n\t\t\t} else {\n\t\t\t\tnObj.text(data.getNodeName(setting, node));\n\t\t\t}\n\t\t\tif (tools.apply(setting.view.showTitle, [setting.treeId, node], setting.view.showTitle)) {\n\t\t\t\tvar aObj = $$(node, consts.id.A, setting);\n\t\t\t\taObj.attr(\"title\", !title ? \"\" : title);\n\t\t\t}\n\t\t},\n\t\tsetNodeTarget: function(setting, node) {\n\t\t\tvar aObj = $$(node, consts.id.A, setting);\n\t\t\taObj.attr(\"target\", view.makeNodeTarget(node));\n\t\t},\n\t\tsetNodeUrl: function(setting, node) {\n\t\t\tvar aObj = $$(node, consts.id.A, setting),\n\t\t\turl = view.makeNodeUrl(setting, node);\n\t\t\tif (url == null || url.length == 0) {\n\t\t\t\taObj.removeAttr(\"href\");\n\t\t\t} else {\n\t\t\t\taObj.attr(\"href\", url);\n\t\t\t}\n\t\t},\n\t\tswitchNode: function(setting, node) {\n\t\t\tif (node.open || !tools.canAsync(setting, node)) {\n\t\t\t\tview.expandCollapseNode(setting, node, !node.open);\n\t\t\t} else if (setting.async.enable) {\n\t\t\t\tif (!view.asyncNode(setting, node)) {\n\t\t\t\t\tview.expandCollapseNode(setting, node, !node.open);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} else if (node) {\n\t\t\t\tview.expandCollapseNode(setting, node, !node.open);\n\t\t\t}\n\t\t}\n\t};\n\t// zTree defind\n\t$.fn.zTree = {\n\t\tconsts : _consts,\n\t\t_z : {\n\t\t\ttools: tools,\n\t\t\tview: view,\n\t\t\tevent: event,\n\t\t\tdata: data\n\t\t},\n\t\tgetZTreeObj: function(treeId) {\n\t\t\tvar o = data.getZTreeTools(treeId);\n\t\t\treturn o ? o : null;\n\t\t},\n\t\tdestroy: function(treeId) {\n\t\t\tif (!!treeId && treeId.length > 0) {\n\t\t\t\tview.destroy(data.getSetting(treeId));\n\t\t\t} else {\n\t\t\t\tfor(var s in settings) {\n\t\t\t\t\tview.destroy(settings[s]);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tinit: function(obj, zSetting, zNodes) {\n\t\t\tvar setting = tools.clone(_setting);\n\t\t\t$.extend(true, setting, zSetting);\n\t\t\tsetting.treeId = obj.attr(\"id\");\n\t\t\tsetting.treeObj = obj;\n\t\t\tsetting.treeObj.empty();\n\t\t\tsettings[setting.treeId] = setting;\n\t\t\t//For some older browser,(e.g., ie6)\n\t\t\tif(typeof document.body.style.maxHeight === \"undefined\") {\n\t\t\t\tsetting.view.expandSpeed = \"\";\n\t\t\t}\n\t\t\tdata.initRoot(setting);\n\t\t\tvar root = data.getRoot(setting),\n\t\t\tchildKey = setting.data.key.children;\n\t\t\tzNodes = zNodes ? tools.clone(tools.isArray(zNodes)? zNodes : [zNodes]) : [];\n\t\t\tif (setting.data.simpleData.enable) {\n\t\t\t\troot[childKey] = data.transformTozTreeFormat(setting, zNodes);\n\t\t\t} else {\n\t\t\t\troot[childKey] = zNodes;\n\t\t\t}\n\n\t\t\tdata.initCache(setting);\n\t\t\tevent.unbindTree(setting);\n\t\t\tevent.bindTree(setting);\n\t\t\tevent.unbindEvent(setting);\n\t\t\tevent.bindEvent(setting);\n\n\t\t\tvar zTreeTools = {\n\t\t\t\tsetting : setting,\n\t\t\t\taddNodes : function(parentNode, index, newNodes, isSilent) {\n\t\t\t\t\tif (!parentNode) parentNode = null;\n\t\t\t\t\tif (parentNode && !parentNode.isParent && setting.data.keep.leaf) return null;\n\n\t\t\t\t\tvar i = parseInt(index, 10);\n\t\t\t\t\tif (isNaN(i)) {\n\t\t\t\t\t\tisSilent = !!newNodes;\n\t\t\t\t\t\tnewNodes = index;\n\t\t\t\t\t\tindex = -1;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tindex = i;\n\t\t\t\t\t}\n\t\t\t\t\tif (!newNodes) return null;\n\n\n\t\t\t\t\tvar xNewNodes = tools.clone(tools.isArray(newNodes)? newNodes: [newNodes]);\n\t\t\t\t\tfunction addCallback() {\n\t\t\t\t\t\tview.addNodes(setting, parentNode, index, xNewNodes, (isSilent==true));\n\t\t\t\t\t}\n\n\t\t\t\t\tif (tools.canAsync(setting, parentNode)) {\n\t\t\t\t\t\tview.asyncNode(setting, parentNode, isSilent, addCallback);\n\t\t\t\t\t} else {\n\t\t\t\t\t\taddCallback();\n\t\t\t\t\t}\n\t\t\t\t\treturn xNewNodes;\n\t\t\t\t},\n\t\t\t\tcancelSelectedNode : function(node) {\n\t\t\t\t\tview.cancelPreSelectedNode(setting, node);\n\t\t\t\t},\n\t\t\t\tdestroy : function() {\n\t\t\t\t\tview.destroy(setting);\n\t\t\t\t},\n\t\t\t\texpandAll : function(expandFlag) {\n\t\t\t\t\texpandFlag = !!expandFlag;\n\t\t\t\t\tview.expandCollapseSonNode(setting, null, expandFlag, true);\n\t\t\t\t\treturn expandFlag;\n\t\t\t\t},\n\t\t\t\texpandNode : function(node, expandFlag, sonSign, focus, callbackFlag) {\n\t\t\t\t\tif (!node || !node.isParent) return null;\n\t\t\t\t\tif (expandFlag !== true && expandFlag !== false) {\n\t\t\t\t\t\texpandFlag = !node.open;\n\t\t\t\t\t}\n\t\t\t\t\tcallbackFlag = !!callbackFlag;\n\n\t\t\t\t\tif (callbackFlag && expandFlag && (tools.apply(setting.callback.beforeExpand, [setting.treeId, node], true) == false)) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t} else if (callbackFlag && !expandFlag && (tools.apply(setting.callback.beforeCollapse, [setting.treeId, node], true) == false)) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\t\t\t\t\tif (expandFlag && node.parentTId) {\n\t\t\t\t\t\tview.expandCollapseParentNode(setting, node.getParentNode(), expandFlag, false);\n\t\t\t\t\t}\n\t\t\t\t\tif (expandFlag === node.open && !sonSign) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\n\t\t\t\t\tdata.getRoot(setting).expandTriggerFlag = callbackFlag;\n\t\t\t\t\tif (!tools.canAsync(setting, node) && sonSign) {\n\t\t\t\t\t\tview.expandCollapseSonNode(setting, node, expandFlag, true, showNodeFocus);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnode.open = !expandFlag;\n\t\t\t\t\t\tview.switchNode(this.setting, node);\n\t\t\t\t\t\tshowNodeFocus();\n\t\t\t\t\t}\n\t\t\t\t\treturn expandFlag;\n\n\t\t\t\t\tfunction showNodeFocus() {\n\t\t\t\t\t\tvar a = $$(node, setting).get(0);\n\t\t\t\t\t\tif (a && focus !== false) {\n\t\t\t\t\t\t\tview.scrollIntoView(a);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tgetNodes : function() {\n\t\t\t\t\treturn data.getNodes(setting);\n\t\t\t\t},\n\t\t\t\tgetNodeByParam : function(key, value, parentNode) {\n\t\t\t\t\tif (!key) return null;\n\t\t\t\t\treturn data.getNodeByParam(setting, parentNode?parentNode[setting.data.key.children]:data.getNodes(setting), key, value);\n\t\t\t\t},\n\t\t\t\tgetNodeByTId : function(tId) {\n\t\t\t\t\treturn data.getNodeCache(setting, tId);\n\t\t\t\t},\n\t\t\t\tgetNodesByParam : function(key, value, parentNode) {\n\t\t\t\t\tif (!key) return null;\n\t\t\t\t\treturn data.getNodesByParam(setting, parentNode?parentNode[setting.data.key.children]:data.getNodes(setting), key, value);\n\t\t\t\t},\n\t\t\t\tgetNodesByParamFuzzy : function(key, value, parentNode) {\n\t\t\t\t\tif (!key) return null;\n\t\t\t\t\treturn data.getNodesByParamFuzzy(setting, parentNode?parentNode[setting.data.key.children]:data.getNodes(setting), key, value);\n\t\t\t\t},\n\t\t\t\tgetNodesByFilter: function(filter, isSingle, parentNode, invokeParam) {\n\t\t\t\t\tisSingle = !!isSingle;\n\t\t\t\t\tif (!filter || (typeof filter != \"function\")) return (isSingle ? null : []);\n\t\t\t\t\treturn data.getNodesByFilter(setting, parentNode?parentNode[setting.data.key.children]:data.getNodes(setting), filter, isSingle, invokeParam);\n\t\t\t\t},\n\t\t\t\tgetNodeIndex : function(node) {\n\t\t\t\t\tif (!node) return null;\n\t\t\t\t\tvar childKey = setting.data.key.children,\n\t\t\t\t\tparentNode = (node.parentTId) ? node.getParentNode() : data.getRoot(setting);\n\t\t\t\t\tfor (var i=0, l = parentNode[childKey].length; i < l; i++) {\n\t\t\t\t\t\tif (parentNode[childKey][i] == node) return i;\n\t\t\t\t\t}\n\t\t\t\t\treturn -1;\n\t\t\t\t},\n\t\t\t\tgetSelectedNodes : function() {\n\t\t\t\t\tvar r = [], list = data.getRoot(setting).curSelectedList;\n\t\t\t\t\tfor (var i=0, l=list.length; i<l; i++) {\n\t\t\t\t\t\tr.push(list[i]);\n\t\t\t\t\t}\n\t\t\t\t\treturn r;\n\t\t\t\t},\n\t\t\t\tisSelectedNode : function(node) {\n\t\t\t\t\treturn data.isSelectedNode(setting, node);\n\t\t\t\t},\n\t\t\t\treAsyncChildNodes : function(parentNode, reloadType, isSilent) {\n\t\t\t\t\tif (!this.setting.async.enable) return;\n\t\t\t\t\tvar isRoot = !parentNode;\n\t\t\t\t\tif (isRoot) {\n\t\t\t\t\t\tparentNode = data.getRoot(setting);\n\t\t\t\t\t}\n\t\t\t\t\tif (reloadType==\"refresh\") {\n\t\t\t\t\t\tvar childKey = this.setting.data.key.children;\n\t\t\t\t\t\tfor (var i = 0, l = parentNode[childKey] ? parentNode[childKey].length : 0; i < l; i++) {\n\t\t\t\t\t\t\tdata.removeNodeCache(setting, parentNode[childKey][i]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdata.removeSelectedNode(setting);\n\t\t\t\t\t\tparentNode[childKey] = [];\n\t\t\t\t\t\tif (isRoot) {\n\t\t\t\t\t\t\tthis.setting.treeObj.empty();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tvar ulObj = $$(parentNode, consts.id.UL, setting);\n\t\t\t\t\t\t\tulObj.empty();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tview.asyncNode(this.setting, isRoot? null:parentNode, !!isSilent);\n\t\t\t\t},\n\t\t\t\trefresh : function() {\n\t\t\t\t\tthis.setting.treeObj.empty();\n\t\t\t\t\tvar root = data.getRoot(setting),\n\t\t\t\t\tnodes = root[setting.data.key.children]\n\t\t\t\t\tdata.initRoot(setting);\n\t\t\t\t\troot[setting.data.key.children] = nodes\n\t\t\t\t\tdata.initCache(setting);\n\t\t\t\t\tview.createNodes(setting, 0, root[setting.data.key.children], null, -1);\n\t\t\t\t},\n\t\t\t\tremoveChildNodes : function(node) {\n\t\t\t\t\tif (!node) return null;\n\t\t\t\t\tvar childKey = setting.data.key.children,\n\t\t\t\t\tnodes = node[childKey];\n\t\t\t\t\tview.removeChildNodes(setting, node);\n\t\t\t\t\treturn nodes ? nodes : null;\n\t\t\t\t},\n\t\t\t\tremoveNode : function(node, callbackFlag) {\n\t\t\t\t\tif (!node) return;\n\t\t\t\t\tcallbackFlag = !!callbackFlag;\n\t\t\t\t\tif (callbackFlag && tools.apply(setting.callback.beforeRemove, [setting.treeId, node], true) == false) return;\n\t\t\t\t\tview.removeNode(setting, node);\n\t\t\t\t\tif (callbackFlag) {\n\t\t\t\t\t\tthis.setting.treeObj.trigger(consts.event.REMOVE, [setting.treeId, node]);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tselectNode : function(node, addFlag, isSilent) {\n\t\t\t\t\tif (!node) return;\n\t\t\t\t\tif (tools.uCanDo(setting)) {\n\t\t\t\t\t\taddFlag = setting.view.selectedMulti && addFlag;\n\t\t\t\t\t\tif (node.parentTId) {\n\t\t\t\t\t\t\tview.expandCollapseParentNode(setting, node.getParentNode(), true, false, showNodeFocus);\n\t\t\t\t\t\t} else if (!isSilent) {\n\t\t\t\t\t\t\ttry{$$(node, setting).focus().blur();}catch(e){}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tview.selectNode(setting, node, addFlag);\n\t\t\t\t\t}\n\n\t\t\t\t\tfunction showNodeFocus() {\n\t\t\t\t\t\tif (isSilent) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvar a = $$(node, setting).get(0);\n\t\t\t\t\t\tview.scrollIntoView(a);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\ttransformTozTreeNodes : function(simpleNodes) {\n\t\t\t\t\treturn data.transformTozTreeFormat(setting, simpleNodes);\n\t\t\t\t},\n\t\t\t\ttransformToArray : function(nodes) {\n\t\t\t\t\treturn data.transformToArrayFormat(setting, nodes);\n\t\t\t\t},\n\t\t\t\tupdateNode : function(node, checkTypeFlag) {\n\t\t\t\t\tif (!node) return;\n\t\t\t\t\tvar nObj = $$(node, setting);\n\t\t\t\t\tif (nObj.get(0) && tools.uCanDo(setting)) {\n\t\t\t\t\t\tview.setNodeName(setting, node);\n\t\t\t\t\t\tview.setNodeTarget(setting, node);\n\t\t\t\t\t\tview.setNodeUrl(setting, node);\n\t\t\t\t\t\tview.setNodeLineIcos(setting, node);\n\t\t\t\t\t\tview.setNodeFontCss(setting, node);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\troot.treeTools = zTreeTools;\n\t\t\tdata.setZTreeTools(setting, zTreeTools);\n\n\t\t\tif (root[childKey] && root[childKey].length > 0) {\n\t\t\t\tview.createNodes(setting, 0, root[childKey], null, -1);\n\t\t\t} else if (setting.async.enable && setting.async.url && setting.async.url !== '') {\n\t\t\t\tview.asyncNode(setting);\n\t\t\t}\n\t\t\treturn zTreeTools;\n\t\t}\n\t};\n\n\tvar zt = $.fn.zTree,\n\t$$ = tools.$,\n\tconsts = zt.consts;\n})(jQuery);"
  },
  {
    "path": "automatic/static/zTree_v3/js/jquery.ztree.excheck.js",
    "content": "/*\n * JQuery zTree excheck v3.5.25\n * http://zTree.me/\n *\n * Copyright (c) 2010 Hunter.z\n *\n * Licensed same as jquery - MIT License\n * http://www.opensource.org/licenses/mit-license.php\n *\n * email: hunter.z@263.net\n * Date: 2016-09-27\n */\n(function($){\n\t//default consts of excheck\n\tvar _consts = {\n\t\tevent: {\n\t\t\tCHECK: \"ztree_check\"\n\t\t},\n\t\tid: {\n\t\t\tCHECK: \"_check\"\n\t\t},\n\t\tcheckbox: {\n\t\t\tSTYLE: \"checkbox\",\n\t\t\tDEFAULT: \"chk\",\n\t\t\tDISABLED: \"disable\",\n\t\t\tFALSE: \"false\",\n\t\t\tTRUE: \"true\",\n\t\t\tFULL: \"full\",\n\t\t\tPART: \"part\",\n\t\t\tFOCUS: \"focus\"\n\t\t},\n\t\tradio: {\n\t\t\tSTYLE: \"radio\",\n\t\t\tTYPE_ALL: \"all\",\n\t\t\tTYPE_LEVEL: \"level\"\n\t\t}\n\t},\n\t//default setting of excheck\n\t_setting = {\n\t\tcheck: {\n\t\t\tenable: false,\n\t\t\tautoCheckTrigger: false,\n\t\t\tchkStyle: _consts.checkbox.STYLE,\n\t\t\tnocheckInherit: false,\n\t\t\tchkDisabledInherit: false,\n\t\t\tradioType: _consts.radio.TYPE_LEVEL,\n\t\t\tchkboxType: {\n\t\t\t\t\"Y\": \"ps\",\n\t\t\t\t\"N\": \"ps\"\n\t\t\t}\n\t\t},\n\t\tdata: {\n\t\t\tkey: {\n\t\t\t\tchecked: \"checked\"\n\t\t\t}\n\t\t},\n\t\tcallback: {\n\t\t\tbeforeCheck:null,\n\t\t\tonCheck:null\n\t\t}\n\t},\n\t//default root of excheck\n\t_initRoot = function (setting) {\n\t\tvar r = data.getRoot(setting);\n\t\tr.radioCheckedList = [];\n\t},\n\t//default cache of excheck\n\t_initCache = function(treeId) {},\n\t//default bind event of excheck\n\t_bindEvent = function(setting) {\n\t\tvar o = setting.treeObj,\n\t\tc = consts.event;\n\t\to.bind(c.CHECK, function (event, srcEvent, treeId, node) {\n\t\t\tevent.srcEvent = srcEvent;\n\t\t\ttools.apply(setting.callback.onCheck, [event, treeId, node]);\n\t\t});\n\t},\n\t_unbindEvent = function(setting) {\n\t\tvar o = setting.treeObj,\n\t\tc = consts.event;\n\t\to.unbind(c.CHECK);\n\t},\n\t//default event proxy of excheck\n\t_eventProxy = function(e) {\n\t\tvar target = e.target,\n\t\tsetting = data.getSetting(e.data.treeId),\n\t\ttId = \"\", node = null,\n\t\tnodeEventType = \"\", treeEventType = \"\",\n\t\tnodeEventCallback = null, treeEventCallback = null;\n\n\t\tif (tools.eqs(e.type, \"mouseover\")) {\n\t\t\tif (setting.check.enable && tools.eqs(target.tagName, \"span\") && target.getAttribute(\"treeNode\"+ consts.id.CHECK) !== null) {\n\t\t\t\ttId = tools.getNodeMainDom(target).id;\n\t\t\t\tnodeEventType = \"mouseoverCheck\";\n\t\t\t}\n\t\t} else if (tools.eqs(e.type, \"mouseout\")) {\n\t\t\tif (setting.check.enable && tools.eqs(target.tagName, \"span\") && target.getAttribute(\"treeNode\"+ consts.id.CHECK) !== null) {\n\t\t\t\ttId = tools.getNodeMainDom(target).id;\n\t\t\t\tnodeEventType = \"mouseoutCheck\";\n\t\t\t}\n\t\t} else if (tools.eqs(e.type, \"click\")) {\n\t\t\tif (setting.check.enable && tools.eqs(target.tagName, \"span\") && target.getAttribute(\"treeNode\"+ consts.id.CHECK) !== null) {\n\t\t\t\ttId = tools.getNodeMainDom(target).id;\n\t\t\t\tnodeEventType = \"checkNode\";\n\t\t\t}\n\t\t}\n\t\tif (tId.length>0) {\n\t\t\tnode = data.getNodeCache(setting, tId);\n\t\t\tswitch (nodeEventType) {\n\t\t\t\tcase \"checkNode\" :\n\t\t\t\t\tnodeEventCallback = _handler.onCheckNode;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"mouseoverCheck\" :\n\t\t\t\t\tnodeEventCallback = _handler.onMouseoverCheck;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"mouseoutCheck\" :\n\t\t\t\t\tnodeEventCallback = _handler.onMouseoutCheck;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tvar proxyResult = {\n\t\t\tstop: nodeEventType === \"checkNode\",\n\t\t\tnode: node,\n\t\t\tnodeEventType: nodeEventType,\n\t\t\tnodeEventCallback: nodeEventCallback,\n\t\t\ttreeEventType: treeEventType,\n\t\t\ttreeEventCallback: treeEventCallback\n\t\t};\n\t\treturn proxyResult\n\t},\n\t//default init node of excheck\n\t_initNode = function(setting, level, n, parentNode, isFirstNode, isLastNode, openFlag) {\n\t\tif (!n) return;\n\t\tvar checkedKey = setting.data.key.checked;\n\t\tif (typeof n[checkedKey] == \"string\") n[checkedKey] = tools.eqs(n[checkedKey], \"true\");\n\t\tn[checkedKey] = !!n[checkedKey];\n\t\tn.checkedOld = n[checkedKey];\n\t\tif (typeof n.nocheck == \"string\") n.nocheck = tools.eqs(n.nocheck, \"true\");\n\t\tn.nocheck = !!n.nocheck || (setting.check.nocheckInherit && parentNode && !!parentNode.nocheck);\n\t\tif (typeof n.chkDisabled == \"string\") n.chkDisabled = tools.eqs(n.chkDisabled, \"true\");\n\t\tn.chkDisabled = !!n.chkDisabled || (setting.check.chkDisabledInherit && parentNode && !!parentNode.chkDisabled);\n\t\tif (typeof n.halfCheck == \"string\") n.halfCheck = tools.eqs(n.halfCheck, \"true\");\n\t\tn.halfCheck = !!n.halfCheck;\n\t\tn.check_Child_State = -1;\n\t\tn.check_Focus = false;\n\t\tn.getCheckStatus = function() {return data.getCheckStatus(setting, n);};\n\n\t\tif (setting.check.chkStyle == consts.radio.STYLE && setting.check.radioType == consts.radio.TYPE_ALL && n[checkedKey] ) {\n\t\t\tvar r = data.getRoot(setting);\n\t\t\tr.radioCheckedList.push(n);\n\t\t}\n\t},\n\t//add dom for check\n\t_beforeA = function(setting, node, html) {\n\t\tvar checkedKey = setting.data.key.checked;\n\t\tif (setting.check.enable) {\n\t\t\tdata.makeChkFlag(setting, node);\n\t\t\thtml.push(\"<span ID='\", node.tId, consts.id.CHECK, \"' class='\", view.makeChkClass(setting, node), \"' treeNode\", consts.id.CHECK, (node.nocheck === true?\" style='display:none;'\":\"\"),\"></span>\");\n\t\t}\n\t},\n\t//update zTreeObj, add method of check\n\t_zTreeTools = function(setting, zTreeTools) {\n\t\tzTreeTools.checkNode = function(node, checked, checkTypeFlag, callbackFlag) {\n\t\t\tvar checkedKey = this.setting.data.key.checked;\n\t\t\tif (node.chkDisabled === true) return;\n\t\t\tif (checked !== true && checked !== false) {\n\t\t\t\tchecked = !node[checkedKey];\n\t\t\t}\n\t\t\tcallbackFlag = !!callbackFlag;\n\n\t\t\tif (node[checkedKey] === checked && !checkTypeFlag) {\n\t\t\t\treturn;\n\t\t\t} else if (callbackFlag && tools.apply(this.setting.callback.beforeCheck, [this.setting.treeId, node], true) == false) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (tools.uCanDo(this.setting) && this.setting.check.enable && node.nocheck !== true) {\n\t\t\t\tnode[checkedKey] = checked;\n\t\t\t\tvar checkObj = $$(node, consts.id.CHECK, this.setting);\n\t\t\t\tif (checkTypeFlag || this.setting.check.chkStyle === consts.radio.STYLE) view.checkNodeRelation(this.setting, node);\n\t\t\t\tview.setChkClass(this.setting, checkObj, node);\n\t\t\t\tview.repairParentChkClassWithSelf(this.setting, node);\n\t\t\t\tif (callbackFlag) {\n\t\t\t\t\tthis.setting.treeObj.trigger(consts.event.CHECK, [null, this.setting.treeId, node]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tzTreeTools.checkAllNodes = function(checked) {\n\t\t\tview.repairAllChk(this.setting, !!checked);\n\t\t}\n\n\t\tzTreeTools.getCheckedNodes = function(checked) {\n\t\t\tvar childKey = this.setting.data.key.children;\n\t\t\tchecked = (checked !== false);\n\t\t\treturn data.getTreeCheckedNodes(this.setting, data.getRoot(this.setting)[childKey], checked);\n\t\t}\n\n\t\tzTreeTools.getChangeCheckedNodes = function() {\n\t\t\tvar childKey = this.setting.data.key.children;\n\t\t\treturn data.getTreeChangeCheckedNodes(this.setting, data.getRoot(this.setting)[childKey]);\n\t\t}\n\n\t\tzTreeTools.setChkDisabled = function(node, disabled, inheritParent, inheritChildren) {\n\t\t\tdisabled = !!disabled;\n\t\t\tinheritParent = !!inheritParent;\n\t\t\tinheritChildren = !!inheritChildren;\n\t\t\tview.repairSonChkDisabled(this.setting, node, disabled, inheritChildren);\n\t\t\tview.repairParentChkDisabled(this.setting, node.getParentNode(), disabled, inheritParent);\n\t\t}\n\n\t\tvar _updateNode = zTreeTools.updateNode;\n\t\tzTreeTools.updateNode = function(node, checkTypeFlag) {\n\t\t\tif (_updateNode) _updateNode.apply(zTreeTools, arguments);\n\t\t\tif (!node || !this.setting.check.enable) return;\n\t\t\tvar nObj = $$(node, this.setting);\n\t\t\tif (nObj.get(0) && tools.uCanDo(this.setting)) {\n\t\t\t\tvar checkObj = $$(node, consts.id.CHECK, this.setting);\n\t\t\t\tif (checkTypeFlag == true || this.setting.check.chkStyle === consts.radio.STYLE) view.checkNodeRelation(this.setting, node);\n\t\t\t\tview.setChkClass(this.setting, checkObj, node);\n\t\t\t\tview.repairParentChkClassWithSelf(this.setting, node);\n\t\t\t}\n\t\t}\n\t},\n\t//method of operate data\n\t_data = {\n\t\tgetRadioCheckedList: function(setting) {\n\t\t\tvar checkedList = data.getRoot(setting).radioCheckedList;\n\t\t\tfor (var i=0, j=checkedList.length; i<j; i++) {\n\t\t\t\tif(!data.getNodeCache(setting, checkedList[i].tId)) {\n\t\t\t\t\tcheckedList.splice(i, 1);\n\t\t\t\t\ti--; j--;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn checkedList;\n\t\t},\n\t\tgetCheckStatus: function(setting, node) {\n\t\t\tif (!setting.check.enable || node.nocheck || node.chkDisabled) return null;\n\t\t\tvar checkedKey = setting.data.key.checked,\n\t\t\tr = {\n\t\t\t\tchecked: node[checkedKey],\n\t\t\t\thalf: node.halfCheck ? node.halfCheck : (setting.check.chkStyle == consts.radio.STYLE ? (node.check_Child_State === 2) : (node[checkedKey] ? (node.check_Child_State > -1 && node.check_Child_State < 2) : (node.check_Child_State > 0)))\n\t\t\t};\n\t\t\treturn r;\n\t\t},\n\t\tgetTreeCheckedNodes: function(setting, nodes, checked, results) {\n\t\t\tif (!nodes) return [];\n\t\t\tvar childKey = setting.data.key.children,\n\t\t\tcheckedKey = setting.data.key.checked,\n\t\t\tonlyOne = (checked && setting.check.chkStyle == consts.radio.STYLE && setting.check.radioType == consts.radio.TYPE_ALL);\n\t\t\tresults = !results ? [] : results;\n\t\t\tfor (var i = 0, l = nodes.length; i < l; i++) {\n\t\t\t\tif (nodes[i].nocheck !== true && nodes[i].chkDisabled !== true && nodes[i][checkedKey] == checked) {\n\t\t\t\t\tresults.push(nodes[i]);\n\t\t\t\t\tif(onlyOne) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tdata.getTreeCheckedNodes(setting, nodes[i][childKey], checked, results);\n\t\t\t\tif(onlyOne && results.length > 0) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn results;\n\t\t},\n\t\tgetTreeChangeCheckedNodes: function(setting, nodes, results) {\n\t\t\tif (!nodes) return [];\n\t\t\tvar childKey = setting.data.key.children,\n\t\t\tcheckedKey = setting.data.key.checked;\n\t\t\tresults = !results ? [] : results;\n\t\t\tfor (var i = 0, l = nodes.length; i < l; i++) {\n\t\t\t\tif (nodes[i].nocheck !== true && nodes[i].chkDisabled !== true && nodes[i][checkedKey] != nodes[i].checkedOld) {\n\t\t\t\t\tresults.push(nodes[i]);\n\t\t\t\t}\n\t\t\t\tdata.getTreeChangeCheckedNodes(setting, nodes[i][childKey], results);\n\t\t\t}\n\t\t\treturn results;\n\t\t},\n\t\tmakeChkFlag: function(setting, node) {\n\t\t\tif (!node) return;\n\t\t\tvar childKey = setting.data.key.children,\n\t\t\tcheckedKey = setting.data.key.checked,\n\t\t\tchkFlag = -1;\n\t\t\tif (node[childKey]) {\n\t\t\t\tfor (var i = 0, l = node[childKey].length; i < l; i++) {\n\t\t\t\t\tvar cNode = node[childKey][i];\n\t\t\t\t\tvar tmp = -1;\n\t\t\t\t\tif (setting.check.chkStyle == consts.radio.STYLE) {\n\t\t\t\t\t\tif (cNode.nocheck === true || cNode.chkDisabled === true) {\n\t\t\t\t\t\t\ttmp = cNode.check_Child_State;\n\t\t\t\t\t\t} else if (cNode.halfCheck === true) {\n\t\t\t\t\t\t\ttmp = 2;\n\t\t\t\t\t\t} else if (cNode[checkedKey]) {\n\t\t\t\t\t\t\ttmp = 2;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttmp = cNode.check_Child_State > 0 ? 2:0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (tmp == 2) {\n\t\t\t\t\t\t\tchkFlag = 2; break;\n\t\t\t\t\t\t} else if (tmp == 0){\n\t\t\t\t\t\t\tchkFlag = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (setting.check.chkStyle == consts.checkbox.STYLE) {\n\t\t\t\t\t\tif (cNode.nocheck === true || cNode.chkDisabled === true) {\n\t\t\t\t\t\t\ttmp = cNode.check_Child_State;\n\t\t\t\t\t\t} else if (cNode.halfCheck === true) {\n\t\t\t\t\t\t\ttmp = 1;\n\t\t\t\t\t\t} else if (cNode[checkedKey] ) {\n\t\t\t\t\t\t\ttmp = (cNode.check_Child_State === -1 || cNode.check_Child_State === 2) ? 2 : 1;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttmp = (cNode.check_Child_State > 0) ? 1 : 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (tmp === 1) {\n\t\t\t\t\t\t\tchkFlag = 1; break;\n\t\t\t\t\t\t} else if (tmp === 2 && chkFlag > -1 && i > 0 && tmp !== chkFlag) {\n\t\t\t\t\t\t\tchkFlag = 1; break;\n\t\t\t\t\t\t} else if (chkFlag === 2 && tmp > -1 && tmp < 2) {\n\t\t\t\t\t\t\tchkFlag = 1; break;\n\t\t\t\t\t\t} else if (tmp > -1) {\n\t\t\t\t\t\t\tchkFlag = tmp;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tnode.check_Child_State = chkFlag;\n\t\t}\n\t},\n\t//method of event proxy\n\t_event = {\n\n\t},\n\t//method of event handler\n\t_handler = {\n\t\tonCheckNode: function (event, node) {\n\t\t\tif (node.chkDisabled === true) return false;\n\t\t\tvar setting = data.getSetting(event.data.treeId),\n\t\t\tcheckedKey = setting.data.key.checked;\n\t\t\tif (tools.apply(setting.callback.beforeCheck, [setting.treeId, node], true) == false) return true;\n\t\t\tnode[checkedKey] = !node[checkedKey];\n\t\t\tview.checkNodeRelation(setting, node);\n\t\t\tvar checkObj = $$(node, consts.id.CHECK, setting);\n\t\t\tview.setChkClass(setting, checkObj, node);\n\t\t\tview.repairParentChkClassWithSelf(setting, node);\n\t\t\tsetting.treeObj.trigger(consts.event.CHECK, [event, setting.treeId, node]);\n\t\t\treturn true;\n\t\t},\n\t\tonMouseoverCheck: function(event, node) {\n\t\t\tif (node.chkDisabled === true) return false;\n\t\t\tvar setting = data.getSetting(event.data.treeId),\n\t\t\tcheckObj = $$(node, consts.id.CHECK, setting);\n\t\t\tnode.check_Focus = true;\n\t\t\tview.setChkClass(setting, checkObj, node);\n\t\t\treturn true;\n\t\t},\n\t\tonMouseoutCheck: function(event, node) {\n\t\t\tif (node.chkDisabled === true) return false;\n\t\t\tvar setting = data.getSetting(event.data.treeId),\n\t\t\tcheckObj = $$(node, consts.id.CHECK, setting);\n\t\t\tnode.check_Focus = false;\n\t\t\tview.setChkClass(setting, checkObj, node);\n\t\t\treturn true;\n\t\t}\n\t},\n\t//method of tools for zTree\n\t_tools = {\n\n\t},\n\t//method of operate ztree dom\n\t_view = {\n\t\tcheckNodeRelation: function(setting, node) {\n\t\t\tvar pNode, i, l,\n\t\t\tchildKey = setting.data.key.children,\n\t\t\tcheckedKey = setting.data.key.checked,\n\t\t\tr = consts.radio;\n\t\t\tif (setting.check.chkStyle == r.STYLE) {\n\t\t\t\tvar checkedList = data.getRadioCheckedList(setting);\n\t\t\t\tif (node[checkedKey]) {\n\t\t\t\t\tif (setting.check.radioType == r.TYPE_ALL) {\n\t\t\t\t\t\tfor (i = checkedList.length-1; i >= 0; i--) {\n\t\t\t\t\t\t\tpNode = checkedList[i];\n\t\t\t\t\t\t\tif (pNode[checkedKey] && pNode != node) {\n\t\t\t\t\t\t\t\tpNode[checkedKey] = false;\n\t\t\t\t\t\t\t\tcheckedList.splice(i, 1);\n\n\t\t\t\t\t\t\t\tview.setChkClass(setting, $$(pNode, consts.id.CHECK, setting), pNode);\n\t\t\t\t\t\t\t\tif (pNode.parentTId != node.parentTId) {\n\t\t\t\t\t\t\t\t\tview.repairParentChkClassWithSelf(setting, pNode);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcheckedList.push(node);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar parentNode = (node.parentTId) ? node.getParentNode() : data.getRoot(setting);\n\t\t\t\t\t\tfor (i = 0, l = parentNode[childKey].length; i < l; i++) {\n\t\t\t\t\t\t\tpNode = parentNode[childKey][i];\n\t\t\t\t\t\t\tif (pNode[checkedKey] && pNode != node) {\n\t\t\t\t\t\t\t\tpNode[checkedKey] = false;\n\t\t\t\t\t\t\t\tview.setChkClass(setting, $$(pNode, consts.id.CHECK, setting), pNode);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else if (setting.check.radioType == r.TYPE_ALL) {\n\t\t\t\t\tfor (i = 0, l = checkedList.length; i < l; i++) {\n\t\t\t\t\t\tif (node == checkedList[i]) {\n\t\t\t\t\t\t\tcheckedList.splice(i, 1);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t} else {\n\t\t\t\tif (node[checkedKey] && (!node[childKey] || node[childKey].length==0 || setting.check.chkboxType.Y.indexOf(\"s\") > -1)) {\n\t\t\t\t\tview.setSonNodeCheckBox(setting, node, true);\n\t\t\t\t}\n\t\t\t\tif (!node[checkedKey] && (!node[childKey] || node[childKey].length==0 || setting.check.chkboxType.N.indexOf(\"s\") > -1)) {\n\t\t\t\t\tview.setSonNodeCheckBox(setting, node, false);\n\t\t\t\t}\n\t\t\t\tif (node[checkedKey] && setting.check.chkboxType.Y.indexOf(\"p\") > -1) {\n\t\t\t\t\tview.setParentNodeCheckBox(setting, node, true);\n\t\t\t\t}\n\t\t\t\tif (!node[checkedKey] && setting.check.chkboxType.N.indexOf(\"p\") > -1) {\n\t\t\t\t\tview.setParentNodeCheckBox(setting, node, false);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tmakeChkClass: function(setting, node) {\n\t\t\tvar checkedKey = setting.data.key.checked,\n\t\t\tc = consts.checkbox, r = consts.radio,\n\t\t\tfullStyle = \"\";\n\t\t\tif (node.chkDisabled === true) {\n\t\t\t\tfullStyle = c.DISABLED;\n\t\t\t} else if (node.halfCheck) {\n\t\t\t\tfullStyle = c.PART;\n\t\t\t} else if (setting.check.chkStyle == r.STYLE) {\n\t\t\t\tfullStyle = (node.check_Child_State < 1)? c.FULL:c.PART;\n\t\t\t} else {\n\t\t\t\tfullStyle = node[checkedKey] ? ((node.check_Child_State === 2 || node.check_Child_State === -1) ? c.FULL:c.PART) : ((node.check_Child_State < 1)? c.FULL:c.PART);\n\t\t\t}\n\t\t\tvar chkName = setting.check.chkStyle + \"_\" + (node[checkedKey] ? c.TRUE : c.FALSE) + \"_\" + fullStyle;\n\t\t\tchkName = (node.check_Focus && node.chkDisabled !== true) ? chkName + \"_\" + c.FOCUS : chkName;\n\t\t\treturn consts.className.BUTTON + \" \" + c.DEFAULT + \" \" + chkName;\n\t\t},\n\t\trepairAllChk: function(setting, checked) {\n\t\t\tif (setting.check.enable && setting.check.chkStyle === consts.checkbox.STYLE) {\n\t\t\t\tvar checkedKey = setting.data.key.checked,\n\t\t\t\tchildKey = setting.data.key.children,\n\t\t\t\troot = data.getRoot(setting);\n\t\t\t\tfor (var i = 0, l = root[childKey].length; i<l ; i++) {\n\t\t\t\t\tvar node = root[childKey][i];\n\t\t\t\t\tif (node.nocheck !== true && node.chkDisabled !== true) {\n\t\t\t\t\t\tnode[checkedKey] = checked;\n\t\t\t\t\t}\n\t\t\t\t\tview.setSonNodeCheckBox(setting, node, checked);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\trepairChkClass: function(setting, node) {\n\t\t\tif (!node) return;\n\t\t\tdata.makeChkFlag(setting, node);\n\t\t\tif (node.nocheck !== true) {\n\t\t\t\tvar checkObj = $$(node, consts.id.CHECK, setting);\n\t\t\t\tview.setChkClass(setting, checkObj, node);\n\t\t\t}\n\t\t},\n\t\trepairParentChkClass: function(setting, node) {\n\t\t\tif (!node || !node.parentTId) return;\n\t\t\tvar pNode = node.getParentNode();\n\t\t\tview.repairChkClass(setting, pNode);\n\t\t\tview.repairParentChkClass(setting, pNode);\n\t\t},\n\t\trepairParentChkClassWithSelf: function(setting, node) {\n\t\t\tif (!node) return;\n\t\t\tvar childKey = setting.data.key.children;\n\t\t\tif (node[childKey] && node[childKey].length > 0) {\n\t\t\t\tview.repairParentChkClass(setting, node[childKey][0]);\n\t\t\t} else {\n\t\t\t\tview.repairParentChkClass(setting, node);\n\t\t\t}\n\t\t},\n\t\trepairSonChkDisabled: function(setting, node, chkDisabled, inherit) {\n\t\t\tif (!node) return;\n\t\t\tvar childKey = setting.data.key.children;\n\t\t\tif (node.chkDisabled != chkDisabled) {\n\t\t\t\tnode.chkDisabled = chkDisabled;\n\t\t\t}\n\t\t\tview.repairChkClass(setting, node);\n\t\t\tif (node[childKey] && inherit) {\n\t\t\t\tfor (var i = 0, l = node[childKey].length; i < l; i++) {\n\t\t\t\t\tvar sNode = node[childKey][i];\n\t\t\t\t\tview.repairSonChkDisabled(setting, sNode, chkDisabled, inherit);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\trepairParentChkDisabled: function(setting, node, chkDisabled, inherit) {\n\t\t\tif (!node) return;\n\t\t\tif (node.chkDisabled != chkDisabled && inherit) {\n\t\t\t\tnode.chkDisabled = chkDisabled;\n\t\t\t}\n\t\t\tview.repairChkClass(setting, node);\n\t\t\tview.repairParentChkDisabled(setting, node.getParentNode(), chkDisabled, inherit);\n\t\t},\n\t\tsetChkClass: function(setting, obj, node) {\n\t\t\tif (!obj) return;\n\t\t\tif (node.nocheck === true) {\n\t\t\t\tobj.hide();\n\t\t\t} else {\n\t\t\t\tobj.show();\n\t\t\t}\n            obj.attr('class', view.makeChkClass(setting, node));\n\t\t},\n\t\tsetParentNodeCheckBox: function(setting, node, value, srcNode) {\n\t\t\tvar childKey = setting.data.key.children,\n\t\t\tcheckedKey = setting.data.key.checked,\n\t\t\tcheckObj = $$(node, consts.id.CHECK, setting);\n\t\t\tif (!srcNode) srcNode = node;\n\t\t\tdata.makeChkFlag(setting, node);\n\t\t\tif (node.nocheck !== true && node.chkDisabled !== true) {\n\t\t\t\tnode[checkedKey] = value;\n\t\t\t\tview.setChkClass(setting, checkObj, node);\n\t\t\t\tif (setting.check.autoCheckTrigger && node != srcNode) {\n\t\t\t\t\tsetting.treeObj.trigger(consts.event.CHECK, [null, setting.treeId, node]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (node.parentTId) {\n\t\t\t\tvar pSign = true;\n\t\t\t\tif (!value) {\n\t\t\t\t\tvar pNodes = node.getParentNode()[childKey];\n\t\t\t\t\tfor (var i = 0, l = pNodes.length; i < l; i++) {\n\t\t\t\t\t\tif ((pNodes[i].nocheck !== true && pNodes[i].chkDisabled !== true && pNodes[i][checkedKey])\n\t\t\t\t\t\t|| ((pNodes[i].nocheck === true || pNodes[i].chkDisabled === true) && pNodes[i].check_Child_State > 0)) {\n\t\t\t\t\t\t\tpSign = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (pSign) {\n\t\t\t\t\tview.setParentNodeCheckBox(setting, node.getParentNode(), value, srcNode);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tsetSonNodeCheckBox: function(setting, node, value, srcNode) {\n\t\t\tif (!node) return;\n\t\t\tvar childKey = setting.data.key.children,\n\t\t\tcheckedKey = setting.data.key.checked,\n\t\t\tcheckObj = $$(node, consts.id.CHECK, setting);\n\t\t\tif (!srcNode) srcNode = node;\n\n\t\t\tvar hasDisable = false;\n\t\t\tif (node[childKey]) {\n\t\t\t\tfor (var i = 0, l = node[childKey].length; i < l; i++) {\n\t\t\t\t\tvar sNode = node[childKey][i];\n\t\t\t\t\tview.setSonNodeCheckBox(setting, sNode, value, srcNode);\n\t\t\t\t\tif (sNode.chkDisabled === true) hasDisable = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (node != data.getRoot(setting) && node.chkDisabled !== true) {\n\t\t\t\tif (hasDisable && node.nocheck !== true) {\n\t\t\t\t\tdata.makeChkFlag(setting, node);\n\t\t\t\t}\n\t\t\t\tif (node.nocheck !== true && node.chkDisabled !== true) {\n\t\t\t\t\tnode[checkedKey] = value;\n\t\t\t\t\tif (!hasDisable) node.check_Child_State = (node[childKey] && node[childKey].length > 0) ? (value ? 2 : 0) : -1;\n\t\t\t\t} else {\n\t\t\t\t\tnode.check_Child_State = -1;\n\t\t\t\t}\n\t\t\t\tview.setChkClass(setting, checkObj, node);\n\t\t\t\tif (setting.check.autoCheckTrigger && node != srcNode && node.nocheck !== true && node.chkDisabled !== true) {\n\t\t\t\t\tsetting.treeObj.trigger(consts.event.CHECK, [null, setting.treeId, node]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\t},\n\n\t_z = {\n\t\ttools: _tools,\n\t\tview: _view,\n\t\tevent: _event,\n\t\tdata: _data\n\t};\n\t$.extend(true, $.fn.zTree.consts, _consts);\n\t$.extend(true, $.fn.zTree._z, _z);\n\n\tvar zt = $.fn.zTree,\n\ttools = zt._z.tools,\n\tconsts = zt.consts,\n\tview = zt._z.view,\n\tdata = zt._z.data,\n\tevent = zt._z.event,\n\t$$ = tools.$;\n\n\tdata.exSetting(_setting);\n\tdata.addInitBind(_bindEvent);\n\tdata.addInitUnBind(_unbindEvent);\n\tdata.addInitCache(_initCache);\n\tdata.addInitNode(_initNode);\n\tdata.addInitProxy(_eventProxy, true);\n\tdata.addInitRoot(_initRoot);\n\tdata.addBeforeA(_beforeA);\n\tdata.addZTreeTools(_zTreeTools);\n\n\tvar _createNodes = view.createNodes;\n\tview.createNodes = function(setting, level, nodes, parentNode, index) {\n\t\tif (_createNodes) _createNodes.apply(view, arguments);\n\t\tif (!nodes) return;\n\t\tview.repairParentChkClassWithSelf(setting, parentNode);\n\t}\n\tvar _removeNode = view.removeNode;\n\tview.removeNode = function(setting, node) {\n\t\tvar parentNode = node.getParentNode();\n\t\tif (_removeNode) _removeNode.apply(view, arguments);\n\t\tif (!node || !parentNode) return;\n\t\tview.repairChkClass(setting, parentNode);\n\t\tview.repairParentChkClass(setting, parentNode);\n\t}\n\n\tvar _appendNodes = view.appendNodes;\n\tview.appendNodes = function(setting, level, nodes, parentNode, index, initFlag, openFlag) {\n\t\tvar html = \"\";\n\t\tif (_appendNodes) {\n\t\t\thtml = _appendNodes.apply(view, arguments);\n\t\t}\n\t\tif (parentNode) {\n\t\t\tdata.makeChkFlag(setting, parentNode);\n\t\t}\n\t\treturn html;\n\t}\n})(jQuery);"
  },
  {
    "path": "automatic/static/zTree_v3/js/jquery.ztree.exedit.js",
    "content": "/*\n * JQuery zTree exedit v3.5.25\n * http://zTree.me/\n *\n * Copyright (c) 2010 Hunter.z\n *\n * Licensed same as jquery - MIT License\n * http://www.opensource.org/licenses/mit-license.php\n *\n * email: hunter.z@263.net\n * Date: 2016-09-27\n */\n(function($){\n\t//default consts of exedit\n\tvar _consts = {\n\t\tevent: {\n\t\t\tDRAG: \"ztree_drag\",\n\t\t\tDROP: \"ztree_drop\",\n\t\t\tRENAME: \"ztree_rename\",\n\t\t\tDRAGMOVE:\"ztree_dragmove\"\n\t\t},\n\t\tid: {\n\t\t\tEDIT: \"_edit\",\n\t\t\tINPUT: \"_input\",\n\t\t\tREMOVE: \"_remove\"\n\t\t},\n\t\tmove: {\n\t\t\tTYPE_INNER: \"inner\",\n\t\t\tTYPE_PREV: \"prev\",\n\t\t\tTYPE_NEXT: \"next\"\n\t\t},\n\t\tnode: {\n\t\t\tCURSELECTED_EDIT: \"curSelectedNode_Edit\",\n\t\t\tTMPTARGET_TREE: \"tmpTargetzTree\",\n\t\t\tTMPTARGET_NODE: \"tmpTargetNode\"\n\t\t}\n\t},\n\t//default setting of exedit\n\t_setting = {\n\t\tedit: {\n\t\t\tenable: false,\n\t\t\teditNameSelectAll: false,\n\t\t\tshowRemoveBtn: true,\n\t\t\tshowRenameBtn: true,\n\t\t\tremoveTitle: \"remove\",\n\t\t\trenameTitle: \"rename\",\n\t\t\tdrag: {\n\t\t\t\tautoExpandTrigger: false,\n\t\t\t\tisCopy: true,\n\t\t\t\tisMove: true,\n\t\t\t\tprev: true,\n\t\t\t\tnext: true,\n\t\t\t\tinner: true,\n\t\t\t\tminMoveSize: 5,\n\t\t\t\tborderMax: 10,\n\t\t\t\tborderMin: -5,\n\t\t\t\tmaxShowNodeNum: 5,\n\t\t\t\tautoOpenTime: 500\n\t\t\t}\n\t\t},\n\t\tview: {\n\t\t\taddHoverDom: null,\n\t\t\tremoveHoverDom: null\n\t\t},\n\t\tcallback: {\n\t\t\tbeforeDrag:null,\n\t\t\tbeforeDragOpen:null,\n\t\t\tbeforeDrop:null,\n\t\t\tbeforeEditName:null,\n\t\t\tbeforeRename:null,\n\t\t\tonDrag:null,\n\t\t\tonDragMove:null,\n\t\t\tonDrop:null,\n\t\t\tonRename:null\n\t\t}\n\t},\n\t//default root of exedit\n\t_initRoot = function (setting) {\n\t\tvar r = data.getRoot(setting), rs = data.getRoots();\n\t\tr.curEditNode = null;\n\t\tr.curEditInput = null;\n\t\tr.curHoverNode = null;\n\t\tr.dragFlag = 0;\n\t\tr.dragNodeShowBefore = [];\n\t\tr.dragMaskList = new Array();\n\t\trs.showHoverDom = true;\n\t},\n\t//default cache of exedit\n\t_initCache = function(treeId) {},\n\t//default bind event of exedit\n\t_bindEvent = function(setting) {\n\t\tvar o = setting.treeObj;\n\t\tvar c = consts.event;\n\t\to.bind(c.RENAME, function (event, treeId, treeNode, isCancel) {\n\t\t\ttools.apply(setting.callback.onRename, [event, treeId, treeNode, isCancel]);\n\t\t});\n\n\t\to.bind(c.DRAG, function (event, srcEvent, treeId, treeNodes) {\n\t\t\ttools.apply(setting.callback.onDrag, [srcEvent, treeId, treeNodes]);\n\t\t});\n\n\t\to.bind(c.DRAGMOVE,function(event, srcEvent, treeId, treeNodes){\n\t\t\ttools.apply(setting.callback.onDragMove,[srcEvent, treeId, treeNodes]);\n\t\t});\n\n\t\to.bind(c.DROP, function (event, srcEvent, treeId, treeNodes, targetNode, moveType, isCopy) {\n\t\t\ttools.apply(setting.callback.onDrop, [srcEvent, treeId, treeNodes, targetNode, moveType, isCopy]);\n\t\t});\n\t},\n\t_unbindEvent = function(setting) {\n\t\tvar o = setting.treeObj;\n\t\tvar c = consts.event;\n\t\to.unbind(c.RENAME);\n\t\to.unbind(c.DRAG);\n\t\to.unbind(c.DRAGMOVE);\n\t\to.unbind(c.DROP);\n\t},\n\t//default event proxy of exedit\n\t_eventProxy = function(e) {\n\t\tvar target = e.target,\n\t\tsetting = data.getSetting(e.data.treeId),\n\t\trelatedTarget = e.relatedTarget,\n\t\ttId = \"\", node = null,\n\t\tnodeEventType = \"\", treeEventType = \"\",\n\t\tnodeEventCallback = null, treeEventCallback = null,\n\t\ttmp = null;\n\n\t\tif (tools.eqs(e.type, \"mouseover\")) {\n\t\t\ttmp = tools.getMDom(setting, target, [{tagName:\"a\", attrName:\"treeNode\"+consts.id.A}]);\n\t\t\tif (tmp) {\n\t\t\t\ttId = tools.getNodeMainDom(tmp).id;\n\t\t\t\tnodeEventType = \"hoverOverNode\";\n\t\t\t}\n\t\t} else if (tools.eqs(e.type, \"mouseout\")) {\n\t\t\ttmp = tools.getMDom(setting, relatedTarget, [{tagName:\"a\", attrName:\"treeNode\"+consts.id.A}]);\n\t\t\tif (!tmp) {\n\t\t\t\ttId = \"remove\";\n\t\t\t\tnodeEventType = \"hoverOutNode\";\n\t\t\t}\n\t\t} else if (tools.eqs(e.type, \"mousedown\")) {\n\t\t\ttmp = tools.getMDom(setting, target, [{tagName:\"a\", attrName:\"treeNode\"+consts.id.A}]);\n\t\t\tif (tmp) {\n\t\t\t\ttId = tools.getNodeMainDom(tmp).id;\n\t\t\t\tnodeEventType = \"mousedownNode\";\n\t\t\t}\n\t\t}\n\t\tif (tId.length>0) {\n\t\t\tnode = data.getNodeCache(setting, tId);\n\t\t\tswitch (nodeEventType) {\n\t\t\t\tcase \"mousedownNode\" :\n\t\t\t\t\tnodeEventCallback = _handler.onMousedownNode;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"hoverOverNode\" :\n\t\t\t\t\tnodeEventCallback = _handler.onHoverOverNode;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"hoverOutNode\" :\n\t\t\t\t\tnodeEventCallback = _handler.onHoverOutNode;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tvar proxyResult = {\n\t\t\tstop: false,\n\t\t\tnode: node,\n\t\t\tnodeEventType: nodeEventType,\n\t\t\tnodeEventCallback: nodeEventCallback,\n\t\t\ttreeEventType: treeEventType,\n\t\t\ttreeEventCallback: treeEventCallback\n\t\t};\n\t\treturn proxyResult\n\t},\n\t//default init node of exedit\n\t_initNode = function(setting, level, n, parentNode, isFirstNode, isLastNode, openFlag) {\n\t\tif (!n) return;\n\t\tn.isHover = false;\n\t\tn.editNameFlag = false;\n\t},\n\t//update zTreeObj, add method of edit\n\t_zTreeTools = function(setting, zTreeTools) {\n\t\tzTreeTools.cancelEditName = function(newName) {\n\t\t\tvar root = data.getRoot(this.setting);\n\t\t\tif (!root.curEditNode) return;\n\t\t\tview.cancelCurEditNode(this.setting, newName?newName:null, true);\n\t\t}\n\t\tzTreeTools.copyNode = function(targetNode, node, moveType, isSilent) {\n\t\t\tif (!node) return null;\n\t\t\tif (targetNode && !targetNode.isParent && this.setting.data.keep.leaf && moveType === consts.move.TYPE_INNER) return null;\n\t\t\tvar _this = this,\n\t\t\t\tnewNode = tools.clone(node);\n\t\t\tif (!targetNode) {\n\t\t\t\ttargetNode = null;\n\t\t\t\tmoveType = consts.move.TYPE_INNER;\n\t\t\t}\n\t\t\tif (moveType == consts.move.TYPE_INNER) {\n\t\t\t\tfunction copyCallback() {\n\t\t\t\t\tview.addNodes(_this.setting, targetNode, -1, [newNode], isSilent);\n\t\t\t\t}\n\n\t\t\t\tif (tools.canAsync(this.setting, targetNode)) {\n\t\t\t\t\tview.asyncNode(this.setting, targetNode, isSilent, copyCallback);\n\t\t\t\t} else {\n\t\t\t\t\tcopyCallback();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tview.addNodes(this.setting, targetNode.parentNode, -1, [newNode], isSilent);\n\t\t\t\tview.moveNode(this.setting, targetNode, newNode, moveType, false, isSilent);\n\t\t\t}\n\t\t\treturn newNode;\n\t\t}\n\t\tzTreeTools.editName = function(node) {\n\t\t\tif (!node || !node.tId || node !== data.getNodeCache(this.setting, node.tId)) return;\n\t\t\tif (node.parentTId) view.expandCollapseParentNode(this.setting, node.getParentNode(), true);\n\t\t\tview.editNode(this.setting, node)\n\t\t}\n\t\tzTreeTools.moveNode = function(targetNode, node, moveType, isSilent) {\n\t\t\tif (!node) return node;\n\t\t\tif (targetNode && !targetNode.isParent && this.setting.data.keep.leaf && moveType === consts.move.TYPE_INNER) {\n\t\t\t\treturn null;\n\t\t\t} else if (targetNode && ((node.parentTId == targetNode.tId && moveType == consts.move.TYPE_INNER) || $$(node, this.setting).find(\"#\" + targetNode.tId).length > 0)) {\n\t\t\t\treturn null;\n\t\t\t} else if (!targetNode) {\n\t\t\t\ttargetNode = null;\n\t\t\t}\n\t\t\tvar _this = this;\n\t\t\tfunction moveCallback() {\n\t\t\t\tview.moveNode(_this.setting, targetNode, node, moveType, false, isSilent);\n\t\t\t}\n\t\t\tif (tools.canAsync(this.setting, targetNode) && moveType === consts.move.TYPE_INNER) {\n\t\t\t\tview.asyncNode(this.setting, targetNode, isSilent, moveCallback);\n\t\t\t} else {\n\t\t\t\tmoveCallback();\n\t\t\t}\n\t\t\treturn node;\n\t\t}\n\t\tzTreeTools.setEditable = function(editable) {\n\t\t\tthis.setting.edit.enable = editable;\n\t\t\treturn this.refresh();\n\t\t}\n\t},\n\t//method of operate data\n\t_data = {\n\t\tsetSonNodeLevel: function(setting, parentNode, node) {\n\t\t\tif (!node) return;\n\t\t\tvar childKey = setting.data.key.children;\n\t\t\tnode.level = (parentNode)? parentNode.level + 1 : 0;\n\t\t\tif (!node[childKey]) return;\n\t\t\tfor (var i = 0, l = node[childKey].length; i < l; i++) {\n\t\t\t\tif (node[childKey][i]) data.setSonNodeLevel(setting, node, node[childKey][i]);\n\t\t\t}\n\t\t}\n\t},\n\t//method of event proxy\n\t_event = {\n\n\t},\n\t//method of event handler\n\t_handler = {\n\t\tonHoverOverNode: function(event, node) {\n\t\t\tvar setting = data.getSetting(event.data.treeId),\n\t\t\troot = data.getRoot(setting);\n\t\t\tif (root.curHoverNode != node) {\n\t\t\t\t_handler.onHoverOutNode(event);\n\t\t\t}\n\t\t\troot.curHoverNode = node;\n\t\t\tview.addHoverDom(setting, node);\n\t\t},\n\t\tonHoverOutNode: function(event, node) {\n\t\t\tvar setting = data.getSetting(event.data.treeId),\n\t\t\troot = data.getRoot(setting);\n\t\t\tif (root.curHoverNode && !data.isSelectedNode(setting, root.curHoverNode)) {\n\t\t\t\tview.removeTreeDom(setting, root.curHoverNode);\n\t\t\t\troot.curHoverNode = null;\n\t\t\t}\n\t\t},\n\t\tonMousedownNode: function(eventMouseDown, _node) {\n\t\t\tvar i,l,\n\t\t\tsetting = data.getSetting(eventMouseDown.data.treeId),\n\t\t\troot = data.getRoot(setting), roots = data.getRoots();\n\t\t\t//right click can't drag & drop\n\t\t\tif (eventMouseDown.button == 2 || !setting.edit.enable || (!setting.edit.drag.isCopy && !setting.edit.drag.isMove)) return true;\n\n\t\t\t//input of edit node name can't drag & drop\n\t\t\tvar target = eventMouseDown.target,\n\t\t\t_nodes = data.getRoot(setting).curSelectedList,\n\t\t\tnodes = [];\n\t\t\tif (!data.isSelectedNode(setting, _node)) {\n\t\t\t\tnodes = [_node];\n\t\t\t} else {\n\t\t\t\tfor (i=0, l=_nodes.length; i<l; i++) {\n\t\t\t\t\tif (_nodes[i].editNameFlag && tools.eqs(target.tagName, \"input\") && target.getAttribute(\"treeNode\"+consts.id.INPUT) !== null) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\tnodes.push(_nodes[i]);\n\t\t\t\t\tif (nodes[0].parentTId !== _nodes[i].parentTId) {\n\t\t\t\t\t\tnodes = [_node];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tview.editNodeBlur = true;\n\t\t\tview.cancelCurEditNode(setting);\n\n\t\t\tvar doc = $(setting.treeObj.get(0).ownerDocument),\n\t\t\tbody = $(setting.treeObj.get(0).ownerDocument.body), curNode, tmpArrow, tmpTarget,\n\t\t\tisOtherTree = false,\n\t\t\ttargetSetting = setting,\n\t\t\tsourceSetting = setting,\n\t\t\tpreNode, nextNode,\n\t\t\tpreTmpTargetNodeId = null,\n\t\t\tpreTmpMoveType = null,\n\t\t\ttmpTargetNodeId = null,\n\t\t\tmoveType = consts.move.TYPE_INNER,\n\t\t\tmouseDownX = eventMouseDown.clientX,\n\t\t\tmouseDownY = eventMouseDown.clientY,\n\t\t\tstartTime = (new Date()).getTime();\n\n\t\t\tif (tools.uCanDo(setting)) {\n\t\t\t\tdoc.bind(\"mousemove\", _docMouseMove);\n\t\t\t}\n\t\t\tfunction _docMouseMove(event) {\n\t\t\t\t//avoid start drag after click node\n\t\t\t\tif (root.dragFlag == 0 && Math.abs(mouseDownX - event.clientX) < setting.edit.drag.minMoveSize\n\t\t\t\t\t&& Math.abs(mouseDownY - event.clientY) < setting.edit.drag.minMoveSize) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tvar i, l, tmpNode, tmpDom, tmpNodes,\n\t\t\t\tchildKey = setting.data.key.children;\n\t\t\t\tbody.css(\"cursor\", \"pointer\");\n\n\t\t\t\tif (root.dragFlag == 0) {\n\t\t\t\t\tif (tools.apply(setting.callback.beforeDrag, [setting.treeId, nodes], true) == false) {\n\t\t\t\t\t\t_docMouseUp(event);\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (i=0, l=nodes.length; i<l; i++) {\n\t\t\t\t\t\tif (i==0) {\n\t\t\t\t\t\t\troot.dragNodeShowBefore = [];\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttmpNode = nodes[i];\n\t\t\t\t\t\tif (tmpNode.isParent && tmpNode.open) {\n\t\t\t\t\t\t\tview.expandCollapseNode(setting, tmpNode, !tmpNode.open);\n\t\t\t\t\t\t\troot.dragNodeShowBefore[tmpNode.tId] = true;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\troot.dragNodeShowBefore[tmpNode.tId] = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\troot.dragFlag = 1;\n\t\t\t\t\troots.showHoverDom = false;\n\t\t\t\t\ttools.showIfameMask(setting, true);\n\n\t\t\t\t\t//sort\n\t\t\t\t\tvar isOrder = true, lastIndex = -1;\n\t\t\t\t\tif (nodes.length>1) {\n\t\t\t\t\t\tvar pNodes = nodes[0].parentTId ? nodes[0].getParentNode()[childKey] : data.getNodes(setting);\n\t\t\t\t\t\ttmpNodes = [];\n\t\t\t\t\t\tfor (i=0, l=pNodes.length; i<l; i++) {\n\t\t\t\t\t\t\tif (root.dragNodeShowBefore[pNodes[i].tId] !== undefined) {\n\t\t\t\t\t\t\t\tif (isOrder && lastIndex > -1 && (lastIndex+1) !== i) {\n\t\t\t\t\t\t\t\t\tisOrder = false;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\ttmpNodes.push(pNodes[i]);\n\t\t\t\t\t\t\t\tlastIndex = i;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (nodes.length === tmpNodes.length) {\n\t\t\t\t\t\t\t\tnodes = tmpNodes;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (isOrder) {\n\t\t\t\t\t\tpreNode = nodes[0].getPreNode();\n\t\t\t\t\t\tnextNode = nodes[nodes.length-1].getNextNode();\n\t\t\t\t\t}\n\n\t\t\t\t\t//set node in selected\n\t\t\t\t\tcurNode = $$(\"<ul class='zTreeDragUL'></ul>\", setting);\n\t\t\t\t\tfor (i=0, l=nodes.length; i<l; i++) {\n\t\t\t\t\t\ttmpNode = nodes[i];\n\t\t\t\t\t\ttmpNode.editNameFlag = false;\n\t\t\t\t\t\tview.selectNode(setting, tmpNode, i>0);\n\t\t\t\t\t\tview.removeTreeDom(setting, tmpNode);\n\n\t\t\t\t\t\tif (i > setting.edit.drag.maxShowNodeNum-1) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttmpDom = $$(\"<li id='\"+ tmpNode.tId +\"_tmp'></li>\", setting);\n\t\t\t\t\t\ttmpDom.append($$(tmpNode, consts.id.A, setting).clone());\n\t\t\t\t\t\ttmpDom.css(\"padding\", \"0\");\n\t\t\t\t\t\ttmpDom.children(\"#\" + tmpNode.tId + consts.id.A).removeClass(consts.node.CURSELECTED);\n\t\t\t\t\t\tcurNode.append(tmpDom);\n\t\t\t\t\t\tif (i == setting.edit.drag.maxShowNodeNum-1) {\n\t\t\t\t\t\t\ttmpDom = $$(\"<li id='\"+ tmpNode.tId +\"_moretmp'><a>  ...  </a></li>\", setting);\n\t\t\t\t\t\t\tcurNode.append(tmpDom);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tcurNode.attr(\"id\", nodes[0].tId + consts.id.UL + \"_tmp\");\n\t\t\t\t\tcurNode.addClass(setting.treeObj.attr(\"class\"));\n\t\t\t\t\tcurNode.appendTo(body);\n\n\t\t\t\t\ttmpArrow = $$(\"<span class='tmpzTreeMove_arrow'></span>\", setting);\n\t\t\t\t\ttmpArrow.attr(\"id\", \"zTreeMove_arrow_tmp\");\n\t\t\t\t\ttmpArrow.appendTo(body);\n\n\t\t\t\t\tsetting.treeObj.trigger(consts.event.DRAG, [event, setting.treeId, nodes]);\n\t\t\t\t}\n\n\t\t\t\tif (root.dragFlag == 1) {\n\t\t\t\t\tif (tmpTarget && tmpArrow.attr(\"id\") == event.target.id && tmpTargetNodeId && (event.clientX + doc.scrollLeft()+2) > ($(\"#\" + tmpTargetNodeId + consts.id.A, tmpTarget).offset().left)) {\n\t\t\t\t\t\tvar xT = $(\"#\" + tmpTargetNodeId + consts.id.A, tmpTarget);\n\t\t\t\t\t\tevent.target = (xT.length > 0) ? xT.get(0) : event.target;\n\t\t\t\t\t} else if (tmpTarget) {\n\t\t\t\t\t\ttmpTarget.removeClass(consts.node.TMPTARGET_TREE);\n\t\t\t\t\t\tif (tmpTargetNodeId) $(\"#\" + tmpTargetNodeId + consts.id.A, tmpTarget).removeClass(consts.node.TMPTARGET_NODE + \"_\" + consts.move.TYPE_PREV)\n\t\t\t\t\t\t\t.removeClass(consts.node.TMPTARGET_NODE + \"_\" + _consts.move.TYPE_NEXT).removeClass(consts.node.TMPTARGET_NODE + \"_\" + _consts.move.TYPE_INNER);\n\t\t\t\t\t}\n\t\t\t\t\ttmpTarget = null;\n\t\t\t\t\ttmpTargetNodeId = null;\n\n\t\t\t\t\t//judge drag & drop in multi ztree\n\t\t\t\t\tisOtherTree = false;\n\t\t\t\t\ttargetSetting = setting;\n\t\t\t\t\tvar settings = data.getSettings();\n\t\t\t\t\tfor (var s in settings) {\n\t\t\t\t\t\tif (settings[s].treeId && settings[s].edit.enable && settings[s].treeId != setting.treeId\n\t\t\t\t\t\t\t&& (event.target.id == settings[s].treeId || $(event.target).parents(\"#\" + settings[s].treeId).length>0)) {\n\t\t\t\t\t\t\tisOtherTree = true;\n\t\t\t\t\t\t\ttargetSetting = settings[s];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tvar docScrollTop = doc.scrollTop(),\n\t\t\t\t\tdocScrollLeft = doc.scrollLeft(),\n\t\t\t\t\ttreeOffset = targetSetting.treeObj.offset(),\n\t\t\t\t\tscrollHeight = targetSetting.treeObj.get(0).scrollHeight,\n\t\t\t\t\tscrollWidth = targetSetting.treeObj.get(0).scrollWidth,\n\t\t\t\t\tdTop = (event.clientY + docScrollTop - treeOffset.top),\n\t\t\t\t\tdBottom = (targetSetting.treeObj.height() + treeOffset.top - event.clientY - docScrollTop),\n\t\t\t\t\tdLeft = (event.clientX + docScrollLeft - treeOffset.left),\n\t\t\t\t\tdRight = (targetSetting.treeObj.width() + treeOffset.left - event.clientX - docScrollLeft),\n\t\t\t\t\tisTop = (dTop < setting.edit.drag.borderMax && dTop > setting.edit.drag.borderMin),\n\t\t\t\t\tisBottom = (dBottom < setting.edit.drag.borderMax && dBottom > setting.edit.drag.borderMin),\n\t\t\t\t\tisLeft = (dLeft < setting.edit.drag.borderMax && dLeft > setting.edit.drag.borderMin),\n\t\t\t\t\tisRight = (dRight < setting.edit.drag.borderMax && dRight > setting.edit.drag.borderMin),\n\t\t\t\t\tisTreeInner = dTop > setting.edit.drag.borderMin && dBottom > setting.edit.drag.borderMin && dLeft > setting.edit.drag.borderMin && dRight > setting.edit.drag.borderMin,\n\t\t\t\t\tisTreeTop = (isTop && targetSetting.treeObj.scrollTop() <= 0),\n\t\t\t\t\tisTreeBottom = (isBottom && (targetSetting.treeObj.scrollTop() + targetSetting.treeObj.height()+10) >= scrollHeight),\n\t\t\t\t\tisTreeLeft = (isLeft && targetSetting.treeObj.scrollLeft() <= 0),\n\t\t\t\t\tisTreeRight = (isRight && (targetSetting.treeObj.scrollLeft() + targetSetting.treeObj.width()+10) >= scrollWidth);\n\n\t\t\t\t\tif (event.target && tools.isChildOrSelf(event.target, targetSetting.treeId)) {\n\t\t\t\t\t\t//get node <li> dom\n\t\t\t\t\t\tvar targetObj = event.target;\n\t\t\t\t\t\twhile (targetObj && targetObj.tagName && !tools.eqs(targetObj.tagName, \"li\") && targetObj.id != targetSetting.treeId) {\n\t\t\t\t\t\t\ttargetObj = targetObj.parentNode;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar canMove = true;\n\t\t\t\t\t\t//don't move to self or children of self\n\t\t\t\t\t\tfor (i=0, l=nodes.length; i<l; i++) {\n\t\t\t\t\t\t\ttmpNode = nodes[i];\n\t\t\t\t\t\t\tif (targetObj.id === tmpNode.tId) {\n\t\t\t\t\t\t\t\tcanMove = false;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t} else if ($$(tmpNode, setting).find(\"#\" + targetObj.id).length > 0) {\n\t\t\t\t\t\t\t\tcanMove = false;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (canMove && event.target && tools.isChildOrSelf(event.target, targetObj.id + consts.id.A)) {\n\t\t\t\t\t\t\ttmpTarget = $(targetObj);\n\t\t\t\t\t\t\ttmpTargetNodeId = targetObj.id;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t//the mouse must be in zTree\n\t\t\t\t\ttmpNode = nodes[0];\n\t\t\t\t\tif (isTreeInner && tools.isChildOrSelf(event.target, targetSetting.treeId)) {\n\t\t\t\t\t\t//judge mouse move in root of ztree\n\t\t\t\t\t\tif (!tmpTarget && (event.target.id == targetSetting.treeId || isTreeTop || isTreeBottom || isTreeLeft || isTreeRight) && (isOtherTree || (!isOtherTree && tmpNode.parentTId))) {\n\t\t\t\t\t\t\ttmpTarget = targetSetting.treeObj;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t//auto scroll top\n\t\t\t\t\t\tif (isTop) {\n\t\t\t\t\t\t\ttargetSetting.treeObj.scrollTop(targetSetting.treeObj.scrollTop()-10);\n\t\t\t\t\t\t} else if (isBottom)  {\n\t\t\t\t\t\t\ttargetSetting.treeObj.scrollTop(targetSetting.treeObj.scrollTop()+10);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (isLeft) {\n\t\t\t\t\t\t\ttargetSetting.treeObj.scrollLeft(targetSetting.treeObj.scrollLeft()-10);\n\t\t\t\t\t\t} else if (isRight) {\n\t\t\t\t\t\t\ttargetSetting.treeObj.scrollLeft(targetSetting.treeObj.scrollLeft()+10);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t//auto scroll left\n\t\t\t\t\t\tif (tmpTarget && tmpTarget != targetSetting.treeObj && tmpTarget.offset().left < targetSetting.treeObj.offset().left) {\n\t\t\t\t\t\t\ttargetSetting.treeObj.scrollLeft(targetSetting.treeObj.scrollLeft()+ tmpTarget.offset().left - targetSetting.treeObj.offset().left);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tcurNode.css({\n\t\t\t\t\t\t\"top\": (event.clientY + docScrollTop + 3) + \"px\",\n\t\t\t\t\t\t\"left\": (event.clientX + docScrollLeft + 3) + \"px\"\n\t\t\t\t\t});\n\n\t\t\t\t\tvar dX = 0;\n\t\t\t\t\tvar dY = 0;\n\t\t\t\t\tif (tmpTarget && tmpTarget.attr(\"id\")!=targetSetting.treeId) {\n\t\t\t\t\t\tvar tmpTargetNode = tmpTargetNodeId == null ? null: data.getNodeCache(targetSetting, tmpTargetNodeId),\n\t\t\t\t\t\t\tisCopy = ((event.ctrlKey || event.metaKey) && setting.edit.drag.isMove && setting.edit.drag.isCopy) || (!setting.edit.drag.isMove && setting.edit.drag.isCopy),\n\t\t\t\t\t\t\tisPrev = !!(preNode && tmpTargetNodeId === preNode.tId),\n\t\t\t\t\t\t\tisNext = !!(nextNode && tmpTargetNodeId === nextNode.tId),\n\t\t\t\t\t\t\tisInner = (tmpNode.parentTId && tmpNode.parentTId == tmpTargetNodeId),\n\t\t\t\t\t\t\tcanPrev = (isCopy || !isNext) && tools.apply(targetSetting.edit.drag.prev, [targetSetting.treeId, nodes, tmpTargetNode], !!targetSetting.edit.drag.prev),\n\t\t\t\t\t\t\tcanNext = (isCopy || !isPrev) && tools.apply(targetSetting.edit.drag.next, [targetSetting.treeId, nodes, tmpTargetNode], !!targetSetting.edit.drag.next),\n\t\t\t\t\t\t\tcanInner = (isCopy || !isInner) && !(targetSetting.data.keep.leaf && !tmpTargetNode.isParent) && tools.apply(targetSetting.edit.drag.inner, [targetSetting.treeId, nodes, tmpTargetNode], !!targetSetting.edit.drag.inner);\n\n\t\t\t\t\t\tfunction clearMove() {\n\t\t\t\t\t\t\ttmpTarget = null;\n\t\t\t\t\t\t\ttmpTargetNodeId = \"\";\n\t\t\t\t\t\t\tmoveType = consts.move.TYPE_INNER;\n\t\t\t\t\t\t\ttmpArrow.css({\n\t\t\t\t\t\t\t\t\"display\":\"none\"\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tif (window.zTreeMoveTimer) {\n\t\t\t\t\t\t\t\tclearTimeout(window.zTreeMoveTimer);\n\t\t\t\t\t\t\t\twindow.zTreeMoveTargetNodeTId = null\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!canPrev && !canNext && !canInner) {\n\t\t\t\t\t\t\tclearMove();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tvar tmpTargetA = $(\"#\" + tmpTargetNodeId + consts.id.A, tmpTarget),\n\t\t\t\t\t\t\t\ttmpNextA = tmpTargetNode.isLastNode ? null : $(\"#\" + tmpTargetNode.getNextNode().tId + consts.id.A, tmpTarget.next()),\n\t\t\t\t\t\t\t\ttmpTop = tmpTargetA.offset().top,\n\t\t\t\t\t\t\t\ttmpLeft = tmpTargetA.offset().left,\n\t\t\t\t\t\t\t\tprevPercent = canPrev ? (canInner ? 0.25 : (canNext ? 0.5 : 1) ) : -1,\n\t\t\t\t\t\t\t\tnextPercent = canNext ? (canInner ? 0.75 : (canPrev ? 0.5 : 0) ) : -1,\n\t\t\t\t\t\t\t\tdY_percent = (event.clientY + docScrollTop - tmpTop)/tmpTargetA.height();\n\n\t\t\t\t\t\t\tif ((prevPercent==1 || dY_percent<=prevPercent && dY_percent>=-.2) && canPrev) {\n\t\t\t\t\t\t\t\tdX = 1 - tmpArrow.width();\n\t\t\t\t\t\t\t\tdY = tmpTop - tmpArrow.height()/2;\n\t\t\t\t\t\t\t\tmoveType = consts.move.TYPE_PREV;\n\t\t\t\t\t\t\t} else if ((nextPercent==0 || dY_percent>=nextPercent && dY_percent<=1.2) && canNext) {\n\t\t\t\t\t\t\t\tdX = 1 - tmpArrow.width();\n\t\t\t\t\t\t\t\tdY = (tmpNextA == null || (tmpTargetNode.isParent && tmpTargetNode.open)) ? (tmpTop + tmpTargetA.height() - tmpArrow.height()/2) : (tmpNextA.offset().top - tmpArrow.height()/2);\n\t\t\t\t\t\t\t\tmoveType = consts.move.TYPE_NEXT;\n\t\t\t\t\t\t\t} else if (canInner) {\n\t\t\t\t\t\t\t\tdX = 5 - tmpArrow.width();\n\t\t\t\t\t\t\t\tdY = tmpTop;\n\t\t\t\t\t\t\t\tmoveType = consts.move.TYPE_INNER;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tclearMove();\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (tmpTarget) {\n\t\t\t\t\t\t\t\ttmpArrow.css({\n\t\t\t\t\t\t\t\t\t\"display\":\"block\",\n\t\t\t\t\t\t\t\t\t\"top\": dY + \"px\",\n\t\t\t\t\t\t\t\t\t\"left\": (tmpLeft + dX) + \"px\"\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\ttmpTargetA.addClass(consts.node.TMPTARGET_NODE + \"_\" + moveType);\n\n\t\t\t\t\t\t\t\tif (preTmpTargetNodeId != tmpTargetNodeId || preTmpMoveType != moveType) {\n\t\t\t\t\t\t\t\t\tstartTime = (new Date()).getTime();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (tmpTargetNode && tmpTargetNode.isParent && moveType == consts.move.TYPE_INNER) {\n\t\t\t\t\t\t\t\t\tvar startTimer = true;\n\t\t\t\t\t\t\t\t\tif (window.zTreeMoveTimer && window.zTreeMoveTargetNodeTId !== tmpTargetNode.tId) {\n\t\t\t\t\t\t\t\t\t\tclearTimeout(window.zTreeMoveTimer);\n\t\t\t\t\t\t\t\t\t\twindow.zTreeMoveTargetNodeTId = null;\n\t\t\t\t\t\t\t\t\t} else if (window.zTreeMoveTimer && window.zTreeMoveTargetNodeTId === tmpTargetNode.tId) {\n\t\t\t\t\t\t\t\t\t\tstartTimer = false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tif (startTimer) {\n\t\t\t\t\t\t\t\t\t\twindow.zTreeMoveTimer = setTimeout(function() {\n\t\t\t\t\t\t\t\t\t\t\tif (moveType != consts.move.TYPE_INNER) return;\n\t\t\t\t\t\t\t\t\t\t\tif (tmpTargetNode && tmpTargetNode.isParent && !tmpTargetNode.open && (new Date()).getTime() - startTime > targetSetting.edit.drag.autoOpenTime\n\t\t\t\t\t\t\t\t\t\t\t\t&& tools.apply(targetSetting.callback.beforeDragOpen, [targetSetting.treeId, tmpTargetNode], true)) {\n\t\t\t\t\t\t\t\t\t\t\t\tview.switchNode(targetSetting, tmpTargetNode);\n\t\t\t\t\t\t\t\t\t\t\t\tif (targetSetting.edit.drag.autoExpandTrigger) {\n\t\t\t\t\t\t\t\t\t\t\t\t\ttargetSetting.treeObj.trigger(consts.event.EXPAND, [targetSetting.treeId, tmpTargetNode]);\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}, targetSetting.edit.drag.autoOpenTime+50);\n\t\t\t\t\t\t\t\t\t\twindow.zTreeMoveTargetNodeTId = tmpTargetNode.tId;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmoveType = consts.move.TYPE_INNER;\n\t\t\t\t\t\tif (tmpTarget && tools.apply(targetSetting.edit.drag.inner, [targetSetting.treeId, nodes, null], !!targetSetting.edit.drag.inner)) {\n\t\t\t\t\t\t\ttmpTarget.addClass(consts.node.TMPTARGET_TREE);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttmpTarget = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttmpArrow.css({\n\t\t\t\t\t\t\t\"display\":\"none\"\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (window.zTreeMoveTimer) {\n\t\t\t\t\t\t\tclearTimeout(window.zTreeMoveTimer);\n\t\t\t\t\t\t\twindow.zTreeMoveTargetNodeTId = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpreTmpTargetNodeId = tmpTargetNodeId;\n\t\t\t\t\tpreTmpMoveType = moveType;\n\n\t\t\t\t\tsetting.treeObj.trigger(consts.event.DRAGMOVE, [event, setting.treeId, nodes]);\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tdoc.bind(\"mouseup\", _docMouseUp);\n\t\t\tfunction _docMouseUp(event) {\n\t\t\t\tif (window.zTreeMoveTimer) {\n\t\t\t\t\tclearTimeout(window.zTreeMoveTimer);\n\t\t\t\t\twindow.zTreeMoveTargetNodeTId = null;\n\t\t\t\t}\n\t\t\t\tpreTmpTargetNodeId = null;\n\t\t\t\tpreTmpMoveType = null;\n\t\t\t\tdoc.unbind(\"mousemove\", _docMouseMove);\n\t\t\t\tdoc.unbind(\"mouseup\", _docMouseUp);\n\t\t\t\tdoc.unbind(\"selectstart\", _docSelect);\n\t\t\t\tbody.css(\"cursor\", \"auto\");\n\t\t\t\tif (tmpTarget) {\n\t\t\t\t\ttmpTarget.removeClass(consts.node.TMPTARGET_TREE);\n\t\t\t\t\tif (tmpTargetNodeId) $(\"#\" + tmpTargetNodeId + consts.id.A, tmpTarget).removeClass(consts.node.TMPTARGET_NODE + \"_\" + consts.move.TYPE_PREV)\n\t\t\t\t\t\t\t.removeClass(consts.node.TMPTARGET_NODE + \"_\" + _consts.move.TYPE_NEXT).removeClass(consts.node.TMPTARGET_NODE + \"_\" + _consts.move.TYPE_INNER);\n\t\t\t\t}\n\t\t\t\ttools.showIfameMask(setting, false);\n\n\t\t\t\troots.showHoverDom = true;\n\t\t\t\tif (root.dragFlag == 0) return;\n\t\t\t\troot.dragFlag = 0;\n\n\t\t\t\tvar i, l, tmpNode;\n\t\t\t\tfor (i=0, l=nodes.length; i<l; i++) {\n\t\t\t\t\ttmpNode = nodes[i];\n\t\t\t\t\tif (tmpNode.isParent && root.dragNodeShowBefore[tmpNode.tId] && !tmpNode.open) {\n\t\t\t\t\t\tview.expandCollapseNode(setting, tmpNode, !tmpNode.open);\n\t\t\t\t\t\tdelete root.dragNodeShowBefore[tmpNode.tId];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (curNode) curNode.remove();\n\t\t\t\tif (tmpArrow) tmpArrow.remove();\n\n\t\t\t\tvar isCopy = ((event.ctrlKey || event.metaKey) && setting.edit.drag.isMove && setting.edit.drag.isCopy) || (!setting.edit.drag.isMove && setting.edit.drag.isCopy);\n\t\t\t\tif (!isCopy && tmpTarget && tmpTargetNodeId && nodes[0].parentTId && tmpTargetNodeId==nodes[0].parentTId && moveType == consts.move.TYPE_INNER) {\n\t\t\t\t\ttmpTarget = null;\n\t\t\t\t}\n\t\t\t\tif (tmpTarget) {\n\t\t\t\t\tvar dragTargetNode = tmpTargetNodeId == null ? null: data.getNodeCache(targetSetting, tmpTargetNodeId);\n\t\t\t\t\tif (tools.apply(setting.callback.beforeDrop, [targetSetting.treeId, nodes, dragTargetNode, moveType, isCopy], true) == false) {\n\t\t\t\t\t\tview.selectNodes(sourceSetting, nodes);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tvar newNodes = isCopy ? tools.clone(nodes) : nodes;\n\n\t\t\t\t\tfunction dropCallback() {\n\t\t\t\t\t\tif (isOtherTree) {\n\t\t\t\t\t\t\tif (!isCopy) {\n\t\t\t\t\t\t\t\tfor(var i=0, l=nodes.length; i<l; i++) {\n\t\t\t\t\t\t\t\t\tview.removeNode(setting, nodes[i]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (moveType == consts.move.TYPE_INNER) {\n\t\t\t\t\t\t\t\tview.addNodes(targetSetting, dragTargetNode, -1, newNodes);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tview.addNodes(targetSetting, dragTargetNode.getParentNode(), moveType == consts.move.TYPE_PREV ? dragTargetNode.getIndex() : dragTargetNode.getIndex()+1, newNodes);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (isCopy && moveType == consts.move.TYPE_INNER) {\n\t\t\t\t\t\t\t\tview.addNodes(targetSetting, dragTargetNode, -1, newNodes);\n\t\t\t\t\t\t\t} else if (isCopy) {\n\t\t\t\t\t\t\t\tview.addNodes(targetSetting, dragTargetNode.getParentNode(), moveType == consts.move.TYPE_PREV ? dragTargetNode.getIndex() : dragTargetNode.getIndex()+1, newNodes);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tif (moveType != consts.move.TYPE_NEXT) {\n\t\t\t\t\t\t\t\t\tfor (i=0, l=newNodes.length; i<l; i++) {\n\t\t\t\t\t\t\t\t\t\tview.moveNode(targetSetting, dragTargetNode, newNodes[i], moveType, false);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tfor (i=-1, l=newNodes.length-1; i<l; l--) {\n\t\t\t\t\t\t\t\t\t\tview.moveNode(targetSetting, dragTargetNode, newNodes[l], moveType, false);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tview.selectNodes(targetSetting, newNodes);\n\n\t\t\t\t\t\tvar a = $$(newNodes[0], setting).get(0);\n\t\t\t\t\t\tview.scrollIntoView(a);\n\n\t\t\t\t\t\tsetting.treeObj.trigger(consts.event.DROP, [event, targetSetting.treeId, newNodes, dragTargetNode, moveType, isCopy]);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (moveType == consts.move.TYPE_INNER && tools.canAsync(targetSetting, dragTargetNode)) {\n\t\t\t\t\t\tview.asyncNode(targetSetting, dragTargetNode, false, dropCallback);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdropCallback();\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\t\t\t\t\tview.selectNodes(sourceSetting, nodes);\n\t\t\t\t\tsetting.treeObj.trigger(consts.event.DROP, [event, setting.treeId, nodes, null, null, null]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tdoc.bind(\"selectstart\", _docSelect);\n\t\t\tfunction _docSelect() {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t//Avoid FireFox's Bug\n\t\t\t//If zTree Div CSS set 'overflow', so drag node outside of zTree, and event.target is error.\n\t\t\tif(eventMouseDown.preventDefault) {\n\t\t\t\teventMouseDown.preventDefault();\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t},\n\t//method of tools for zTree\n\t_tools = {\n\t\tgetAbs: function (obj) {\n\t\t\tvar oRect = obj.getBoundingClientRect(),\n\t\t\tscrollTop = document.body.scrollTop+document.documentElement.scrollTop,\n\t\t\tscrollLeft = document.body.scrollLeft+document.documentElement.scrollLeft;\n\t\t\treturn [oRect.left+scrollLeft,oRect.top+scrollTop];\n\t\t},\n\t\tinputFocus: function(inputObj) {\n\t\t\tif (inputObj.get(0)) {\n\t\t\t\tinputObj.focus();\n\t\t\t\ttools.setCursorPosition(inputObj.get(0), inputObj.val().length);\n\t\t\t}\n\t\t},\n\t\tinputSelect: function(inputObj) {\n\t\t\tif (inputObj.get(0)) {\n\t\t\t\tinputObj.focus();\n\t\t\t\tinputObj.select();\n\t\t\t}\n\t\t},\n\t\tsetCursorPosition: function(obj, pos){\n\t\t\tif(obj.setSelectionRange) {\n\t\t\t\tobj.focus();\n\t\t\t\tobj.setSelectionRange(pos,pos);\n\t\t\t} else if (obj.createTextRange) {\n\t\t\t\tvar range = obj.createTextRange();\n\t\t\t\trange.collapse(true);\n\t\t\t\trange.moveEnd('character', pos);\n\t\t\t\trange.moveStart('character', pos);\n\t\t\t\trange.select();\n\t\t\t}\n\t\t},\n\t\tshowIfameMask: function(setting, showSign) {\n\t\t\tvar root = data.getRoot(setting);\n\t\t\t//clear full mask\n\t\t\twhile (root.dragMaskList.length > 0) {\n\t\t\t\troot.dragMaskList[0].remove();\n\t\t\t\troot.dragMaskList.shift();\n\t\t\t}\n\t\t\tif (showSign) {\n\t\t\t\t//show mask\n\t\t\t\tvar iframeList = $$(\"iframe\", setting);\n\t\t\t\tfor (var i = 0, l = iframeList.length; i < l; i++) {\n\t\t\t\t\tvar obj = iframeList.get(i),\n\t\t\t\t\tr = tools.getAbs(obj),\n\t\t\t\t\tdragMask = $$(\"<div id='zTreeMask_\" + i + \"' class='zTreeMask' style='top:\" + r[1] + \"px; left:\" + r[0] + \"px; width:\" + obj.offsetWidth + \"px; height:\" + obj.offsetHeight + \"px;'></div>\", setting);\n\t\t\t\t\tdragMask.appendTo($$(\"body\", setting));\n\t\t\t\t\troot.dragMaskList.push(dragMask);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\t//method of operate ztree dom\n\t_view = {\n\t\taddEditBtn: function(setting, node) {\n\t\t\tif (node.editNameFlag || $$(node, consts.id.EDIT, setting).length > 0) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (!tools.apply(setting.edit.showRenameBtn, [setting.treeId, node], setting.edit.showRenameBtn)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar aObj = $$(node, consts.id.A, setting),\n\t\t\teditStr = \"<span class='\" + consts.className.BUTTON + \" edit' id='\" + node.tId + consts.id.EDIT + \"' title='\"+tools.apply(setting.edit.renameTitle, [setting.treeId, node], setting.edit.renameTitle)+\"' treeNode\"+consts.id.EDIT+\" style='display:none;'></span>\";\n\t\t\taObj.append(editStr);\n\n\t\t\t$$(node, consts.id.EDIT, setting).bind('click',\n\t\t\t\tfunction() {\n\t\t\t\t\tif (!tools.uCanDo(setting) || tools.apply(setting.callback.beforeEditName, [setting.treeId, node], true) == false) return false;\n\t\t\t\t\tview.editNode(setting, node);\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\t).show();\n\t\t},\n\t\taddRemoveBtn: function(setting, node) {\n\t\t\tif (node.editNameFlag || $$(node, consts.id.REMOVE, setting).length > 0) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (!tools.apply(setting.edit.showRemoveBtn, [setting.treeId, node], setting.edit.showRemoveBtn)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar aObj = $$(node, consts.id.A, setting),\n\t\t\tremoveStr = \"<span class='\" + consts.className.BUTTON + \" remove' id='\" + node.tId + consts.id.REMOVE + \"' title='\"+tools.apply(setting.edit.removeTitle, [setting.treeId, node], setting.edit.removeTitle)+\"' treeNode\"+consts.id.REMOVE+\" style='display:none;'></span>\";\n\t\t\taObj.append(removeStr);\n\n\t\t\t$$(node, consts.id.REMOVE, setting).bind('click',\n\t\t\t\tfunction() {\n\t\t\t\t\tif (!tools.uCanDo(setting) || tools.apply(setting.callback.beforeRemove, [setting.treeId, node], true) == false) return false;\n\t\t\t\t\tview.removeNode(setting, node);\n\t\t\t\t\tsetting.treeObj.trigger(consts.event.REMOVE, [setting.treeId, node]);\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\t).bind('mousedown',\n\t\t\t\tfunction(eventMouseDown) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\t).show();\n\t\t},\n\t\taddHoverDom: function(setting, node) {\n\t\t\tif (data.getRoots().showHoverDom) {\n\t\t\t\tnode.isHover = true;\n\t\t\t\tif (setting.edit.enable) {\n\t\t\t\t\tview.addEditBtn(setting, node);\n\t\t\t\t\tview.addRemoveBtn(setting, node);\n\t\t\t\t}\n\t\t\t\ttools.apply(setting.view.addHoverDom, [setting.treeId, node]);\n\t\t\t}\n\t\t},\n\t\tcancelCurEditNode: function (setting, forceName, isCancel) {\n\t\t\tvar root = data.getRoot(setting),\n\t\t\tnameKey = setting.data.key.name,\n\t\t\tnode = root.curEditNode;\n\n\t\t\tif (node) {\n\t\t\t\tvar inputObj = root.curEditInput,\n\t\t\t\tnewName = forceName ? forceName:(isCancel ? node[nameKey]: inputObj.val());\n\t\t\t\tif (tools.apply(setting.callback.beforeRename, [setting.treeId, node, newName, isCancel], true) === false) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n                node[nameKey] = newName;\n                var aObj = $$(node, consts.id.A, setting);\n\t\t\t\taObj.removeClass(consts.node.CURSELECTED_EDIT);\n\t\t\t\tinputObj.unbind();\n\t\t\t\tview.setNodeName(setting, node);\n\t\t\t\tnode.editNameFlag = false;\n\t\t\t\troot.curEditNode = null;\n\t\t\t\troot.curEditInput = null;\n\t\t\t\tview.selectNode(setting, node, false);\n                setting.treeObj.trigger(consts.event.RENAME, [setting.treeId, node, isCancel]);\n\t\t\t}\n\t\t\troot.noSelection = true;\n\t\t\treturn true;\n\t\t},\n\t\teditNode: function(setting, node) {\n\t\t\tvar root = data.getRoot(setting);\n\t\t\tview.editNodeBlur = false;\n\t\t\tif (data.isSelectedNode(setting, node) && root.curEditNode == node && node.editNameFlag) {\n\t\t\t\tsetTimeout(function() {tools.inputFocus(root.curEditInput);}, 0);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar nameKey = setting.data.key.name;\n\t\t\tnode.editNameFlag = true;\n\t\t\tview.removeTreeDom(setting, node);\n\t\t\tview.cancelCurEditNode(setting);\n\t\t\tview.selectNode(setting, node, false);\n\t\t\t$$(node, consts.id.SPAN, setting).html(\"<input type=text class='rename' id='\" + node.tId + consts.id.INPUT + \"' treeNode\" + consts.id.INPUT + \" >\");\n\t\t\tvar inputObj = $$(node, consts.id.INPUT, setting);\n\t\t\tinputObj.attr(\"value\", node[nameKey]);\n\t\t\tif (setting.edit.editNameSelectAll) {\n\t\t\t\ttools.inputSelect(inputObj);\n\t\t\t} else {\n\t\t\t\ttools.inputFocus(inputObj);\n\t\t\t}\n\n\t\t\tinputObj.bind('blur', function(event) {\n\t\t\t\tif (!view.editNodeBlur) {\n\t\t\t\t\tview.cancelCurEditNode(setting);\n\t\t\t\t}\n\t\t\t}).bind('keydown', function(event) {\n\t\t\t\tif (event.keyCode==\"13\") {\n\t\t\t\t\tview.editNodeBlur = true;\n\t\t\t\t\tview.cancelCurEditNode(setting);\n\t\t\t\t} else if (event.keyCode==\"27\") {\n\t\t\t\t\tview.cancelCurEditNode(setting, null, true);\n\t\t\t\t}\n\t\t\t}).bind('click', function(event) {\n\t\t\t\treturn false;\n\t\t\t}).bind('dblclick', function(event) {\n\t\t\t\treturn false;\n\t\t\t});\n\n\t\t\t$$(node, consts.id.A, setting).addClass(consts.node.CURSELECTED_EDIT);\n\t\t\troot.curEditInput = inputObj;\n\t\t\troot.noSelection = false;\n\t\t\troot.curEditNode = node;\n\t\t},\n\t\tmoveNode: function(setting, targetNode, node, moveType, animateFlag, isSilent) {\n\t\t\tvar root = data.getRoot(setting),\n\t\t\tchildKey = setting.data.key.children;\n\t\t\tif (targetNode == node) return;\n\t\t\tif (setting.data.keep.leaf && targetNode && !targetNode.isParent && moveType == consts.move.TYPE_INNER) return;\n\t\t\tvar oldParentNode = (node.parentTId ? node.getParentNode(): root),\n\t\t\ttargetNodeIsRoot = (targetNode === null || targetNode == root);\n\t\t\tif (targetNodeIsRoot && targetNode === null) targetNode = root;\n\t\t\tif (targetNodeIsRoot) moveType = consts.move.TYPE_INNER;\n\t\t\tvar targetParentNode = (targetNode.parentTId ? targetNode.getParentNode() : root);\n\n\t\t\tif (moveType != consts.move.TYPE_PREV && moveType != consts.move.TYPE_NEXT) {\n\t\t\t\tmoveType = consts.move.TYPE_INNER;\n\t\t\t}\n\n\t\t\tif (moveType == consts.move.TYPE_INNER) {\n\t\t\t\tif (targetNodeIsRoot) {\n\t\t\t\t\t//parentTId of root node is null\n\t\t\t\t\tnode.parentTId = null;\n\t\t\t\t} else {\n\t\t\t\t\tif (!targetNode.isParent) {\n\t\t\t\t\t\ttargetNode.isParent = true;\n\t\t\t\t\t\ttargetNode.open = !!targetNode.open;\n\t\t\t\t\t\tview.setNodeLineIcos(setting, targetNode);\n\t\t\t\t\t}\n\t\t\t\t\tnode.parentTId = targetNode.tId;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//move node Dom\n\t\t\tvar targetObj, target_ulObj;\n\t\t\tif (targetNodeIsRoot) {\n\t\t\t\ttargetObj = setting.treeObj;\n\t\t\t\ttarget_ulObj = targetObj;\n\t\t\t} else {\n\t\t\t\tif (!isSilent && moveType == consts.move.TYPE_INNER) {\n\t\t\t\t\tview.expandCollapseNode(setting, targetNode, true, false);\n\t\t\t\t} else if (!isSilent) {\n\t\t\t\t\tview.expandCollapseNode(setting, targetNode.getParentNode(), true, false);\n\t\t\t\t}\n\t\t\t\ttargetObj = $$(targetNode, setting);\n\t\t\t\ttarget_ulObj = $$(targetNode, consts.id.UL, setting);\n\t\t\t\tif (!!targetObj.get(0) && !target_ulObj.get(0)) {\n\t\t\t\t\tvar ulstr = [];\n\t\t\t\t\tview.makeUlHtml(setting, targetNode, ulstr, '');\n\t\t\t\t\ttargetObj.append(ulstr.join(''));\n\t\t\t\t}\n\t\t\t\ttarget_ulObj = $$(targetNode, consts.id.UL, setting);\n\t\t\t}\n\t\t\tvar nodeDom = $$(node, setting);\n\t\t\tif (!nodeDom.get(0)) {\n\t\t\t\tnodeDom = view.appendNodes(setting, node.level, [node], null, -1, false, true).join('');\n\t\t\t} else if (!targetObj.get(0)) {\n\t\t\t\tnodeDom.remove();\n\t\t\t}\n\t\t\tif (target_ulObj.get(0) && moveType == consts.move.TYPE_INNER) {\n\t\t\t\ttarget_ulObj.append(nodeDom);\n\t\t\t} else if (targetObj.get(0) && moveType == consts.move.TYPE_PREV) {\n\t\t\t\ttargetObj.before(nodeDom);\n\t\t\t} else if (targetObj.get(0) && moveType == consts.move.TYPE_NEXT) {\n\t\t\t\ttargetObj.after(nodeDom);\n\t\t\t}\n\n\t\t\t//repair the data after move\n\t\t\tvar i,l,\n\t\t\ttmpSrcIndex = -1,\n\t\t\ttmpTargetIndex = 0,\n\t\t\toldNeighbor = null,\n\t\t\tnewNeighbor = null,\n\t\t\toldLevel = node.level;\n\t\t\tif (node.isFirstNode) {\n\t\t\t\ttmpSrcIndex = 0;\n\t\t\t\tif (oldParentNode[childKey].length > 1 ) {\n\t\t\t\t\toldNeighbor = oldParentNode[childKey][1];\n\t\t\t\t\toldNeighbor.isFirstNode = true;\n\t\t\t\t}\n\t\t\t} else if (node.isLastNode) {\n\t\t\t\ttmpSrcIndex = oldParentNode[childKey].length -1;\n\t\t\t\toldNeighbor = oldParentNode[childKey][tmpSrcIndex - 1];\n\t\t\t\toldNeighbor.isLastNode = true;\n\t\t\t} else {\n\t\t\t\tfor (i = 0, l = oldParentNode[childKey].length; i < l; i++) {\n\t\t\t\t\tif (oldParentNode[childKey][i].tId == node.tId) {\n\t\t\t\t\t\ttmpSrcIndex = i;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (tmpSrcIndex >= 0) {\n\t\t\t\toldParentNode[childKey].splice(tmpSrcIndex, 1);\n\t\t\t}\n\t\t\tif (moveType != consts.move.TYPE_INNER) {\n\t\t\t\tfor (i = 0, l = targetParentNode[childKey].length; i < l; i++) {\n\t\t\t\t\tif (targetParentNode[childKey][i].tId == targetNode.tId) tmpTargetIndex = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (moveType == consts.move.TYPE_INNER) {\n\t\t\t\tif (!targetNode[childKey]) targetNode[childKey] = new Array();\n\t\t\t\tif (targetNode[childKey].length > 0) {\n\t\t\t\t\tnewNeighbor = targetNode[childKey][targetNode[childKey].length - 1];\n\t\t\t\t\tnewNeighbor.isLastNode = false;\n\t\t\t\t}\n\t\t\t\ttargetNode[childKey].splice(targetNode[childKey].length, 0, node);\n\t\t\t\tnode.isLastNode = true;\n\t\t\t\tnode.isFirstNode = (targetNode[childKey].length == 1);\n\t\t\t} else if (targetNode.isFirstNode && moveType == consts.move.TYPE_PREV) {\n\t\t\t\ttargetParentNode[childKey].splice(tmpTargetIndex, 0, node);\n\t\t\t\tnewNeighbor = targetNode;\n\t\t\t\tnewNeighbor.isFirstNode = false;\n\t\t\t\tnode.parentTId = targetNode.parentTId;\n\t\t\t\tnode.isFirstNode = true;\n\t\t\t\tnode.isLastNode = false;\n\n\t\t\t} else if (targetNode.isLastNode && moveType == consts.move.TYPE_NEXT) {\n\t\t\t\ttargetParentNode[childKey].splice(tmpTargetIndex + 1, 0, node);\n\t\t\t\tnewNeighbor = targetNode;\n\t\t\t\tnewNeighbor.isLastNode = false;\n\t\t\t\tnode.parentTId = targetNode.parentTId;\n\t\t\t\tnode.isFirstNode = false;\n\t\t\t\tnode.isLastNode = true;\n\n\t\t\t} else {\n\t\t\t\tif (moveType == consts.move.TYPE_PREV) {\n\t\t\t\t\ttargetParentNode[childKey].splice(tmpTargetIndex, 0, node);\n\t\t\t\t} else {\n\t\t\t\t\ttargetParentNode[childKey].splice(tmpTargetIndex + 1, 0, node);\n\t\t\t\t}\n\t\t\t\tnode.parentTId = targetNode.parentTId;\n\t\t\t\tnode.isFirstNode = false;\n\t\t\t\tnode.isLastNode = false;\n\t\t\t}\n\t\t\tdata.fixPIdKeyValue(setting, node);\n\t\t\tdata.setSonNodeLevel(setting, node.getParentNode(), node);\n\n\t\t\t//repair node what been moved\n\t\t\tview.setNodeLineIcos(setting, node);\n\t\t\tview.repairNodeLevelClass(setting, node, oldLevel)\n\n\t\t\t//repair node's old parentNode dom\n\t\t\tif (!setting.data.keep.parent && oldParentNode[childKey].length < 1) {\n\t\t\t\t//old parentNode has no child nodes\n\t\t\t\toldParentNode.isParent = false;\n\t\t\t\toldParentNode.open = false;\n\t\t\t\tvar tmp_ulObj = $$(oldParentNode, consts.id.UL, setting),\n\t\t\t\ttmp_switchObj = $$(oldParentNode, consts.id.SWITCH, setting),\n\t\t\t\ttmp_icoObj = $$(oldParentNode, consts.id.ICON, setting);\n\t\t\t\tview.replaceSwitchClass(oldParentNode, tmp_switchObj, consts.folder.DOCU);\n\t\t\t\tview.replaceIcoClass(oldParentNode, tmp_icoObj, consts.folder.DOCU);\n\t\t\t\ttmp_ulObj.css(\"display\", \"none\");\n\n\t\t\t} else if (oldNeighbor) {\n\t\t\t\t//old neigbor node\n\t\t\t\tview.setNodeLineIcos(setting, oldNeighbor);\n\t\t\t}\n\n\t\t\t//new neigbor node\n\t\t\tif (newNeighbor) {\n\t\t\t\tview.setNodeLineIcos(setting, newNeighbor);\n\t\t\t}\n\n\t\t\t//repair checkbox / radio\n\t\t\tif (!!setting.check && setting.check.enable && view.repairChkClass) {\n\t\t\t\tview.repairChkClass(setting, oldParentNode);\n\t\t\t\tview.repairParentChkClassWithSelf(setting, oldParentNode);\n\t\t\t\tif (oldParentNode != node.parent)\n\t\t\t\t\tview.repairParentChkClassWithSelf(setting, node);\n\t\t\t}\n\n\t\t\t//expand parents after move\n\t\t\tif (!isSilent) {\n\t\t\t\tview.expandCollapseParentNode(setting, node.getParentNode(), true, animateFlag);\n\t\t\t}\n\t\t},\n\t\tremoveEditBtn: function(setting, node) {\n\t\t\t$$(node, consts.id.EDIT, setting).unbind().remove();\n\t\t},\n\t\tremoveRemoveBtn: function(setting, node) {\n\t\t\t$$(node, consts.id.REMOVE, setting).unbind().remove();\n\t\t},\n\t\tremoveTreeDom: function(setting, node) {\n\t\t\tnode.isHover = false;\n\t\t\tview.removeEditBtn(setting, node);\n\t\t\tview.removeRemoveBtn(setting, node);\n\t\t\ttools.apply(setting.view.removeHoverDom, [setting.treeId, node]);\n\t\t},\n\t\trepairNodeLevelClass: function(setting, node, oldLevel) {\n\t\t\tif (oldLevel === node.level) return;\n\t\t\tvar liObj = $$(node, setting),\n\t\t\taObj = $$(node, consts.id.A, setting),\n\t\t\tulObj = $$(node, consts.id.UL, setting),\n\t\t\toldClass = consts.className.LEVEL + oldLevel,\n\t\t\tnewClass = consts.className.LEVEL + node.level;\n\t\t\tliObj.removeClass(oldClass);\n\t\t\tliObj.addClass(newClass);\n\t\t\taObj.removeClass(oldClass);\n\t\t\taObj.addClass(newClass);\n\t\t\tulObj.removeClass(oldClass);\n\t\t\tulObj.addClass(newClass);\n\t\t},\n\t\tselectNodes : function(setting, nodes) {\n\t\t\tfor (var i=0, l=nodes.length; i<l; i++) {\n\t\t\t\tview.selectNode(setting, nodes[i], i>0);\n\t\t\t}\n\t\t}\n\t},\n\n\t_z = {\n\t\ttools: _tools,\n\t\tview: _view,\n\t\tevent: _event,\n\t\tdata: _data\n\t};\n\t$.extend(true, $.fn.zTree.consts, _consts);\n\t$.extend(true, $.fn.zTree._z, _z);\n\n\tvar zt = $.fn.zTree,\n\ttools = zt._z.tools,\n\tconsts = zt.consts,\n\tview = zt._z.view,\n\tdata = zt._z.data,\n\tevent = zt._z.event,\n\t$$ = tools.$;\n\n\tdata.exSetting(_setting);\n\tdata.addInitBind(_bindEvent);\n\tdata.addInitUnBind(_unbindEvent);\n\tdata.addInitCache(_initCache);\n\tdata.addInitNode(_initNode);\n\tdata.addInitProxy(_eventProxy);\n\tdata.addInitRoot(_initRoot);\n\tdata.addZTreeTools(_zTreeTools);\n\n\tvar _cancelPreSelectedNode = view.cancelPreSelectedNode;\n\tview.cancelPreSelectedNode = function (setting, node) {\n\t\tvar list = data.getRoot(setting).curSelectedList;\n\t\tfor (var i=0, j=list.length; i<j; i++) {\n\t\t\tif (!node || node === list[i]) {\n\t\t\t\tview.removeTreeDom(setting, list[i]);\n\t\t\t\tif (node) break;\n\t\t\t}\n\t\t}\n\t\tif (_cancelPreSelectedNode) _cancelPreSelectedNode.apply(view, arguments);\n\t}\n\n\tvar _createNodes = view.createNodes;\n\tview.createNodes = function(setting, level, nodes, parentNode, index) {\n\t\tif (_createNodes) {\n\t\t\t_createNodes.apply(view, arguments);\n\t\t}\n\t\tif (!nodes) return;\n\t\tif (view.repairParentChkClassWithSelf) {\n\t\t\tview.repairParentChkClassWithSelf(setting, parentNode);\n\t\t}\n\t}\n\n\tvar _makeNodeUrl = view.makeNodeUrl;\n\tview.makeNodeUrl = function(setting, node) {\n\t\treturn setting.edit.enable ? null : (_makeNodeUrl.apply(view, arguments));\n\t}\n\n\tvar _removeNode = view.removeNode;\n\tview.removeNode = function(setting, node) {\n\t\tvar root = data.getRoot(setting);\n\t\tif (root.curEditNode === node) root.curEditNode = null;\n\t\tif (_removeNode) {\n\t\t\t_removeNode.apply(view, arguments);\n\t\t}\n\t}\n\n\tvar _selectNode = view.selectNode;\n\tview.selectNode = function(setting, node, addFlag) {\n\t\tvar root = data.getRoot(setting);\n\t\tif (data.isSelectedNode(setting, node) && root.curEditNode == node && node.editNameFlag) {\n\t\t\treturn false;\n\t\t}\n\t\tif (_selectNode) _selectNode.apply(view, arguments);\n\t\tview.addHoverDom(setting, node);\n\t\treturn true;\n\t}\n\n\tvar _uCanDo = tools.uCanDo;\n\ttools.uCanDo = function(setting, e) {\n\t\tvar root = data.getRoot(setting);\n\t\tif (e && (tools.eqs(e.type, \"mouseover\") || tools.eqs(e.type, \"mouseout\") || tools.eqs(e.type, \"mousedown\") || tools.eqs(e.type, \"mouseup\"))) {\n\t\t\treturn true;\n\t\t}\n\t\tif (root.curEditNode) {\n\t\t\tview.editNodeBlur = false;\n\t\t\troot.curEditInput.focus();\n\t\t}\n\t\treturn (!root.curEditNode) && (_uCanDo ? _uCanDo.apply(view, arguments) : true);\n\t}\n})(jQuery);"
  },
  {
    "path": "automatic/static/zTree_v3/js/jquery.ztree.exhide.js",
    "content": "/*\n * JQuery zTree exHideNodes v3.5.25\n * http://zTree.me/\n *\n * Copyright (c) 2010 Hunter.z\n *\n * Licensed same as jquery - MIT License\n * http://www.opensource.org/licenses/mit-license.php\n *\n * email: hunter.z@263.net\n * Date: 2016-09-27\n */\n(function($){\n\t//default init node of exLib\n\tvar _initNode = function(setting, level, n, parentNode, isFirstNode, isLastNode, openFlag) {\n\t\tif (typeof n.isHidden == \"string\") n.isHidden = tools.eqs(n.isHidden, \"true\");\n\t\tn.isHidden = !!n.isHidden;\n\t\tdata.initHideForExCheck(setting, n);\n\t},\n\t//add dom for check\n\t_beforeA = function(setting, node, html) {},\n\t//update zTreeObj, add method of exLib\n\t_zTreeTools = function(setting, zTreeTools) {\n\t\tzTreeTools.showNodes = function(nodes, options) {\n\t\t\tview.showNodes(setting, nodes, options);\n\t\t}\n\t\tzTreeTools.showNode = function(node, options) {\n\t\t\tif (!node) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tview.showNodes(setting, [node], options);\n\t\t}\n\t\tzTreeTools.hideNodes = function(nodes, options) {\n\t\t\tview.hideNodes(setting, nodes, options);\n\t\t}\n\t\tzTreeTools.hideNode = function(node, options) {\n\t\t\tif (!node) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tview.hideNodes(setting, [node], options);\n\t\t}\n\n\t\tvar _checkNode = zTreeTools.checkNode;\n\t\tif (_checkNode) {\n\t\t\tzTreeTools.checkNode = function(node, checked, checkTypeFlag, callbackFlag) {\n\t\t\t\tif (!!node && !!node.isHidden) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t_checkNode.apply(zTreeTools, arguments);\n\t\t\t}\n\t\t}\n\t},\n\t//method of operate data\n\t_data = {\n\t\tinitHideForExCheck: function(setting, n) {\n\t\t\tif (n.isHidden && setting.check && setting.check.enable) {\n\t\t\t\tif(typeof n._nocheck == \"undefined\") {\n\t\t\t\t\tn._nocheck = !!n.nocheck\n\t\t\t\t\tn.nocheck = true;\n\t\t\t\t}\n\t\t\t\tn.check_Child_State = -1;\n\t\t\t\tif (view.repairParentChkClassWithSelf) {\n\t\t\t\t\tview.repairParentChkClassWithSelf(setting, n);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tinitShowForExCheck: function(setting, n) {\n\t\t\tif (!n.isHidden && setting.check && setting.check.enable) {\n\t\t\t\tif(typeof n._nocheck != \"undefined\") {\n\t\t\t\t\tn.nocheck = n._nocheck;\n\t\t\t\t\tdelete n._nocheck;\n\t\t\t\t}\n\t\t\t\tif (view.setChkClass) {\n\t\t\t\t\tvar checkObj = $$(n, consts.id.CHECK, setting);\n\t\t\t\t\tview.setChkClass(setting, checkObj, n);\n\t\t\t\t}\n\t\t\t\tif (view.repairParentChkClassWithSelf) {\n\t\t\t\t\tview.repairParentChkClassWithSelf(setting, n);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\t//method of operate ztree dom\n\t_view = {\n\t\tclearOldFirstNode: function(setting, node) {\n\t\t\tvar n = node.getNextNode();\n\t\t\twhile(!!n){\n\t\t\t\tif (n.isFirstNode) {\n\t\t\t\t\tn.isFirstNode = false;\n\t\t\t\t\tview.setNodeLineIcos(setting, n);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (n.isLastNode) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tn = n.getNextNode();\n\t\t\t}\n\t\t},\n        clearOldLastNode: function(setting, node, openFlag) {\n            var n = node.getPreNode();\n            while(!!n){\n                if (n.isLastNode) {\n                    n.isLastNode = false;\n                    if (openFlag) {\n                        view.setNodeLineIcos(setting, n);\n                    }\n                    break;\n                }\n                if (n.isFirstNode) {\n                    break;\n                }\n                n = n.getPreNode();\n            }\n        },\n\t\tmakeDOMNodeMainBefore: function(html, setting, node) {\n\t\t\thtml.push(\"<li \", (node.isHidden ? \"style='display:none;' \" : \"\"), \"id='\", node.tId, \"' class='\", consts.className.LEVEL, node.level,\"' tabindex='0' hidefocus='true' treenode>\");\n\t\t},\n\t\tshowNode: function(setting, node, options) {\n\t\t\tnode.isHidden = false;\n\t\t\tdata.initShowForExCheck(setting, node);\n\t\t\t$$(node, setting).show();\n\t\t},\n\t\tshowNodes: function(setting, nodes, options) {\n\t\t\tif (!nodes || nodes.length == 0) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar pList = {}, i, j;\n\t\t\tfor (i=0, j=nodes.length; i<j; i++) {\n\t\t\t\tvar n = nodes[i];\n\t\t\t\tif (!pList[n.parentTId]) {\n\t\t\t\t\tvar pn = n.getParentNode();\n\t\t\t\t\tpList[n.parentTId] = (pn === null) ? data.getRoot(setting) : n.getParentNode();\n\t\t\t\t}\n\t\t\t\tview.showNode(setting, n, options);\n\t\t\t}\n\t\t\tfor (var tId in pList) {\n\t\t\t\tvar children = pList[tId][setting.data.key.children];\n\t\t\t\tview.setFirstNodeForShow(setting, children);\n\t\t\t\tview.setLastNodeForShow(setting, children);\n\t\t\t}\n\t\t},\n\t\thideNode: function(setting, node, options) {\n\t\t\tnode.isHidden = true;\n\t\t\tnode.isFirstNode = false;\n\t\t\tnode.isLastNode = false;\n\t\t\tdata.initHideForExCheck(setting, node);\n\t\t\tview.cancelPreSelectedNode(setting, node);\n\t\t\t$$(node, setting).hide();\n\t\t},\n\t\thideNodes: function(setting, nodes, options) {\n\t\t\tif (!nodes || nodes.length == 0) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar pList = {}, i, j;\n\t\t\tfor (i=0, j=nodes.length; i<j; i++) {\n\t\t\t\tvar n = nodes[i];\n\t\t\t\tif ((n.isFirstNode || n.isLastNode) && !pList[n.parentTId]) {\n\t\t\t\t\tvar pn = n.getParentNode();\n\t\t\t\t\tpList[n.parentTId] = (pn === null) ? data.getRoot(setting) : n.getParentNode();\n\t\t\t\t}\n\t\t\t\tview.hideNode(setting, n, options);\n\t\t\t}\n\t\t\tfor (var tId in pList) {\n\t\t\t\tvar children = pList[tId][setting.data.key.children];\n\t\t\t\tview.setFirstNodeForHide(setting, children);\n\t\t\t\tview.setLastNodeForHide(setting, children);\n\t\t\t}\n\t\t},\n\t\tsetFirstNode: function(setting, parentNode) {\n\t\t\tvar childKey = setting.data.key.children, childLength = parentNode[childKey].length;\n\t\t\tif (childLength > 0 && !parentNode[childKey][0].isHidden) {\n\t\t\t\tparentNode[childKey][0].isFirstNode = true;\n\t\t\t} else if (childLength > 0) {\n\t\t\t\tview.setFirstNodeForHide(setting, parentNode[childKey]);\n\t\t\t}\n\t\t},\n\t\tsetLastNode: function(setting, parentNode) {\n\t\t\tvar childKey = setting.data.key.children, childLength = parentNode[childKey].length;\n\t\t\tif (childLength > 0 && !parentNode[childKey][0].isHidden) {\n\t\t\t\tparentNode[childKey][childLength - 1].isLastNode = true;\n\t\t\t} else if (childLength > 0) {\n\t\t\t\tview.setLastNodeForHide(setting, parentNode[childKey]);\n\t\t\t}\n\t\t},\n\t\tsetFirstNodeForHide: function(setting, nodes) {\n\t\t\tvar n,i,j;\n\t\t\tfor (i=0, j=nodes.length; i<j; i++) {\n\t\t\t\tn = nodes[i];\n\t\t\t\tif (n.isFirstNode) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (!n.isHidden && !n.isFirstNode) {\n\t\t\t\t\tn.isFirstNode = true;\n\t\t\t\t\tview.setNodeLineIcos(setting, n);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tn = null;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn n;\n\t\t},\n\t\tsetFirstNodeForShow: function(setting, nodes) {\n\t\t\tvar n,i,j, first, old;\n\t\t\tfor(i=0, j=nodes.length; i<j; i++) {\n\t\t\t\tn = nodes[i];\n\t\t\t\tif (!first && !n.isHidden && n.isFirstNode) {\n\t\t\t\t\tfirst = n;\n\t\t\t\t\tbreak;\n\t\t\t\t} else if (!first && !n.isHidden && !n.isFirstNode) {\n\t\t\t\t\tn.isFirstNode = true;\n\t\t\t\t\tfirst = n;\n\t\t\t\t\tview.setNodeLineIcos(setting, n);\n\t\t\t\t} else if (first && n.isFirstNode) {\n\t\t\t\t\tn.isFirstNode = false;\n\t\t\t\t\told = n;\n\t\t\t\t\tview.setNodeLineIcos(setting, n);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tn = null;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn {\"new\":first, \"old\":old};\n\t\t},\n\t\tsetLastNodeForHide: function(setting, nodes) {\n\t\t\tvar n,i;\n\t\t\tfor (i=nodes.length-1; i>=0; i--) {\n\t\t\t\tn = nodes[i];\n\t\t\t\tif (n.isLastNode) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (!n.isHidden && !n.isLastNode) {\n\t\t\t\t\tn.isLastNode = true;\n\t\t\t\t\tview.setNodeLineIcos(setting, n);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tn = null;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn n;\n\t\t},\n\t\tsetLastNodeForShow: function(setting, nodes) {\n\t\t\tvar n,i,j, last, old;\n\t\t\tfor (i=nodes.length-1; i>=0; i--) {\n\t\t\t\tn = nodes[i];\n\t\t\t\tif (!last && !n.isHidden && n.isLastNode) {\n\t\t\t\t\tlast = n;\n\t\t\t\t\tbreak;\n\t\t\t\t} else if (!last && !n.isHidden && !n.isLastNode) {\n\t\t\t\t\tn.isLastNode = true;\n\t\t\t\t\tlast = n;\n\t\t\t\t\tview.setNodeLineIcos(setting, n);\n\t\t\t\t} else if (last && n.isLastNode) {\n\t\t\t\t\tn.isLastNode = false;\n\t\t\t\t\told = n;\n\t\t\t\t\tview.setNodeLineIcos(setting, n);\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\tn = null;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn {\"new\":last, \"old\":old};\n\t\t}\n\t},\n\n\t_z = {\n\t\tview: _view,\n\t\tdata: _data\n\t};\n\t$.extend(true, $.fn.zTree._z, _z);\n\n\tvar zt = $.fn.zTree,\n\ttools = zt._z.tools,\n\tconsts = zt.consts,\n\tview = zt._z.view,\n\tdata = zt._z.data,\n\tevent = zt._z.event,\n\t$$ = tools.$;\n\n\tdata.addInitNode(_initNode);\n\tdata.addBeforeA(_beforeA);\n\tdata.addZTreeTools(_zTreeTools);\n\n//\tOverride method in core\n\tvar _dInitNode = data.initNode;\n    data.initNode = function(setting, level, node, parentNode, isFirstNode, isLastNode, openFlag) {\n        var tmpPNode = (parentNode) ? parentNode: data.getRoot(setting),\n            children = tmpPNode[setting.data.key.children];\n        data.tmpHideFirstNode = view.setFirstNodeForHide(setting, children);\n        data.tmpHideLastNode = view.setLastNodeForHide(setting, children);\n        if (openFlag) {\n            view.setNodeLineIcos(setting, data.tmpHideFirstNode);\n            view.setNodeLineIcos(setting, data.tmpHideLastNode);\n        }\n        isFirstNode = (data.tmpHideFirstNode === node);\n        isLastNode = (data.tmpHideLastNode === node);\n        if (_dInitNode) _dInitNode.apply(data, arguments);\n        if (openFlag && isLastNode) {\n            view.clearOldLastNode(setting, node, openFlag);\n        }\n    };\n\n\tvar _makeChkFlag = data.makeChkFlag;\n\tif (!!_makeChkFlag) {\n\t\tdata.makeChkFlag = function(setting, node) {\n\t\t\tif (!!node && !!node.isHidden) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t_makeChkFlag.apply(data, arguments);\n\t\t}\n\t}\n\n\tvar _getTreeCheckedNodes = data.getTreeCheckedNodes;\n\tif (!!_getTreeCheckedNodes) {\n\t\tdata.getTreeCheckedNodes = function(setting, nodes, checked, results) {\n\t\t\tif (!!nodes && nodes.length > 0) {\n\t\t\t\tvar p = nodes[0].getParentNode();\n\t\t\t\tif (!!p && !!p.isHidden) {\n\t\t\t\t\treturn [];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn _getTreeCheckedNodes.apply(data, arguments);\n\t\t}\n\t}\n\n\tvar _getTreeChangeCheckedNodes = data.getTreeChangeCheckedNodes;\n\tif (!!_getTreeChangeCheckedNodes) {\n\t\tdata.getTreeChangeCheckedNodes = function(setting, nodes, results) {\n\t\t\tif (!!nodes && nodes.length > 0) {\n\t\t\t\tvar p = nodes[0].getParentNode();\n\t\t\t\tif (!!p && !!p.isHidden) {\n\t\t\t\t\treturn [];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn _getTreeChangeCheckedNodes.apply(data, arguments);\n\t\t}\n\t}\n\n\tvar _expandCollapseSonNode = view.expandCollapseSonNode;\n\tif (!!_expandCollapseSonNode) {\n\t\tview.expandCollapseSonNode = function(setting, node, expandFlag, animateFlag, callback) {\n\t\t\tif (!!node && !!node.isHidden) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t_expandCollapseSonNode.apply(view, arguments);\n\t\t}\n\t}\n\n\tvar _setSonNodeCheckBox = view.setSonNodeCheckBox;\n\tif (!!_setSonNodeCheckBox) {\n\t\tview.setSonNodeCheckBox = function(setting, node, value, srcNode) {\n\t\t\tif (!!node && !!node.isHidden) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t_setSonNodeCheckBox.apply(view, arguments);\n\t\t}\n\t}\n\n\tvar _repairParentChkClassWithSelf = view.repairParentChkClassWithSelf;\n\tif (!!_repairParentChkClassWithSelf) {\n\t\tview.repairParentChkClassWithSelf = function(setting, node) {\n\t\t\tif (!!node && !!node.isHidden) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t_repairParentChkClassWithSelf.apply(view, arguments);\n\t\t}\n\t}\n})(jQuery);"
  },
  {
    "path": "automatic/templates/404.html",
    "content": "{% extends 'frame.html' %}\n{% block title %}Automagic{% endblock %}\n{% block slideshow %} \n<div style=\"text-align:center; margin-top: 100px\">\n<img src=\"/static/images/404.png\"/>\n</div>  \n{% endblock %}"
  },
  {
    "path": "automatic/templates/500.html",
    "content": "{% extends 'frame.html' %}\n{% block title %}Automagic{% endblock %}\n{% block slideshow %}\n    <div style=\"text-align:center; margin-top: 100px\">\n        <img src=\"/static/images/timg.png\"/>\n    </div>\n{% endblock %}"
  },
  {
    "path": "automatic/templates/base.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <title>{% block title %}Default Title{% endblock %} - Ray</title>\n</head>\n<body>\n{% include 'nav.html' %}\n\n{% block content %}\n<div>这里是默认内容，所有继承自这个模板的，如果不覆盖就显示这里的默认内容。</div>\n    {% for key,value in info_dict.items %}\n        {{ key }}:{{ value }}<br />\n    {% endfor %}\n\n    (zhandian):{{ info_dict.site }}<br />\n    (neirong):{{ info_dict.content }}<br />\n{% endblock %}\n   <a href=\"/product/add\" class=\"btn btn-primary\">add product</a>\n\n</body>\n</html>"
  },
  {
    "path": "automatic/templates/comingsoon.html",
    "content": "{% extends 'frame.html' %}\n{% block title %}Automagic{% endblock %}\n{% block slideshow %} \n<div style=\"text-align:center; margin-top: 100px\">\n<img src=\"/static/images/timg.png\"/>\n</div>  \n{% endblock %}"
  },
  {
    "path": "automatic/templates/element/element.html",
    "content": "{% extends 'frame.html' %}\n{% block title %}Automagic{% endblock %}\n{% block slideshow %}\n    <div class=\"ak-zper-midbox ak-jsch-mid\">\n         <div class=\"ak-zper-inbox-title ak-jsch-title clearfix\">\n               <div class=\"ak-left ak-jsch-row3 ak-zper-fix-btnbox\">\n                    <span class=\"ak-zper-remindback\"></span>\n                    <span class=\"inbox-text\">元素管理</span>\n               </div>\n                <div id=\"log_info\" class=\"ac-addtips\"></div>\n                <select id=\"selproductid\" name=\"productname\" class=\"ak-right ak-left ac-aselect ac-margint8\">\n                      <option value=\"0\">-请选择产品-</option>\n                          {% for product in userandproduct  %}\n                              {% if product.username == request.user %}\n                                  <option value=\"{{ product.productname.id }}\" {% if request.GET.productname  == product.productname.name %}selected{% endif %}>{{ product.productname.name }}</option>\n                              {% endif %}\n                          {% endfor %}\n                </select>\n          </div>\n\n<!--      ---------------------华丽的分割线 main------------------------ -->\n      \t  <div class=\"col-md-12\">\n              <div class=\"ac-margin-tb15\">\n<form method='post' id=\"ele_add\">\n    {% csrf_token %}\n    <table class=\"table table-condensed ac-aelement-table\">\n        <tr>\n            <th>元素描述</th>\n            <th>项目</th>\n            <th>模块</th>\n            <th>定位方式</th>\n            <th>定位标识</th>\n            <th></th>\n        </tr>\n        <tr>\n            <td>{{ elementform.descr }}</td>\n            <td>\n                <select id=\"sel_projectid\" name=\"ele_add_projectid\" class=\"ak-left ac-aselect\" required=\"\">\n                    <option value=\"\">所属项目</option>\n                </select>\n            </td>\n            <td>\n                <select id=\"selvalue\" name=\"selmoduleid\" class=\"ak-left ac-aselect\" required=\"\">\n                    <option value=\"\">所属模块</option>\n                </select>\n            </td>\n{#            <td style=\"position: relative;width:170px;\" id=\"mdlist\">#}\n{#                <input id=\"mdlist\" type=\"text\" readonly value=\"\" class=\"select_rel\" />#}\n{#                <div class='multi_select'></div>#}\n{##}\n{#            </td>#}\n            <td>\n               {{ elementform.locmode }}\n            </td>\n            <td>{{ elementform.location }}</td>\n            <td>\n                <input class=\"btn btn-sm btn-success\" type=\"submit\" value=\"添加\">\n                <input class=\"btn btn-sm btn-primary\" type=\"reset\" value=\"重置\">\n            </td>\n        </tr>\n{#        {{ elementform.as_table }}#}\n    </table>\n</form>\n\n        <div class=\"panel panel-default\">\n    <div class=\"panel-heading\">\n        <form class=\"form-inline\" role=\"form\" action=\"\" method=\"GET\">\n          <div class=\"form-group\">\n              <input id=\"check_productid\" value=\"0\" name=\"check_productname\" hidden=\"true\">\n          <select id=\"selprojectid\" name=\"projectid\" class=\"ak-left ac-aselect col01\">\n              <option value=\"\">所属项目</option>\n          </select>\n            <select id=\"selmoduleid\" name=\"moduleid\" class=\"ak-left ac-aselect col01\">\n                              <option value=\"\">所属模块</option>\n                            </select>\n          </div>\n\n          <div class=\"form-group\">\n          <div class=\"input-group\">\n                <input type=\"input\" class=\"form-control \" name=\"keyword\" value=\"{{ request.GET.keyword }}\"  placeholder=\"通过元素ID、描述、定位标识搜索\">\n                  <span class=\"input-group-btn\">\n                      <button class=\"btn btn-primary\" id=\"search_btn\" type=\"submit\">Go!</button>\n                  </span>\n          </div>\n          </div>\n        </form>\n      </div>\n        <table id=\"eletable\" class=\"table table-striped table-hover table-condensed ac-aelement-table\">\n        <thead>\n          <tr>\n              <th>元素ID</th>\n              <th>元素描述</th>\n              <th>所属项目</th>\n              <th>所属模块</th>\n              <th>定位方式</th>\n              <th>定位标识</th>\n              <th>创建者</th>\n              <th>创建时间</th>\n          <th>操作</th>\n          </tr>\n        </thead>\n        <tbody>\n          {% for element in elementlist %}\n            <tr>\n                <td>{{ element.id }}</td>\n                <td class=\"ac-alist-width-overflow-public\" title=\"{{ element.descr }}\">{{ element.descr }}</td>\n                <td class=\"ac-alist-width-overflow-public\">{{ element.projectid.name }}</td>\n                <td>{{ element.moduleid.name }}</td>\n                <td>{{ element.locmode }}</td>\n                <td class=\"ac-alist-width-overflow-public\" title=\"{{ element.location }}\">{{ element.location }}</td>\n                <td>{{ element.createat }}</td>\n                <td>{{ element.createtime|date:'Y-m-d H:i:s' }}</td>\n                <td>\n                    <a href=\"\" onclick=\"setelementValue({{ element.id }})\" class=\"ke-ablock\" data-toggle=\"modal\" data-target=\"#editElementModal\"><i class=\"glyphicon glyphicon-edit\"></i></a>\n                    <a href=\"{% url 'elementdel' element.id %}\" class=\"ke-ablock\" role=\"button\" onclick=\"return confirm('Are you Sure Deleted.')\"><i class=\"glyphicon glyphicon-trash\"></i></a>\n                </td>\n            </tr>\n          {% endfor %}\n        </tbody>\n      </table>\n    </div>\n        {% if is_paginated %}\n        <div class=\"panel-default\">\n        <ul class=\"pagination\">\n          <li><a href=\"javascript:window.location.href=window.location.search.match(/page=(\\d+|\\s*)/)===null? window.location.origin+(window.location.pathname +'?page=1'+(window.location.search?window.location.search.replace('?','&'):'')):window.location.search.replace(/page=(\\d+|\\s*)/, 'page=1')\">«</a></li>\n          {% if page_obj.has_previous %}\n            <!--<li><a href=\"{{ request.get_full_path }}&page={{ page_obj.previous_page_number }}\">上一页</a></li>-->\n              <li><a href=\"javascript:window.location.href=window.location.search.match(/page=(\\d+|\\s*)/)===null? window.location.href +'?page={{ page_obj.previous_page_number }}': window.location.search.replace(/page=(\\d+|\\s*)/, 'page={{ page_obj.previous_page_number }}')\">上一页</a></li>\n          {% else %}\n            <li class=\"previous disabled\"><a>上一页</a></li>\n          {% endif %}\n\n{#          {% for i in page_obj.paginator.page_range %}#}\n{#              {% if  i  <= 10 %}#}\n{#                <li {% if page_obj.number == i %}class=\"active\"{% endif %}><a href=\"javascript:window.location.href=window.location.search.match(/page=(\\d+|\\s*)/)===null? window.location.origin+(window.location.pathname +'?page={{ i }}'+(window.location.search?window.location.search.replace('?','&'):'')):window.location.search.replace(/page=(\\d+|\\s*)/, 'page={{ i }}')\">{{ i }}</a></li>#}\n{#               {% elif page_obj.number > 9 %}#}\n{#                   <li {% if page_obj.number == i %}class=\"active\"{% endif %}><a href=\"javascript:window.location.href=window.location.search.match(/page=(\\d+|\\s*)/)===null? window.location.origin+(window.location.pathname +'?page={{ i }}'+(window.location.search?window.location.search.replace('?','&'):'')):window.location.search.replace(/page=(\\d+|\\s*)/, 'page={{ i }}')\">{{ i }}</a></li>#}\n{##}\n{#              {% endif %}#}\n{#          {% endfor %}#}\n\n          {% if page_obj.has_next %}\n            <li><a href=\"javascript:window.location.href=window.location.search.match(/page=(\\d+|\\s*)/)===null? window.location.origin+(window.location.pathname +'?page={{ page_obj.next_page_number }}'+(window.location.search?window.location.search.replace('?','&'):'')):window.location.search.replace(/page=(\\d+|\\s*)/, 'page={{ page_obj.next_page_number }}')\">下一页</a></li>\n          {% else %}\n            <li class=\"previous disabled\"><a>下一页</a></li>\n          {% endif %}\n          <li><a href=\"javascript:window.location.href=window.location.search.match(/page=(\\d+|\\s*)/)===null? window.location.origin+(window.location.pathname +'?page={{ page_obj.paginator.num_pages  }}'+(window.location.search?window.location.search.replace('?','&'):'')):window.location.search.replace(/page=(\\d+|\\s*)/, 'page={{ page_obj.paginator.num_pages  }}')\">»</a></li>\n          <li><a>当前第{{ page_obj.number }}页/共{{ elementsum }}条</a></li>\n          <li><input type=\"number\" id=\"curpage\" class=\"ac-acaseedit-input\" style=\"width: 80px;\"></li>\n          <li><button id=\"btn_skip\" onclick=\"btn_skip_click()\" type=\"button\" class=\"btn btn-sm btn-primary\">确定</button></li>\n        </ul>\n    </div>\n        {% endif %}\n              </div>\n          </div>\n    </div>\n    <!--      ---------------------华丽的分割线 main end------------------------ -->\n\n\n    <div class=\"modal fade ak-min-fullwidth-modal ak-znews-addsort-modal\" id=\"editElementModal\" tabindex=\"-1\" role=\"dialog\" aria-hidden=\"true\">\n            <div class=\"modal-dialog\">\n                  <div class=\"modal-content\">\n                        <div class=\"modal-header clearfix\">\n                              <button type=\"button\" class=\"close close-back\" data-dismiss=\"modal\"> <span class=\"sr-only\">Close</span> </button>\n                              <h4 class=\"modal-title text-center\">编辑元素</h4>\n                        </div>\n                        <div class=\"modal-body ak-main-body\">\n                            <form method='post' id=\"element_edit\">\n                                {% csrf_token %}\n                               <div class=\"ak-jsch-modal-row\">\n                                    <table class=\"ac-aset-table\"  border=\"0\">\n                                        <tr>\n                                           <td class=\"col01\">\n                                                <div class=\"ak-jsch-pos\"><div class=\"ak-jsch-point\"></div></div>\n                                               <span class=\"ak-jsch-item-left ak-proname\">元素描述</span>\n                                           </td>\n                                            <td colspan=\"3\">\n                                                <input name=\"elementid\" hidden=\"true\">\n                                                <div class=\"ak-jsch-item-right ak-left\">\n                                                    <input style=\"width:500px;\" name=\"eledescr\" class=\"ac-acaseedit-input\" type=\"text\" placeholder=\"元素描述\">\n                                                </div>\n                                            </td>\n                                        </tr>\n                                        <tr>\n                                                   <td class=\"col01\"><span class=\"ak-jsch-item-left\">所属项目</span></td>\n                                                   <td>\n                                                   <div class=\"ak-jsch-item-right ak-left\">\n                                                      <select id=\"eleprojectid\" name=\"ele_add_projectid\" class=\"ak-left ac-aselect col01\">\n                                                            <option value=\"\">所属项目</option>\n                                                      </select>\n                                                   </div>\n                                                   </td>\n                                            <td class=\"col01\"><span class=\"ak-jsch-item-left\">所属模块</span></td>\n                                                   <td>\n                                                   <div class=\"ak-jsch-item-right ak-left\">\n                                                       <select id=\"elemoduleid\" name=\"moduleid\" class=\"ak-left ac-aselect col01\">\n                                                            <option value=\"\">所属模块</option>\n                                                        </select>\n                                                   </div>\n                                                   </td>\n                                        </tr>\n                                        <tr>\n                                               <td class=\"col01\"><span class=\"ak-jsch-item-left\">定位方式</span></td>\n                                               <td>\n                                               <div class=\"ak-jsch-item-right ak-left\">\n                                                    <select name=\"locmode\" class=\"ak-left ac-aselect col01\">\n                                                        <option value=\"id\">id</option>\n                                                        <option value=\"name\">name</option>\n                                                        <option value=\"css selector\">css</option>\n                                                        <option value=\"xpath\">xpath</option>\n                                                        <option value=\"class_name\">class name</option>\n                                                        <option value=\"tag_name\">tag name</option>\n                                                        <option value=\"link_text\">link text</option>\n                                                        <option value=\"portial_link_text\">portial link text</option>\n                                                    </select>\n                                               </div>\n                                               </td>\n                                        </tr>\n\n                                        <tr>\n                                               <td class=\"col01\"><span class=\"ak-jsch-item-left\">定位标识</span></td>\n                                               <td colspan=\"3\">\n                                               <div class=\"ak-jsch-item-right ak-left\">\n                                                    <input style=\"width:500px;\" name=\"elelocation\" class=\"ac-acaseedit-input\" placeholder=\"请输入定位标识\">\n                                               </div>\n                                               </td>\n                                        </tr>\n                                        </table>\n                               </div>\n\n                                <div class=\"modal-footer\">\n                                     <!--===footer button ===-->\n                                     <div class=\"ak-footer-btn text-left\">\n                                         <input class=\"ak-zdl-createbtn\" type=\"submit\" value=\"提交\">\n                                         <input class=\"ak-zdl-createbtn cancel\" type=\"reset\" value=\"重置\">\n                                     </div>\n                                     <!--===End footer button ===-->\n                                </div>\n                            </form>\n              </div>\n          </div>\n    </div>\n    </div>\n{% endblock %}\n{% block script %}\n    {% load static %}\n    <script>\n            $(document).ready(function(){\n                $('#eletable').DataTable({\n{#                    \"sScrollX\": \"100%\",   //表格的宽#}\n{#                    \"sScrollXInner\": \"100%\",   //表格的内容宽度#}\n{#                    \"bScrollCollapse\": false,  //当显示的数据不足以支撑表格的默认的高度时，依然显示纵向的滚动条。(默认是false)#}\n                    \"bPaginate\": false,  //是否显示分页\n                    \"bLengthChange\": false,  //每页显示的记录数\n                    \"bFilter\": false, //搜索栏\n                    \"bSort\": true, //是否支持排序功能\n                    \"bInfo\": false, //显示表格信息\n                    \"bAutoWidth\": true,  //自适应宽度\n                    \"aaSorting\": [[0, \"desc\"]],  //给列表排序 ，第一个参数表示数组 (由0开始)。1 表示Browser列。第二个参数为 desc或是asc\n{#                    \"aoColumns\": [#}\n{#                            null,#}\n{#                        null,#}\n{#                        {#}\n{#                            \"bVisible\": true, //不可见#}\n{#                            \"bSearchable\": false, //参与搜索#}\n{#                        },#}\n{#                        null,#}\n{#                        null#}\n{#                    ], //列设置，表有几列，数组就有几项#}\n{#                    \"bStateSave\": true, //保存状态到cookie *************** 很重要 ， 当搜索的时候页面一刷新会导致搜索的消失。使用这个属性就可避免了#}\n{#                    \"sPaginationType\": \"full_numbers\", //分页，一共两种样式，full_numbers和two_button(默认)#}\n                    \"oLanguage\": {\n                        \"sLengthMenu\": \"每页显示 _MENU_ 条记录\",\n                        \"sZeroRecords\": \"对不起，查询不到任何相关数据\",\n                        \"sInfo\": \"当前显示 _START_ 到 _END_ 条，共 _TOTAL_ 条记录\",\n                        \"sInfoEmtpy\": \"找不到相关数据\",\n                        \"sInfoFiltered\": \"数据表中共为 _MAX_ 条记录)\",\n                        \"sProcessing\": \"正在加载中...\",\n                        \"sSearch\": \"搜索\",\n                        \"sUrl\": \"\", //多语言配置文件，可将oLanguage的设置放在一个txt文件中，例：Javascript/datatable/dtCH.txt\n                        \"oPaginate\": {\n                            \"sFirst\":    \"第一页\",\n                            \"sPrevious\": \" 上一页 \",\n                            \"sNext\":     \" 下一页 \",\n                            \"sLast\":     \" 最后一页 \"\n                        }\n                    }, //多语言配置\n{#                    \"bJQueryUI\": false, //可以添加 jqury的ui theme  需要添加css#}\n{#                    \"aLengthMenu\": [[10, 25, 50, -1, 0], [\"每页10条\", \"每页25条\", \"每页50条\", \"显示所有数据\", \"不显示数据\"]]  //设置每页显示记录的下拉菜单#}\n                });\n            });\n\n            function btn_skip_click() {\n            var currpage = $('#curpage').val() === '' ? 1 : parseInt($('#curpage').val());\n            // console.log(currpage);\n            if (currpage > {{ page_obj.paginator.num_pages }}){\n                currpage = {{ page_obj.paginator.num_pages }};\n            }\n            if (currpage < 1){\n                currpage =1;\n            }\n            var url = window.location.search.match(/page=(\\d+|\\s*)/)===null? window.location.origin+(window.location.pathname +'?page='+currpage+(window.location.search?window.location.search.replace('?','&'):'')):window.location.search.replace(/page=(\\d+|\\s*)/, 'page='+currpage);\n            self.location = url;\n\n            return false;\n        }\n\n        $('#curpage').keypress(function(event){\n            console.log(event.which);\n            if(event.which==13){\n                btn_skip_click()\n            }\n            event.stopPropagation();\n        })\n    </script>\n{% endblock %}\n"
  },
  {
    "path": "automatic/templates/frame.html",
    "content": "{% load static %}\n<!DOCTYPE html>\n<html lang=\"en\" class=\"no-js\">\n\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <meta name=\"msapplication-tap-highlight\" content=\"no\"/>\n    <title>Automagic</title>\n    <!--public css-->\n    <link href=\"{% static 'css/font-awesome/css/font-awesome.min.css' %}\" rel=\"stylesheet\" type=\"text/css\">\n    <link href=\"{% static 'css/bootstrap.css' %}\" rel=\"stylesheet\" type=\"text/css\">\n    <link href=\"{% static 'css/ak-base-style.css' %}\" rel=\"stylesheet\" type=\"text/css\">\n    <link href=\"{% static 'css/jquery-ui.css' %}\" rel=\"stylesheet\" type=\"text/css\">\n    <link href=\"{% static 'css/jquery.dataTables.min.css' %}\" rel=\"stylesheet\" type=\"text/css\">\n\n\n    <!--master page v3 css-->\n    <link href=\"{% static 'css/page-v3/ak-master-page-v3style.css' %}\" rel=\"stylesheet\" type=\"text/css\">\n    <link href=\"{% static 'css/page-v3/ak-master-page-v3.css' %}\" rel=\"stylesheet\" type=\"text/css\">\n    <link href=\"{% static 'css/bootstrapValidator.css' %}\" rel=\"stylesheet\" type=\"text/css\">\n    <link rel=\"icon\" href=\"{% static 'images/favicon.ico' %}\" type=\"image/x-icon\"/>\n    <link rel=\"shortcut icon\" href=\"{% static 'images/favicon.ico' %}\" type=\"image/x-icon\"/>\n    <!--customer css-->\n    {#         <link href=\"{% static 'css/master-page-v3/ak-nav-chat.css' %}\" rel=\"stylesheet\" type=\"text/css\">#}\n    <link href=\"{% static 'css/ak-schedule.css' %}\" rel=\"stylesheet\" type=\"text/css\">\n\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"{% static 'css/wheelmenu.css' %}\"/>\n\n</head>\n\n\n<body>\n<!--Preloader start\n<div id=\"preloader\" class=\"preloader table-wrapper\">\n  <div class=\"table-row\">\n    <div class=\"table-cell\">\n      <div class=\"la-ball-scale-multiple la-3x\">\n        <div></div>\n        <div></div>\n        <div></div>\n      </div>\n    </div>\n  </div>\n</div>\nPreloader end-->\n<!--top placeholder start-->\n<div class=\"placeholder-top\">\n    <ul id=\"gn-menu\" class=\"navbar gn-menu-main\">\n        {#        <li>#}\n        {#            <a href=\"{% url 'caselist' %}\" class=\"logo text-uppercase\">Automagic</a>#}\n        {#        </li>#}\n        {##}\n        {#        <li>#}\n        {#            <a class=\" \" href=\"http://confluence.acorn-net.com:8090\" target=\"_blank\">Confluence</a>#}\n        {#        </li>#}\n        {#        <li>#}\n        {#            <a href=\"http://172.17.3.70/testrail/ \" target=\"_blank\" class=\" \">TestRail</a>#}\n        {#        </li>#}\n        {#        <li>#}\n        {#            <a href=\"http://jira.acorn-net.com:8080\" target=\"_blank\" class=\" \">Jira</a>#}\n        {#        </li>#}\n        {#        <li>#}\n        {#            <a class=\" \" href=\"http://172.17.3.60/\" target=\"_blank\">Git Server</a>#}\n        {#        </li>#}\n\n        <li class=\"top-clock\">\n            <span class=\"ak-zmaster-paage2-logo\"><img src=\"{% static 'images/logo-automagic.png' %}\"\n                                                      class=\"img-responsive\"></span>\n        </li>\n        <li class=\"container-fluid pull-right\">\n            <ul class=\"navbar-right right-menu\">\n\n                </li>\n                {#                <li class=\"members-btn max-block\" data-href=\"notice-sidebar\"  data-close=\".close-notice-sidebar\">#}\n                {#                    <a class=\"show-notice\"><i class=\"fa fa-bell-o\"></i> <span class=\"label label-warning\">4</span></a>#}\n                {#              </li>#}\n\n                <!---->\n                <li class=\" dropdown notifications ak-zuser-dropdowndiv\" data-href=\"view-userinfo\">\n                    <a href=\"javascript:;\" class=\"\" data-toggle=\"dropdown\"\n                       aria-expanded=\"true\"> <img src=\"{% static 'images/user-13.jpg' %}\" class=\"ak-zuser-aimg\" alt=\"\">\n                        <span>{{ request.user.realname }}</span>\n                    </a>\n\n                    <div class=\"dropdown-menu animated fadeInDown ak-admin-con ak-user-dropdown-menu ak-zadmin-dropmenu\"\n                         id=\"view-userinfo\">\n                        <div class=\"topbox\"><span class=\"img-box\"><img src=\"{% static 'images/user-13.jpg' %}\"\n                                                                       class=\"img-responsive\"></span>\n                            <h4 class=\"name\">{{ request.user.realname }}</h4>\n                            <p class=\"email\">{{ request.user.email }}</p>\n                            {% if request.user.mobile %}\n                                <p class=\"email\">{{ request.user.mobile }}</p>\n                            {% endif %}\n                            {#                                  <button class=\"ak-zadmin-infobtn\">查看信息</button>#}\n                        </div>\n                        <div class=\"footbox clearfix\">\n                            <button class=\"ak-zadmin-bottombtn\"><a href=\"{% url 'auto-logout' %}\">切换用户</a></button>\n                            {#                                  <button class=\"ak-zadmin-bottombtn pull-right\">退出</button>#}\n                        </div>\n                    </div>\n                </li>\n                <!---->\n                {#                <li class=\"members-btn max-none\" data-href=\"setting-sidebar\" data-close=\".close-notice-sidebar\">#}\n                {#                    <a class=\"show-notice\">#}\n                {#                        <img src=\"{% static 'images/setting-top02.png' %}\" style=\"display:inline-block;\">#}\n                {#                    </a>#}\n                {#                </li>#}\n            </ul>\n        </li>\n    </ul>\n    </li>\n    </ul>\n</div>\n<!--top placeholder end-->\n<!--left placeholder start-->\n{#<div class=\"placeholder-left\"></div>#}\n<!--left placeholder start-->\n<!--main placeholder start-->\n\n<!--========left start======-->\n<div class=\"ak-zper-leftbox ak-jsch-border\">\n\n    <div class=\"ak-zexam-leftmenu clearfix\">\n        <!--第一个ul start-->\n        <div class=\"leftsidebar_box\">\n            {#            <div class=\"ak-zper-adminbox\">#}\n            {#                        <span class=\"img-box\">#}\n            {#                            <img src=\"{% static 'images/user-13.jpg' %}\"/>#}\n            {#                        </span>#}\n            {#                <span class=\"name\">{{ request.user.realname }}</span>#}\n            {#            </div>#}\n            {#            <div class=\"line\"></div>#}\n            <dl class=\"functiontest\">\n                <dt>功能测试<img src=\"{% static 'images/select_xl01.png' %}\"></dt>\n                <dd class=\"first_dd\"><a href=\"{% url 'caselist' %}\">用例管理</a></dd>\n                <dd><a href=\"{% url 'tasklist' %}\">任务管理</a></dd>\n                <dd><a href=\"{% url 'elementlist' %}\">元素管理</a></dd>\n                <dd><a href=\"{% url 'keywordlist' %}\">关键字管理</a></dd>\n            </dl>\n\n            <dl class=\"interfacetest\">\n                <dt>接口测试<img src=\"{% static 'images/select_xl01.png' %}\"></dt>\n                <dd class=\"first_dd\"><a href=\"{% url 'webinterface' %}\">Web接口</a></dd>\n            </dl>\n\n\n            <dl class=\"tools\">\n                <dt>其它工具<img src=\"{% static 'images/select_xl01.png' %}\"></dt>\n                <dd class=\"first_dd\"><a href=\"{% url 'toolsyslog' %}\">Syslog</a></dd>\n                <dd><a href=\"{% url 'toolsnmp' %}\">SNMP</a></dd>\n            </dl>\n\n            <dl class=\"setting\">\n                <dt>系统管理<img src=\"{% static 'images/select_xl01.png' %}\"></dt>\n                <dd class=\"first_dd\"><a href=\"{% url 'userlist' %}\">用户管理</a></dd>\n                <dd><a href=\"{% url 'productlist' %}\">产品管理</a></dd>\n            </dl>\n            <div>\n                <a href=\"#wheel2\" class=\"wheel-button ne\">\n                    <span>+</span>\n                </a>\n                <ul id=\"wheel2\" data-angle=\"NE\" class=\"wheel\">\n                    <li class=\"item\"><a href=\"http://confluence.acorn-net.com:8090\" target=\"_blank\" title=\"confluence\">C</a></li>\n                    <li class=\"item\"><a href=\"http://172.17.3.70/testrail/\" target=\"_blank\" title=\"testrail\">T</a></li>\n                    <li class=\"item\"><a href=\"http://jira.acorn-net.com:8080\" target=\"_blank\" title=\"jira\">J</a></li>\n                    <li class=\"item\"><a href=\"http://172.17.3.60/\" target=\"_blank\" title=\"git\">G</a></li>\n{#                    <li class=\"item\"><a href=\"#home\">E</a></li>#}\n                </ul>\n            </div>\n        </div>\n\n        {#                        <ul class=\"ak-zperleftnav-ul list-group\">#}\n        {#                           <a href=\"{% url 'caselist' %}\"><li class=\"list-group-item a-listitem\"><span class=\"ak-zper-navicon ak-aper-navicon\"><img src=\"{% static 'images/ak-person-icon01.png' %}\"></span><span class=\"text\">用例管理</span>#}\n        {#                                </li></a>#}\n        {#                            <a href=\"{% url 'tasklist' %}\"><li class=\"list-group-item a-listitem\"><span class=\"ak-zper-navicon ak-aper-navicon\"><img src=\"{% static 'images/ak-person-icon02.jpg' %}\"></span><span class=\"text\">任务管理</span>#}\n        {#                               </li></a>#}\n        {#                            <a href=\"{% url 'elementlist' %}\"><li class=\"list-group-item a-listitem\"><span class=\"ak-zper-navicon ak-aper-navicon\"><img src=\"{% static 'images/ak-person-icon05.png' %}\"></span><span class=\"text\">元素管理</span>#}\n        {#                                </li></a>#}\n        {#                            {% if request.user.is_admin %}#}\n        {#                            <a href=\"{% url 'keywordlist' %}\"><li class=\"list-group-item a-listitem\"><span class=\"ak-zper-navicon ak-aper-navicon\"><img src=\"{% static 'images/ak-person-icon06.png' %}\"></span><span class=\"text\">关键字管理</span>#}\n        {#                            </li></a>#}\n        {#                            {% endif %}#}\n        {#                            {% if request.user.is_admin %}#}\n        {#                            <a href=\"{% url 'productlist' %}\"><li class=\"list-group-item a-listitem\"><span class=\"ak-zper-navicon ak-aper-navicon\"><img src=\"{% static 'images/ak-person-icon03.png' %}\"></span><span class=\"text\">产品管理</span>#}\n        {#                               </li></a>#}\n        {#                            {% endif %}#}\n        {#                            {% if request.user.is_admin %}#}\n        {#                                <a  href=\"{% url 'userlist' %}\"><li class=\"list-group-item a-listitem\"><span class=\"ak-zper-navicon ak-aper-navicon\"><img src=\"{% static 'images/ak-person-icon04.png' %}\"></span><span class=\"text\">用户管理</span>#}\n        {#                               </li></a>#}\n        {#                            {% endif %}#}\n        {#                        </ul>#}\n        {#        </li>#}\n        {#        </ul>#}\n        <!--第一个ul end-->\n    </div>\n</div>\n<!--mid menu end-->\n<!--=======left end=======-->\n<!--===================================================main start==================================================================-->\n{% block content %}\n    <div>\n        {% block slideshow %}{% endblock %}\n        {% block page_content %}{% endblock %}\n        <div class=\"ak-clear\"></div>\n        <footer style=\"text-align:center;margin:50px 0; font:normal 14px/24px 'MicroSoft YaHei';\">\n            <p>适用浏览器：IE9+、FireFox、Chrome、Safari、Opera、傲游、搜狗、世界之窗</p>\n            <p>Copyright ©2020<a href=\"#\" target=\"_blank\"></a> 开源优测</p>\n        </footer>\n    </div>\n{% endblock %}\n<!--===================================================main end==================================================================-->\n\n</body>\n<script src=\"{% static 'js/jquery.min.js' %}\"></script>\n<script src=\"{% static 'js/bootstrap.min.js' %}\"></script>\n<script src=\"{% static 'js/jquery-ui.js' %}\"></script>\n<script src=\"{% static 'js/jquery.dataTables.min.js' %}\"></script>\n\n<link rel=\"stylesheet\" href='{% static \"zTree_v3/css/zTreeStyle/zTreeStyle.css\" %}' type=\"text/css\">\n{#        <script type=\"text/javascript\" src='{% static \"zTree_v3/js/jquery-1.4.4.min.js\" %}'></script>#}\n<script type=\"text/javascript\" src='{% static \"zTree_v3/js/jquery.ztree.core.js\" %}'></script>\n<script type=\"text/javascript\" src='{% static \"zTree_v3/js/jquery.ztree.excheck.js\" %}'></script>\n<script type=\"text/javascript\" src='{% static \"zTree_v3/js/jquery.ztree.exedit.js\" %}'></script>\n\n<script src=\"{% static 'js/bootstrapValidator.js' %}\"></script>\n\n\n<!--Custom Scripts-->\n<script src=\"{% static 'js/common.js' %}\"></script>\n<script src=\"{% static 'js/automagic.js' %}\"></script>\n\n\n<!--public js-->\n<script type=\"text/javascript\" src=\"{% static 'js/back-to-top.js' %}\"></script>\n<!--[if lt IE 9]>\n        <script src=\"{% static 'js/html5shiv/html5shiv.min.js' %}\"></script>\n        <script src=\"{% static 'js/respondjs/respond.min.js' %}\"></script>\n       <![endif]-->\n\n{#<script src=\"{% static 'js/xun.js' %}\"></script>#}\n<script src=\"{% static 'js/jquery.wheelmenu.js' %}\"></script>\n<script src=\"{% static 'muti_select/src/MultiSelectDropList.js' %}\"></script>\n<link href=\"{% static 'muti_select/css/multi.css' %}\" rel=\"stylesheet\" type=\"text/css\"/>\n\n<script type=\"text/javascript\">\n    $(\".leftsidebar_box dt\").css({\"background-color\": \"#3992d0\"});\n    $(\".leftsidebar_box dt img\").attr(\"src\", \"{% static 'images/select_xl01.png' %}\");\n    $(function () {\n        $(\".leftsidebar_box dd\").hide();\n        $(\".leftsidebar_box dt\").click(function () {\n            $(\".leftsidebar_box dt\").css({\"background-color\": \"#3992d0\"})\n            $(this).css({\"background-color\": \"#3992D0\", \"margin-bottom\": \"1px\"});\n            $(this).parent().find('dd').removeClass(\"menu_chioce\");\n            $(\".leftsidebar_box dt img\").attr(\"src\", \"{% static 'images/select_xl01.png' %}\");\n            $(this).parent().find('img').attr(\"src\", \"{% static 'images/select_xl.png' %}\");\n            $(\".menu_chioce\").slideUp('fast');\n            $(this).parent().find('dd').slideToggle('fast');\n            $(this).parent().find('dd').addClass(\"menu_chioce\");\n        });\n    })\n</script>\n<script>\n    var elementTags = []\n    $(document).ready(function () {\n        $.ajaxSetup({\n            data: {csrfmiddlewaretoken: '{{ csrf_token }}'},\n        });\n\n        if (window.location.pathname === '/') {\n            $('.functiontest dt').click();\n        }\n        if (window.location.pathname.indexOf('func') > 0) {\n            $('.functiontest dt').click();\n        }\n        if (window.location.pathname.indexOf('interf') > 0) {\n            $('.interfacetest dt').click();\n        }\n        if (window.location.pathname.indexOf('tools') > 0) {\n            $('.tools dt').click();\n        }\n        if (window.location.pathname.indexOf('setting') > 0) {\n            $('.setting dt').click();\n        }\n        $(\".wheel-button\").wheelmenu({\n            trigger: \"hover\",\n            animation: \"fly\",\n            animationSpeed: \"fast\"\n        });\n        $('#mytable').DataTable({\n            {#                                \"sScrollX\": \"100%\",   //表格的宽#}\n            {#                                \"sScrollXInner\": \"100%\",#}\n            \"bPaginate\": false,  //是否显示分页\n            \"bLengthChange\": false,  //每页显示的记录数\n            \"bFilter\": false, //搜索栏\n            \"bSort\": true, //是否支持排序功能\n            \"bInfo\": false, //显示表格信息\n            \"bAutoWidth\": true,  //自适应宽度\n            \"aaSorting\": [[0, \"desc\"]],  //给列表排序 ，第一个参数表示数组 (由0开始)。1 表示Browser列。第二个参数为 desc或是asc\n            \"oLanguage\": {\n                \"sLengthMenu\": \"每页显示 _MENU_ 条记录\",\n                \"sZeroRecords\": \"对不起，查询不到任何相关数据\",\n                \"sInfo\": \"当前显示 _START_ 到 _END_ 条，共 _TOTAL_ 条记录\",\n                \"sInfoEmtpy\": \"找不到相关数据\",\n                \"sInfoFiltered\": \"数据表中共为 _MAX_ 条记录)\",\n                \"sProcessing\": \"正在加载中...\",\n                \"sSearch\": \"搜索\",\n                \"sUrl\": \"\", //多语言配置文件，可将oLanguage的设置放在一个txt文件中，例：Javascript/datatable/dtCH.txt\n                \"oPaginate\": {\n                    \"sFirst\": \"第一页\",\n                    \"sPrevious\": \" 上一页 \",\n                    \"sNext\": \" 下一页 \",\n                    \"sLast\": \" 最后一页 \"\n                }\n            }, //多语言配置\n        });\n\n    });\n</script>\n{% block script %}{% endblock %}\n</html>\n"
  },
  {
    "path": "automatic/templates/index.html",
    "content": "{% extends 'frame.html' %}\n{% block title %}Automagic{% endblock %}\n{% block slideshow %}\n    <div class=\"ak-zper-midbox ak-jsch-mid\">\n         <div class=\"ak-zper-inbox-title ak-jsch-title clearfix\">\n               <div class=\"ak-left ak-jsch-row3 ak-zper-fix-btnbox\">\n                    <span class=\"ak-zper-remindback\"></span>\n                    <span class=\"inbox-text\">用例管理</span>\n               </div>\n\n                <select id=\"selproductid\" name=\"productname\" class=\"ak-right ak-left ac-aselect ac-margint8\">\n                      <option value=\"0\">-请选择产品-</option>\n                          {% for product in userandproduct  %}\n                              {% if product.username == request.user %}\n                                  <option value=\"{{ product.productname.id }}\" {% if request.GET.check_productname  == product.productname.id %}selected{% endif %}>{{ product.productname.name }}</option>\n                              {% endif %}\n                          {% endfor %}\n                </select>\n          </div>\n\n<!--      ---------------------华丽的分割线 main------------------------ -->\n      \t  <div class=\"col-md-12\">\n              <div class=\"ac-margin-tb15\" >\n\n                      <div class=\"panel panel-default\">\n\n                          <div class=\"panel-heading\">\n                          <form class=\"form-inline\" id=\"search\" role=\"form\" action=\"\" method=\"GET\">\n                              <input id=\"check_productid\" value=\"0\" name=\"check_productname\" hidden=\"true\">\n                              <select id=\"selprojectid\" name=\"projectid\" class=\"ak-left ac-aselect col01\">\n\n                              </select>\n                              <select id=\"selmoduleid\" name=\"moduleid\" class=\"ak-left ac-aselect col01\">\n                                  <option value=\"\">所属模块</option>\n                              </select>\n                              <select name=\"casestatus\" class=\"ak-left ac-aselect col02\">\n                                  <option value=\"\">状态</option>\n                                  <option value=\"True\"  {% if request.GET.casestatus  == 'True' %}selected{% endif %}>启 用</option>\n                                  <option value=\"False\" {% if request.GET.casestatus  == 'False' %}selected{% endif %}>停 用</option>\n                              </select>\n                              <select name=\"issmoke\" class=\"ak-left ac-aselect col02\">\n                                  <option value=\"\">冒烟测试</option>\n                                  <option value=\"True\"  {% if request.GET.issmoke  == 'True' %}selected{% endif %}>启 用</option>\n                                  <option value=\"False\" {% if request.GET.issmoke  == 'False' %}selected{% endif %}>停 用</option>\n                              </select>\n                              <div class=\"input-group\">\n                                  <input type=\"input\" class=\"form-control search-width\" name=\"keyword\" value=\"{{ request.GET.keyword }}\"  placeholder=\"通过用例ID或描述、作者等关键字搜索\">\n                                  <span class=\"input-group-btn\">\n                                      <button class=\"btn btn-primary\" type=\"submit\" id=\"search_btn\">Go!</button>\n                                  </span>\n                              </div>\n                              <a href=\"/func/case/add/\" class=\"ak-right ac-btn-adduser blue\" >添加用例</a>\n                          </form>\n                  <!-- /input-group -->\n                        </div>\n                            <table id=\"mytable\" class=\"table table-striped table-hover table-condensed ac-aelement-table\">\n                                <thead>\n                                  <tr>\n                                      <th>用例ID</th>\n{#                                      <th>关联TestRail</th>#}\n                                      <th>描述</th>\n                                      <th>项目</th>\n                                      <th>冒烟测试</th>\n                                      <th>模块</th>\n                                      <th>状态</th>\n                                      <th>创建者</th>\n                                      <th hidden=\"true\"></th>\n                                      <th>创建时间</th>\n                                  <th>操作</th>\n                                  </tr>\n                                </thead>\n                                <tbody>\n                                  {% for case in caselist %}\n                                    <tr>\n                                        <td>{{ case.id }}</td>\n{#                                        <td class=\"ac-alist-descp ac-alist-width-overflow\"> <a target=\"_blank\" href=\"http://172.17.3.70/testrail/index.php?/cases/view/{{ case.testrailcaseid }}\"/>#}\n{#                                            {% if case.testrailcaseid == 'None' or case.testrailcaseid == None %}#}\n{##}\n{#                                            {% else %}#}\n{#                                                {{ case.testrailcaseid }}#}\n{#                                            {% endif %}#}\n{#                                        </td>#}\n                                        <td class=\"ac-alist-descp ac-alist-width-overflow\" ><a data-toggle=\"tooltips\"  data-placement=\"top\" title=\"{{ case.casedesc }}\" href=\"{% url 'caseview' case.id %}\"/> {{ case.casedesc }}</td>\n                                        <td>{{ case.projectid.name }}</td>\n                                        <td>\n                                                {% if case.issmoke == True %}\n                                                    <span ng-if=\"f.flag==true\" class=\"label label-success ng-scope\">是</span>\n                                                {% else %}\n                                                    <span ng-if=\"f.flag==false\" class=\"label label-default ng-scope\">否</span>\n                                                {% endif %}\n                                        </td>\n                                        <td>{{ case.moduleid.name }}</td>\n                                        <td>\n                                                {% if case.isenabled == True %}\n                                                    <span ng-if=\"f.flag==true\" class=\"label label-success ng-scope\">启 用</span>\n                                                {% else %}\n                                                    <span ng-if=\"f.flag==false\" class=\"label label-danger ng-scope\">停 用</span>\n                                                {% endif %}\n                                        </td>\n                                        <td>{{ case.createat }}</td>\n                                        <td>{{ case.createtime|date:'Y-m-d H:i:s' }}</td>\n                                        <td id=\"{{ case.id }}\" hidden=\"true\"><pre>{{ case.debuginfo }}</pre></td>\n                                        <td>\n                                            <a title=\"编辑\" href=\"{% url 'caseupdate' case.id %}\" class=\"ke-ablock\" ><i class=\"glyphicon glyphicon-edit\"></i></a>\n{#                                            <a href=\"{% url 'casedel' case.id %}\" class=\"ac-abtn red\" role=\"button\" onclick=\"return confirm('您确定要删除吗？')\">删除</a>#}\n                                            <a href=\"#\" title=\"执行\" id=\"run{{ case.id }}\" onclick=\"runcase({{ case.id }})\" class=\"ke-ablock\" ><i class=\"glyphicon glyphicon-play-circle\"></i></a>\n                                            {% if case.debuginfo %}\n                                            <a href=\"#\" title=\"查看\" onclick=\"viewdebuginfo({{ case.id }})\" class=\"ke-ablock\" data-toggle=\"modal\" data-target=\"#debuginfo\"><i class=\"glyphicon glyphicon-eye-open\"></i></a>\n                                            {% else %}\n                                            <a title=\"查看\" class=\"ke-ablock\"><i class=\"glyphicon glyphicon-eye-close\"></i></a>\n                                            {% endif %}\n                                            <a href=\"{% url 'copycase' case.id %}\" title=\"复制\" class=\"ke-ablock\" ><i class=\"glyphicon glyphicon-copy\"></i></a>\n                                        </td>\n                                    </tr>\n                                  {% endfor %}\n                                </tbody>\n                            </table>\n                    </div>\n                     {% if is_paginated %}\n                            <div class=\"panel-default\">\n                            <ul class=\"pagination\">\n                              <li><a href=\"javascript:window.location.href=window.location.search.match(/page=(\\d+|\\s*)/)===null? window.location.origin+(window.location.pathname +'?page=1'+(window.location.search?window.location.search.replace('?','&'):'')):window.location.search.replace(/page=(\\d+|\\s*)/, 'page=1')\">«</a></li>\n                              {% if page_obj.has_previous %}\n                                <!--<li><a href=\"{{ request.get_full_path }}&page={{ page_obj.previous_page_number }}\">上一页</a></li>-->\n                                  <li><a href=\"javascript:window.location.href=window.location.search.match(/page=(\\d+|\\s*)/)===null? window.location.href +'?page={{ page_obj.previous_page_number }}': window.location.search.replace(/page=(\\d+|\\s*)/, 'page={{ page_obj.previous_page_number }}')\">上一页</a></li>\n                              {% else %}\n                                <li class=\"previous disabled\"><a>上一页</a></li>\n                              {% endif %}\n{#                              {% for i in page_obj.paginator.page_range %}#}\n{#                                  <li {% if page_obj.number == i %}class=\"active\"{% endif %}><a href=\"javascript:window.location.href=window.location.search.match(/page=(\\d+|\\s*)/)===null? window.location.origin+(window.location.pathname +'?page={{ i }}'+(window.location.search?window.location.search.replace('?','&'):'')):window.location.search.replace(/page=(\\d+|\\s*)/, 'page={{ i }}')\">{{ i }}</a></li>#}\n{#                                <li {% if page_obj.number == i %}class=\"active\"{% endif %}><a href=\"{{ request.get_full_path }}&page={{ i }}\">{{ i }}</a></li>#}\n{#                              {% endfor %}#}\n                              {% if page_obj.has_next %}\n                                <li><a href=\"javascript:window.location.href=window.location.search.match(/page=(\\d+|\\s*)/)===null? window.location.origin+(window.location.pathname +'?page={{ page_obj.next_page_number }}'+(window.location.search?window.location.search.replace('?','&'):'')):window.location.search.replace(/page=(\\d+|\\s*)/, 'page={{ page_obj.next_page_number }}')\">下一页</a></li>\n                              {% else %}\n                                <li class=\"previous disabled\"><a>下一页</a></li>\n                              {% endif %}\n                              <li><a href=\"javascript:window.location.href=window.location.search.match(/page=(\\d+|\\s*)/)===null? window.location.origin+(window.location.pathname +'?page={{ page_obj.paginator.num_pages  }}'+(window.location.search?window.location.search.replace('?','&'):'')):window.location.search.replace(/page=(\\d+|\\s*)/, 'page={{ page_obj.paginator.num_pages  }}')\">»</a></li>\n                                <li><a>当前第{{ page_obj.number }}页/共{{ casesum }}条</a></li>\n                                <li><input id=\"curpage\" class=\"ac-acaseedit-input\" type=\"number\" style=\"width: 80px;\"></li>\n                                <li><button id=\"btn_skip\" onclick=\"btn_skip_click()\" type=\"button\" class=\"btn btn-sm btn-primary\">确定</button></li>\n                            </ul>\n                        </div>\n                    {% endif %}\n              </div>\n          </div>\n    <!--      ---------------------华丽的分割线 main end------------------------ -->\n\n    </div>\n\n    <div class=\"modal fade ak-min-fullwidth-modal ak-znews-addsort-modal\" id=\"debuginfo\" tabindex=\"-1\" role=\"dialog\" aria-hidden=\"true\">\n            <div class=\"modal-dialog\">\n                  <div class=\"modal-content\">\n                        <div class=\"modal-header clearfix\">\n                              <button type=\"button\" class=\"close close-back\" data-dismiss=\"modal\"> <span class=\"sr-only\">Close</span> </button>\n                              <h4 class=\"modal-title text-center\">调试信息</h4>\n                        </div>\n                        <div class=\"modal-body ak-main-body\">\n                            <pre id=\"divdebuginfo\">\n                            </pre>\n              </div>\n          </div>\n    </div>\n    </div>\n{% endblock %}\n{% block script %}\n    <script>\n            function btn_skip_click() {\n            var currpage = $('#curpage').val() === '' ? 1 : parseInt($('#curpage').val());\n            // console.log(currpage);\n            if (currpage > {{ page_obj.paginator.num_pages }}){\n                currpage = {{ page_obj.paginator.num_pages }};\n            }\n            if (currpage < 1){\n                currpage =1;\n            }\n            var url = window.location.search.match(/page=(\\d+|\\s*)/)===null? window.location.origin+(window.location.pathname +'?page='+currpage+(window.location.search?window.location.search.replace('?','&'):'')):window.location.search.replace(/page=(\\d+|\\s*)/, 'page='+currpage);\n            self.location = url;\n\n            return false;\n        }\n\n        $('#curpage').keypress(function(event){\n            console.log(event.which);\n            if(event.which==13){\n                btn_skip_click()\n            }\n            event.stopPropagation();\n        })\n    </script>\n{% endblock %}\n"
  },
  {
    "path": "automatic/templates/keywords/keyword.html",
    "content": "{% extends 'frame.html' %}\n{% block title %}Automagic{% endblock %}\n{% block slideshow %}\n    {% if request.user.is_admin %}\n        <div class=\"ak-zper-midbox ak-jsch-mid\">\n            <div class=\"ak-zper-inbox-title ak-jsch-title clearfix\">\n                <div class=\"ak-left ak-jsch-row3 ak-zper-fix-btnbox\">\n                    <span class=\"ak-zper-remindback\"></span>\n                    <span class=\"inbox-text\">关键字管理</span>\n                </div>\n                <div id=\"log_info\" class=\"ac-addtips\"></div>\n            </div>\n\n            <!--      ---------------------华丽的分割线 main------------------------ -->\n            <div class=\"col-md-12\">\n                <div class=\"ac-margin-tb15\">\n                    <form method='post' id=\"add_keyword\">\n                        {% csrf_token %}\n                        <table class=\"table table-condensed ac-aelement-table\">\n                            <tr>\n                                <th>关键字</th>\n                                <th>描述</th>\n                                <th width=\"150px\">关键字类型</th>\n                                <th></th>\n                            </tr>\n                            <tr>\n                                <td><input id=\"keyword\" maxlength=\"100\" class=\"form-control\" placeholder=\"请输入需要添加的关键字缩写\"\n                                           name=\"keyword\" required=\"\" type=\"text\"></td>\n                                <td><input id=\"kwdescr\" maxlength=\"200\" class=\"form-control\" placeholder=\"请输入关键字描述\"\n                                           name=\"kwdescr\" type=\"text\"></td>\n                                <td>\n                                    <select id=\"selproductid\" name=\"productname\" class=\"ak-right ak-left ac-aselect\">\n                                        <option value=\"0\">通用</option>\n                                        {% for product in userandproduct %}\n                                            {% if product.username == request.user %}\n                                                <option value=\"{{ product.productname.id }}\"\n                                                        {% if request.GET.check_productname  == product.productname.id %}selected{% endif %}>{{ product.productname.name }}</option>\n                                            {% endif %}\n                                        {% endfor %}\n                                    </select>\n                                </td>\n                                <td>\n                                    <input class=\"btn btn-sm btn-success\" type=\"submit\" value=\"添加\">\n                                    <input class=\"btn btn-sm btn-primary\" type=\"reset\" value=\"重置\">\n                                </td>\n                            </tr>\n                        </table>\n                    </form>\n\n                    <div class=\"panel panel-default\">\n                        <div class=\"panel-heading\">\n                            <form class=\"form-inline\" role=\"form\" method=\"GET\">\n                                <div class=\"form-group\">\n                                    <div class=\"input-group\">\n                                        <input type=\"input\" class=\"form-control search-width\" name=\"keyword\"\n                                               value=\"{{ request.GET.keyword }}\" placeholder=\"通过关键字或者描述搜索\">\n                                        <span class=\"input-group-btn\">\n                      <button class=\"btn btn-primary\" type=\"submit\">Go!</button>\n                  </span>\n                                    </div>\n                                </div>\n                            </form>\n                        </div>\n\n                        <table id=\"mytable\" class=\"table table-striped table-hover table-condensed ac-aelement-table\">\n                            <thead>\n                            <tr>\n                                <th>ID.</th>\n                                <th>关键字</th>\n                                <th>描述</th>\n                                <th>关键字类型</th>\n                                <th>创建者</th>\n                                <th>创建时间</th>\n                                <th>操作</th>\n                            </tr>\n                            </thead>\n                            <tbody>\n                            {% for keyword in keywordlist %}\n                                <tr>\n                                    <td>{{ keyword.pk }}</td>\n                                    <td>{{ keyword.keyword }}</td>\n                                    <td>{{ keyword.kwdescr }}</td>\n                                    <td>\n                                        {% if keyword.productid > 0 %}\n                                            {% for p in productlist %}\n                                                {% if p.pk == keyword.productid %}\n                                                    {{ p.name }}\n                                                {% endif %}\n                                            {% endfor %}\n                                        {% else %}\n                                            通用\n                                        {% endif %}\n                                    </td>\n                                    <td>{{ keyword.createat }}</td>\n                                    <td>{{ keyword.createtime | date:'Y-m-d H:i:s' }}</td>\n                                    <td>\n                                        <a href=\"\" onclick=\"setkeywordValue({{ keyword.id }})\" class=\"ke-ablock\"\n                                           data-toggle=\"modal\" data-target=\"#editKeywordModal\" role=\"button\"><i\n                                                class=\"glyphicon glyphicon-edit\"></i></a>\n                                        <a href=\"{% url 'keyworddel' keyword.id %}\" class=\"ke-ablock\" role=\"button\"\n                                           onclick=\"return confirm('您确定要删除吗？')\"><i\n                                                class=\"glyphicon glyphicon-trash\"></i></a>\n                                    </td>\n                                </tr>\n                            {% endfor %}\n\n                            </tbody>\n                        </table>\n                    </div>\n                    {% if is_paginated %}\n                        <div class=\"panel-default\">\n                            <ul class=\"pagination\">\n                                <li>\n                                    <a href=\"javascript:window.location.href=window.location.search.match(/page=(\\d+|\\s*)/)===null? window.location.origin+(window.location.pathname +'?page=1'+(window.location.search?window.location.search.replace('?','&'):'')):window.location.search.replace(/page=(\\d+|\\s*)/, 'page=1')\">«</a>\n                                </li>\n                                {% if page_obj.has_previous %}\n                                    <!--<li><a href=\"{{ request.get_full_path }}&page={{ page_obj.previous_page_number }}\">上一页</a></li>-->\n                                    <li>\n                                        <a href=\"javascript:window.location.href=window.location.search.match(/page=(\\d+|\\s*)/)===null? window.location.href +'?page={{ page_obj.previous_page_number }}': window.location.search.replace(/page=(\\d+|\\s*)/, 'page={{ page_obj.previous_page_number }}')\">上一页</a>\n                                    </li>\n                                {% else %}\n                                    <li class=\"previous disabled\"><a>上一页</a></li>\n                                {% endif %}\n                                {% for i in page_obj.paginator.page_range %}\n                                    <li {% if page_obj.number == i %}class=\"active\"{% endif %}><a\n                                            href=\"javascript:window.location.href=window.location.search.match(/page=(\\d+|\\s*)/)===null? window.location.origin+(window.location.pathname +'?page={{ i }}'+(window.location.search?window.location.search.replace('?','&'):'')):window.location.search.replace(/page=(\\d+|\\s*)/, 'page={{ i }}')\">{{ i }}</a>\n                                    </li>\n                                {% endfor %}\n                                {% if page_obj.has_next %}\n                                    <li>\n                                        <a href=\"javascript:window.location.href=window.location.search.match(/page=(\\d+|\\s*)/)===null? window.location.origin+(window.location.pathname +'?page={{ page_obj.next_page_number }}'+(window.location.search?window.location.search.replace('?','&'):'')):window.location.search.replace(/page=(\\d+|\\s*)/, 'page={{ page_obj.next_page_number }}')\">下一页</a>\n                                    </li>\n                                {% else %}\n                                    <li class=\"previous disabled\"><a>下一页</a></li>\n                                {% endif %}\n                                <li>\n                                    <a href=\"javascript:window.location.href=window.location.search.match(/page=(\\d+|\\s*)/)===null? window.location.origin+(window.location.pathname +'?page={{ page_obj.paginator.num_pages }}'+(window.location.search?window.location.search.replace('?','&'):'')):window.location.search.replace(/page=(\\d+|\\s*)/, 'page={{ page_obj.paginator.num_pages }}')\">»</a>\n                                </li>\n                                <li><a>当前第{{ page_obj.number }}页/共{{ keywordsum }}条</a></li>\n                                <li><input id=\"curpage\" class=\"ac-acaseedit-input\" type=\"number\" style=\"width: 80px;\">\n                                </li>\n                                <li>\n                                    <button id=\"btn_skip\" onclick=\"btn_skip_click()\" type=\"button\"\n                                            class=\"btn btn-sm btn-primary\">确定\n                                    </button>\n                                </li>\n                            </ul>\n                        </div>\n                    {% endif %}\n                </div>\n            </div>\n            <!--      ---------------------华丽的分割线 main end------------------------ -->\n\n        </div>\n    {% else %}\n        <div class=\"ak-zper-midbox ak-jsch-mid\">\n            <div class=\"ak-zper-inbox-title ak-jsch-title clearfix\">\n                <div class=\"ak-left ak-jsch-row3 ak-zper-fix-btnbox\">\n                    <span class=\"ak-zper-remindback\"></span>\n                    <span class=\"inbox-text\">关键字管理</span>\n                </div>\n                <div id=\"log_info\" class=\"ac-addtips\"></div>\n            </div>\n            <div class=\"col-md-12\">\n                <div style=\"text-align: center\">\n                    <p>形成天才的决定因素应该是勤奋。</p>\n                    <p>……有几分勤学苦练是成正比例的。</p>\n                    <p>加油吧！少年！！！</p>\n                    <p>你没权限访问，可以找找管理员。</p>\n                </div>\n            </div>\n        </div>\n    {% endif %}\n    <!-- Edit Modal -->\n    <div class=\"modal fade ak-min-fullwidth-modal ak-znews-addsort-modal\" id=\"editKeywordModal\" tabindex=\"-1\"\n         role=\"dialog\" aria-hidden=\"true\">\n        <div class=\"modal-dialog\">\n            <div class=\"modal-content\">\n                <div class=\"modal-header clearfix\">\n                    <button type=\"button\" class=\"close close-back\" data-dismiss=\"modal\"><span\n                            class=\"sr-only\">Close</span></button>\n                    <h4 class=\"modal-title text-center\">编辑关键字</h4>\n                </div>\n                <div class=\"modal-body col01 ac-amargin-tb20\">\n                    <form id=\"keyword_edit\" method=\"post\" action=\"{% url 'keywordupdate' %}\" class=\"form-horizontal\">\n\n                        <div class=\"form-group\">\n                            <label class=\"col-lg-3 control-label\">关键字</label>\n                            <div class=\"col-lg-5\">\n                                <input name=\"keywordid\" hidden=\"true\">\n                                <input type=\"text\" class=\"form-control\" name=\"keyword\" placeholder=\"请填写关键字\"/>\n                            </div>\n                        </div>\n\n                        <div class=\"form-group\">\n                            <label class=\"col-lg-3 control-label\">描述</label>\n                            <div class=\"col-lg-5\">\n                                <input type=\"text\" class=\"form-control\" name=\"kwdescr\" placeholder=\"描述\"/>\n                            </div>\n                        </div>\n                        <div class=\"form-group\">\n                            <label class=\"col-lg-3 control-label\">类型</label>\n                            <div class=\"col-lg-5\">\n                                <select id=\"selproductid\" name=\"productname\" class=\"ak-left ac-aselect\">\n                                    <option value=\"0\">通用</option>\n                                    {% for product in userandproduct %}\n                                        {% if product.username == request.user %}\n                                            <option value=\"{{ product.productname.id }}\"\n                                                    {% if request.GET.check_productname  == product.productname.id %}selected{% endif %}>{{ product.productname.name }}</option>\n                                        {% endif %}\n                                    {% endfor %}\n                                </select>\n                            </div>\n                        </div>\n                        <div class=\"form-group modal-footer\">\n                            <div class=\"col-lg-9 col-lg-offset-3\">\n                                <!--===footer button ===-->\n                                <div class=\"ak-footer-btn text-left\">\n                                    <input class=\"ak-zdl-createbtn\" type=\"submit\" value=\"提交\">\n                                    <input class=\"ak-zdl-createbtn cancel\" type=\"reset\" value=\"重置\">\n                                </div>\n                                <!--===End footer button ===-->\n                            </div>\n                        </div>\n                    </form>\n                </div>\n            </div>\n        </div>\n    </div>\n\n{% endblock %}\n{% block script %}\n    {% load static %}\n    <script>\n        function btn_skip_click() {\n            var currpage = $('#curpage').val() === '' ? 1 : parseInt($('#curpage').val());\n            // console.log(currpage);\n            if (currpage > {{ page_obj.paginator.num_pages }}) {\n                currpage = {{ page_obj.paginator.num_pages }};\n            }\n            if (currpage < 1) {\n                currpage = 1;\n            }\n            var url = window.location.search.match(/page=(\\d+|\\s*)/) === null ? window.location.origin + (window.location.pathname + '?page=' + currpage + (window.location.search ? window.location.search.replace('?', '&') : '')) : window.location.search.replace(/page=(\\d+|\\s*)/, 'page=' + currpage);\n            self.location = url;\n\n            return false;\n        }\n\n        $('#curpage').keypress(function (event) {\n            console.log(event.which);\n            if (event.which == 13) {\n                btn_skip_click()\n            }\n            event.stopPropagation();\n        })\n    </script>\n    <script type=\"text/javascript\" src=\"{% static 'js/keyword.js' %}\"></script>\n\n{% endblock %}\n"
  },
  {
    "path": "automatic/templates/management/moduleadd.html",
    "content": "{% extends 'nav.html' %}\n{% block title %}Module Add{% endblock %}\n\n{% block slideshow %}\n    <br/><br/><br/>\n<form method='post'>\n    {% csrf_token %}\n    <table>\n        {{ moduleform.as_table }}\n    </table>\n    <input class=\"btn btn-primary\" type=\"submit\" value=\"submit\">\n    <input class=\"btn btn-primary\" type=\"reset\" value=\"reset\">\n</form>\n</body>\n{% endblock %}"
  },
  {
    "path": "automatic/templates/management/moduleview.html",
    "content": "{% extends 'nav.html' %}\n{% block title %}Module View{% endblock %}\n\n{% block slideshow %}\n    <br/><br/><br/>\n<body>\n{% if errors %}\n        <ul>\n            {% for error in errors %}\n            <li style=\"color: red;\">{{error}}</li>\n            {% endfor %}\n        </ul>\n{% endif %}\n\n\n    <h2>{{module.name}}</h2>\n<table>\n    <tr>\n        <th>ISENABLED:</th>\n        <td>{{ module.isenabled }}</td>\n    </tr>\n    <tr>\n        <th>{{ module.createat }}:</th>\n        <td>{{ module.createtime }}</td>\n    </tr>\n    <tr>\n        <th>{{ module.updateat }}:</th>\n        <td>{{ module.updatetime }}</td>\n    </tr>\n</table>\n<div align=\"right\" class=\"form-group\"><a href=\"/module/add/{{ module.id }}\" class=\"btn btn-primary\">Add Module</a></div>\n <table class=\"table table-striped table-bordered table-hover table-condensed\">\n        <thead>\n          <tr>\n              <th>NO.</th>\n              <th>Module Name</th>\n              <th>IsEnabled</th>\n              <th>Create At</th>\n              <th>Create Time</th>\n              <th>Update At</th>\n              <th>Update Time</th>\n          <th></th>\n          </tr>\n        </thead>\n        <tbody>\n          {% for module in modulelist %}\n            <tr>\n                <td>{{ forloop.counter }}</td>\n                <td>{{ module.name }}</td>\n                <td>{{ module.isenabled }}</td>\n                <td>{{ module.createat }}</td>\n                <td>{{ module.createtime }}</td>\n                <td>{{ module.createat }}</td>\n                <td>{{ module.updatetime }}</td>\n                <th>\n                    <a href=\"{% url 'moduleupdate' module.id %}\" class=\"btn btn-primary\" role=\"button\">Edit</a>\n                    <a href=\"{% url 'moduledel' module.id %}\" class=\"btn btn-primary\" role=\"button\" onclick=\"return confirm('Are you Sure Deleted.')\">Delete</a>\n                </th>\n            </tr>\n          {% endfor %}\n        </tbody>\n      </table>\n<p><button onclick=\"goback();\" class=\"btn btn-success\" role=\"button\">返回>></button></p>\n</body>\n{% endblock %}"
  },
  {
    "path": "automatic/templates/management/productadd.html",
    "content": "{% extends 'nav.html' %}\n{% block title %}Product Add{% endblock %}\n\n{% block slideshow %}\n    <br/><br/><br/>\n<form method='post'>\n    {% csrf_token %}\n    <table>\n        {{ productform.as_table }}\n    </table>\n    <input class=\"btn btn-primary\" type=\"submit\" value=\"submit\">\n    <input class=\"btn btn-primary\" type=\"reset\" value=\"reset\">\n</form>\n{% endblock %}"
  },
  {
    "path": "automatic/templates/management/productlist.html",
    "content": "{% extends 'frame.html' %}\n{% block title %}Automagic{% endblock %}\n{% block slideshow %}\n    {% if request.user.is_admin %}\n        <!--===================================================main start==================================================================-->\n        <div class=\"ak-zper-midbox ak-jsch-mid\">\n            <div class=\"ak-zper-inbox-title ak-jsch-title clearfix\">\n                <div class=\"ak-left ak-jsch-row3 ak-zper-fix-btnbox\">\n                    <span class=\"ak-zper-remindback\"></span>\n                    <span class=\"inbox-text\">产品管理</span>\n                </div>\n                <div id=\"log_info\" class=\"ac-addtips\"></div>\n            </div>\n\n            <!--      ---------------------华丽的分割线 main------------------------ -->\n            <div class=\"col-md-12\">\n                <div class=\"ac-margin-tb15\">\n\n                    <div class=\"panel panel-default\">\n                        <div class=\"panel-heading\">\n                            <form class=\"form-inline\" role=\"form\" method=\"GET\">\n                                <div class=\"form-group\">\n                                    <select id=\"id_productid\" name=\"productname\" class=\"form-control\">\n                                        <option value=\"\">-产品名称-</option>\n                                        {% for i in productlist %}\n                                            <option value=\"{{ i.name }}\"\n                                                    {% if request.GET.productname  == i.name %}selected{% endif %}>{{ i.name }}</option>\n                                        {% endfor %}\n                                    </select>\n                                </div>\n                                <div class=\"form-group\">\n                                    <div class=\"input-group\">\n                                        <input width=\"300px\" type=\"input\" class=\"form-control search-width\"\n                                               name=\"keyword\" value=\"{{ request.GET.keyword }}\"\n                                               placeholder=\"通过产品名称或描述关键字搜索\">\n                                        <span class=\"input-group-btn\">\n                      <button class=\"btn btn-primary\" type=\"submit\">Go!</button>\n                  </span>\n                                    </div><!-- /input-group -->\n                                </div>\n                                <button type=\"button\" class=\"ak-right ac-btn-adduser blue\" data-toggle=\"modal\"\n                                        data-target=\"#addProductModal\">创建产品\n                                </button>\n                            </form>\n                            {#            <div align=\"right\" class=\"form-group\">#}\n                            {#                <a href=\"/product/add/\" class=\"btn btn-success\">创建产品</a>#}\n                            {#                <button type=\"button\" class=\"ak-left ac-btn-addcase orange\" data-toggle=\"modal\" data-target=\"#addProductModal\">创建产品</button>#}\n                            {#            </div>#}\n                        </div>\n                        <table id=\"mytable\" class=\"table table-striped table-hover table-condensed ac-aelement-table\">\n                            <thead>\n                            <tr>\n                                <th>No.</th>\n                                <th>产品名称</th>\n                                <th>产品状态</th>\n                                <th>产品描述</th>\n                                <th>排序</th>\n                                <th>创建者</th>\n                                <th>创建时间</th>\n                                <th>更新者</th>\n                                <th>更新时间</th>\n                                <th>操作</th>\n                            </tr>\n                            </thead>\n                            <tbody>\n                            {% for product in productlist %}\n                                <tr>\n                                    <td>{{ forloop.counter }}</td>\n                                    <td class=\"ac-alist-descp\"><a\n                                            href=\"{% url 'productview' product.id %}\"/> {{ product.name }}</td>\n                                    <td>\n                                        {% if product.isenabled == True %}\n                                            <span ng-if=\"f.flag==true\" class=\"label label-success ng-scope\">启 用</span>\n                                        {% else %}\n                                            <span ng-if=\"f.flag==false\" class=\"label label-danger ng-scope\">停 用</span>\n                                        {% endif %}\n                                    </td>\n                                    <td class=\"ac-alist-width-overflow-public\">{{ product.descr }}</td>\n                                    <td>{{ product.sortby }}</td>\n                                    <td>{{ product.createat }}</td>\n                                    <td>{{ product.createtime|date:'Y-m-d H:i:s' }}</td>\n                                    <td>{{ product.updateat }}</td>\n                                    <td>{{ product.updatetime|date:'Y-m-d H:i:s' }}</td>\n                                    <td>\n                                        <a href=\"\" onclick=\"setproductValue({{ product.id }})\" class=\"ke-ablock\"\n                                           data-toggle=\"modal\" data-target=\"#editProductModal\"><i\n                                                class=\"glyphicon glyphicon-edit\"></i></a>\n                                        <a href=\"{% url 'productdel' product.id %}\" class=\"ke-ablock\" role=\"button\"\n                                           onclick=\"return confirm('Are you Sure Deleted.')\"><i\n                                                class=\"glyphicon glyphicon-trash\"></i></a>\n                                    </td>\n                                </tr>\n                            {% endfor %}\n                            </tbody>\n                        </table>\n                    </div>\n                    {% if is_paginated %}\n                        <div class=\"panel-default\">\n                            <ul class=\"pagination\">\n                                <li><a href=\"{{ request.path }}?page=1\">«</a></li>\n                                {% if page_obj.has_previous %}\n                                    <li><a href=\"{{ request.path }}?&page={{ page_obj.previous_page_number }}\">上一页</a>\n                                    </li>\n                                {% else %}\n                                    <li class=\"previous disabled\"><a>上一页</a></li>\n                                {% endif %}\n                                {% for i in page_obj.paginator.page_range %}\n                                    <li {% if page_obj.number == i %}class=\"active\"{% endif %}><a\n                                            href=\"{{ request.path }}?page={{ i }}\">{{ i }}</a></li>\n                                {% endfor %}\n                                {% if page_obj.has_next %}\n                                    <li><a href=\"{{ request.path }}?page={{ page_obj.next_page_number }}\">下一页</a></li>\n                                {% else %}\n                                    <li class=\"previous disabled\"><a>下一页</a></li>\n                                {% endif %}\n                                <li><a href=\"{{ request.path }}?page={{ page_obj.paginator.num_pages }}\">»</a></li>\n                                <li><a>当前第{{ page_obj.number }}页/共{{ productsum }}条</a></li>\n                                <li><input id=\"curpage\" class=\"ac-acaseedit-input\" type=\"number\" style=\"width: 80px;\">\n                                </li>\n                                <li>\n                                    <button id=\"btn_skip\" onclick=\"btn_skip_click()\" type=\"button\"\n                                            class=\"btn btn-sm btn-primary\">确定\n                                    </button>\n                                </li>\n                            </ul>\n                        </div>\n                    {% endif %}\n                </div>\n            </div>\n        </div>\n        <!--      ---------------------华丽的分割线 main end------------------------ -->\n        <!--===================================================main end==================================================================-->\n\n        <!--Add Modal -->\n        <div class=\"modal fade ak-min-fullwidth-modal ak-znews-addsort-modal\" id=\"addProductModal\" tabindex=\"-1\"\n             role=\"dialog\" aria-hidden=\"true\">\n            <div class=\"modal-dialog\">\n                <div class=\"modal-content\">\n                    <div class=\"modal-header clearfix\">\n                        <button type=\"button\" class=\"close close-back\" data-dismiss=\"modal\"><span\n                                class=\"sr-only\">Close</span></button>\n                        <h4 class=\"modal-title text-center\">创建产品</h4>\n                    </div>\n                    <div class=\"modal-body ak-main-body\">\n                        <form method='post' id=\"product_add\">\n                            {% csrf_token %}\n                            <div class=\"ak-jsch-modal-row\">\n\n                                <table class=\"ac-aset-table\">\n                                    <tr>\n                                        <td class=\"col01\">\n                                            <div class=\"ak-jsch-pos\">\n                                                <div class=\"ak-jsch-point\"></div>\n                                            </div>\n                                            <span class=\"ak-jsch-item-left ac-proname\">产品名称</span>\n                                        </td>\n                                        <td>\n                                            <div class=\"ak-jsch-modal-text clearfix\">\n                                                <div class=\"ak-jsch-item-right col01\">\n                                                    <input name=\"productname\" class=\"ak-jsch-modal-input\" type=\"text\"\n                                                           placeholder=\"产品名称\">\n                                                </div>\n\n                                            </div>\n                                        </td>\n                                    </tr>\n                                    <tr>\n                                        <td class=\"col01\"><span class=\"ak-jsch-item-left ac-apro-span\">状态</span></td>\n                                        <td>\n                                            <div class=\"ak-jsch-modal-item\">\n                                                <div class=\"sky-form\">\n                                                    <label class=\"toggle\">\n                                                        <input id=\"id_isenabled\" type=\"checkbox\" checked=\"checked\"\n                                                               name=\"isenabled\">\n                                                        <i class=\"rounded-4x ak-aoffon-btn\"></i>\n                                                    </label>\n                                                </div>\n                                            </div>\n                                        </td>\n                                    </tr>\n                                    <tr>\n                                        <td class=\"col01\">\n                                            <div class=\"ak-jsch-modal-item ak-jsch-pt\"><span class=\"ak-jsch-item-left\">描述</span>\n                                            </div>\n                                        </td>\n                                        <td>\n                                            <div class=\"ak-jsch-item-right col01\">\n                                                <textarea id=\"id_descr\" name=\"descr\" class=\"ac-acaseedit-textarea\"\n                                                          rows=\"3\"></textarea>\n                                            </div>\n                                        </td>\n                                    </tr>\n                                    <tr>\n                                        <td class=\"col01\">\n                                            <div class=\"ak-jsch-modal-item ak-jsch-pt\">\n                                                <span class=\"ak-jsch-item-left\">排序</span>\n                                            </div>\n                                        </td>\n                                        <td>\n                                            <div class=\"ak-jsch-item-right col01\">\n                                                <input name=\"sortby\" class=\"ac-acaseedit-input\" type=\"number\" value=\"0\"\n                                                       placeholder=\"请输入排序号\">\n                                            </div>\n                                        </td>\n\n                                    </tr>\n                                </table>\n                            </div>\n                            <div class=\"modal-footer\">\n                                <!--===footer button ===-->\n                                <div class=\"ak-footer-btn text-left\">\n                                    <input class=\"ak-zdl-createbtn\" type=\"submit\" value=\"提交\">\n                                    <input class=\"ak-zdl-createbtn cancel\" type=\"reset\" value=\"重置\">\n                                </div>\n                                <!--===End footer button ===-->\n                            </div>\n                        </form>\n                    </div>\n                </div>\n            </div>\n        </div>\n\n        <!-- Edit Modal -->\n        <div class=\"modal fade ak-min-fullwidth-modal ak-znews-addsort-modal\" id=\"editProductModal\" tabindex=\"-1\"\n             role=\"dialog\" aria-hidden=\"true\">\n            <div class=\"modal-dialog\">\n                <div class=\"modal-content\">\n                    <div class=\"modal-header clearfix\">\n                        <button type=\"button\" class=\"close close-back\" data-dismiss=\"modal\"><span\n                                class=\"sr-only\">Close</span></button>\n                        <h4 class=\"modal-title text-center\">编辑产品</h4>\n                    </div>\n                    <div class=\"modal-body ak-main-body\">\n                        <form method='post' id=\"product_edit\">\n                            {% csrf_token %}\n                            <div class=\"ak-jsch-modal-row\">\n                                <table class=\"ac-aset-table\">\n                                    <tr>\n                                        <td class=\"col01\">\n                                            <div class=\"ak-jsch-pos\">\n                                                <div class=\"ak-jsch-point\"></div>\n                                            </div>\n                                            <span class=\"ak-jsch-item-left ak-proname\">产品名称</span>\n                                        </td>\n                                        <td>\n                                            <input name=\"productid\" hidden=\"true\">\n                                            <div class=\"ak-jsch-item-right ak-left\">\n                                                <input name=\"productname\" class=\"ak-jsch-modal-input\" type=\"text\"\n                                                       placeholder=\"产品名称\">\n                                            </div>\n                                        </td>\n                                    </tr>\n                                    <tr>\n                                        <td class=\"col01\"><span class=\"ak-jsch-item-left ac-apro-span \">状态</span></td>\n                                        <td>\n                                            <div class=\"sky-form ak-left ac-ml10\">\n                                                <label class=\"toggle\">\n                                                    <input id=\"id_isenabled\" type=\"checkbox\" name=\"isenabled\">\n                                                    <i class=\"rounded-4x ak-aoffon-btn\"></i>\n                                                </label>\n                                            </div>\n                                        </td>\n                                    </tr>\n                                    <tr>\n                                        <td class=\"col01\"><span class=\"ak-jsch-item-left\">描述</span></td>\n                                        <td>\n                                            <div class=\"ak-jsch-item-right ak-left\">\n                                                <textarea id=\"id_descr\" name=\"descr\" class=\"ac-acaseedit-textarea\"\n                                                          rows=\"3\"></textarea>\n                                            </div>\n                                        </td>\n                                    </tr>\n                                    <tr>\n                                        <td class=\"col01\"><span class=\"ak-jsch-item-left\">排序</span></td>\n                                        <td>\n                                            <div class=\"ak-jsch-item-right ak-left\">\n                                                <input name=\"sortby\" class=\"ac-acaseedit-input\" value=\"0\" type=\"number\"\n                                                       placeholder=\"请输入排序号\">\n                                            </div>\n                                        </td>\n                                    </tr>\n                                </table>\n                            </div>\n\n                            <div class=\"modal-footer\">\n                                <!--===footer button ===-->\n                                <div class=\"ak-footer-btn text-left\">\n                                    <input class=\"ak-zdl-createbtn\" type=\"submit\" value=\"提交\">\n                                    <input class=\"ak-zdl-createbtn cancel\" type=\"reset\" value=\"重置\">\n                                </div>\n                                <!--===End footer button ===-->\n                            </div>\n                        </form>\n                    </div>\n                </div>\n            </div>\n        </div>\n    {% else %}\n        <div class=\"ak-zper-midbox ak-jsch-mid\">\n            <div class=\"ak-zper-inbox-title ak-jsch-title clearfix\">\n                <div class=\"ak-left ak-jsch-row3 ak-zper-fix-btnbox\">\n                    <span class=\"ak-zper-remindback\"></span>\n                    <span class=\"inbox-text\">产品管理</span>\n                </div>\n                <div id=\"log_info\" class=\"ac-addtips\"></div>\n            </div>\n            <div class=\"col-md-12\">\n                <div style=\"text-align: center\">\n                    <p>形成天才的决定因素应该是勤奋。</p>\n                    <p>……有几分勤学苦练是成正比例的。</p>\n                    <p>加油吧！少年！！！</p>\n                    <p>你没权限访问，可以找找管理员。</p>\n                </div>\n            </div>\n        </div>\n    {% endif %}\n{% endblock %}\n{% block script %}\n    <script>\n        function btn_skip_click() {\n            var currpage = $('#curpage').val() === '' ? 1 : parseInt($('#curpage').val());\n            // console.log(currpage);\n            if (currpage > {{ page_obj.paginator.num_pages }}) {\n                currpage = {{ page_obj.paginator.num_pages }};\n            }\n            if (currpage < 1) {\n                currpage = 1;\n            }\n            var url = window.location.search.match(/page=(\\d+|\\s*)/) === null ? window.location.origin + (window.location.pathname + '?page=' + currpage + (window.location.search ? window.location.search.replace('?', '&') : '')) : window.location.search.replace(/page=(\\d+|\\s*)/, 'page=' + currpage);\n            self.location = url;\n\n            return false;\n        }\n\n        $('#curpage').keypress(function (event) {\n            console.log(event.which);\n            if (event.which == 13) {\n                btn_skip_click()\n            }\n            event.stopPropagation();\n        })\n    </script>\n{% endblock %}\n"
  },
  {
    "path": "automatic/templates/management/productview.html",
    "content": "{% extends 'frame.html' %}\n{% block title %}Automagic{% endblock %}\n{% block slideshow %}\n    <!--===================================================main start==================================================================-->\n    <div class=\"ak-zper-midbox ak-jsch-mid\">\n         <div class=\"ak-zper-inbox-title ak-jsch-title clearfix\">\n               <div class=\"ak-left ak-jsch-row3 ak-zper-fix-btnbox\">\n                    <span class=\"ak-zper-remindback\"></span>\n                    <span class=\"inbox-text\">{{ product.name }}</span>\n               </div>\n               <div id=\"log_info\" class=\"ac-addtips\"></div>\n          </div>\n\n<!--      ---------------------华丽的分割线 main------------------------ -->\n      \t  <div class=\"col-md-12\">\n              <div class=\"ac-margin-tb15\">\n                  <table>\n                    <tr>\n                        <th>产品描述:</th>\n                        <td>{{ product.descr }}</td>\n                    </tr>\n                    <tr>\n                        <th>产品状态:</th>\n                        <td>\n                            {% if product.isenabled == True %}\n                                <span ng-if=\"f.flag==true\" class=\"label label-success ng-scope\">启 用</span>\n                            {% else %}\n                                <span ng-if=\"f.flag==false\" class=\"label label-danger ng-scope\">停 用</span>\n                            {% endif %}\n                        </td>\n                    </tr>\n                    <tr>\n                        <th>创建者:</th>\n                        <td>{{ product.createat }}</td>\n                    </tr>\n                   <tr>\n                        <th>创建时间:</th>\n                        <td>{{ product.createtime|date:\"Y-m-d H:i:s\" }}</td>\n                    </tr>\n                    <tr>\n                        <th>更新者:</th>\n                        <td>{{ product.updateat }}</td>\n                    </tr>\n\n                    <tr>\n                        <th>更新时间:</th>\n                        <td>{{ product.updatetime|date:\"Y-m-d H:i:s\" }}</td>\n                    </tr>\n                </table>\n                    <div align=\"right\" class=\"form-group\">\n                        <button type=\"button\" class=\"ak-right ac-btn-addcase orange\" data-toggle=\"modal\" data-target=\"#addProjectModal\">创建项目</button>\n                    </div>\n                     <table id=\"mytable\" class=\"table table-striped table-hover table-condensed ac-aelement-table\">\n                            <thead>\n                              <tr>\n                                  <th>NO.</th>\n                                  <th>项目名称</th>\n                                  <th>版本</th>\n                                  <th>项目状态</th>\n                                  <th>项目描述</th>\n                                  <th>排序</th>\n                                  <th>创建者</th>\n                                  <th>创建时间</th>\n                                  <th>操作</th>\n                              </tr>\n                            </thead>\n                            <tbody>\n                              {% for project in projectlist %}\n                                <tr>\n                                    <td>{{ forloop.counter }}</td>\n                                    <td class=\"ac-alist-descp\"><a href=\"{% url 'projectview' project.id %}\"/> {{ project.name }}</td>\n                                    <td>{{ project.version }}</td>\n                                    <td>\n                                        {% if project.isenabled == True %}\n                                            <span ng-if=\"f.flag==true\" class=\"label label-success ng-scope\">启 用</span>\n                                        {% else %}\n                                            <span ng-if=\"f.flag==false\" class=\"label label-danger ng-scope\">停 用</span>\n                                        {% endif %}\n                                    </td>\n                                    <td>{{ project.descr }}</td>\n                                    <td>{{ project.sortby }}</td>\n                                    <td>{{ project.createat }}</td>\n                                    <td>{{ project.createtime|date:\"Y-m-d H:i:s\" }}</td>\n                                    <td>\n                                        <a href=\"\" onclick=\"setprojectValue({{ project.id }})\" class=\"ke-ablock\" data-toggle=\"modal\" data-target=\"#editProjectModal\"><i class=\"glyphicon glyphicon-edit\"></i></a>\n                                        <a href=\"{% url 'projectdel' project.id %}\" class=\"ke-ablock\" role=\"button\" onclick=\"return confirm('您确定要删除吗？')\"><i class=\"glyphicon glyphicon-trash\"></i></a>\n                                    </td>\n                                </tr>\n                              {% endfor %}\n                            </tbody>\n                          </table>\n                        <p><button onclick=\"goback();\" class=\"btn btn-success\" role=\"button\">返回>></button></p>\n                    </div>\n              </div>\n    <!--      ---------------------华丽的分割线 main end------------------------ -->\n\n    </div>\n    <!--===================================================main end==================================================================-->\n    <!-- add modal -->\n    <div class=\"modal fade ak-min-fullwidth-modal ak-znews-addsort-modal\" id=\"addProjectModal\" tabindex=\"-1\" role=\"dialog\" aria-hidden=\"true\">\n        <div class=\"modal-dialog\">\n              <div class=\"modal-content\">\n                    <div class=\"modal-header clearfix\">\n                          <button type=\"button\" class=\"close close-back\" data-dismiss=\"modal\"> <span class=\"sr-only\">Close</span> </button>\n                          <h4 class=\"modal-title text-center\">创建项目</h4>\n                    </div>\n                    <div class=\"modal-body ak-main-body\">\n                        <form method='post' id=\"project_add\">\n                            {% csrf_token %}\n                           <div class=\"ak-jsch-modal-row\">\n                               <table class=\"ac-aset-table\">\n                                   <tr>\n                                           <td class=\"col01\"><span class=\"ak-jsch-item-left\">所属产品</span></td>\n                                           <td>\n                                                 <div class=\"ak-jsch-item-right\">\n                                                     <input name=\"productid\" value = {{ product.id }} hidden=\"true\">\n                                                     <label>{{  product.name }}</label>\n                                                 </div>\n                                           </td>\n                                   </tr>\n                                   <tr>\n                                       <td class=\"col01\">\n                                           <div class=\"ak-jsch-pos\"><div class=\"ak-jsch-point\"></div></div>\n                                           <span class=\"ak-jsch-item-left ak-proname\">项目名称</span>\n                                           </td>\n                                           <td>\n                                               <div class=\"ak-jsch-item-right ak-left\">\n                                               <input name=\"projectname\" class=\"ak-jsch-modal-input\" type=\"text\" placeholder=\"请输入创建项目名称\">\n                                               </div>\n                                           </td>\n                                   </tr>\n                                  <tr>\n                                      <td class=\"col01\"><span class=\"ak-jsch-item-left ac-apro-span\">状态</span></td>\n                                      <td>\n                                          <div class=\"ak-jsch-modal-item\">\n                                              <div class=\"sky-form\">\n                                                  <label class=\"toggle\">\n                                                      <input id=\"id_isenabled\"  type=\"checkbox\" checked=\"checked\" name=\"isenabled\">\n                                                      <i class=\"rounded-4x ak-aoffon-btn\"></i>\n                                                  </label>\n                                              </div>\n                                          </div>\n                                      </td>\n                                  </tr>\n                                   <tr>\n\n                                           <td class=\"col01\">\n                                               <div class=\"ak-jsch-modal-item ak-jsch-pt\">\n                                                   <span class=\"ak-jsch-item-left\">版本</span>\n                                               </div>\n                                           </td>\n                                           <td>\n                                               <div class=\"ak-jsch-item-right ak-left\">\n                                                   <input name=\"version\" class=\"ac-acaseedit-input\" type=\"text\" placeholder=\"请输入项目版本号\">\n                                               </div>\n                                           </td>\n\n                                   </tr>\n                                   <tr>\n\n                                           <td class=\"col01\"><span class=\"ak-jsch-item-left\">描述</span></td>\n\n                                           <td>\n                                               <div class=\"ak-jsch-item-right ak-left\">\n                                                   <textarea id=\"id_descr\" name=\"descr\" class=\"ac-acaseedit-textarea\" rows=\"3\"></textarea>\n                                               </div>\n                                           </td>\n\n                                   </tr>\n                                   <tr>\n                                           <td class=\"col01\"><span class=\"ak-jsch-item-left\">排序</span></td>\n                                           <td>\n                                               <div class=\"ak-jsch-item-right ak-left\">\n                                                   <input name=\"sortby\" class=\"ac-acaseedit-input\" type=\"number\" value=\"0\" placeholder=\"请输入排序号\">\n                                               </div>\n                                           </td>\n                                   </tr>\n                               </table>\n                           </div>\n\n                            <div class=\"modal-footer\">\n                                 <!--===footer button ===-->\n                                 <div class=\"ak-footer-btn text-left\">\n                                     <input class=\"ak-zdl-createbtn\" type=\"submit\" value=\"提交\">\n                                     <input class=\"ak-zdl-createbtn cancel\" type=\"reset\" value=\"重置\">\n                                 </div>\n                                 <!--===End footer button ===-->\n                            </div>\n                        </form>\n          </div>\n      </div>\n</div>\n</div>\n    <!-- edit modal -->\n    <div class=\"modal fade ak-min-fullwidth-modal ak-znews-addsort-modal\" id=\"editProjectModal\" tabindex=\"-1\" role=\"dialog\" aria-hidden=\"true\">\n        <div class=\"modal-dialog\">\n              <div class=\"modal-content\">\n                    <div class=\"modal-header clearfix\">\n                          <button type=\"button\" class=\"close close-back\" data-dismiss=\"modal\"> <span class=\"sr-only\">Close</span> </button>\n                          <h4 class=\"modal-title text-center\">编辑项目</h4>\n                    </div>\n                    <div class=\"modal-body ak-main-body\">\n                        <form method='post' id=\"project_edit\">\n                            {% csrf_token %}\n                           <div class=\"ak-jsch-modal-row\">\n                               <table class=\"ac-aset-table\">\n                                   <tr>\n                                       <td class=\"col01\">\n                                           <span class=\"ak-jsch-item-left ak-proname\" >所属产品</span>\n                                       </td>\n                                       <td>\n\n                                                 <div class=\"ak-jsch-item-right ak-left\">\n                                                     <input name=\"productid\" value = {{ product.id }} hidden=\"true\">\n                                                     <label>{{  product.descr }}</label>\n                                                 </div>\n                                       </td>\n                                       </tr>\n                                   <tr>\n                                       <td class=\"col01\">\n                                                   <div class=\"ak-jsch-pos\"><div class=\"ak-jsch-point\"></div></div>\n                                                   <span class=\"ak-jsch-item-left ak-proname\">项目名称</span>\n                                           </td>\n                                           <td>\n                                                   <input name=\"projectid\" hidden=\"true\">\n                                                   <div class=\"ak-jsch-item-right ak-left\">\n                                                       <input name=\"projectname\" class=\"ak-jsch-modal-input\" type=\"text\" placeholder=\"请输入创建项目名称\">\n                                                   </div>\n                                           </td>\n\n                                   </tr>\n                                   <tr>\n                                       <td class=\"col01\"><span class=\"ak-jsch-item-left ac-apro-span \">状态</span></td>\n                                           <td><div class=\"sky-form ak-left ac-ml10\">\n                                                  <label class=\"toggle\">\n                                                      <input id=\"id_isenabled\"  type=\"checkbox\" name=\"isenabled\">\n                                                      <i class=\"rounded-4x ak-aoffon-btn\"></i>\n                                                      </label>\n                                                  </div>\n                                           </td>\n                                       </tr>\n                                   <tr>\n                                           <td class=\"col01\">\n                                               <div class=\"ak-jsch-modal-item ak-jsch-pt\">\n                                               <span class=\"ak-jsch-item-left\">版本</span>\n                                                   </div>\n                                           </td>\n                                           <td>\n                                               <div class=\"ak-jsch-item-right ak-left\">\n                                                   <input name=\"version\" class=\"ac-acaseedit-input\" type=\"text\" placeholder=\"请输入项目版本号\">\n                                               </div>\n                                           </td>\n                                       </tr>\n                                   <tr>\n                                           <td class=\"col01\">\n                                               <span class=\"ak-jsch-item-left\">描述</span>\n                                           </td>\n                                           <td>\n                                               <div class=\"ak-jsch-item-right ak-left\">\n                                                   <textarea id=\"id_descr\" name=\"descr\" class=\"ac-acaseedit-textarea\" rows=\"3\"></textarea>\n                                               </div>\n                                           </td>\n                                   </tr>\n                                   <tr>\n                                           <td class=\"col01\">\n                                               <span class=\"ak-jsch-item-left\">排序</span>\n                                           </td>\n                                           <td>\n                                               <div class=\"ak-jsch-item-right ak-left\">\n                                                   <input name=\"sortby\" class=\"ac-acaseedit-input\" type=\"number\" value=\"0\" placeholder=\"请输入排序号\">\n                                               </div>\n                                           </td>\n                                   </tr>\n                                   </table>\n                           </div>\n\n                            <div class=\"modal-footer\">\n                                 <!--===footer button ===-->\n                                 <div class=\"ak-footer-btn text-left\">\n                                     <input class=\"ak-zdl-createbtn\" type=\"submit\" value=\"提交\">\n                                     <input class=\"ak-zdl-createbtn cancel\" type=\"reset\" value=\"重置\">\n                                 </div>\n                                 <!--===End footer button ===-->\n                            </div>\n                        </form>\n          </div>\n      </div>\n</div>\n</div>\n\n{% endblock %}"
  },
  {
    "path": "automatic/templates/management/projectadd.html",
    "content": "{% extends 'nav.html' %}\n{% block title %}Project Add{% endblock %}\n\n{% block slideshow %}\n    <br/><br/><br/>\n<form method='post'>\n    {% csrf_token %}\n    <table>\n        {{ projectform.as_table }}\n    </table>\n    <input class=\"btn btn-primary\" type=\"submit\" value=\"submit\">\n    <input class=\"btn btn-primary\" type=\"reset\" value=\"reset\">\n</form>\n</body>\n{% endblock %}"
  },
  {
    "path": "automatic/templates/management/projectlist.html",
    "content": "{% extends 'nav.html' %}\n{% block title %}Project List{% endblock %}\n{% block slideshow %}\n    <br/><br/><br/>\n    <form class=\"form-inline\" role=\"form\" action=\"\" method=\"GET\">\n        <div class=\"panel panel-default\">\n    <div class=\"panel-heading\">\n          <div class=\"form-group\">\n            <select id=\"selproductid\" name=\"productid\" class=\"form-control\">\n              <option value=\"\">-所属产品-</option>\n              {% for i in productlist %}\n                 <option value=\"{{ i.pk }}\" {% if request.GET.productname  == i.pk %}selected{% endif %}>{{ i.name }}</option>\n              {% endfor %}\n            </select>\n          </div>\n          <div class=\"form-group\">\n            <select id=\"id_projectid\" name=\"projectid\" class=\"form-control\">\n              <option value=\"\">-所属项目-</option>\n            </select>\n          </div>\n          <div class=\"form-group\">\n            <div class=\"input-group\">\n                <input type=\"input\" class=\"form-control\" name=\"keyword\" value=\"{{ request.GET.keyword }}\"  placeholder=\"Search for Keyword\">\n                  <span class=\"input-group-btn\">\n                      <button class=\"btn btn-primary\" type=\"submit\">Go!</button>\n                  </span>\n              </div><!-- /input-group -->\n          </div>\n{#          <button type=\"submit\" class=\"btn btn-primary\">Search</button>#}\n      </div>\n        <table class=\"table table-striped table-bordered table-hover table-condensed\">\n        <thead>\n          <tr>\n              <th>NO.</th>\n              <th>产品名称</th>\n              <th>项目名称</th>\n              <th>版本</th>\n              <th>状态</th>\n              <th>项目描述</th>\n              <th>排序</th>\n              <th>创建者</th>\n              <th>创建时间</th>\n              <th>更新者</th>\n              <th>更新时间</th>\n          <th></th>\n          </tr>\n        </thead>\n        <tbody>\n          {% for project in projectlist %}\n            <tr>\n                <td>{{ forloop.counter }}</td>\n                <td>{{ project.productid }}</td>\n                <td class=\"ac-alist-descp\"><a href=\"{% url 'projectview' project.id %}\"/> {{ project.name }}</td>\n                <td>{{ project.version }}</td>\n                <td>\n                    {% if project.isenabled == True %}\n                        <span ng-if=\"f.flag==true\" class=\"label label-success ng-scope\">启 用</span>\n                    {% else %}\n                        <span ng-if=\"f.flag==false\" class=\"label label-danger ng-scope\">停 用</span>\n                    {% endif %}\n                </td>\n                <td>{{ project.descr }}</td>\n                <td>{{ project.sortby }}</td>\n                <td>{{ project.createat }}</td>\n                <td>{{ project.createtime|date:'Y-m-d H:i:s' }}</td>\n                <td>{{ project.createat }}</td>\n                <td>{{ project.updatetime|date:'Y-m-d H:i:s' }}</td>\n                <th>\n                    <a href=\"{% url 'projectupdate' project.id %}\" class=\"btn btn-sm btn-primary\" role=\"button\">编辑</a>\n                    <a href=\"{% url 'projectdel' project.id %}\" class=\"btn btn-sm btn-danger\" role=\"button\" onclick=\"return confirm('Are you Sure Deleted.')\">删除</a>\n                </th>\n            </tr>\n          {% endfor %}\n        </tbody>\n      </table>\n    </div>\n        {% if is_paginated %}\n        <div class=\"panel-default\">\n        <ul class=\"pagination\">\n          <li><a href=\"{{ request.path }}?page=1\">«</a></li>\n          {% if page_obj.has_previous %}\n            <li><a href=\"{{ request.path }}?&page={{ page_obj.previous_page_number }}\">上一页</a></li>\n          {% else %}\n            <li class=\"previous disabled\"><a>上一页</a></li>\n          {% endif %}\n          {% for i in page_obj.paginator.page_range %}\n            <li {% if page_obj.number == i %}class=\"active\"{% endif %}><a href=\"{{ request.path }}?page={{ i }}\">{{ i }}</a></li>\n          {% endfor %}\n          {% if page_obj.has_next %}\n            <li><a href=\"{{ request.path }}?page={{ page_obj.next_page_number }}\">下一页</a></li>\n          {% else %}\n            <li class=\"previous disabled\"><a>下一页</a></li>\n          {% endif %}\n          <li><a href=\"{{ request.path }}?page={{ page_obj.paginator.num_pages }}\">»</a></li>\n            <li><a>当前第{{ page_obj.number }}页/共{{ projectsum }}条</a></li>\n        </ul>\n    </div>\n        {% endif %}\n  </form>\n{% endblock %}\n"
  },
  {
    "path": "automatic/templates/management/projectview.html",
    "content": "{% extends 'frame.html' %}\n{% block title %}Automagic{% endblock %}\n{% block slideshow %}\n    <!--===================================================main start==================================================================-->\n    <div class=\"ak-zper-midbox ak-jsch-mid\">\n         <div class=\"ak-zper-inbox-title ak-jsch-title clearfix\">\n               <div class=\"ak-left ak-jsch-row3 ak-zper-fix-btnbox\">\n                    <span class=\"ak-zper-remindback\"></span>\n                    <span class=\"inbox-text\">{{ project.name }}</span>\n               </div>\n               <div id=\"log_info\" class=\"ac-addtips\"></div>\n{#               <div class=\"ak-jsch-rightbox\">#}\n{#                    <div class=\"btn-group ak-jsch-dropdown\">#}\n{#                         <button type=\"button\" class=\"btn btn-default dropdown-toggle ak-sch-icon\" data-toggle=\"dropdown\"></button>#}\n{#                         <ul class=\"dropdown-menu\" role=\"menu\">#}\n{#                             <li><a href=\"index1.html\"><span class=\"ak-sch-icon schedule-icon\"></span>日程</a></li>#}\n{#                             <li><a href=\"schedule-day.html\"><span class=\"ak-sch-icon day-icon\"></span>天</a></li>#}\n{#                             <li><a href=\"schedule.html\"><span class=\"ak-sch-icon week-icon\"></span>周</a></li>#}\n{#                         </ul>#}\n{#                   </div>#}\n{#                   <a class=\"ak-jsch-jia\" data-toggle=\"modal\" data-target=\"#addEvent-Modal\"></a>#}\n{#               </div>#}\n          </div>\n\n<!--      ---------------------华丽的分割线 main------------------------ -->\n <div class=\"col-md-12\">\n <div class=\"ac-margin-tb15\">\n <table>\n    <tr>\n        <th>项目描述:</th>\n        <td>{{ project.descr }}</td>\n    </tr>\n    <tr>\n        <th>状态:</th>\n        <td>\n            {% if project.isenabled == True %}\n                <span ng-if=\"f.flag==true\" class=\"label label-success ng-scope\">启 用</span>\n            {% else %}\n                <span ng-if=\"f.flag==false\" class=\"label label-danger ng-scope\">停 用</span>\n            {% endif %}\n        </td>\n    </tr>\n    <tr>\n        <th>创建者:</th>\n        <td>{{ project.createat }}:</td>\n    </tr>\n    <tr>\n        <th>创建时间</th>\n        <td>{{ project.createtime|date:'Y-m-d H:i:s' }}</td>\n    </tr>\n    <tr>\n        <th>更新者:</th>\n        <td>{{ project.updateat }}:</td>\n    </tr>\n    <tr>\n        <th>更新时间</th>\n        <td>{{ project.updatetime|date:'Y-m-d H:i:s' }}</td>\n    </tr>\n</table>\n<div align=\"right\" class=\"form-group\">\n    <button type=\"button\" class=\"ak-right ac-btn-addcase orange\" data-toggle=\"modal\" data-target=\"#addModuleModal\">创建模块</button>\n</div>\n <table id=\"mytable\" class=\"table table-striped table-hover table-condensed ac-aelement-table\">\n        <thead>\n          <tr>\n              <th>NO.</th>\n              <th>模块名称</th>\n              <th>状态</th>\n              <th>排序</th>\n              <th>创建者</th>\n              <th>创建时间</th>\n              <th>更新者</th>\n              <th>更新时间</th>\n              <th>操作</th>\n          </tr>\n        </thead>\n        <tbody>\n          {% for module in modulelist %}\n            <tr>\n                <td>{{ forloop.counter }}</td>\n                <td class=\"ac-alist-descp\"> {{ module.name }}</td>\n                <td>\n                    {% if module.isenabled == True %}\n                        <span ng-if=\"f.flag==true\" class=\"label label-success ng-scope\">启 用</span>\n                    {% else %}\n                        <span ng-if=\"f.flag==false\" class=\"label label-danger ng-scope\">停 用</span>\n                    {% endif %}\n                </td>\n                <td>{{ module.sortby }}</td>\n                <td>{{ module.createat }}</td>\n                <td>{{ module.createtime|date:'Y-m-d H:i:s' }}</td>\n                <td>{{ module.createat }}</td>\n                <td>{{ module.updatetime|date:'Y-m-d H:i:s' }}</td>\n                <td>\n                    <a href=\"\" onclick=\"setmoduleValue({{ module.id }})\" class=\"ke-ablock\" data-toggle=\"modal\" data-target=\"#editModuleModal\"><i class=\"glyphicon glyphicon-edit\"></i></a>\n                    <a href=\"{% url 'moduledel' module.id %}\" class=\"ke-ablock\" role=\"button\" onclick=\"return confirm('您确定要删除吗？')\"><i class=\"glyphicon glyphicon-trash\"></i></a>\n                </td>\n            </tr>\n          {% endfor %}\n        </tbody>\n      </table>\n<p><button onclick=\"goback();\" class=\"btn btn-success\" role=\"button\">返回>></button></p>\n              </div>\n          </div>\n    <!--      ---------------------华丽的分割线 main end------------------------ -->\n\n    </div>\n    <!--===================================================main end==================================================================-->\n\n    <!--  add  modal -->\n    <div class=\"modal fade ak-min-fullwidth-modal ak-znews-addsort-modal\" id=\"addModuleModal\" tabindex=\"-1\" role=\"dialog\" aria-hidden=\"true\">\n        <div class=\"modal-dialog\">\n              <div class=\"modal-content\">\n                    <div class=\"modal-header clearfix\">\n                          <button type=\"button\" class=\"close close-back\" data-dismiss=\"modal\"> <span class=\"sr-only\">Close</span> </button>\n                          <h4 class=\"modal-title text-center\">创建模块</h4>\n                    </div>\n                    <div class=\"modal-body ak-main-body\">\n                        <form method='post' id=\"module_add\">\n                            {% csrf_token %}\n                           <div class=\"ak-jsch-modal-row\">\n                               <table class=\"ac-aset-table\">\n                                   <tr>\n                                       <div class=\"ak-jsch-modal-text clearfix\">\n                                           <td class=\"col01\"><span class=\"ak-jsch-item-left\">所属项目</span></td>\n                                           <td>\n                                               <div class=\"ak-jsch-item-right ak-left\">\n                                                   <input name=\"projectid\" value = {{ project.id }} hidden=\"true\">\n                                                   <label>{{  project.name }}</label>\n                                               </div>\n                                           </td>\n                                       </div>\n                                   </tr>\n                                   <tr>\n                                       <td class=\"col01\">\n                                           <div class=\"ak-jsch-pos\"><div class=\"ak-jsch-point\"></div></div>\n                                           <span class=\"ak-jsch-item-left ak-proname\">模块名称</span>\n                                       </td>\n                                       <td>\n                                           <div class=\"ak-jsch-modal-item clearfix\">\n                                               <div class=\"ak-jsch-item-right ak-left\">\n                                                   <input name=\"modulename\" class=\"ak-jsch-modal-input\" type=\"text\" placeholder=\"请输入创建模块名称\">\n                                               </div>\n                                           </div>\n                                       </td>\n                                   </tr>\n                                   <tr>\n                                       <div class=\"ak-jsch-modal-item clearfix\">\n                                           <td class=\"col01\"><span class=\"ak-jsch-item-left ac-apro-span\">状态</span></td>\n                                           <td>\n                                               <div class=\"sky-form ak-left ac-ml10\">\n                                                   <label class=\"toggle\">\n                                                       <input id=\"id_isenabled\"  type=\"checkbox\" checked=\"checked\" name=\"isenabled\">\n                                                       <i class=\"rounded-4x ak-aoffon-btn\"></i>\n                                                   </label>\n                                              </div>\n                                           </td>\n                                       </div>\n                                   </tr>\n                                   <tr><div>\n                                           <td class=\"col01\">\n                                               <div class=\"ak-jsch-modal-item ak-jsch-pt clearfix\">\n                                                   <span class=\"ak-jsch-item-left\">排序</span>\n                                               </div>\n                                           </td>\n                                           <td>\n                                               <div class=\"ak-jsch-item-right ak-left\">\n                                                   <input name=\"sortby\" class=\"ac-acaseedit-input\" type=\"number\" value=\"0\" placeholder=\"请输入排序号\">\n                                               </div>\n                                           </td>\n                                       </div>\n                                   </tr>\n                               </table>\n\n                            <div class=\"modal-footer\">\n                                 <!--===footer button ===-->\n                                 <div class=\"ak-footer-btn text-left\">\n                                     <input class=\"ak-zdl-createbtn\" type=\"submit\" value=\"提交\">\n                                     <input class=\"ak-zdl-createbtn cancel\" type=\"reset\" value=\"重置\">\n                                 </div>\n                                 <!--===End footer button ===-->\n                            </div>\n                           </div>\n                        </form>\n          </div>\n      </div>\n</div>\n</div>\n    <!--  edit  modal -->\n    <div class=\"modal fade ak-min-fullwidth-modal ak-znews-addsort-modal\" id=\"editModuleModal\" tabindex=\"-1\" role=\"dialog\" aria-hidden=\"true\">\n        <div class=\"modal-dialog\">\n              <div class=\"modal-content\">\n                    <div class=\"modal-header clearfix\">\n                          <button type=\"button\" class=\"close close-back\" data-dismiss=\"modal\"> <span class=\"sr-only\">Close</span> </button>\n                          <h4 class=\"modal-title text-center\">编辑模块</h4>\n                    </div>\n                    <div class=\"modal-body ak-main-body\">\n                        <form method='post' id=\"module_edit\">\n                            {% csrf_token %}\n                           <div class=\"ak-jsch-modal-row\">\n                               <table class=\"ac-aset-table\">\n                                   <tr>\n                                       <td class=\"col01\"><span class=\"ak-jsch-item-left\">所属项目</span></td>\n                                           <td>\n                                                 <div class=\"ak-jsch-item-right ak-left\">\n                                                     <input name=\"projectid\" value = {{ project.id }} hidden=\"true\">\n                                                     <label>{{  project.name }}</label>\n                                                 </div>\n                                           </td>\n                                   </tr>\n                                   <tr>\n                                           <td class=\"col01\">\n                                               <div class=\"ak-jsch-pos\"><div class=\"ak-jsch-point\"></div></div>\n                                               <span class=\"ak-jsch-item-left ak-proname\">模块名称</span>\n                                               <input name=\"moduleid\" hidden=\"true\">\n                                           </td>\n                                           <td>\n                                               <div class=\"ak-jsch-item-right ak-left\">\n                                                   <input name=\"modulename\" class=\"ak-jsch-modal-input\" type=\"text\" placeholder=\"请输入创建模块名称\">\n                                               </div>\n                                           </td>\n                                   </tr>\n                                   <tr>\n                                           <td class=\"col01\"><span class=\"ak-jsch-item-left ac-apro-span\">状态</span></td>\n                                           <td>\n                                              <div class=\"sky-form ak-left ac-ml10\">\n                                              <label class=\"toggle\">\n                                                  <input id=\"id_isenabled\"  type=\"checkbox\" checked=\"checked\" name=\"isenabled\">\n                                                  <i class=\"rounded-4x ak-aoffon-btn\"></i>\n                                                  </label>\n                                              </div>\n                                           </td>\n                                   </tr>\n                                   <tr>\n                                           <td class=\"col01\">\n                                               <div class=\"ak-jsch-modal-item ak-jsch-pt clearfix\">\n                                               <span class=\"ak-jsch-item-left\">排序</span>\n                                               </div>\n                                           </td>\n                                           <td>\n                                               <div class=\"ak-jsch-item-right ak-left\">\n                                                   <input name=\"sortby\" class=\"ac-acaseedit-input\" type=\"number\" value=\"0\" placeholder=\"请输入排序号\">\n                                               </div>\n                                           </td>\n                                   </tr>\n                               </table>\n                           </div>\n\n                            <div class=\"modal-footer\">\n                                 <!--===footer button ===-->\n                                 <div class=\"ak-footer-btn text-left\">\n                                     <input class=\"ak-zdl-createbtn\" type=\"submit\" value=\"提交\">\n                                     <input class=\"ak-zdl-createbtn cancel\" type=\"reset\" value=\"重置\">\n                                 </div>\n                                 <!--===End footer button ===-->\n                            </div>\n                        </form>\n          </div>\n      </div>\n</div>\n</div>\n\n{% endblock %}"
  },
  {
    "path": "automatic/templates/management/syslog.html",
    "content": "{% extends 'frame.html' %}\n{% block title %}Automagic{% endblock %}\n{% block slideshow %}\n    {% load static %}\n    <div class=\"ak-zper-midbox ak-jsch-mid\">\n        <div class=\"ak-zper-inbox-title ak-jsch-title clearfix\">\n            <div class=\"ak-left ak-jsch-row3 ak-zper-fix-btnbox\">\n{#                <span class=\"ak-zper-remindback\">000000000000000</span>#}\n                <span class=\"inbox-text\">Syslog</span>\n            </div>\n        </div>\n\n        <!--      ---------------------华丽的分割线 main------------------------ -->\n        <div class=\"col-md-12\">\n            <div class=\"main-mid\">\n                <div>\n                    <h4>流量回放模式(Linux)<a href=\"{% static 'media/sendlog.tar' %}\"><img class=\"btn-img\" src=\"{% static 'images/download.png' %}\"></a></h4>\n                    通过回放Syslog流进行发送syslog(UDP支持源地址伪装)|sendingdata.py\n                    <pre class=\"pre-high\">usage:\nsendingdata.py [-h] [-sip SRCIP]\n[-dip DSTIP] [-p PROTOCOL]\n[-dport DPORT] [-c COUNT]\n[-f FILE] [-t THREAD]\n[-s SPEED]\noptional arguments:\n-h, --help    show this help message\n-sip SRCIP    src ip addr\n-dip DSTIP    dst ip addr\n-p PROTOCOL   protocol udp or tcp\n-dport DPORT  send port\n-c COUNT      packets count\n-f FILE       packets file\n-t THREAD     thread number\n-s SPEED      send speed (s)\n                </pre>\n                </div>\n                <div>\n                    <h4>UDP Socket</h4>\n                    通过UDP Socket发送syslog事件|udpsendingsyslog.py\n                    <pre class=\"pre-high\">Usge:\npython sendlog -f [filepath] -c [cycles]\n-t [sleep time]\n-d [Receiver Host] -p [Receiver port]\nDetails:\n-C\t[开启无限循环]\n-f\t[指派日志文件路径]\n-c\t[指定循环次数]\n-t\t[指定日志发送间隔时间 单位:秒]\n-d\t[指定日志接收IP地址]\n-p\t[指定日志接收端口（整数）]\n-v\t[查看工具版本]\n-h\t[查看帮助]\n                </pre>\n                </div>\n                <div>\n                    <h4>TCP Socket</h4>\n                    通过TCP Socket发送syslog事件|tcpsendingsyslog.py\n                    <pre class=\"pre-high\">usage:\ntcpsendingsyslog.py [-h] [-host HOST]\n[-port DPORT] [-c COUNT]\n\noptional arguments:\n  -h, --help   show this help message and exit\n  -host HOST   receive host ip\n  -port DPORT  send port\n  -c COUNT     count number</pre>\n                </div>\n            </div>\n        </div>\n        <!--      ---------------------华丽的分割线 main end------------------------ -->\n\n    </div>\n{% endblock %}"
  },
  {
    "path": "automatic/templates/nav.html",
    "content": "{% load static %}\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <title>{% block title %}Base{% endblock %}</title>\n    <link rel=\"icon\" type=\"image/x-icon\" href=\"{% static 'css/favicon.ico' %}\">\n    <link rel=\"shortcut icon\" href=\"{% static 'css/favicon.ico' %}\" type=\"image/x-icon\">\n\n    <!-- 新 Bootstrap 核心 CSS 文件 -->\n<link rel=\"stylesheet\" href=\"{% static 'css/bootstrap.css' %}\">\n\n<!-- 可选的Bootstrap主题文件（一般不用引入） -->\n<link rel=\"stylesheet\" href=\"{% static 'css/bootstrap-theme.min.css' %}\">\n<link rel=\"stylesheet\" href=\"{% static 'css/bootstrap-switch.css' %}\">\n\n\n<link rel=\"stylesheet\" href=\"{% static 'css/automagic.css' %}\">\n\n<!-- jQuery文件。务必在bootstrap.min.js 之前引入 -->\n<script src=\"{% static 'js/jquery.min.js' %}\"></script>\n\n<!-- 最新的 Bootstrap 核心 JavaScript 文件 -->\n<script src=\"{% static 'js/bootstrap.min.js' %}\"></script>\n<script src=\"{% static 'js/bootstrap-switch.js' %}\"></script>\n<script src=\"{% static 'js/automagic.js' %}\"></script>\n<script>\n    function addtr() {\n    //行添加\n{#        debugger;#}\n        var len = parseInt($(\"#linecounter\").val())+1;\n\n         $(\"#tab tbody\").append('<tr id=row'+len+' name=\"rowstep\">'\n                                   +'<td>Step'+len+'</td>'\n                                   +'<td><input name=\"descr\" class=\"form-control\" placeholder=\"请输入步骤描述\" type=\"input\"></td>'\n                                   +'<td><select id=\"id_keyword\" name=\"keyword\" class=\"form-control mb15\">{% for i in  keywordlist %}<option value=\"{{ i.pk }}\">{{ i.kwdescr }}</option>{% endfor %}</select></td>'\n                                   +'<td><input name=\"elementid\" class=\"form-control\" placeholder=\"请选择元素\" type=\"input\"></td>'\n                                   +'<td><input name=\"inputtext\" class=\"form-control\" placeholder=\"\" type=\"input\"></td>'\n                                   +'<td><a class=\"btn btn-small\" onclick=\"deltr('+len+')\">删除</a></td>'\n                                   +'</tr>');\n\n\n        $(\"#linecounter\").val(len);\n    }\n//行删除\n   function deltr(index) {\n     $(\"tr[id='row\"+index+\"']\").remove();//删除当前行\n    }\n\n   $(document).ready(function(){\n       $.ajaxSetup({\n                 data: {csrfmiddlewaretoken: '{{ csrf_token }}' },\n            });\n       $('#ele_add').submit(function(){\n                var descr = $(\"#id_descr\").val();      //获得form中用户输入的descr 注意这里的descr 与你html中的id一致\n                var projectid = $(\"#id_projectid\").val(); //同上\n                var moduleid = $(\"#id_moduleid\").val(); //同上\n                var locmode = $(\"#id_locmode\").val();\n                var location = $(\"#id_location\").val();\n           $.ajax({\n                    type:\"POST\",\n                    data: {descr:descr, projectid:projectid, moduleid:moduleid, locmode:locmode, location:location},\n                    url: \"{% url 'elementadd' %}\", //后台处理函数的url 这里用的是static url 需要与urls.py中的name一致\n                    cache: false,\n                    dataType: \"html\",\n\n                    success: function(result, statues, xml){\n                        debugger;\n                        $('#log_info').addClass('bg-success');\n                        $('#log_info').css('display','block');\n                        $('#log_info').html(result);\n                        setTimeout(\"location.reload()\",1500);                                        //成功时弹出view传回来的结果\n                    },\n                    error: function(){\n                        debugger;\n                        $('#log_info').addClass('bg-danger');\n                        $('#log_info').css('display','block');\n                        $('#log_info').html('添加失败。');\n                        setTimeout(\"location.reload()\",1500);\n                    }\n                });\n                return false;\n            });\n\n       $('#add_keyword').submit(function () {\n           var keyword = $('#keyword').val();\n           var kwdescr = $('#kwdescr').val();\n           $.ajax({\n               type:\"POST\",\n               data:{keyword:keyword,kwdescr:kwdescr},\n               url:\"{% url 'keywordadd' %}\",\n               cache: false,\n               dataType:\"html\",\n               success:function (result, statues,xml) {\n                   // debugger;\n                   $('#log_info').addClass('bg-success');\n                   $('#log_info').css('display','block');\n                   $('#log_info').html(result);\n                   setTimeout(\"location.reload()\",1500);\n                   // alert(result);\n               },\n               error:function () {\n                   // debugger;\n                   $('#log_info').addClass('bg-danger');\n                   $('#log_info').css('display','block');\n                   $('#log_info').html('添加失败，关键字可能已经存在。');\n                   setTimeout(\"location.reload()\",1500);\n               }\n           });\n           return false;\n       });\n\n       $('#case_add').submit(function () {\n{#           var casedesc = $('#casedesc').val();#}\n{#           var isenabled = $('#id_isenabled').prop('checked');#}\n{#           var projectid = $('select[name=\"projectid\"]').val();#}\n{#           var moduleid = $('select[name=\"moduleid\"]').val();#}\n{#           var dependent = $('input[name=\"dependent\"]').val();#}\n{#           var descr = $('input[name=\"descr\"]').val();#}\n{#           var keyword = $('select[name=\"keyword\"]').val();#}\n{#           var elementid = $('input[name=\"elementid\"]').val();#}\n{#           var inputtext = $('input[name=\"inputtext\"]').val();#}\n\n           $.ajax({\n               type:\"POST\",\n               data: $(this).serialize(),\n{#               data:{casedesc:casedesc, isenabled:isenabled, projectid:projectid, moduleid:moduleid,dependent:dependent,descr:descr,keyword:keyword,elementid:elementid,inputtext:inputtext},#}\n               url:\"{% url 'caseadd' %}\",\n               cache: false,\n               dataType:\"html\",\n               success:function (result, statues,xml) {\n{#                   debugger;#}\n                   $('#log_info').addClass('bg-success');\n                   $('#log_info').css('display','block');\n                   $('#log_info').html(result);\n                   setTimeout(\"location.reload()\",1500);\n                   // alert(result);\n               },\n               error:function () {\n{#                   debugger;#}\n                   $('#log_info').addClass('bg-danger');\n                   $('#log_info').css('display','block');\n                   $('#log_info').html('保存失败');\n                   setTimeout(\"$('#log_info').css('display','none');\",1500);\n               }\n           });\n           return false;\n       });\n\n       $('#case_edit').submit(function () {\n           var casedesc = $('#casedesc').val();\n           var isenabled = $('#id_isenabled').prop('checked');\n           var projectid = $('select[name=\"projectid\"]').val();\n           var moduleid = $('select[name=\"moduleid\"]').val();\n           var dependent = $('input[name=\"dependent\"]').val();\n           var descr = $('input[name=\"descr\"]').val();\n           var keyword = $('select[name=\"keyword\"]').val();\n           var elementid = $('input[name=\"elementid\"]').val();\n           var inputtext = $('input[name=\"inputtext\"]').val();\n\n           $.ajax({\n               type:\"POST\",\n               data: $(this).serialize(),\n{#               data:{casedesc:casedesc, isenabled:isenabled, projectid:projectid, moduleid:moduleid,dependent:dependent,descr:descr,keyword:keyword,elementid:elementid,inputtext:inputtext},#}\n               url:\"/case/update/{{ tcase.pk }}/\",\n               cache: false,\n               dataType:\"html\",\n               success:function (result, statues,xml) {\n{#                   debugger;#}\n                   $('#log_info').addClass('bg-success');\n                   $('#log_info').css('display','block');\n                   $('#log_info').html(result);\n                   setTimeout(\"$('#log_info').css('display','none');\",1500);\n                   // alert(result);\n               },\n               error:function () {\n{#                   debugger;#}\n                   $('#log_info').addClass('bg-danger');\n                   $('#log_info').css('display','block');\n                   $('#log_info').html('保存失败');\n                   setTimeout(\"$('#log_info').css('display','none');\",1500);\n               }\n           });\n           return false;\n       });\n\n        //产品和项目二级菜单关联\n       $(\"#selproductid\").bind(\"change\",function(){\n            var s1SelectedVal = $('#selproductid').val();\n\n            if($(this).val()==0){\n                $('#id_projectid').empty();\n                return;\n            }\n            else {\n                $.ajax({\n                    type:\"GET\",\n                    data:{'productid':s1SelectedVal},\n                    url: \"{% url 'getproject' %}\", //后台处理函数的url 这里用的是static url 需要与urls.py中的name一致\n                    cache: false,\n                    dataType:'json',\n\n                 success: function(result,TextStatus) {\n                     $('#id_projectid').empty();\n                     if (result.length > 0) {\n                         for (i = 0; i < result.length; i++) {\n{#                             alert(result[i].value);#}\n                             $('#id_projectid').append('<option value=\"' + result[i].key + '\">' + result[i].value + '</option>');\n                         }\n                     }\n                 }\n                });\n            }\n        });\n\n       $(\"#selprojectid\").bind(\"change\",function(){\n            var s1SelectedVal = $('#selprojectid').val();\n\n            if($(this).val()==0){\n                $('#selmoduleid').empty();\n                return;\n            }\n            else {\n                $.ajax({\n                    type:\"GET\",\n                    data:{'projectid':s1SelectedVal},\n                    url: \"{% url 'getmodule' %}\", //后台处理函数的url 这里用的是static url 需要与urls.py中的name一致\n                    cache: false,\n                    dataType:'json',\n\n                 success: function(result,TextStatus) {\n                     $('#selmoduleid').empty();\n                     if (result.length > 0) {\n                         for (i = 0; i < result.length; i++) {\n{#                              debugger;#}\n{#                             alert(result[i].value);#}\n                             $('#selmoduleid').append('<option value=\"' + result[i].key + '\">' + result[i].value + '</option>');\n                         }\n                     }\n                 }\n                });\n            }\n        });\n\n        });\n</script>\n\n    <link rel=\"stylesheet\" href=\"{% static 'css/login-vendor.css' %}\">\n\n{#    <link rel=\"stylesheet\" href=\"{% static 'css/login-app-bar.css' %}\">#}\n\n    <link rel=\"stylesheet\" href=\"{% static 'css/login-app.css' %}\">\n</head>\n<body>\n<div class=\"ui fixed transparent main menu ng-scope\" ng-dblclick=\"scrollToTop()\" id=\"top-menu\">\n<a href=\"{% url 'index' %}\" class=\"left logo item ng-scope\" ng-if=\"USER === false\" cg-jump-out-angular-href=\"/\" target=\"_self\" style=\"padding: 0px 0px;\">\n    <img src=\"{% static 'images/logo.png' %}\" height=\"50\">\n</a>\n<div style=\"left: 0px;\" class=\"left menu ng-scope\" data-ng-controller=\"QuickSearchController\" ng-style=\"{'left':USER === false ? '40px':'75px'}\">\n  <div class=\"public-pages ng-scope\" ng-if=\"USER === false\" style=\"width: 452px;\">\n        <div class=\"normal not-login-menu\">\n            <div class=\"ui simple dropdown\">\n                <a href=\"javascript:void(0);\" class=\"item no-arrow ng-binding\">AutoMagic</a>\n                <div class=\"menu\">\n                    <a class=\"item func-item\" href=\"#\" target=\"_blank\">TestReport</a>\n                    <a class=\"item func-item\" href=\"http://172.17.3.60/\" target=\"_blank\">Git Server</a>\n                </div>\n            </div>\n            <a href=\"http://172.17.3.65:8111/\"  target=\"_blank\" class=\"item ng-binding\">TeamCity</a>\n            <a href=\"http://172.17.3.70/testrail/ \" target=\"_blank\" class=\"item ng-binding\">TestRail</a>\n            <a href=\"http://172.17.3.71:8112/dashboard\" target=\"_blank\" class=\"item ng-binding\">YouTrack</a>\n        </div>\n\n    </div>\n</div>\n{% if user.is_authenticated %}\n    <!-- ngIf: USER -->\n<!-- ngIf: USER === false -->\n    <div class=\"right menu ng-scope\" ng-if=\"USER === false\">\n        <div class=\"ui item mart-logo\">\n        </div>\n        <i class=\"icon-user\"></i>\n        <button class=\"btn btn-link\">{{ user.username }}</button>\n        <a href=\"{% url 'auto-logout' %}\" class=\"btn btn-link\" cg-auto-refresh-href=\"/logout\">Logout</a>\n    </div>\n    <!-- end ngIf: USER === false -->\n    <!-- end ngIf: USER === false -->\n{% else %}\n    <div class=\"right menu ng-scope\" ng-if=\"USER === false\">\n        <div class=\"ui item mart-logo\">\n        </div>\n        <a href=\"{% url 'auto-login' %}\" class=\"btn btn-primary \" >Login</a>\n    </div>\n{% endif %}\n</div>\n{% block content %}\n    <div>\n{% block slideshow %}{% endblock %}\n{% block page_content %}{% endblock %}\n    </div>\n{% endblock %}\n</body>"
  },
  {
    "path": "automatic/templates/oauth/userlist.html",
    "content": "{% extends 'frame.html' %}\n{% block title %}Automagic{% endblock %}\n{% block slideshow %}\n    {% if request.user.is_staff %}\n        <div class=\"ak-zper-midbox ak-jsch-mid\">\n            <div class=\"ak-zper-inbox-title ak-jsch-title clearfix\">\n                <div class=\"ak-left ak-jsch-row3 ak-zper-fix-btnbox\">\n                    <span class=\"ak-zper-remindback\"></span>\n                    <span class=\"inbox-text\">用户管理</span>\n                </div>\n                <div id=\"log_info\" class=\"ac-addtips\"></div>\n            </div>\n\n            <!--      ---------------------华丽的分割线 main------------------------ -->\n            <div class=\"col-md-12\">\n                <div class=\"ac-margin-tb15\">\n\n                    <div class=\"panel panel-default\">\n                        <div class=\"panel-heading\">\n                            <form class=\"form-inline\" role=\"form\" action=\"\" method=\"GET\">\n                                <div class=\"input-group\">\n                                    <input type=\"input\" class=\"form-control search-width\" name=\"keyword\"\n                                           value=\"{{ request.GET.keyword }}\" placeholder=\"用户名、邮箱、手机号搜索\">\n                                    <span class=\"input-group-btn\">\n                                      <button class=\"btn btn-primary\" type=\"submit\">Go!</button>\n                                  </span>\n                                </div>\n                                <a href=\"\" class=\"ak-right ac-btn-addcase orange\" data-toggle=\"modal\"\n                                   data-target=\"#ProductAndUserModal\">关联产品</a>\n                                <a href=\"\" class=\"ak-right ac-btn-adduser blue ac-amargin-r10\" data-toggle=\"modal\"\n                                   data-target=\"#addUserModal\">创建用户</a>\n                            </form>\n                            {#                            <div align=\"right\" class=\"form-group\">#}\n                            {#                                <a href=\"/user/add/\" class=\"ak-left ac-btn-adduser orange\" >创建用户</a>#}\n                            {##}\n                            {#                            </div>#}\n                            <!-- /input-group -->\n                        </div>\n\n                        <table id=\"mytable\" class=\"table table-striped  table-hover table-condensed ac-aelement-table\">\n                            <thead>\n                            <tr>\n                                <th>ID</th>\n                                <th>用户名</th>\n                                <th>真实姓名</th>\n                                <th>管理员</th>\n                                <th>部门</th>\n                                <th>状态</th>\n                                <th>邮箱</th>\n                                <th>手机</th>\n{#                                <th>TestRail用户名</th>#}\n                                <th>关联产品</th>\n                                <th>操作</th>\n                            </tr>\n                            </thead>\n                            <tbody>\n                            {% for user in userlist %}\n                                <tr>\n                                    <td>{{ user.pk }}</td>\n                                    <td>{{ user.username }}</td>\n                                    <td>{{ user.realname }}</td>\n                                    <td>\n                                        {% if user.is_staff == 1 %}\n                                            <span ng-if=\"f.flag==true\" class=\"label label-success ng-scope\">YES</span>\n                                        {% else %}\n                                            <span ng-if=\"f.flag==false\" class=\"label label-danger ng-scope\">NO</span>\n                                        {% endif %}\n                                    </td>\n                                    <td>{{ user.dept }}</td>\n                                    <td>\n                                        {% if user.is_active == 1 %}\n                                            <span ng-if=\"f.flag==true\" class=\"label label-success ng-scope\">可用</span>\n                                        {% else %}\n                                            <span ng-if=\"f.flag==false\" class=\"label label-danger ng-scope\">不可用</span>\n                                        {% endif %}\n                                    </td>\n                                    <td>{{ user.email }}</td>\n                                    <td>\n                                        {% if user.mobile %}\n                                            {{ user.mobile }}\n                                        {% endif %}\n                                    </td>\n{#                                    <td title=\"{{ user.testrailpass }}\">#}\n{#                                        {% if user.testrailuser %}#}\n{#                                            {{ user.testrailuser }}#}\n{#                                        {% endif %}#}\n{#                                    </td>#}\n                                    <td class=\"ac-alist-width-overflow-public\">\n                                        {% for i in userandproduct %}\n                                            {% if i.username == user %}\n                                                {{ i.productname.name }};\n                                            {% endif %}\n                                        {% endfor %}\n                                    </td>\n                                    <td>\n                                        <a href=\"\" onclick=\"setuserValue({{ user.id }})\" class=\"ke-ablock\"\n                                           data-toggle=\"modal\" data-target=\"#editUserModal\"><i\n                                                class=\"glyphicon glyphicon-edit\"></i></a>\n                                        {#                                        <a href=\"{% url 'userdel' user.id %}\" class=\"ke-ablock\"#}\n                                        {#                                           onclick=\"return confirm('您确定要删除吗？')\"><i#}\n                                        {#                                                class=\"glyphicon glyphicon-trash\"></i></a>#}\n                                    </td>\n                                </tr>\n                            {% endfor %}\n                            </tbody>\n                        </table>\n                    </div>\n                    {% if is_paginated %}\n                        <div class=\"panel-default\">\n                            <ul class=\"pagination\">\n                                <li>\n                                    <a href=\"javascript:window.location.href=window.location.search.match(/page=(\\d+|\\s*)/)===null? window.location.origin+(window.location.pathname +'?page=1'+(window.location.search?window.location.search.replace('?','&'):'')):window.location.search.replace(/page=(\\d+|\\s*)/, 'page=1')\">«</a>\n                                </li>\n                                {% if page_obj.has_previous %}\n                                    <!--<li><a href=\"{{ request.get_full_path }}&page={{ page_obj.previous_page_number }}\">上一页</a></li>-->\n                                    <li>\n                                        <a href=\"javascript:window.location.href=window.location.search.match(/page=(\\d+|\\s*)/)===null? window.location.href +'?page={{ page_obj.previous_page_number }}': window.location.search.replace(/page=(\\d+|\\s*)/, 'page={{ page_obj.previous_page_number }}')\">上一页</a>\n                                    </li>\n                                {% else %}\n                                    <li class=\"previous disabled\"><a>上一页</a></li>\n                                {% endif %}\n                                {% for i in page_obj.paginator.page_range %}\n                                    <li {% if page_obj.number == i %}class=\"active\"{% endif %}><a\n                                            href=\"javascript:window.location.href=window.location.search.match(/page=(\\d+|\\s*)/)===null? window.location.origin+(window.location.pathname +'?page={{ i }}'+(window.location.search?window.location.search.replace('?','&'):'')):window.location.search.replace(/page=(\\d+|\\s*)/, 'page={{ i }}')\">{{ i }}</a>\n                                    </li>\n                                {% endfor %}\n                                {% if page_obj.has_next %}\n                                    <li>\n                                        <a href=\"javascript:window.location.href=window.location.search.match(/page=(\\d+|\\s*)/)===null? window.location.origin+(window.location.pathname +'?page={{ page_obj.next_page_number }}'+(window.location.search?window.location.search.replace('?','&'):'')):window.location.search.replace(/page=(\\d+|\\s*)/, 'page={{ page_obj.next_page_number }}')\">下一页</a>\n                                    </li>\n                                {% else %}\n                                    <li class=\"previous disabled\"><a>下一页</a></li>\n                                {% endif %}\n                                <li>\n                                    <a href=\"javascript:window.location.href=window.location.search.match(/page=(\\d+|\\s*)/)===null? window.location.origin+(window.location.pathname +'?page={{ page_obj.paginator.num_pages }}'+(window.location.search?window.location.search.replace('?','&'):'')):window.location.search.replace(/page=(\\d+|\\s*)/, 'page={{ page_obj.paginator.num_pages }}')\">»</a>\n                                </li>\n                                <li><a>当前第{{ page_obj.number }}页/共{{ usersum }}个用户</a></li>\n                                <li><input id=\"curpage\" class=\"ac-acaseedit-input\" type=\"number\" style=\"width: 80px;\">\n                                </li>\n                                <li>\n                                    <button id=\"btn_skip\" onclick=\"btn_skip_click()\" type=\"button\"\n                                            class=\"btn btn-sm btn-primary\">确定\n                                    </button>\n                                </li>\n                            </ul>\n                        </div>\n                    {% endif %}\n                </div>\n            </div>\n        </div>\n        <!--      ---------------------华丽的分割线 main end------------------------ -->\n        <!--Add Modal -->\n\n        <div class=\"modal fade ak-min-fullwidth-modal ak-znews-addsort-modal\" id=\"addUserModal\" tabindex=\"-1\"\n             role=\"dialog\" aria-hidden=\"true\">\n            <div class=\"modal-dialog\">\n                <div class=\"modal-content\">\n                    <div class=\"modal-header clearfix\">\n                        <button type=\"button\" class=\"close close-back\" data-dismiss=\"modal\"><span\n                                class=\"sr-only\">Close</span></button>\n                        <h4 class=\"modal-title text-center\">创建用户</h4>\n                    </div>\n                    <div class=\"modal-body col01 ac-amargin-tb20\">\n                        <form id=\"user_add\" method=\"post\" action=\"{% url 'adduser' %}\" class=\"form-horizontal\">\n\n                            <div class=\"form-group\">\n                                <label class=\"col-lg-3 control-label\">用户名</label>\n                                <div class=\"col-lg-5\">\n                                    <input type=\"text\" class=\"form-control\" name=\"username\" placeholder=\"请填写登录用户名\"/>\n                                </div>\n                            </div>\n\n                            <div class=\"form-group\">\n                                <label class=\"col-lg-3 control-label\">密码</label>\n                                <div class=\"col-lg-5\">\n                                    <input type=\"password\" class=\"form-control\" name=\"password\" placeholder=\"请填写登录密码\"/>\n                                </div>\n\n                            </div>\n                            <div class=\"form-group\">\n                                <label class=\"col-lg-3 control-label\">确认密码</label>\n                                <div class=\"col-lg-5\">\n                                    <input type=\"password\" class=\"form-control\" name=\"confirmPassword\"\n                                           placeholder=\"请填写确认密码\"/>\n                                </div>\n                            </div>\n                            <div class=\"form-group\">\n                                <label class=\"col-lg-3 control-label\">邮箱地址</label>\n                                <div class=\"col-lg-5\">\n                                    <input type=\"text\" class=\"form-control\" name=\"email\" placeholder=\"请填写电子邮箱地址\"/>\n                                </div>\n                            </div>\n\n                            <div class=\"form-group\">\n                                <label class=\"col-lg-3 control-label\">真实姓名</label>\n                                <div class=\"col-lg-5\">\n                                    <input type=\"text\" class=\"form-control\" name=\"realname\" placeholder=\"请填写用户真实姓名\"/>\n                                </div>\n                            </div>\n                            <div class=\"form-group\">\n                                <label class=\"col-lg-3 control-label\">手机号码</label>\n                                <div class=\"col-lg-5\">\n                                    <input type=\"text\" class=\"form-control\" name=\"mobile\"/>\n                                </div>\n                            </div>\n                            <div class=\"form-group\">\n                                <label class=\"col-lg-3 control-label\">部门</label>\n                                <div class=\"col-lg-5\">\n                                    <select name=\"dept\" class=\"ak-left ac-aselect\">\n                                        <option value=\"研发\">研 发</option>\n                                        <option value=\"测试\">测 试</option>\n                                    </select>\n                                </div>\n                            </div>\n                            <div class=\"form-group\">\n                                <label class=\"col-lg-3 control-label\">激活状态</label>\n                                <div class=\"col-lg-3\">\n                                    <div class=\"sky-form\">\n                                        <label class=\"toggle\">\n                                            <input id=\"id_is_active\" type=\"checkbox\" checked=\"checked\" name=\"is_active\">\n                                            <i class=\"rounded-4x ak-aoffon-btn col01\"></i>\n                                        </label>\n                                    </div>\n                                </div>\n                            </div>\n                            <div class=\"form-group\">\n                                <label class=\"col-lg-3 control-label\">管理员</label>\n                                <div class=\"col-lg-3\">\n                                    <div class=\"sky-form\">\n                                        <label class=\"toggle\">\n                                            <input id=\"id_is_admin\" type=\"checkbox\" name=\"is_admin\">\n                                            <i class=\"rounded-4x ak-aoffon-btn col01\"></i>\n                                        </label>\n                                    </div>\n                                </div>\n                            </div>\n\n{#                            <div class=\"form-group\">#}\n{#                                <label class=\"col-lg-3 control-label\">TestRail用户名</label>#}\n{#                                <div class=\"col-lg-5\">#}\n{#                                    <input type=\"text\" class=\"form-control\" name=\"testrailuser\"#}\n{#                                           placeholder=\"请填写TestRail的登录用户名\"/>#}\n{#                                </div>#}\n{#                            </div>#}\n{#                            <div class=\"form-group\">#}\n{#                                <label class=\"col-lg-3 control-label\">TestRail密码</label>#}\n{#                                <div class=\"col-lg-5\">#}\n{#                                    <input type=\"text\" class=\"form-control\" name=\"testrailpass\"#}\n{#                                           placeholder=\"请填写TestRail的登录密码\"/>#}\n{#                                </div>#}\n{#                            </div>#}\n                            <div class=\"form-group modal-footer\">\n                                <div class=\"col-lg-9 col-lg-offset-3\">\n                                    <!--===footer button ===-->\n                                    <div class=\"ak-footer-btn text-left\">\n                                        <input class=\"ak-zdl-createbtn\" type=\"submit\" value=\"提交\">\n                                        <input class=\"ak-zdl-createbtn cancel\" type=\"reset\" value=\"重置\">\n                                    </div>\n                                    <!--===End footer button ===-->\n                                </div>\n                            </div>\n                        </form>\n                    </div>\n                </div>\n            </div>\n        </div>\n\n        <!-- Edit Modal -->\n        <div class=\"modal fade ak-min-fullwidth-modal ak-znews-addsort-modal\" id=\"editUserModal\" tabindex=\"-1\"\n             role=\"dialog\" aria-hidden=\"true\">\n            <div class=\"modal-dialog\">\n                <div class=\"modal-content\">\n                    <div class=\"modal-header clearfix\">\n                        <button type=\"button\" class=\"close close-back\" data-dismiss=\"modal\"><span\n                                class=\"sr-only\">Close</span></button>\n                        <h4 class=\"modal-title text-center\">编辑用户</h4>\n                    </div>\n                    <div class=\"modal-body col01 ac-amargin-tb20\">\n                        <form id=\"user_edit\" method=\"post\" action=\"{% url 'userupdate' %}\" class=\"form-horizontal\">\n\n                            <div class=\"form-group\">\n                                <label class=\"col-lg-3 control-label\">用户名</label>\n                                <div class=\"col-lg-5\">\n                                    <input name=\"userid\" hidden=\"true\">\n                                    <input type=\"text\" class=\"form-control\" name=\"username\" readonly=\"true\"\n                                           placeholder=\"请填写登录用户名\"/>\n                                </div>\n                            </div>\n\n                            <div class=\"form-group\">\n                                <label class=\"col-lg-3 control-label\">密码</label>\n                                <div class=\"col-lg-5\">\n                                    <input type=\"password\" class=\"form-control\" name=\"password\" placeholder=\"登录密码\"/>\n                                </div>\n                            </div>\n                            <div class=\"form-group\">\n                                <label class=\"col-lg-3 control-label\">确认密码</label>\n                                <div class=\"col-lg-5\">\n                                    <input type=\"password\" class=\"form-control\" name=\"confirmPassword\"\n                                           placeholder=\"确认密码\"/>\n                                </div>\n                            </div>\n                            <div class=\"form-group\">\n                                <label class=\"col-lg-3 control-label\">邮箱地址</label>\n                                <div class=\"col-lg-5\">\n                                    <input type=\"text\" class=\"form-control\" name=\"email\" placeholder=\"请填写电子邮箱地址\"/>\n                                </div>\n                            </div>\n\n                            <div class=\"form-group\">\n                                <label class=\"col-lg-3 control-label\">真实姓名</label>\n                                <div class=\"col-lg-5\">\n                                    <input type=\"text\" class=\"form-control\" name=\"realname\" placeholder=\"请填写用户真实姓名\"/>\n                                </div>\n                            </div>\n                            <div class=\"form-group\">\n                                <label class=\"col-lg-3 control-label\">手机号码</label>\n                                <div class=\"col-lg-5\">\n                                    <input type=\"text\" class=\"form-control\" name=\"mobile\"/>\n                                </div>\n                            </div>\n                            <div class=\"form-group\">\n                                <label class=\"col-lg-3 control-label\">部门</label>\n                                <div class=\"col-lg-5\">\n                                    <select name=\"dept\" class=\"ak-left ac-aselect\">\n                                        <option value=\"研发\">研 发</option>\n                                        <option value=\"测试\">测 试</option>\n                                    </select>\n                                </div>\n                            </div>\n                            <div class=\"form-group\">\n                                <label class=\"col-lg-3 control-label\">激活状态</label>\n                                <div class=\"col-lg-3\">\n                                    <div class=\"sky-form\">\n                                        <label class=\"toggle\">\n                                            <input id=\"edit_id_is_active\" type=\"checkbox\" checked=\"checked\" name=\"is_active\">\n                                            <i class=\"rounded-4x ak-aoffon-btn col01\"></i>\n                                        </label>\n                                    </div>\n                                </div>\n                            </div>\n                            <div class=\"form-group\">\n                                <label class=\"col-lg-3 control-label\">管理员</label>\n                                <div class=\"col-lg-3\">\n                                    <div class=\"sky-form\">\n                                        <label class=\"toggle\">\n                                            <input id=\"edit_id_is_admin\" type=\"checkbox\" checked=\"checked\" name=\"is_admin\">\n                                            <i class=\"rounded-4x ak-aoffon-btn col01\"></i>\n                                        </label>\n                                    </div>\n                                </div>\n                            </div>\n\n{#                            <div class=\"form-group\">#}\n{#                                <label class=\"col-lg-3 control-label\">TestRail用户名</label>#}\n{#                                <div class=\"col-lg-5\">#}\n{#                                    <input type=\"text\" class=\"form-control\" name=\"testrailuser\"#}\n{#                                           placeholder=\"请填写TestRail的登录用户名\"/>#}\n{#                                </div>#}\n{#                            </div>#}\n{#                            <div class=\"form-group\">#}\n{#                                <label class=\"col-lg-3 control-label\">TestRail密码</label>#}\n{#                                <div class=\"col-lg-5\">#}\n{#                                    <input type=\"text\" class=\"form-control\" name=\"testrailpass\"#}\n{#                                           placeholder=\"请填写TestRail的登录密码\"/>#}\n{#                                </div>#}\n{#                            </div>#}\n                            <div class=\"form-group modal-footer\">\n                                <div class=\"col-lg-9 col-lg-offset-3\">\n                                    <!--===footer button ===-->\n                                    <div class=\"ak-footer-btn text-left\">\n                                        <input class=\"ak-zdl-createbtn\" type=\"submit\" value=\"提交\">\n                                        <input class=\"ak-zdl-createbtn cancel\" type=\"reset\" value=\"重置\">\n                                    </div>\n                                    <!--===End footer button ===-->\n                                </div>\n                            </div>\n                        </form>\n                    </div>\n                </div>\n            </div>\n        </div>\n\n        <!-- Edit Product and User -->\n        <div class=\"modal fade ak-min-fullwidth-modal ak-znews-addsort-modal\" id=\"ProductAndUserModal\" tabindex=\"-1\"\n             role=\"dialog\" aria-hidden=\"true\">\n            <div class=\"modal-dialog\">\n                <div class=\"modal-content\">\n                    <div class=\"modal-header clearfix\">\n                        <button type=\"button\" class=\"close close-back\" data-dismiss=\"modal\"><span\n                                class=\"sr-only\">Close</span></button>\n                        <h4 class=\"modal-title text-center\">产品授权</h4>\n                    </div>\n                    <div class=\"modal-body col01 ac-amargin-tb20\">\n                        <form id=\"product_user\" method=\"post\" action=\"/product/user/\" class=\"form-horizontal\">\n                            <div class=\"form-group\">\n                                <label class=\"col-lg-3 control-label\">产品</label>\n                                <div class=\"col-lg-5\">\n                                    <select class='ac-aselect' name=\"product\" id=\"selectproductid\">\n                                        <option>选择产品</option>\n                                        {% for i in productlist %}\n                                            <option value=\"{{ i.pk }}\"\n                                                    {% if request.GET.product  == i.pk %}selected{% endif %}>{{ i.name }}</option>\n                                        {% endfor %}\n\n                                    </select>\n                                </div>\n                            </div>\n                            <div class=\"form-group\">\n                                <label class=\"col-lg-3 control-label\">用户</label>\n                                <div class=\"col-lg-5\" id=\"connecteduser\" style=\"padding: 8px 5px\">\n                                    <option>选择用户</option>\n                                    {% for user in alluser %}\n                                        <label style=\"padding: 2px 2px\">\n                                            <input name=\"realname\" type=\"checkbox\" value=\"{{ user.pk }}\"\n                                                   {% if request.GET.realname  == user.pk %}checked{% endif %}>{{ user.realname }}\n                                        </label>\n                                    {% endfor %}\n                                </div>\n                            </div>\n\n\n                            <div class=\"form-group modal-footer\">\n                                <div class=\"col-lg-9 col-lg-offset-3\">\n                                    <!--===footer button ===-->\n                                    <div class=\"ak-footer-btn text-left\">\n                                        <input class=\"ak-zdl-createbtn\" type=\"submit\" value=\"提交\">\n                                        <input class=\"ak-zdl-createbtn cancel\" type=\"reset\" value=\"重置\">\n                                    </div>\n                                    <!--===End footer button ===-->\n                                </div>\n                            </div>\n                        </form>\n                    </div>\n                </div>\n            </div>\n        </div>\n\n    {% else %}\n       <div class=\"ak-zper-midbox ak-jsch-mid\">\n            <div class=\"ak-zper-inbox-title ak-jsch-title clearfix\">\n                <div class=\"ak-left ak-jsch-row3 ak-zper-fix-btnbox\">\n                    <span class=\"ak-zper-remindback\"></span>\n                    <span class=\"inbox-text\">用户管理</span>\n                </div>\n                <div id=\"log_info\" class=\"ac-addtips\"></div>\n            </div>\n            <div class=\"col-md-12\">\n                <div style=\"text-align: center\">\n                    <p>形成天才的决定因素应该是勤奋。</p>\n                    <p>……有几分勤学苦练是成正比例的。</p>\n                    <p>加油吧！少年！！！</p>\n                    <p>你没权限访问，可以找找管理员。</p>\n                </div>\n            </div>\n        </div>\n    {% endif %}\n{% endblock %}\n{% block script %}\n    <script>\n        function btn_skip_click() {\n            var currpage = $('#curpage').val() === '' ? 1 : parseInt($('#curpage').val());\n            // console.log(currpage);\n            if (currpage > {{ page_obj.paginator.num_pages }}) {\n                currpage = {{ page_obj.paginator.num_pages }};\n            }\n            if (currpage < 1) {\n                currpage = 1;\n            }\n            var url = window.location.search.match(/page=(\\d+|\\s*)/) === null ? window.location.origin + (window.location.pathname + '?page=' + currpage + (window.location.search ? window.location.search.replace('?', '&') : '')) : window.location.search.replace(/page=(\\d+|\\s*)/, 'page=' + currpage);\n            self.location = url;\n\n            return false;\n        }\n\n        $('#curpage').keypress(function (event) {\n            console.log(event.which);\n            if (event.which == 13) {\n                btn_skip_click()\n            }\n            event.stopPropagation();\n        });\n\n        /*     添加用户     */\n        $(function () {\n            $('#user_add')\n                    .bootstrapValidator({\n//        live: 'disabled',\n                        message: 'This value is not valid',\n                        feedbackIcons: {\n                            valid: 'icon icon-ok',\n                            invalid: 'icon icon-remove',\n                            validating: 'icon icon-refresh'\n                        },\n                        fields: {\n                            username: {\n                                message: '无效的用户名',\n                                validators: {\n                                    notEmpty: {\n                                        message: '登录用户名不能为空'\n                                    },\n                                    stringLength: {\n                                        min: 4,\n                                        max: 30,\n                                        message: '用户名的长度为4-30字符'\n                                    },\n                                    regexp: {\n                                        regexp: /^[a-zA-Z0-9_\\.\\@]+$/,\n                                        message: '用户名只能由字母、数字和下划线组成'\n                                    },\n                                    different: {\n                                        field: 'password',\n                                        message: '用户名和密码不能一样'\n                                    }\n                                }\n                            },\n                            email: {\n                                validators: {\n                                    emailAddress: {\n                                        message: '无效的邮箱地址'\n                                    },\n                                    notEmpty: {\n                                        message: '邮箱地址不能为空'\n                                    }\n                                }\n                            },\n                            password: {\n                                validators: {\n                                    notEmpty: {\n                                        message: '登录密码不能为空'\n                                    },\n                                    different: {\n                                        field: 'username',\n                                        message: '密码不能和用户名一样'\n                                    }\n                                }\n                            },\n                            confirmPassword: {\n                                validators: {\n                                    notEmpty: {\n                                        message: '确认密码不能为空'\n                                    },\n                                    identical: {\n                                        field: 'password',\n                                        message: '密码和确认密码输入不一致'\n                                    }\n                                }\n                            }\n                        }\n                    })\n\n                    .on('success.form.bv', function (e) {\n\n                        e.preventDefault();\n\n                        var $form = $(e.target);\n\n                        var bv = $form.data('bootstrapValidator');\n\n                        $.post($form.attr('action'), $form.serialize(), function (result) {\n                            $('#addUserModal').hide()\n                            $('#log_info').addClass('bg-primary');\n                            $('#log_info').css('display', 'block');\n                            $('#log_info').html(result);\n                            setTimeout(\"location.reload()\", 1500);\n                        })\n                    });\n\n        });\n\n        /*     编辑用户     */\n        $(function () {\n            $('#user_edit')\n                    .bootstrapValidator({\n//        live: 'disabled',\n                        message: 'This value is not valid',\n                        feedbackIcons: {\n                            valid: 'icon icon-ok',\n                            invalid: 'icon icon-remove',\n                            validating: 'icon icon-refresh'\n                        },\n                        fields: {\n                            email: {\n                                validators: {\n                                    emailAddress: {\n                                        message: '无效的邮箱地址'\n                                    },\n                                    notEmpty: {\n                                        message: '邮箱地址不能为空'\n                                    }\n                                }\n                            },\n                            password: {\n                                validators: {\n                                    identical: {\n                                        field: 'confirmPassword',\n                                        message: '密码和确认密码输入不一致'\n                                    }\n                                }\n                            },\n                            confirmPassword: {\n                                validators: {\n                                    identical: {\n                                        field: 'password',\n                                        message: '密码和确认密码输入不一致'\n                                    }\n                                }\n                            }\n                        }\n                    })\n                    //         .bootstrapValidator({\n                    // //        live: 'disabled',\n                    //         message: 'This value is not valid',\n                    //         feedbackIcons: {\n                    //             valid: 'icon icon-ok',\n                    //             invalid: 'icon icon-remove',\n                    //             validating: 'icon icon-refresh'\n                    //         },\n                    //         fields: {\n                    //             email: {\n                    //                 validators: {\n                    //                     emailAddress: {\n                    //                         message: '无效的邮箱地址'\n                    //                     },\n                    //                     notEmpty: {\n                    //                         message: '邮箱地址不能为空'\n                    //                     }\n                    //                 }\n                    //             },\n                    //             password: {\n                    //                 validators: {\n                    //                     different: {\n                    //                         field: 'username',\n                    //                         message: '密码不能和用户名一样'\n                    //                     }\n                    //                 }\n                    //             },\n                    //             confirmPassword: {\n                    //                 validators: {\n                    //                     identical: {\n                    //                         field: 'password',\n                    //                         message: '密码和确认密码输入不一致'\n                    //                     }\n                    //                 }\n                    //             },\n                    //         }\n                    //     })\n\n                    .on('success.form.bv', function (e) {\n\n                        e.preventDefault();\n\n                        var $form = $(e.target);\n\n                        var bv = $form.data('bootstrapValidator');\n\n                        $.post($form.attr('action'), $form.serialize(), function (result) {\n                            $('#addEditModal').hide();\n                            $('#log_info').addClass('bg-primary');\n                            $('#log_info').css('display', 'block');\n                            $('#log_info').html(result);\n                            setTimeout(\"location.reload()\", 1500);\n                        })\n                    });\n\n        });\n\n        /*用户管理页面-选择产品-关联用户*/\n        $(document).ready(function () {\n            $(\"#selectproductid\").bind(\"change\", function () {\n                var s1SelectedVal = $('#selectproductid').val();\n                if (s1SelectedVal != \"\") {\n                    $.ajax({\n                        type: \"GET\",\n                        data: {'productid': s1SelectedVal},\n                        url: \"/setting/get/connecteduser/\", //后台处理函数的url 这里用的是static url 需要与urls.py中的name一致\n                        cache: false,\n                        dataType: 'json',\n\n                        success: function (result, TextStatus) {\n                            $('input:checkbox').attr(\"checked\", false);\n                            if (result.length > 0) {\n                                var allCheckbox = $('#connecteduser').find($(\"input\"))\n                                for (i = 0; i < result.length; i++) {\n                                    for (j = 0; j < allCheckbox.length; j++) {\n                                        {#                                              console.log($(allCheckbox[j]).parent())#}\n                                        username_in_page = $(allCheckbox[j]).parent()[0].innerText\n                                        {#                                              console.log(username_in_page)#}\n                                        if (result[i].realname == $.trim(username_in_page)) {\n                                            allCheckbox[j].checked = 'True'\n                                        }\n                                    }\n                                }\n                            }\n                        }\n                    });\n                }\n            });\n\n            /*     产品授权     */\n            $('#product_user').submit(function () {\n                $.ajax({\n                    type: \"POST\",\n                    data: $(this).serialize(),\n                    url: \"/setting/product/user/\",\n                    cache: false,\n                    dataType: \"html\",\n                    success: function (result, statues, xml) {\n                        $('#ProductAndUserModal').hide()\n                        $('#log_info').addClass('bg-primary');\n                        $('#log_info').css('display', 'block');\n                        $('#log_info').html(result);\n                        setTimeout(\"location.reload()\", 1200);\n                    },\n                    error: function () {\n                        $('#log_info').addClass('bg-primary');\n                        $('#log_info').css('display', 'block');\n                        $('#log_info').html('授权失败');\n                        alert('授权失败')\n                    }\n                });\n                return false;\n            });\n        });\n    </script>\n{% endblock %}\n"
  },
  {
    "path": "automatic/templates/registration/login.html",
    "content": "{% load static %}\n<!DOCTYPE html>\n<html>\n<head>\n    <meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n    <style type=\"text/css\">[ng\\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak], .ng-cloak, .x-ng-cloak, .ng-hide:not(.ng-hide-animate) {\n        display: none !important;\n    }\n\n    ng\\:form {\n        display: block;\n    }</style>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge,chrome=1\">\n\n    <title>用户登录</title>\n    <!-- Place favicon.ico and apple-touch-icon.png in the root directory -->\n    <link rel=\"icon\" type=\"image/x-icon\" href=\"{% static 'image/favicon.ico' %}\">\n    <link rel=\"shortcut icon\" href=\"{% static 'image/favicon.ico' %}\" type=\"image/x-icon\">\n\n    <link rel=\"stylesheet\" href=\"{% static 'css/login-vendor.css' %}\">\n    {#    <link rel=\"stylesheet\" href=\"{% static '' %}\">#}\n\n    <link rel=\"stylesheet\" href=\"{% static 'css/login-app.css' %}\">\n\n    <script charset=\"utf-8\" type=\"text/javascript\">\n\n\n    </script>\n</head>\n\n<body ng-app=\"app\" ng-strict-di=\"\" ng-controller=\"AppController\"\n      class=\"coding-center coding ng-scope random-background account-background\" cg-random-background=\"\"\n      ng-class=\"{'account-background': isAccount}\"\n      style=\"margin: 0px; padding: 0px; background: transparent url(&quot;{% static 'image/background2.jpg' %}&quot;) no-repeat fixed center center / cover ; height: 100%;\">\n<div cg-flash=\"\">\n    <div class=\"cg flash center\" ng-class=\"{active: messages &amp;&amp; messages.length&gt;0}\" id=\"global-flash\">\n        <i class=\"ui close icon\" ng-click=\"onClose()\"></i>\n        <div class=\"outer\">\n            <!-- ngRepeat: message in messages.slice(0,limit) -->\n\n        </div>\n        <!-- ngIf: messages.length>limit -->\n    </div>\n</div>\n<div class=\"ui fixed transparent main menu ng-scope\" ng-dblclick=\"scrollToTop()\" id=\"top-menu\">\n    <a href=\"#\" class=\"left logo item ng-scope\" ng-if=\"USER === false\" cg-jump-out-angular-href=\"/\" target=\"_self\"\n       style=\"padding: 0px 0px;\">\n        <img src=\"../../static/image/logo.png\" height=\"50\">\n    </a>\n    <div style=\"left: 0px;\" class=\"left menu ng-scope\" data-ng-controller=\"QuickSearchController\"\n         ng-style=\"{'left':USER === false ? '40px':'75px'}\">\n        <div class=\"public-pages ng-scope\" ng-if=\"USER === false\" style=\"width: 452px;\">\n            <div class=\"normal not-login-menu\">\n                <div class=\"ui simple dropdown\">\n                    <a href=\"javascript:void(0);\" class=\"item no-arrow ng-binding\">AutoMagic</a>\n                    <div class=\"menu\">\n                        <a class=\"item func-item\" href=\"#\" target=\"_blank\">TestReport</a>\n                        <a class=\"item func-item\" href=\"#\" target=\"_blank\">Git Server</a>\n                    </div>\n                </div>\n                <a href=\"#\" target=\"_blank\" class=\"item ng-binding\">TeamCity</a>\n                <a href=\"# \" target=\"_blank\" class=\"item ng-binding\">TestRail</a>\n                <a href=\"#\" target=\"_blank\" class=\"item ng-binding\">YouTrack</a>\n            </div>\n\n        </div>\n    </div>\n\n    <div class=\"header ng-scope\">\n        <span class=\"top-menu-title ng-binding ng-scope\" ng-controller=\"TopMenuTitleController\"\n              ng-bind=\"top_menu_title\">自动化测试管理平台</span>\n    </div>\n\n    <!-- ngIf: USER -->\n    <!-- ngIf: USER === false -->\n    <div class=\"right menu ng-scope\" ng-if=\"USER === false\">\n        <div class=\"ui item mart-logo\">\n        </div>\n        <a href=\"#\" class=\"ui coding register button ng-binding\" cg-auto-refresh-href=\"/register\">注册</a>\n        <a href=\"#\" class=\"ui coding white login button ng-binding\" cg-auto-refresh-href=\"/login\">登录</a>\n\n        <!-- end ngIf: USER === false -->\n    </div>\n    <!-- end ngIf: USER === false -->\n</div>\n{#{% extends \"base.html\" %}#}\n\n{% block content %}\n\n\n    <div class=\"wrapper ng-scope\" ng-view=\"\">\n        <div class=\"account-flex-container ng-scope\">\n            <div ng-controller=\"LoginController\" class=\"account-container ng-scope\">\n                <h2>用户登录</h2>\n                <div id=\"content-main\">\n\n\n                    <form method=\"post\">{% csrf_token %}\n\n                        <div class=\"account-input dirty\" ng-class=\"{dirty: dirty}\">\n                            <input type=\"text\" name=\"username\">\n                        </div>\n\n                        <input-password class=\"ng-isolate-scope\" ret=\"password\" show-error=\"false\">\n                            <div class=\"account-input\" ng-class=\"{dirty: dirty}\">\n                                <input type=\"password\" name=\"password\">\n                                <span ng-show=\"!ret.valid\" class=\"error ng-binding ng-hide\"></span>\n                            </div>\n                        </input-password>\n\n                        <div style=\"position: relative\">\n                            <input-remember-me class=\"ng-isolate-scope\" ret=\"remember_me\">\n\n                            </input-remember-me>\n                        </div>\n                        <button id=\"login_btn\" type=\"submit\" ng-class=\"{loading: loading}\" value=\"{{ next }}\">登录\n                        </button>\n\n                        <div class=\"bottom-link\">\n                            <a href=\"#\">还没有账户，联系管理员</a>\n                        </div>\n                        {% if form.errors %}\n                            <span class=\"\" style=\"color: red\">您输入的用户名或密码不正确，请重试。</span>\n                        {% endif %}\n                    </form>\n                </div>\n            </div>\n        </div>\n    </div>\n{% endblock %}\n<!-- ngInclude: undefined -->\n<div class=\"account-about ng-scope\" ng-controller=\"AccountAboutController\">\n    <span>Copyright&nbsp;&nbsp;©&nbsp;2020&nbsp; AutoMagic &nbsp;&nbsp;</span>\n    <a href=\"https://radiateboy.github.io/automagic/\" target=\"_blank\">关于 AutoMagic</a>\n    <a href='javascript:void(0);' onclick=\"picBig()\">微信</a>\n    <a href=\"#\">tsbc@vip.qq.com</a>\n\n</div>\n<div id=\"divCenter\" align=\"center\"\n     style=\"position:absolute; display:none; top: 40%; width: 40%; height: 50%; z-index:99999;\">\n    <img src=\"{% static 'image/wx.jpg' %}\" style=\"width:40%; height: 50%\">                                      \n    <div style=\"margin-top: 30px;\">\n        <a href=\"javascript:void(0);\" onclick=\"picClose()\" class=\"close_photo\">关闭</a></div>\n                            \n</div>\n</ng-include>\n</div>\n<script>\n    function picBig() {\n        var v = document.getElementById('divCenter');\n        v.style.display = \"block\";\n\n    }\n\n    function picClose() {\n        var v = document.getElementById('divCenter');\n        v.style.display = \"none\";\n    }\n</script>\n</body>\n</html>"
  },
  {
    "path": "automatic/templates/testcase/caseadd.html",
    "content": "{% extends 'frame.html' %}\n{% block title %}Automagic{% endblock %}\n{% block slideshow %}\n    <div class=\"ak-zper-midbox ak-jsch-mid\">\n         <div class=\"ak-zper-inbox-title ak-jsch-title clearfix\">\n               <div class=\"ak-left ak-jsch-row3 ak-zper-fix-btnbox\">\n                    <span class=\"ak-zper-remindback\"></span>\n                    <span class=\"inbox-text\">添加用例</span>\n               </div>\n             <div id=\"log_info\" class=\"ac-addtips\"></div>\n            <select id=\"selproductid\" name=\"caseproductname\" class=\"ak-right ak-left ac-aselect ac-margint8\">\n                      <option value=\"0\">-产品名称-</option>\n                          {% for product in userandproduct  %}\n                              {% if product.username == request.user %}\n                                  <option value=\"{{ product.productname.id }}\" {% if request.GET.productname  == product.productname.name %}selected{% endif %}>{{ product.productname.name }}</option>\n                              {% endif %}\n                          {% endfor %}\n                </select>\n\n          </div>\n\n      \t  <div class=\"col-md-12\">\n <form method='post'  id=\"case_add\">\n    {% csrf_token %}\n    <div class=\"ak-jsch-modal-row col01\">\n        <div class=\"ak-jsch-pos\">\n            <div class=\"ak-jsch-point\">\n            </div>\n        </div>\n        <div class=\"ak-jsch-modal-text col01 clearfix\">\n            <span class=\"ak-jsch-item-left ak-left \">用例描述</span>\n            <div class=\"ak-jsch-item-right col02 ak-left\">\n                <input id=\"casedesc\" name=\"casedesc\" class=\"ak-jsch-modal-input\" type=\"text\" required=\"\" placeholder=\"测试用例描述\">\n            </div>\n        </div>\n    </div>\n     <div class=\"ak-jsch-modal-row col01 ak-jsch-padding\">\n         <div class=\"ak-jsch-modal-text\">\n             <div class=\"ak-jsch-modal-item clearfix\"><span class=\"ak-left ak-jsch-item-left \">状态</span>\n                 <div class=\"sky-form col01 ak-left ac-ml10\">\n                     <label class=\"toggle\">\n                         <input type=\"checkbox\" id=\"id_isenabled\" name=\"isenabled\" checked=\"checked\">\n                         <i class=\"rounded-4x ak-aoffon-btn\"></i>\n                     </label>\n                 </div>\n             </div>\n             <div class=\"ak-jsch-modal-item ak-jsch-pt clearfix\">\n                 <span class=\"ak-jsch-item-left ak-left\">项目</span>\n                 <div class=\"ak-jsch-item-right ak-left\">\n                     <select id=\"selprojectid\" name=\"projectid\" class=\"ak-left ac-aselect col01\" required=\"\"></select>\n                 </div>\n             </div>\n             <div class=\"ak-jsch-modal-item ak-jsch-pt clearfix\">\n                 <span class=\"ak-jsch-item-left ak-left\">模块</span>\n                 <div class=\"ak-jsch-item-right ak-left\">\n                     <select id=\"selmoduleid\" name=\"moduleid\" class=\"ak-left ac-aselect col01\" required=\"\"><option value=\"\">所属模块</option></select>\n                 </div>\n             </div>\n             <div class=\"ak-jsch-modal-item clearfix\"><span class=\"ak-left ak-jsch-item-left \">冒烟测试</span>\n                 <div class=\"sky-form col01 ak-left ac-ml10\">\n                     <label class=\"toggle\">\n                         <input type=\"checkbox\" id=\"id_issmoke\" name=\"issmoke\">\n                         <i class=\"rounded-4x ak-aoffon-btn\"></i>\n                     </label>\n                 </div>\n             </div>\n             <div class=\"ak-jsch-modal-item ak-jsch-pt clearfix\">\n                 <span class=\"ak-jsch-item-left ak-left\">依赖用例</span>\n                 <div class=\"ak-jsch-item-right ak-left\">\n                     <input id=\"id_dependent\" name=\"dependent\" type=\"text\" placeholder=\"请输入依赖用例的编号\" class=\"ac-acaseedit-input\" />\n                 </div>\n             </div>\n{#            <div class=\"ak-jsch-modal-item ak-jsch-pt clearfix\">#}\n{#                 <span class=\"ak-jsch-item-left ak-left ac-acase-desc\">TestRail ID</span>#}\n{#                 <div class=\"ak-jsch-item-right ak-left\">#}\n{#                     <input id=\"id_testrailcaseid\" name=\"testrailcaseid\" type=\"text\" placeholder=\"关联TestRail的用例编号\" class=\"ac-acaseedit-input\" />#}\n{#                 </div>#}\n{#             </div>#}\n             <table class=\"table table-conde\" id=\"tab\" style=\"width:100%\">\n                 <caption class=\"text-left\">\n                    <button type=\"button\" onclick=\"case_step_addtr();\" class=\"text-left ac-btn-addcase orange ac-margin-tb15\">添加一行</button>\n                     <input class=\"ac-acaseedit-input\" id=\"rowid\" value=\"\" type=\"number\" placeholder=\"添加到第N行之后\">\n                 </caption>\n                 <thead>\n                 <th>Step No</th>\n                 <th>Step Descr</th>\n                 <th>Keyword</th>\n                 <th>Element</th>\n                 <th>Input</th>\n                 <th>操作</th>\n                 <input hidden=\"true\" id=\"linecounter\"   value = 1 type='text' >\n                 </thead>\n                 <tbody>\n                 <tr id=\"row1\">\n                     <td>1</td>\n                     <td><input name=\"descr\" class=\"ac-acaseedit-input\" placeholder=\"请输入步骤描述\" type=\"input\" required=\"\"></td>\n                     <td><select id=\"keyword_1\" name=\"keyword\" class=\"ak-left ac-aselect col01\" required=\"\"></select></td>\n                     <td>\n{#                         <select id=\"id_elementid\" name=\"elementid\" class=\"ak-left ac-aselect col01\"><option value=\"None\">请选择可用元素</option></select>#}\n                         <input id=\"autocomplete_1\" name=\"autocomplete\" class=\"ui-autocomplete-input ac-element-input\" type=\"input\"><input type=\"hidden\" id=\"elementid_1\" name=\"elementid\" value=\"None\">\n                     </td>\n                     <td><input name=\"inputtext\" class=\"ac-keywordtext-input\" placeholder=\"\" type=\"input\" ></td>\n                     <td></td>\n                 </tr>\n                 </tbody>\n                 <tfoot class=\"text-left\">\n\n                 </tfoot>\n             </table>\n             <button type=\"button\" onclick=\"case_step_addtr();\" class=\"text-left ac-btn-addcase orange ac-margin-tb15\">添加一行</button>\n             <div style=\"text-align: center;\">\n                <input  class=\"btn btn-sm btn-primary\" type=\"submit\" value=\"提交\">\n                <input class=\"btn btn-sm btn-default\" type=\"reset\" value=\"重置\">\n                 <button onclick=\"goback();\" class=\"btn btn-sm btn-success\" role=\"button\">取消>></button>\n             </div>\n            <div></div>\n         </div>\n     </div>\n     <div><br><br></div>\n </form>\n          </div>\n    </div>\n{% endblock %}\n{% block script %}\n{% load static %}\n<script type=\"text/javascript\" src=\"{% static 'js/casemanage.js' %}\"></script>\n{% endblock %}\n"
  },
  {
    "path": "automatic/templates/testcase/casecopy.html",
    "content": "{% extends 'frame.html' %}\n{% block title %}Automagic{% endblock %}\n{% block slideshow %}\n    <div class=\"ak-zper-midbox ak-jsch-mid\">\n        <div class=\"ak-zper-inbox-title ak-jsch-title clearfix\">\n            <div class=\"ak-left ak-jsch-row3 ak-zper-fix-btnbox\">\n                <span class=\"ak-zper-remindback\"></span>\n                <span class=\"inbox-text\">用例编辑</span>\n            </div>\n            <div id=\"log_info\" class=\"ac-addtips\"></div>\n        </div>\n\n        <div class=\"col-md-12\">\n            <form id=\"case_copy\">\n                {% csrf_token %}\n                <div class=\"ak-jsch-modal-row col01\">\n                    <div class=\"ak-jsch-pos\">\n                        <div class=\"ak-jsch-point\">\n                        </div>\n                    </div>\n                    <div class=\"ak-jsch-modal-text col01 clearfix\">\n                        <span class=\"ak-jsch-item-left ak-left ac-acase-desc\">用例描述</span>\n                        <div class=\"ak-jsch-item-right col02 ak-left\">\n                            <input id=\"casedesc\" name=\"casedesc\" class=\"ak-jsch-modal-input\" type=\"text\" required=\"\"\n                                   placeholder=\"测试用例描述\" value=\"【复制用例{{ tcase.id }}】{{ tcase.casedesc }}\">\n                        </div>\n                    </div>\n\n                </div>\n                <div class=\"ak-jsch-modal-row col01 ak-jsch-padding\">\n                    <div class=\"ak-jsch-modal-text\">\n                        <div class=\"ak-jsch-modal-item clearfix\"><span class=\"ak-left ak-jsch-item-left \">状态</span>\n                            <div class=\"sky-form col01 ak-left ac-ml10\">\n                                <label class=\"toggle\">\n                                    {% if tcase.isenabled %}\n                                        <input type=\"checkbox\" id=\"id_isenabled\" name=\"isenabled\" checked=\"checked\"\n                                               name=\"checkbox-toggle\">\n                                    {% else %}\n                                        <input type=\"checkbox\" id=\"id_isenabled\" name=\"isenabled\"\n                                               name=\"checkbox-toggle\">\n                                    {% endif %}\n                                    <i class=\"rounded-4x ak-aoffon-btn\"></i>\n                                </label>\n                            </div>\n                        </div>\n                        <div class=\"ak-jsch-modal-item ak-jsch-pt clearfix\">\n                            <span class=\"ak-jsch-item-left ak-left\">项目</span>\n                            <input id=\"caseproductid\" name=\"caseproductname\" hidden=\"true\"\n                                   value=\"{{ project.productid.id }}\">\n                            <div class=\"ak-jsch-item-right ak-left\">\n                                <select id=\"selprojectid\" name=\"projectid\" class=\"ak-left ac-aselect col01\" required=\"\">\n                                    {% for i in  projectlist %}\n                                        {% if i == tcase.projectid %}\n                                            <option value=\"{{ i.pk }}\" selected=\"selected\">{{ i.name }}</option>\n                                        {% else %}\n                                            <option value=\"{{ i.pk }}\">{{ i.name }}</option>\n                                        {% endif %}\n                                    {% endfor %}\n                                </select>\n                            </div>\n                        </div>\n                        <div class=\"ak-jsch-modal-item ak-jsch-pt clearfix\">\n                            <span class=\"ak-jsch-item-left ak-left\">模块</span>\n                            <div class=\"ak-jsch-item-right ak-left\">\n                                <select id=\"selmoduleid\" name=\"moduleid\" class=\"ak-left ac-aselect col01\" required=\"\">\n                                    {% for i in  modulelist %}\n                                        {% if i == tcase.moduleid %}\n                                            <option value=\"{{ i.pk }}\" selected=\"selected\">{{ i.name }}</option>\n                                        {% else %}\n                                            <option value=\"{{ i.pk }}\">{{ i.name }}</option>\n                                        {% endif %}\n                                    {% endfor %}\n                                </select>\n                            </div>\n                        </div>\n                        <div class=\"ak-jsch-modal-item clearfix\"><span class=\"ak-left ak-jsch-item-left \">冒烟测试</span>\n                            <div class=\"sky-form col01 ak-left ac-ml10\">\n                                <label class=\"toggle\">\n                                    {% if tcase.issmoke %}\n                                        <input type=\"checkbox\" id=\"id_issmoke\" name=\"issmoke\" checked=\"checked\"\n                                               name=\"checkbox-toggle\">\n                                    {% else %}\n                                        <input type=\"checkbox\" id=\"id_issmoke\" name=\"issmoke\"\n                                               name=\"checkbox-toggle\">\n                                    {% endif %}\n                                    <i class=\"rounded-4x ak-aoffon-btn\"></i>\n                                </label>\n                            </div>\n                        </div>\n                        <div class=\"ak-jsch-modal-item ak-jsch-pt clearfix\">\n                            <span class=\"ak-jsch-item-left ak-left\">依赖用例</span>\n                            <div class=\"ak-jsch-item-right ak-left\">\n                                <input id=\"id_dependent\" name=\"dependent\" type=\"text\" placeholder=\"请输入依赖用例的编号\"\n                                       class=\"ac-acaseedit-input\" value=\"{{ tcase.dependent }}\"/>\n                            </div>\n                        </div>\n                        {#                        <div class=\"ak-jsch-modal-item ak-jsch-pt clearfix\">#}\n                        {#                            <span class=\"ak-jsch-item-left ak-left ac-acase-desc\">TestRail ID</span>#}\n                        {#                            <div class=\"ak-jsch-item-right ak-left\">#}\n                        {#                                <input id=\"id_testrailcaseid\" name=\"testrailcaseid\" type=\"text\"#}\n                        {#                                       placeholder=\"关联TestRail的用例编号\" class=\"ac-acaseedit-input\" value=\"{{ tcase.testrailcaseid }}\"/>#}\n                        {#                            </div>#}\n                        {#                        </div>#}\n\n                    </div>\n                </div>\n                <table class=\"table table-conde\" id=\"tab\" style=\"width: 100%\">\n                    <caption class=\"text-left\">\n                        <button type=\"button\" onclick=\"case_step_addtr();\" class=\"ac-btn-addcase orange ac-margin-tb15\">\n                            添加一行\n                        </button>\n                        <input class=\"ac-acaseedit-input\" id=\"rowid\" value=\"\" type=\"number\" placeholder=\"添加到第N行之后\">\n                    </caption>\n                    <thead>\n                    <th>Step No</th>\n                    <th>Step Descr</th>\n                    <th>Keyword</th>\n                    <th>Element</th>\n                    <th>Input</th>\n                    <th>操作</th>\n                    <input hidden=\"true\" id=\"linecounter\" value={{ steplist|length }} type='text'>\n                    </thead>\n                    <tbody>\n                    {% if steplist %}\n                        {% for j in steplist %}\n                            {% if forloop.counter == 1 %}\n                                <tr id=\"row1\">\n                                    <td>{{ forloop.counter }}</td>\n                                    <td><input name=\"descr\" class=\"ac-acaseedit-input\" placeholder=\"请输入步骤描述\"\n                                               type=\"input\" value=\"{{ j.descr }}\"></td>\n                                    <td><select id=\"id_keyword\" name=\"keyword\" class=\"ak-left ac-aselect col01\">\n                                        {% for i in  keywordlist %}\n                                            {% if i == j.keywordid %}\n                                                <option value=\"{{ i.pk }}\" selected=\"selected\">\n                                                    [{{ i.productid }}]{{ i.kwdescr }}</option>\n                                            {% else %}\n                                                <option value=\"{{ i.pk }}\">[{{ i.productid }}]{{ i.kwdescr }}</option>\n                                            {% endif %}\n                                        {% endfor %}\n                                    </select>\n                                    </td>\n                                    <td>\n                                        {% if j.elementid == None or j.elementid == \"\" %}\n                                            <input id=\"autocomplete_1\" name=\"autocomplete\"\n                                                   class=\"ui-autocomplete-input ac-element-input\" type=\"input\"\n                                                   value=\"\">\n                                            <input id=\"elementid_1\" type=\"hidden\" name=\"elementid\" value=\"None\">\n                                        {% else %}\n                                            <input id=\"autocomplete_1\" name=\"autocomplete\"\n                                                   class=\"ui-autocomplete-input ac-element-input\" type=\"input\"\n                                                   value=\"[{{ j.elementid.id }}][{{ j.elementid.moduleid.name }}]{{ j.elementid.descr }}\">\n                                            <input id=\"elementid_1\" type=\"hidden\" value=\"{{ j.elementid.id }}\"\n                                                   name=\"elementid\">\n                                        {% endif %}\n                                        {#                                <select id=\"id_elementid\" name=\"elementid\" class=\"ak-left ac-aselect col01\">#}\n                                        {#                                    <option value=\"None\">请选择可用元素</option>#}\n                                        {#                                    {% for i in elementlist %}#}\n                                        {#                                        {% if i == j.elementid %}#}\n                                        {#                                            <option value=\"{{ i.pk }}\" title=\"{{ i.pk }}\" selected=\"selected\">[{{ i.pk }}]{{ i.descr }}</option>#}\n                                        {#                                        {% else %}#}\n                                        {#                                            <option value=\"{{ i.pk }}\" title=\"{{ i.pk }}\">[{{ i.pk }}]{{ i.descr }}</option>#}\n                                        {#                                        {% endif %}#}\n                                        {#                                    {% endfor %}#}\n                                        {#                                </select>#}\n                                    </td>\n                                    <td><input name=\"inputtext\" class=\"ac-keywordtext-input\" placeholder=\"\" type=\"input\"\n                                               value=\"{{ j.inputtext }}\"></td>\n                                    <td><a title=\"上移\" class=\"ke-ablock\" onclick=\"up(this)\"><i\n                                            class=\"glyphicon glyphicon-chevron-up\"></i></a><a title=\"下移\"\n                                                                                              class=\"ke-ablock\"\n                                                                                              onclick=\"down(this)\"><i\n                                            class=\"glyphicon glyphicon-chevron-down\"></i></a><a title=\"复制\"\n                                                                                                class=\"ke-ablock\"\n                                                                                                onclick=\"case_step_copytr(this)\"><i\n                                            class=\"glyphicon glyphicon-copy\"></i></a></td>\n                                </tr>\n                            {% else %}\n                                <tr id=\"row{{ forloop.counter }}\">\n                                    <td>{{ forloop.counter }}</td>\n                                    <td><input name=\"descr\" class=\"ac-acaseedit-input\" placeholder=\"请输入步骤描述\"\n                                               type=\"input\" value=\"{{ j.descr }}\"></td>\n                                    <td>\n                                        <select id=\"id_keyword\" name=\"keyword\" class=\"ak-left ac-aselect col01\">\n                                            {% for i in  keywordlist %}\n                                                {% if i == j.keywordid %}\n                                                    <option value=\"{{ i.pk }}\" selected=\"selected\">\n                                                        [{{ i.productid }}]{{ i.kwdescr }}</option>\n                                                {% else %}\n                                                    <option value=\"{{ i.pk }}\">\n                                                        [{{ i.productid }}]{{ i.kwdescr }}</option>\n                                                {% endif %}\n                                            {% endfor %}\n                                        </select>\n                                    </td>\n                                    <td>\n                                        {% if j.elementid == None or j.elementid == \"\" %}\n                                            <input id=\"autocomplete_{{ forloop.counter }}\" name=\"autocomplete\"\n                                                   class=\"ui-autocomplete-input ac-element-input\" type=\"input\"\n                                                   value=\"\">\n                                            <input id=\"elementid_{{ forloop.counter }}\" type=\"hidden\" name=\"elementid\"\n                                                   value=\"None\">\n                                        {% else %}\n                                            <input id=\"autocomplete_{{ forloop.counter }}\" name=\"autocomplete\"\n                                                   class=\"ui-autocomplete-input ac-element-input\" type=\"input\"\n                                                   value=\"[{{ j.elementid.id }}][{{ j.elementid.moduleid.name }}]{{ j.elementid.descr }}\">\n                                            <input id=\"elementid_{{ forloop.counter }}\" type=\"hidden\"\n                                                   value=\"{{ j.elementid.id }}\" name=\"elementid\">\n                                        {% endif %}\n                                        {#                                <select id=\"id_elementid\" name=\"elementid\" class=\"ak-left ac-aselect col01\">#}\n                                        {#                                    <option value=\"None\">请选择可用元素</option>#}\n                                        {#                                    {% for i in elementlist %}#}\n                                        {#                                        {% if i == j.elementid %}#}\n                                        {#                                            <option value=\"{{ i.pk }}\" title=\"[{{ i.pk }}]{{ i.locmode }},{{ i.location }}\" selected=\"selected\">[{{ i.pk }}]{{ i.descr }}</option>#}\n                                        {#                                        {% else %}#}\n                                        {#                                            <option value=\"{{ i.pk }}\" title=\"[{{ i.pk }}]{{ i.locmode }},{{ i.location }}\">[{{ i.pk }}]{{ i.descr }}</option>#}\n                                        {#                                        {% endif %}#}\n                                        {#                                    {% endfor %}#}\n                                        {#                                </select>#}\n                                    </td>\n                                    <td><input name=\"inputtext\" class=\"ac-keywordtext-input\" placeholder=\"\" type=\"input\"\n                                               value=\"{{ j.inputtext }}\"></td>\n                                    <td>\n                                        <a title=\"上移\" class=\"ke-ablock\" onclick=\"up(this)\"><i\n                                                class=\"glyphicon glyphicon-chevron-up\"></i></a><a title=\"下移\"\n                                                                                                  class=\"ke-ablock\"\n                                                                                                  onclick=\"down(this)\"><i\n                                            class=\"glyphicon glyphicon-chevron-down\"></i></a><a title=\"删除\"\n                                                                                                class=\"ke-ablock\"\n                                                                                                onclick=\"deltr({{ forloop.counter }})\"><i\n                                            class=\"glyphicon glyphicon-trash\"></i></a><a title=\"复制\" class=\"ke-ablock\"\n                                                                                         onclick=\"case_step_copytr(this)\"><i\n                                            class=\"glyphicon glyphicon-copy\"></i></a>\n                                    </td>\n\n                                </tr>\n                            {% endif %}\n                        {% endfor %}\n                    {% endif %}\n                    </tbody>\n                    <tfoot></tfoot>\n                </table>\n                <button type=\"button\" onclick=\"case_step_addtr();\" class=\"ac-btn-addcase orange ac-margin-tb15\">添加一行\n                </button>\n                <div style=\"text-align: center;\">\n                    <input class=\"btn btn-sm btn-primary\" type=\"submit\" value=\"提交\">\n                    <input class=\"btn btn-sm btn-default\" type=\"reset\" value=\"重置\">\n                    <button onclick=\"goback();\" class=\"btn btn-sm btn-success\" role=\"button\">取消>></button>\n                </div>\n                <div><br/><br/></div>\n            </form>\n        </div>\n\n    </div>\n{% endblock %}\n{% block script %}\n    {% load static %}\n    <script type=\"text/javascript\" src=\"{% static 'js/casemanage.js' %}\"></script>\n    <script>\n        $(document).ready(function () {\n            $.ajaxSetup({\n                data: {csrfmiddlewaretoken: '{{ csrf_token }}'},\n            });\n            /*       【复制用例】         */\n            $('#case_copy').submit(function () {\n                $('[name=\"autocomplete\"]').each(function () {\n                    if ($(this).val() == '') {\n                        $(this).next().val('None')\n                    }\n                });\n                $.ajax({\n                    type: \"POST\",\n                    data: $(this).serialize(),\n                    //data:{casedesc:casedesc, isenabled:isenabled, projectid:projectid, moduleid:moduleid,dependent:dependent,descr:descr,keyword:keyword,elementid:elementid,inputtext:inputtext},\n                    url: \"/func/case/copy/{{ tcase.pk }}/\",\n                    cache: false,\n                    async: false,\n                    dataType: \"html\",\n                    success: function (result, statues, xml) {\n                        $('#log_info').addClass('bg-primary');\n                        $('#log_info').css('display', 'block');\n                        $('#log_info').html(result);\n                        setTimeout(\"$('#log_info').css('display','none');\", 1500);\n                        window.location.href = \"{% url 'caselist' %}\"\n                    },\n                    error: function () {\n                        $('#log_info').addClass('bg-primary');\n                        $('#log_info').css('display', 'block');\n                        $('#log_info').html('保存失败');\n                        setTimeout(\"$('#log_info').css('display','none');\", 1500);\n\n                    }\n                });\n                return false;\n            });\n\n        });\n    </script>\n{% endblock %}"
  },
  {
    "path": "automatic/templates/testcase/caseedit.html",
    "content": "{% extends 'frame.html' %}\n{% block title %}Automagic{% endblock %}\n{% block slideshow %}\n    <div class=\"ak-zper-midbox ak-jsch-mid\">\n        <div class=\"ak-zper-inbox-title ak-jsch-title clearfix\">\n            <div class=\"ak-left ak-jsch-row3 ak-zper-fix-btnbox\">\n                <span class=\"ak-zper-remindback\"></span>\n                <span class=\"inbox-text\">用例编辑</span>\n            </div>\n            <div id=\"log_info\" class=\"ac-addtips\"></div>\n            {#               <div class=\"ak-jsch-rightbox\">#}\n            {#                    <div class=\"btn-group ak-jsch-dropdown\">#}\n            {#                         <button type=\"button\" class=\"btn btn-default dropdown-toggle ak-sch-icon\" data-toggle=\"dropdown\"></button>#}\n            {#                         <ul class=\"dropdown-menu\" role=\"menu\">#}\n            {#                             <li><a href=\"index1.html\"><span class=\"ak-sch-icon schedule-icon\"></span>日程</a></li>#}\n            {#                             <li><a href=\"schedule-day.html\"><span class=\"ak-sch-icon day-icon\"></span>天</a></li>#}\n            {#                             <li><a href=\"schedule.html\"><span class=\"ak-sch-icon week-icon\"></span>周</a></li>#}\n            {#                         </ul>#}\n            {#                   </div>#}\n            {#                   <a class=\"ak-jsch-jia\" data-toggle=\"modal\" data-target=\"#addEvent-Modal\"></a>#}\n            {#               </div>#}\n        </div>\n\n        <div class=\"col-md-12\">\n            <form id=\"case_edit\">\n                {% csrf_token %}\n                <div class=\"ak-jsch-modal-row col01\">\n                    <div class=\"ak-jsch-pos\">\n                        <div class=\"ak-jsch-point\">\n                        </div>\n                    </div>\n                    <div class=\"ak-jsch-modal-text col01 clearfix\">\n                        <span class=\"ak-jsch-item-left ak-left ac-acase-desc\">用例描述</span>\n                        <div class=\"ak-jsch-item-right col02 ak-left\">\n                            <input id=\"casedesc\" name=\"casedesc\" class=\"ak-jsch-modal-input\" type=\"text\" required=\"\"\n                                   placeholder=\"测试用例描述\" value=\"{{ tcase.casedesc }}\">\n                        </div>\n                    </div>\n\n                </div>\n                <div class=\"ak-jsch-modal-row col01 ak-jsch-padding\">\n                    <div class=\"ak-jsch-modal-text\">\n                        <div class=\"ak-jsch-modal-item clearfix\"><span class=\"ak-left ak-jsch-item-left \">状态</span>\n                            <div class=\"sky-form col01 ak-left ac-ml10\">\n                                <label class=\"toggle\">\n                                    {% if tcase.isenabled %}\n                                        <input type=\"checkbox\" id=\"id_isenabled\" name=\"isenabled\" checked=\"checked\"\n                                               name=\"checkbox-toggle\">\n                                    {% else %}\n                                        <input type=\"checkbox\" id=\"id_isenabled\" name=\"isenabled\"\n                                               name=\"checkbox-toggle\">\n                                    {% endif %}\n                                    <i class=\"rounded-4x ak-aoffon-btn\"></i>\n                                </label>\n                            </div>\n                        </div>\n                        <div class=\"ak-jsch-modal-item ak-jsch-pt clearfix\">\n                            <span class=\"ak-jsch-item-left ak-left\">项目</span>\n                            <input id=\"caseproductid\" name=\"caseproductname\" hidden=\"true\"\n                                   value=\"{{ project.productid.id }}\">\n                            <div class=\"ak-jsch-item-right ak-left\">\n                                <select id=\"selprojectid\" name=\"projectid\" class=\"ak-left ac-aselect col01\" required=\"\">\n                                    {% for i in  projectlist %}\n                                        {% if i == tcase.projectid %}\n                                            <option value=\"{{ i.pk }}\" selected=\"selected\">{{ i.name }}</option>\n                                        {% else %}\n                                            <option value=\"{{ i.pk }}\">{{ i.name }}</option>\n                                        {% endif %}\n                                    {% endfor %}\n                                </select>\n                            </div>\n                        </div>\n                        <div class=\"ak-jsch-modal-item ak-jsch-pt clearfix\">\n                            <span class=\"ak-jsch-item-left ak-left\">模块</span>\n                            <div class=\"ak-jsch-item-right ak-left\">\n                                <select id=\"selmoduleid\" name=\"moduleid\" class=\"ak-left ac-aselect col01\" required=\"\">\n                                    {% for i in  modulelist %}\n                                        {% if i == tcase.moduleid %}\n                                            <option value=\"{{ i.pk }}\" selected=\"selected\">{{ i.name }}</option>\n                                        {% else %}\n                                            <option value=\"{{ i.pk }}\">{{ i.name }}</option>\n                                        {% endif %}\n                                    {% endfor %}\n                                </select>\n                            </div>\n                        </div>\n                        <div class=\"ak-jsch-modal-item clearfix\"><span class=\"ak-left ak-jsch-item-left \">冒烟测试</span>\n                            <div class=\"sky-form col01 ak-left ac-ml10\">\n                                <label class=\"toggle\">\n                                    {% if tcase.issmoke %}\n                                        <input type=\"checkbox\" id=\"id_issmoke\" name=\"issmoke\" checked=\"checked\"\n                                               name=\"checkbox-toggle\">\n                                    {% else %}\n                                        <input type=\"checkbox\" id=\"id_issmoke\" name=\"issmoke\"\n                                               name=\"checkbox-toggle\">\n                                    {% endif %}\n                                    <i class=\"rounded-4x ak-aoffon-btn\"></i>\n                                </label>\n                            </div>\n                        </div>\n                        <div class=\"ak-jsch-modal-item ak-jsch-pt clearfix\">\n                            <span class=\"ak-jsch-item-left ak-left\">依赖用例</span>\n                            <div class=\"ak-jsch-item-right ak-left\">\n                                <input id=\"id_dependent\" name=\"dependent\" type=\"text\" placeholder=\"请输入依赖用例的编号\"\n                                       class=\"ac-acaseedit-input\" value=\"{{ tcase.dependent }}\"/>\n                            </div>\n                        </div>\n{#                        <div class=\"ak-jsch-modal-item ak-jsch-pt clearfix\">#}\n{#                            <span class=\"ak-jsch-item-left ak-left ac-acase-desc\">TestRail ID</span>#}\n{#                            <div class=\"ak-jsch-item-right ak-left\">#}\n{#                                <input id=\"id_testrailcaseid\" name=\"testrailcaseid\" type=\"text\"#}\n{#                                       placeholder=\"关联TestRail的用例编号\" class=\"ac-acaseedit-input\"#}\n{#                                       value=\"{{ tcase.testrailcaseid }}\"/>#}\n{#                            </div>#}\n{#                        </div>#}\n\n                    </div>\n                </div>\n                <table class=\"table table-conde\" id=\"tab\" style=\"width: 100%\">\n                    <caption class=\"text-left\">\n                        <button type=\"button\" onclick=\"case_step_addtr();\" class=\"ac-btn-addcase orange ac-margin-tb15\">\n                            添加一行\n                        </button>\n                        <input class=\"ac-acaseedit-input\" id=\"rowid\" value=\"\" type=\"number\" placeholder=\"添加到第N行之后\">\n                    </caption>\n                    <thead>\n                    <th>Step No</th>\n                    <th>Step Descr</th>\n                    <th>Keyword</th>\n                    <th>Element</th>\n                    <th>Input</th>\n                    <th>操作</th>\n                    <input hidden=\"true\" id=\"linecounter\" value={{ steplist|length }} type='text'>\n                    </thead>\n                    <tbody>\n                    {% if steplist %}\n                        {% for j in steplist %}\n                            <tr id=\"row{{ forloop.counter }}\">\n                                <td>{{ forloop.counter }}<input type=\"hidden\" name=\"stepid\" value=\"{{ forloop.counter }}\">\n                                </td>\n                                <td><input name=\"descr\" class=\"ac-acaseedit-input\" placeholder=\"请输入步骤描述\" type=\"input\"\n                                           value=\"{{ j.descr }}\"></td>\n                                <td>\n                                    <select id=\"id_keyword\" name=\"keyword\" class=\"ak-left ac-aselect col01\">\n                                        {% for i in  keywordlist %}\n                                            {% if i == j.keywordid %}\n                                                <option value=\"{{ i.pk }}\" selected=\"selected\">\n                                                    [{{ i.productid }}]{{ i.kwdescr }}</option>\n                                            {% else %}\n                                                <option value=\"{{ i.pk }}\">[{{ i.productid }}]{{ i.kwdescr }}</option>\n                                            {% endif %}\n                                        {% endfor %}\n                                    </select>\n                                </td>\n                                <td>\n                                    {% if j.elementid == None or j.elementid == \"\" %}\n                                        <input id=\"autocomplete_{{ forloop.counter }}\" name=\"autocomplete\"\n                                               class=\"ui-autocomplete-input ac-element-input\" type=\"input\" value=\"\">\n                                        <input id=\"elementid_{{ forloop.counter }}\" type=\"hidden\" name=\"elementid\"\n                                               value=\"None\">\n                                    {% else %}\n                                        <input id=\"autocomplete_{{ forloop.counter }}\" name=\"autocomplete\"\n                                               class=\"ui-autocomplete-input ac-element-input\" type=\"input\"\n                                               value=\"[{{ j.elementid.id }}][{{ j.elementid.moduleid.name }}]{{ j.elementid.descr }}\">\n                                        <input id=\"elementid_{{ forloop.counter }}\" type=\"hidden\"\n                                               value=\"{{ j.elementid.id }}\" name=\"elementid\">\n                                    {% endif %}\n                                    {#                                <select id=\"id_elementid\" name=\"elementid\" class=\"ak-left ac-aselect col01\">#}\n                                    {#                                    <option value=\"None\">请选择可用元素</option>#}\n                                    {#                                    {% for i in elementlist %}#}\n                                    {#                                        {% if i == j.elementid %}#}\n                                    {#                                            <option value=\"{{ i.pk }}\" title=\"[{{ i.pk }}]{{ i.locmode }},{{ i.location }}\" selected=\"selected\">[{{ i.pk }}]{{ i.descr }}</option>#}\n                                    {#                                        {% else %}#}\n                                    {#                                            <option value=\"{{ i.pk }}\" title=\"[{{ i.pk }}]{{ i.locmode }},{{ i.location }}\">[{{ i.pk }}]{{ i.descr }}</option>#}\n                                    {#                                        {% endif %}#}\n                                    {#                                    {% endfor %}#}\n                                    {#                                </select>#}\n                                </td>\n                                <td><input name=\"inputtext\" class=\"ac-keywordtext-input\" placeholder=\"\" type=\"input\"\n                                           value=\"{{ j.inputtext }}\"></td>\n                                <td>\n                                    <a title=\"上移\" class=\"ke-ablock\" onclick=\"up(this)\"><i\n                                            class=\"glyphicon glyphicon-chevron-up\"></i></a><a title=\"下移\"\n                                                                                              class=\"ke-ablock\"\n                                                                                              onclick=\"down(this)\"><i\n                                        class=\"glyphicon glyphicon-chevron-down\"></i></a>{% if forloop.counter != 1 %}\n                                    <a title=\"删除\" class=\"ke-ablock\" onclick=\"deltr({{ forloop.counter }})\"><i\n                                            class=\"glyphicon glyphicon-trash\"></i></a>{% endif %}<a title=\"复制\"\n                                                                                                    class=\"ke-ablock\"\n                                                                                                    onclick=\"case_step_copytr(this)\"><i\n                                        class=\"glyphicon glyphicon-copy\"></i></a>\n                                </td>\n\n                            </tr>\n                        {% endfor %}\n                    {% endif %}\n                    </tbody>\n                    <tfoot></tfoot>\n                </table>\n                <button type=\"button\" onclick=\"case_step_addtr();\" class=\"ac-btn-addcase orange ac-margin-tb15\">添加一行\n                </button>\n                <div style=\"text-align: center;\">\n                    <input class=\"btn btn-sm btn-primary\" type=\"submit\" value=\"提交\">\n                    <input class=\"btn btn-sm btn-default\" type=\"reset\" value=\"重置\">\n                    <a onclick=\"goback();\" class=\"btn btn-sm btn-success\">返回>></a>\n                </div>\n                <div><br/><br/></div>\n            </form>\n        </div>\n\n    </div>\n{% endblock %}\n{% block script %}\n    {% load static %}\n    <script type=\"text/javascript\" src=\"{% static 'js/casemanage.js' %}\"></script>\n    <script>\n        $(document).ready(function () {\n            $.ajaxSetup({\n                data: {csrfmiddlewaretoken: '{{ csrf_token }}'},\n            });\n            /*       编辑测试用例         */\n            $('#case_edit').submit(function () {\n                $('[name=\"autocomplete\"]').each(function () {\n                    if ($(this).val() == '') {\n                        $(this).next().val('None')\n                    }\n                });\n                $.ajax({\n                    type: \"POST\",\n                    data: $(this).serialize(),\n                    //data:{casedesc:casedesc, isenabled:isenabled, projectid:projectid, moduleid:moduleid,dependent:dependent,descr:descr,keyword:keyword,elementid:elementid,inputtext:inputtext},\n                    url: \"/func/case/update/{{ tcase.pk }}/\",\n                    cache: false,\n                    async: false,\n                    dataType: \"html\",\n                    success: function (result, statues, xml) {\n                        $('#log_info').addClass('bg-primary');\n                        $('#log_info').css('display', 'block');\n                        $('#log_info').html(result);\n                        setTimeout(\"$('#log_info').css('display','none');\", 1500);\n                        window.location.href = \"/func/case/view/{{ tcase.pk }}/\"\n                    },\n                    error: function () {\n                        $('#log_info').addClass('bg-primary');\n                        $('#log_info').css('display', 'block');\n                        $('#log_info').html('保存失败');\n                        setTimeout(\"$('#log_info').css('display','none');\", 1500);\n\n                    }\n                });\n                return false;\n            });\n        });\n    </script>\n{% endblock %}\n"
  },
  {
    "path": "automatic/templates/testcase/caselist.html",
    "content": "{% extends 'nav.html' %}\n{% block title %}Case List{% endblock %}\n{% block slideshow %}\n    <br/><br/><br/>\n    <form class=\"form-inline\" role=\"form\" action=\"\" method=\"GET\">\n    {% if caselist %}\n        <div class=\"panel panel-default\">\n    <div class=\"panel-heading\">\n          <div class=\"form-group\">\n            <select name=\"projectid\" class=\"form-control\">\n              <option value=\"\">所属项目</option>\n              {% for i in caselist %}\n                 <option value=\"{{ i.projectid }}\" {% if request.GET.projectid  == i.projectid %}selected{% endif %}>{{ i.projectid }}</option>\n              {% endfor %}\n            </select>\n          </div>\n          <div class=\"form-group\">\n            <select name=\"moduleid\" class=\"form-control\">\n              <option value=\"\">模 块</option>\n              {% for i in caselist %}\n                    <option value=\"{{ i.moduleid }}\" {% if request.GET.modulename  == i.moduleid %}selected{% endif %}>{{ i.moduleid }}</option>\n                {% endfor %}\n            </select>\n          </div>\n          <div class=\"form-group\">\n            <select name=\"casestatus\" class=\"form-control\">\n              <option value=\"\">状态</option>\n                 <option value=\"True\" >启用</option>\n                 <option value=\"False\" >禁用</option>\n            </select>\n          </div>\n          <div class=\"form-group\">\n          <input type=\"input\" name=\"keyword\" class=\"form-control\" placeholder=\"Please input Keyword\" value=\"{{ request.GET.keyword }}\">\n          </div>\n          <button type=\"submit\" class=\"btn btn-primary\">Search</button>\n        <div align=\"right\" class=\"form-group\"><a href=\"/case/add/\" class=\"btn btn-primary\">Add Case</a></div>\n      </div>\n        <table class=\"table table-striped table-bordered table-hover table-condensed\">\n        <thead>\n          <tr>\n              <th>Case ID</th>\n              <th>Module Name</th>\n              <th>Case Descr</th>\n              <th>Case Status</th>\n              <th>Create At</th>\n              <th>Create Time</th>\n              <th>UpdateAt</th>\n              <th>Update Time</th>\n          <th></th>\n          </tr>\n        </thead>\n        <tbody>\n          {% for case in caselist %}\n            <tr>\n                <td>{{ case.id }}</td>\n                <td>{{ case.moduleid.name }}</td>\n                <td><a href=\"{% url 'caseview' case.id %}\"/> {{ case.casedesc }}</td>\n                <td>{{ case.isenabled }}</td>\n                <td>{{ case.createat }}</td>\n                <td>{{ case.createtime|date:'Y-m-d H:i:s' }}</td>\n                <td>{{ case.createat }}</td>\n                <td>{{ case.updatetime|date:'Y-m-d H:i:s' }}</td>\n                <th>\n                    <a href=\"{% url 'caseupdate' case.id %}\" class=\"btn btn-primary\" role=\"button\">Edit</a>\n                    <a href=\"{% url 'casedel' case.id %}\" class=\"btn btn-primary\" role=\"button\" onclick=\"return confirm('Are you Sure Deleted.')\">Delete</a>\n                </th>\n            </tr>\n          {% endfor %}\n        </tbody>\n      </table>\n    </div>\n        {% if is_paginated %}\n        <div class=\"panel-default\">\n        <ul class=\"pagination\">\n          <li><a href=\"{{ request.path }}?page=1\">«</a></li>\n          {% if page_obj.has_previous %}\n            <li><a href=\"{{ request.path }}?&page={{ page_obj.previous_page_number }}\">上一页</a></li>\n          {% else %}\n            <li class=\"previous disabled\"><a>上一页</a></li>\n          {% endif %}\n          {% for i in page_obj.paginator.page_range %}\n            <li {% if page_obj.number == i %}class=\"active\"{% endif %}><a href=\"{{ request.path }}?page={{ i }}\">{{ i }}</a></li>\n          {% endfor %}\n          {% if page_obj.has_next %}\n            <li><a href=\"{{ request.path }}?page={{ page_obj.next_page_number }}\">下一页</a></li>\n          {% else %}\n            <li class=\"previous disabled\"><a>下一页</a></li>\n          {% endif %}\n          <li><a href=\"{{ request.path }}?page={{ page_obj.paginator.num_pages }}\">»</a></li>\n            <li><span>This is {{ page_obj.number }}</span></li>\n        </ul>\n    </div>\n        {% endif %}\n    {% else %}\n        <p> No msg!!!</p>\n    {% endif %}\n  </form>\n{% endblock %}\n"
  },
  {
    "path": "automatic/templates/testcase/caseview.html",
    "content": "{% extends 'frame.html' %}\n{% block title %}Automagic{% endblock %}\n{% block slideshow %}\n    <div class=\"ak-zper-midbox ak-jsch-mid\">\n        <div class=\"ak-zper-inbox-title ak-jsch-title clearfix\">\n            <div class=\"ak-left ak-jsch-row3 ak-zper-fix-btnbox\">\n                <span class=\"ak-zper-remindback\"></span>\n                <span class=\"inbox-text\">用例详细</span>\n            </div>\n            <div class=\"text-right case-next\">\n                <a onclick=\"prev_case({{ case.id }})\" class=\"btn btn-sm btn-info\">上一条</a>\n                <a onclick=\"next_case({{ case.id }})\" class=\"btn btn-sm btn-info\">下一条</a>\n            </div>\n        </div>\n\n        <!--      ---------------------华丽的分割线 main------------------------ -->\n        <div class=\"col-md-12\">\n            <div class=\"ac-margin-tb15\">\n                <div class=\"list-group\">\n                    <a class=\"list-group-item active\"><h4 class=\"list-group-item-heading\">{{ case.id }}</h4><label class=\"list-group-item-text\">{{ case.casedesc }}</label></a>\n                    <hr>\n                    <h5 class=\"list-group-item-heading\">状态：{% if case.isenabled == True %}\n                                <span ng-if=\"f.flag==true\" class=\"label label-success ng-scope\">启 用</span>\n                            {% else %}\n                                <span ng-if=\"f.flag==false\" class=\"label label-danger ng-scope\">停 用</span>\n                            {% endif %}</h5>\n                    <h5 class=\"list-group-item-heading\">项目：{{ case.projectid.name }}</h5>\n                    <h5 class=\"list-group-item-heading\">模块：{{ case.moduleid.name }}</h5>\n                    <h5 class=\"list-group-item-heading\">冒烟测试：{% if case.issmoke == True %}\n                                <span ng-if=\"f.flag==true\" class=\"label label-success ng-scope\">是</span>\n                            {% else %}\n                                <span ng-if=\"f.flag==false\" class=\"label label-default ng-scope\">否</span>\n                            {% endif %}</h5>\n{#                    <h5 class=\"list-group-item-heading\">TRCaseID：<span class=\"label label-info\">{{ case.testrailcaseid }}</span></h5>#}\n                    <h5 class=\"list-group-item-heading\">创建时间</h5>{{ case.createat }}|{{ case.createtime|date:'Y-m-d H:i:s' }}\n                    <h5 class=\"list-group-item-heading\">更新时间</h5>{{ case.updateat }}|{{ case.updatetime|date:'Y-m-d H:i:s' }}\n                </div>\n                <!--\n                <table  class=\"table table-condensed\">\n                    <thead>\n                    <h1><span class=\"label label-info\">{{ case.id }}</span></h1>\n                    </thead>\n                    <tr>\n                        <th>描述:</th>\n                        <td>{{ case.casedesc }}</td>\n                    </tr>\n                    <tr>\n                        <th>状态:</th>\n                        <td>\n                            {% if case.isenabled == True %}\n                                <span ng-if=\"f.flag==true\" class=\"label label-success ng-scope\">启 用</span>\n                            {% else %}\n                                <span ng-if=\"f.flag==false\" class=\"label label-danger ng-scope\">停 用</span>\n                            {% endif %}\n                        </td>\n                    </tr>\n                    <tr>\n                        <th>项目:</th>\n                        <th>{{ case.projectid }}</th>\n                    </tr>\n                    <tr>\n                        <th>模块:</th>\n                        <td>{{ case.moduleid }}</td>\n                    </tr>\n                    <tr>\n                        <th>冒烟测试:</th>\n                        <td>\n                            {% if case.issmoke == True %}\n                                <span ng-if=\"f.flag==true\" class=\"label label-success ng-scope\">是</span>\n                            {% else %}\n                                <span ng-if=\"f.flag==false\" class=\"label label-default ng-scope\">否</span>\n                            {% endif %}\n                        </td>\n                    </tr>\n                    <tr>\n                        <th>TRCaseID:</th>\n                        <td>{{ case.testrailcaseid }}</td>\n                    </tr>\n                    <tr>\n                        <th>创建于:</th>\n                        <td>{{ case.createat }}|{{ case.createtime|date:'Y-m-d H:i:s' }}</td>\n                    </tr>\n                    <tr>\n                        <th>更新于:</th>\n                        <td>{{ case.updateat }}|{{ case.updatetime|date:'Y-m-d H:i:s' }}</td>\n                    </tr>\n                </table>-->\n\n                <div style=\"text-align: right\"><h2><a href=\"{% url 'caseupdate' case.id %}\" class=\"label label-primary\"\n                                                      role=\"button\">编辑</a></h2></div>\n\n                <table class=\"table table-striped table-bordered table-hover table-condensed\">\n                    <thead>\n                    <tr>\n                        <th>Step.</th>\n                        <th>Description</th>\n                        <th>KeyWord</th>\n                        <th>Element</th>\n                        <th>InputText</th>\n                    </tr>\n                    </thead>\n                    <tbody>\n                    {% for step in steplist %}\n                        <tr>\n                            <td>{{ forloop.counter }}</td>\n                            <td>{{ step.descr }}</td>\n                            <td>{{ step.keywordid.keyword }}</td>\n                            <td class=\"ac-alist-descp ac-alist-width-overflow\" title=\"{{ step.elementid.location }}\">\n                                {% if step.elementid != None %}\n                                    [{{ step.elementid.id }}]{{ step.elementid.locmode }},{{ step.elementid.location }}\n                                {% endif %}\n                            </td>\n                            <td>{{ step.inputtext }}</td>\n\n                        </tr>\n\n                    {% endfor %}\n                    </tbody>\n                </table>\n                <p><a onclick=\"goback();\" class=\"btn btn-sm btn-success\">返回>></a></p>\n            </div>\n        </div>\n        <!--      ---------------------华丽的分割线 main end------------------------ -->\n\n    </div>\n{% endblock %}\n{% block script %}\n    <script>\n        /* case 上一条 */\n        function next_case(caseid) {\n            $.ajax({\n                type: \"GET\",\n                data: {'caseid': caseid},\n                url: \"/func/case/caselist/\",\n                cache: false,\n                dataType: \"html\",\n\n                success: function (result, TextStatus, xml) {\n                    if (result.length > 0) {\n                        var caselist = result.split(',')\n                        for(var i=0; i < caselist.length; i++){\n                            if (caselist[i] == caseid){\n                                var next_id = i+1\n                                next_id+1 === caselist.length ? window.location.href=\"/func/case/view/\"+caselist[i]+\"/\" : window.location.href=\"/func/case/view/\"+caselist[next_id]+\"/\"\n                            }\n                        }\n                    }\n                }\n            });\n        }\n        /* case 下一条*/\n        function prev_case(caseid) {\n            $.ajax({\n                type: \"GET\",\n                data: {'caseid': caseid},\n                url: \"/func/case/caselist/\",\n                cache: false,\n                dataType: \"html\",\n\n                success: function (result, TextStatus, xml) {\n                    if (result.length > 0) {\n                        var caselist = result.split(',')\n                        for(var i=0; i < caselist.length; i++){\n                            if (caselist[i] == caseid){\n                                var prev_id = i-1\n                                prev_id < 0 ? window.location.href=\"/func/case/view/\"+caselist[0]+\"/\":window.location.href=\"/func/case/view/\"+caselist[prev_id]+\"/\"\n                            }\n                        }\n                    }\n                }\n            });\n        }\n    </script>\n{% endblock %}"
  },
  {
    "path": "automatic/templates/testtask/taskadd.html",
    "content": "{% extends 'frame.html' %}\n{% block title %}Automagic{% endblock %}\n{% block slideshow %}\n\n    <div class=\"ak-zper-midbox ak-jsch-mid\">\n        <div class=\"ak-zper-inbox-title ak-jsch-title clearfix\">\n            <div class=\"ak-left ak-jsch-row3 ak-zper-fix-btnbox\">\n                <span class=\"ak-zper-remindback\"></span>\n                <span class=\"inbox-text\">添加任务</span>\n            </div>\n            <div id=\"log_info\" class=\"ac-addtips\"></div>\n            <select id=\"selproductid\" name=\"productname\" class=\"ak-right ak-left ac-aselect ac-margint8\">\n                <option value=\"0\">-产品名称-</option>\n                {% for product in userandproduct %}\n                    {% if product.username == request.user %}\n                        <option value=\"{{ product.productname.id }}\"\n                                {% if request.GET.productname  == product.productname.name %}selected{% endif %}>{{ product.productname.name }}</option>\n                    {% endif %}\n                {% endfor %}\n            </select>\n        </div>\n\n        <div class=\"col-md-12\">\n            <form method='post' id=\"task_add\">\n                {% csrf_token %}\n                <div class=\"ak-jsch-modal-row col01\">\n                    <div class=\"ak-jsch-pos\">\n                        <div class=\"ak-jsch-point\">\n                        </div>\n                    </div>\n                    <div class=\"ak-jsch-modal-text col01 clearfix\">\n                        <span class=\"ak-jsch-item-left ak-left \">任务描述</span>\n                        <div class=\"ak-jsch-item-right col02 ak-left\">\n                            <input id=\"id_taskname\" name=\"taskname\" class=\"ak-jsch-modal-input\" type=\"text\" required=\"\"\n                                   placeholder=\"任务描述\">\n                        </div>\n                    </div>\n                </div>\n                <div class=\"ak-jsch-modal-row col01 ak-jsch-padding\">\n                    <div class=\"ak-jsch-modal-text\">\n                        <div class=\"ak-jsch-modal-item clearfix\"><span class=\"ak-left ak-jsch-item-left \">任务类型</span>\n                            <div style=\"margin-top:4px;\">\n                                <label>&nbsp&nbsp<input class=\"radioitem\" id=\"runcase\" type=\"radio\" name=\"tasktype\"\n                                                        value=\"1\" checked=\"checked\">执行用例</label>\n{#                                <label>&nbsp&nbsp<input class=\"radioitem\" id=\"syncase\" type=\"radio\" name=\"tasktype\"#}\n{#                                                        value=\"2\">同步用例</label>#}\n                                <label>&nbsp&nbsp<input class=\"radioitem\" id=\"connjenkins\" type=\"radio\" name=\"tasktype\"\n                                                        value=\"3\">关联Jenkins</label>\n                            </div>\n                        </div>\n                        <div class=\"ak-jsch-modal-item ak-jsch-pt clearfix ac-paddingt0\">\n{#                            <div id=\"testrailrunid\" class=\"ak-jsch-modal-item clearfix\"><span#}\n{#                                    class=\"ak-left ak-jsch-item-left \">RunID&nbsp</span>#}\n{#                                <input type=\"text\" class=\"ac-acaseedit-input ac-margin110\" name=\"testrailrunid\">#}\n{#                            </div>#}\n                            <div class=\"ak-jsch-modal-item clearfix\"><span\n                                        class=\"ak-left ak-jsch-item-left \">用例类型</span>\n\n                                        <select id=\"issmoke\" name=\"issmoke\" class=\"ak-left ac-aselect col01 ac-margin110\"\n                                        required=\"\">\n                                            <option value=\"0\" selected>系统测试</option>\n                                            <option value=\"1\">冒烟测试</option>\n\n                                </select>\n                                </div>\n\n                            <div id=\"testrailsuites\" class=\"ak-jsch-modal-item clearfix\" hidden=\"true\"><span\n                                    class=\"ak-left ak-jsch-item-left \">SuitesID&nbsp</span>\n                                <input type=\"text\" class=\"ac-acaseedit-input ac-margin110\" name=\"testrailsuites\">\n                            </div>\n\n                            <div id=\"testsectionid\" class=\"ak-jsch-modal-item clearfix ac-margint10\" hidden=\"true\"><span\n                                    class=\"ak-left ak-jsch-item-left \">SectionID&nbsp</span>\n                                <input type=\"text\" class=\"ac-acaseedit-input ac-margin110\" name=\"testsectionid\">\n                            </div>\n                            <div id=\"jenkins_server_url\" class=\"ak-jsch-modal-item clearfix ac-margint10\" hidden=\"true\">\n                                <span class=\"ak-left ak-jsch-item-left \">JenkinsURL&nbsp</span>\n                                <input type=\"text\" class=\"ac-acaseedit-input ac-margin110 ac-acode-desc\"\n                                       name=\"jenkins_server_url\">\n                            </div>\n                            <div id=\"user_id\" class=\"ak-jsch-modal-item clearfix ac-margint10\" hidden=\"true\"><span\n                                    class=\"ak-left ak-jsch-item-left \">UserID&nbsp</span>\n                                <input type=\"text\" class=\"ac-acaseedit-input ac-margin110 ac-acode-desc\" name=\"user_id\">\n                            </div>\n                            <div id=\"api_token\" class=\"ak-jsch-modal-item clearfix ac-margint10\" hidden=\"true\"><span\n                                    class=\"ak-left ak-jsch-item-left \">ApiToken&nbsp</span>\n                                <input type=\"text\" class=\"ac-acaseedit-input ac-margin110 ac-acode-desc\"\n                                       name=\"api_token\">\n                            </div>\n                            <div id=\"build_name\" class=\"ak-jsch-modal-item clearfix ac-margint10\" hidden=\"true\"><span\n                                    class=\"ak-left ak-jsch-item-left \">BuildName&nbsp</span>\n                                <input type=\"text\" class=\"ac-acaseedit-input ac-margin110 ac-acode-desc\"\n                                       name=\"build_name\">\n                            </div>\n                        </div>\n                        <div class=\"ak-jsch-modal-item ak-jsch-pt clearfix ac-paddingt0\">\n                            <span class=\"ak-jsch-item-left ak-left\">项目</span>\n                            <div class=\"ak-jsch-item-right ak-left\">\n                                <select id=\"selprojectid_task\" name=\"projectid\" class=\"ak-left ac-aselect col01\"\n                                        required=\"\">\n                                    <option value=\"0\">所属项目</option>{% for i in  projectlist %}\n                                    <option value=\"{{ i.pk }}\">{{ i.name }}</option>{% endfor %}</select>\n                            </div>\n                        </div>\n                        <div class=\"ak-jsch-modal-item ak-jsch-pt clearfix ac-paddingt0\">\n                            <div class=\"ak-jsch-item-right ak-left\">\n                                <ul id=\"treeDemo\" class=\"ztree\"\n                                    style=\"height:350px; overflow:auto;font-family:verdana;border-radius:6px;border:2px solid #EE872A;\"></ul>\n                            </div>\n                        </div>\n                        <div class=\"ak-jsch-modal-item ak-jsch-pt clearfix\" id=\"customParameters\">\n                            <h5><b>自定义参数</b></h5>\n                            <div class=\"ak-jsch-item-right ak-left\">\n                                <ul style=\"height:300px; overflow:auto;font-family:verdana;border-radius:6px;border:1px solid #c1c1c1; ac-paddingt0\">\n                                    <table class=\"table\" id=\"tab\" style=\"width:72%\">\n                                        <caption class=\"text-left\">\n                                            <button type=\"button\" onclick=\"addtr();\"\n                                                    class=\"text-left ac-btn-adduser blue ac-margin-tb15\">添加一行\n                                            </button>\n                                            <input class=\"ac-acaseedit-input\" id=\"rowid\" value=\"\" type=\"number\"\n                                                   placeholder=\"添加到第N行之后\">\n                                        </caption>\n                                        <thead>\n                                        <th>No</th>\n                                        <th>描述</th>\n                                        <th>参数编码</th>\n                                        <th>参数值</th>\n                                        <th>操作</th>\n                                        <input hidden=\"true\" id=\"linecounter\" value=1 type='text'>\n                                        </thead>\n                                        <tbody>\n                                        <tr id=\"row1\">\n                                            <td>1</td>\n                                            <td><input name=\"codedescr\" class=\"ac-acaseedit-input\" placeholder=\"参数描述\"\n                                                       type=\"input\"></td>\n                                            <td><input name=\"codename\" class=\"ac-acaseedit-input\"\n                                                       placeholder=\"参数编码(MWIP)\" type=\"input\"></td>\n                                            <td><input name=\"codevalue\" class=\"ac-acaseedit-input ac-acode-desc\"\n                                                       placeholder=\"参数值\" type=\"input\"></td>\n                                            <td></td>\n                                        </tr>\n                                        </tbody>\n                                        <tfoot class=\"text-left\">\n\n                                        </tfoot>\n                                    </table>\n                                </ul>\n                            </div>\n                        </div>\n                        <div style=\"text-align: center;\">\n                            <input class=\"btn btn-sm btn-primary\" type=\"submit\" value=\"提交\">\n                            <input class=\"btn btn-sm btn-default\" type=\"reset\" value=\"重置\">\n                            <button onclick=\"goback();\" class=\"btn btn-sm btn-success\" role=\"button\">返回>></button>\n                        </div>\n                    </div>\n                </div>\n                <input id=\"caseids\" type=\"text\" name=\"caseids\" style=\"visibility:hidden\" value=\"\">\n            </form>\n        </div>\n    </div>\n\n{% endblock %}\n{% block script %}\n    {% load static %}\n    <script type=\"text/javascript\" src=\"{% static 'js/taskmanage.js' %}\"></script>\n    <script>\n    $(\"#issmoke\").bind(\"change\", function () {\n            var s1SelectedVal = $('#selprojectid_task').val();\n            var issmoke = $('#issmoke').val();\n            $.ajax({\n                type: \"GET\",\n                data: {'projectid': s1SelectedVal,'issmoke':issmoke},\n                url: \"/setting/get/moduleList/\", //后台处理函数的url 这里用的是static url 需要与urls.py中的name一致\n                cache: false,\n                dataType: 'text',\n                success: function (result, TextStatus) {\n                    zNodes = eval(result)\n                    $.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n                    if ($(\"form#task_edit\").length > 0) {\n                        setTreeValue(\"{{ taskinfo.caselist}}\");\n                    }\n                },\n                error: function (result) {\n                    alert(result)\n                }\n\n            });\n        });\n    </script>\n{% endblock %}"
  },
  {
    "path": "automatic/templates/testtask/taskedit.html",
    "content": "{% extends 'frame.html' %}\n{% block title %}Automagic{% endblock %}\n{% block slideshow %}\n\n    <div class=\"ak-zper-midbox ak-jsch-mid\">\n        <div class=\"ak-zper-inbox-title ak-jsch-title clearfix\">\n            <div class=\"ak-left ak-jsch-row3 ak-zper-fix-btnbox\">\n                <span class=\"ak-zper-remindback\"></span>\n                <span class=\"inbox-text\">编辑任务</span>\n            </div>\n            <div id=\"log_info\" class=\"ac-addtips\"></div>\n\n        </div>\n\n        <div class=\"col-md-12\">\n            <form method='post' id=\"task_edit\">\n                {% csrf_token %}\n                <div class=\"ak-jsch-modal-row col01\">\n                    <div class=\"ak-jsch-pos\">\n                        <div class=\"ak-jsch-point\">\n                        </div>\n                    </div>\n                    <div class=\"ak-jsch-modal-text col01 clearfix\">\n                        <span class=\"ak-jsch-item-left ak-left \">任务描述</span>\n                        <input id=\"taskid\" value=\"{{ taskinfo.pk }}\" hidden=\"true\">\n                        <div class=\"ak-jsch-item-right col02 ak-left\">\n                            <input id=\"id_taskname\" name=\"taskname\" class=\"ak-jsch-modal-input\" type=\"text\" required=\"\"\n                                   value=\"{{ taskinfo.taskname }}\" placeholder=\"任务描述\">\n                        </div>\n                    </div>\n                </div>\n                <div class=\"ak-jsch-modal-row col01 ak-jsch-padding\">\n                    <div class=\"ak-jsch-modal-text\">\n                        <div class=\"ak-jsch-modal-item clearfix\"><span class=\"ak-left ak-jsch-item-left \">任务类型</span>\n                            <div style=\"margin-top:4px;\">\n                                {% if taskinfo.tasktype == '1' %}\n                                    <label>&nbsp&nbsp<input class=\"radioitem\" id=\"runcase\" type=\"radio\" name=\"tasktype\"\n                                                            value=\"1\" checked=\"checked\">执行用例</label>\n{#                                    <label>&nbsp&nbsp<input class=\"radioitem\" id=\"syncase\" type=\"radio\" name=\"tasktype\"#}\n{#                                                            value=\"2\">同步用例</label>#}\n                                    <label>&nbsp&nbsp<input class=\"radioitem\" id=\"connjenkins\" type=\"radio\"\n                                                            name=\"tasktype\" value=\"3\">关联Jenkins</label>\n                                {% else %}\n                                    {% if taskinfo.tasktype == '3' %}\n                                        <label>&nbsp&nbsp<input class=\"radioitem\" id=\"runcase\" type=\"radio\"\n                                                                name=\"tasktype\" value=\"1\">执行用例</label>\n{#                                        <label>&nbsp&nbsp<input class=\"radioitem\" id=\"syncase\" type=\"radio\"#}\n{#                                                                name=\"tasktype\" value=\"2\">同步用例</label>#}\n                                        <label>&nbsp&nbsp<input class=\"radioitem\" id=\"connjenkins\" type=\"radio\"\n                                                                name=\"tasktype\" value=\"3\"\n                                                                checked=\"checked\">关联Jenkins</label>\n                                    {% else %}\n                                        <label>&nbsp&nbsp<input class=\"radioitem\" id=\"runcase\" type=\"radio\"\n                                                                name=\"tasktype\" value=\"1\">执行用例</label>\n{#                                        <label>&nbsp&nbsp<input class=\"radioitem\" id=\"syncase\" type=\"radio\"#}\n{#                                                                name=\"tasktype\" value=\"2\" checked=\"checked\">同步用例</label>#}\n                                        <label>&nbsp&nbsp<input class=\"radioitem\" id=\"connjenkins\" type=\"radio\"\n                                                                name=\"tasktype\" value=\"3\">关联Jenkins</label>\n                                    {% endif %}\n                                {% endif %}\n                            </div>\n                        </div>\n                        {% if taskinfo.tasktype == '1' %}\n                            <div class=\"ak-jsch-modal-item ak-jsch-pt clearfix\">\n{#                                <div id=\"testrailrunid\" class=\"ak-jsch-modal-item clearfix\"><span#}\n{#                                        class=\"ak-left ak-jsch-item-left \">RunID&nbsp</span>#}\n{#                                    <input type=\"text\" class=\"ac-acaseedit-input ac-margin110\" name=\"testrailrunid\"#}\n{#                                           value=\"{{ taskinfo.testrailrunid }}\">#}\n{#                                </div>#}\n                                <div class=\"ak-jsch-modal-item clearfix\"><span\n                                        class=\"ak-left ak-jsch-item-left \">用例类型</span>\n\n                                    <select id=\"issmoke\" name=\"issmoke\" class=\"ak-left ac-aselect col01 ac-margin110\"\n                                            required=\"\">\n                                        {% if taskinfo.issmoke %}\n                                            <option value=\"0\">系统测试</option>\n                                            <option value=\"1\" selected>冒烟测试</option>\n                                        {% else %}\n                                            <option value=\"0\" selected>系统测试</option>\n                                            <option value=\"1\">冒烟测试</option>\n                                        {% endif %}\n\n                                    </select>\n                                </div>\n                                <div id=\"testrailsuites\" class=\"ak-jsch-modal-item clearfix\" hidden=\"true\"><span\n                                        class=\"ak-left ak-jsch-item-left \">SuitesID&nbsp</span>\n                                    <input type=\"text\" class=\"ac-acaseedit-input ac-margin110\" name=\"testrailsuites\"\n                                           value=\"{{ taskinfo.testrailsuites }}\">\n                                </div>\n                                <div id=\"testsectionid\" class=\"ak-jsch-modal-item clearfix\" hidden=\"true\"><span\n                                        class=\"ak-left ak-jsch-item-left \">SectionID&nbsp</span>\n                                    <input type=\"text\" class=\"ac-acaseedit-input ac-margin110\" name=\"testsectionid\"\n                                           value=\"{{ taskinfo.testsectionid }}\">\n                                </div>\n                                <div id=\"jenkins_server_url\" class=\"ak-jsch-modal-item clearfix ac-margint10\"\n                                     hidden=\"true\">\n                                    <span class=\"ak-left ak-jsch-item-left \">JenkinsURL&nbsp</span>\n                                    <input type=\"text\" class=\"ac-acaseedit-input ac-margin110 ac-acode-desc\"\n                                           name=\"jenkins_server_url\">\n                                </div>\n                                <div id=\"user_id\" class=\"ak-jsch-modal-item clearfix ac-margint10\" hidden=\"true\"><span\n                                        class=\"ak-left ak-jsch-item-left \">UserID&nbsp</span>\n                                    <input type=\"text\" class=\"ac-acaseedit-input ac-margin110 ac-acode-desc\"\n                                           name=\"user_id\">\n                                </div>\n                                <div id=\"api_token\" class=\"ak-jsch-modal-item clearfix ac-margint10\" hidden=\"true\"><span\n                                        class=\"ak-left ak-jsch-item-left \">ApiToken&nbsp</span>\n                                    <input type=\"text\" class=\"ac-acaseedit-input ac-margin110 ac-acode-desc\"\n                                           name=\"api_token\">\n                                </div>\n                                <div id=\"build_name\" class=\"ak-jsch-modal-item clearfix ac-margint10\"\n                                     hidden=\"true\"><span\n                                        class=\"ak-left ak-jsch-item-left \">BuildName&nbsp</span>\n                                    <input type=\"text\" class=\"ac-acaseedit-input ac-margin110 ac-acode-desc\"\n                                           name=\"build_name\">\n                                </div>\n                            </div>\n                        {% else %}\n                            {% if taskinfo.tasktype == '3' %}\n                                <div class=\"ak-jsch-modal-item ak-jsch-pt clearfix\">\n                                    <div id=\"testrailrunid\" class=\"ak-jsch-modal-item clearfix\" hidden=\"true\"><span\n                                            class=\"ak-left ak-jsch-item-left \">RunID&nbsp</span>\n                                        <input type=\"text\" class=\"ac-acaseedit-input ac-margin110\" name=\"testrailrunid\">\n                                    </div>\n                                    <div id=\"testrailsuites\" class=\"ak-jsch-modal-item clearfix\" hidden=\"true\"><span\n                                            class=\"ak-left ak-jsch-item-left \">SuitesID&nbsp</span>\n                                        <input type=\"text\" class=\"ac-acaseedit-input ac-margin110\"\n                                               name=\"testrailsuites\">\n                                    </div>\n                                    <div id=\"testsectionid\" class=\"ak-jsch-modal-item clearfix\" hidden=\"true\"><span\n                                            class=\"ak-left ak-jsch-item-left \">SectionID&nbsp</span>\n                                        <input type=\"text\" class=\"ac-acaseedit-input ac-margin110\" name=\"testsectionid\">\n                                    </div>\n                                    <div id=\"jenkins_server_url\" class=\"ak-jsch-modal-item clearfix ac-margint10\"><span\n                                            class=\"ak-left ak-jsch-item-left \">JenkinsURL&nbsp</span>\n                                        <input type=\"text\" class=\"ac-acaseedit-input ac-margin110 ac-acode-desc\"\n                                               name=\"jenkins_server_url\" value=\"{{ taskinfo.jenkins_server_url }}\">\n                                    </div>\n                                    <div id=\"user_id\" class=\"ak-jsch-modal-item clearfix ac-margint10\"><span\n                                            class=\"ak-left ak-jsch-item-left \">UserID&nbsp</span>\n                                        <input type=\"text\" class=\"ac-acaseedit-input ac-margin110 ac-acode-desc\"\n                                               name=\"user_id\" value=\"{{ taskinfo.user_id }}\">\n                                    </div>\n                                    <div id=\"api_token\" class=\"ak-jsch-modal-item clearfix ac-margint10\"><span\n                                            class=\"ak-left ak-jsch-item-left \">ApiToken&nbsp</span>\n                                        <input type=\"text\" class=\"ac-acaseedit-input ac-margin110 ac-acode-desc\"\n                                               name=\"api_token\" value=\"{{ taskinfo.api_token }}\">\n                                    </div>\n                                    <div id=\"build_name\" class=\"ak-jsch-modal-item clearfix ac-margint10\"><span\n                                            class=\"ak-left ak-jsch-item-left \">BuildName&nbsp</span>\n                                        <input type=\"text\" class=\"ac-acaseedit-input ac-margin110 ac-acode-desc\"\n                                               name=\"build_name\" value=\"{{ taskinfo.build_name }}\">\n                                    </div>\n                                </div>\n                            {% else %}\n                                <div class=\"ak-jsch-modal-item ak-jsch-pt clearfix\">\n                                    <div id=\"testrailrunid\" class=\"ak-jsch-modal-item clearfix\" hidden=\"true\"><span\n                                            class=\"ak-left ak-jsch-item-left \">RunID&nbsp</span>\n                                        <input type=\"text\" class=\"ac-acaseedit-input\" name=\"testrailrunid\"\n                                               value=\"{{ taskinfo.testrailrunid }}\">\n                                    </div>\n                                    <div id=\"testrailsuites\" class=\"ak-jsch-modal-item clearfix\"><span\n                                            class=\"ak-left ak-jsch-item-left \">SuitesID&nbsp</span>\n                                        <input type=\"text\" class=\"ac-acaseedit-input\" name=\"testrailsuites\"\n                                               value=\"{{ taskinfo.testrailsuites }}\">\n                                    </div>\n                                    <div id=\"testsectionid\" class=\"ak-jsch-modal-item clearfix\"><span\n                                            class=\"ak-left ak-jsch-item-left \">SectionID&nbsp</span>\n                                        <input type=\"text\" class=\"ac-acaseedit-input\" name=\"testsectionid\"\n                                               value=\"{{ taskinfo.testsectionid }}\">\n                                    </div>\n                                    <div id=\"jenkins_server_url\" class=\"ak-jsch-modal-item clearfix ac-margint10\"\n                                         hidden=\"true\"><span class=\"ak-left ak-jsch-item-left \">JenkinsURL&nbsp</span>\n                                        <input type=\"text\" class=\"ac-acaseedit-input ac-margin110 ac-acode-desc\"\n                                               name=\"jenkins_server_url\">\n                                    </div>\n                                    <div id=\"user_id\" class=\"ak-jsch-modal-item clearfix ac-margint10\" hidden=\"true\">\n                                        <span class=\"ak-left ak-jsch-item-left \">UserID&nbsp</span>\n                                        <input type=\"text\" class=\"ac-acaseedit-input ac-margin110 ac-acode-desc\"\n                                               name=\"user_id\">\n                                    </div>\n                                    <div id=\"api_token\" class=\"ak-jsch-modal-item clearfix ac-margint10\" hidden=\"true\">\n                                        <span class=\"ak-left ak-jsch-item-left \">ApiToken&nbsp</span>\n                                        <input type=\"text\" class=\"ac-acaseedit-input ac-margin110 ac-acode-desc\"\n                                               name=\"api_token\">\n                                    </div>\n                                    <div id=\"build_name\" class=\"ak-jsch-modal-item clearfix ac-margint10\" hidden=\"true\">\n                                        <span class=\"ak-left ak-jsch-item-left \">BuildName&nbsp</span>\n                                        <input type=\"text\" class=\"ac-acaseedit-input ac-margin110 ac-acode-desc\"\n                                               name=\"build_name\">\n                                    </div>\n                                </div>\n                            {% endif %}\n                        {% endif %}\n                        <div class=\"ak-jsch-modal-item ak-jsch-pt clearfix\">\n                            <div class=\"ak-jsch-modal-item clearfix\">\n                                <span class=\"ak-jsch-item-left ak-left\">项目</span>\n                                <select id=\"selprojectid_task_edit\" name=\"projectid\"\n                                        class=\"ak-left ac-aselect col01 ac-margin110\"\n                                        required=\"\">\n                                    <option value=\"0\">所属项目</option>\n                                    {% for i in  projectlist %}\n                                        {% if i == taskinfo.projectid %}\n                                            <option value=\"{{ i.pk }}\" selected=\"selected\">{{ i.name }}</option>\n                                        {% else %}\n                                            <option value=\"{{ i.pk }}\">{{ i.name }}</option>\n                                        {% endif %}\n                                    {% endfor %}\n                                </select>\n                            </div>\n                        </div>\n                        {% if taskinfo.tasktype == '3' %}\n                            <div class=\"ak-jsch-modal-item ak-jsch-pt clearfix\">\n                                <div class=\"ak-jsch-item-right ak-left\">\n                                    <ul id=\"treeDemo\" class=\"ztree\" hidden=\"true\"\n                                        style=\"height:350px; overflow:auto;font-family:verdana;border-radius:6px;border:2px solid #EE872A;\"></ul>\n                                </div>\n                            </div>\n                            <div class=\"ak-jsch-modal-item ak-jsch-pt clearfix\" hidden=\"true\" id=\"selectedCases\">\n                                <div class=\"ak-jsch-item-right ak-left\">\n                                    已经选择用例共{{ casesum }}条\n                                </div>\n                            </div>\n                            <div class=\"ak-jsch-modal-item ak-jsch-pt clearfix\" hidden=\"true\" id=\"customParameters\">\n                                <h5><b>自定义参数</b></h5>\n                                <div class=\"ak-jsch-item-right ak-left\">\n                                    <ul style=\"height:300px; overflow:auto;font-family:verdana;border-radius:6px;border:1px solid #c1c1c1;\">\n                                        <table class=\"table\" id=\"tab\" style=\"width:72%\">\n                                            <caption class=\"text-left\">\n                                                <button type=\"button\" onclick=\"addtr();\"\n                                                        class=\"text-left ac-btn-adduser blue ac-margin-tb15\">添加一行\n                                                </button>\n                                                <input class=\"ac-acaseedit-input\" id=\"rowid\" value=\"\" type=\"number\"\n                                                       placeholder=\"添加到第N行之后\">\n                                            </caption>\n                                            <thead>\n                                            <th>No</th>\n                                            <th>描述</th>\n                                            <th>参数编码</th>\n                                            <th>参数值</th>\n                                            <th>操作</th>\n                                            <input hidden=\"true\" id=\"linecounter\" value=1 type='text'>\n                                            </thead>\n                                            <tbody>\n                                            {% if codelist %}\n                                                {% for c in codelist %}\n                                                    <tr id=\"row{{ forloop.counter }}\">\n                                                        <td>{{ forloop.counter }}</td>\n                                                        <td><input name=\"codedescr\" class=\"ac-acaseedit-input\"\n                                                                   placeholder=\"参数描述\" type=\"input\"\n                                                                   value=\"{{ c.codedescr }}\"></td>\n                                                        <td><input name=\"codename\" class=\"ac-acaseedit-input\"\n                                                                   placeholder=\"参数编码(MWIP)\" type=\"input\"\n                                                                   value=\"{{ c.codename }}\"></td>\n                                                        <td><input name=\"codevalue\"\n                                                                   class=\"ac-acaseedit-input ac-acode-desc\"\n                                                                   placeholder=\"参数值\" type=\"input\"\n                                                                   value=\"{{ c.codevalue }}\"></td>\n                                                        <td><a class=\"btn btn-sm btn-link\" role=\"button\"\n                                                               onclick=\"deltr({{ forloop.counter }})\">删除</a></td>\n                                                    </tr>\n                                                {% endfor %}\n                                            {% endif %}\n                                            </tbody>\n                                            <tfoot class=\"text-left\">\n\n                                            </tfoot>\n                                        </table>\n                                    </ul>\n                                </div>\n                            </div>\n                        {% else %}\n                            <div class=\"ak-jsch-modal-item ak-jsch-pt clearfix\">\n                                <div class=\"ak-jsch-item-right ak-left\">\n                                    <ul id=\"treeDemo\" class=\"ztree\"\n                                        style=\"height:350px; overflow:auto;font-family:verdana;border-radius:6px;border:2px solid #EE872A;\"></ul>\n                                </div>\n                            </div>\n                            <div class=\"ak-jsch-modal-item ak-jsch-pt clearfix\" id=\"selectedCases\">\n                                <div class=\"ak-jsch-item-right ak-left\">\n                                    已经选择用例共{{ casesum }}条\n                                </div>\n                            </div>\n                            <div class=\"ak-jsch-modal-item ak-jsch-pt clearfix\" id=\"customParameters\">\n                                <h5><b>自定义参数</b></h5>\n                                <div class=\"ak-jsch-item-right ak-left\">\n                                    <ul style=\"height:300px; overflow:auto;font-family:verdana;border-radius:6px;border:1px solid #c1c1c1;\">\n                                        <table class=\"table\" id=\"tab\" style=\"width:72%\">\n                                            <caption class=\"text-left\">\n                                                <button type=\"button\" onclick=\"addtr();\"\n                                                        class=\"text-left ac-btn-adduser blue ac-margin-tb15\">添加一行\n                                                </button>\n                                                <input class=\"ac-acaseedit-input\" id=\"rowid\" value=\"\" type=\"number\"\n                                                       placeholder=\"添加到第N行之后\">\n                                            </caption>\n                                            <thead>\n                                            <th>No</th>\n                                            <th>描述</th>\n                                            <th>参数编码</th>\n                                            <th>参数值</th>\n                                            <th>操作</th>\n                                            <input hidden=\"true\" id=\"linecounter\" value=1 type='text'>\n                                            </thead>\n                                            <tbody>\n                                            {% if codelist %}\n                                                {% for c in codelist %}\n                                                    <tr id=\"row{{ forloop.counter }}\">\n                                                        <td>{{ forloop.counter }}</td>\n                                                        <td><input name=\"codedescr\" class=\"ac-acaseedit-input\"\n                                                                   placeholder=\"参数描述\" type=\"input\" required=\"\"\n                                                                   value=\"{{ c.codedescr }}\"></td>\n                                                        <td><input name=\"codename\" class=\"ac-acaseedit-input\"\n                                                                   placeholder=\"参数编码(MWIP)\" type=\"input\" required=\"\"\n                                                                   value=\"{{ c.codename }}\"></td>\n                                                        <td><input name=\"codevalue\"\n                                                                   class=\"ac-acaseedit-input ac-acode-desc\"\n                                                                   placeholder=\"参数值\" type=\"input\" required=\"\"\n                                                                   value=\"{{ c.codevalue }}\"></td>\n                                                        <td><a class=\"btn btn-sm btn-link\" role=\"button\"\n                                                               onclick=\"deltr({{ forloop.counter }})\">删除</a></td>\n                                                    </tr>\n                                                {% endfor %}\n                                            {% endif %}\n                                            </tbody>\n                                            <tfoot class=\"text-left\">\n\n                                            </tfoot>\n                                        </table>\n                                    </ul>\n                                </div>\n                            </div>\n                        {% endif %}\n                        <div style=\"text-align: center;\">\n                            <input class=\"btn btn-sm btn-primary\" type=\"submit\" value=\"提交\">\n                            <input class=\"btn btn-sm btn-default\" type=\"reset\" value=\"重置\">\n                            <button onclick=\"goback();\" class=\"btn btn-sm btn-success\" type=\"button\">返回>></button>\n                        </div>\n                    </div>\n                </div>\n                <input id=\"caseids\" type=\"text\" name=\"caseids\" style=\"visibility:hidden\" value=\"\">\n            </form>\n        </div>\n    </div>\n\n{% endblock %}\n{% block script %}\n    {% load static %}\n    <script type=\"text/javascript\" src=\"{% static 'js/lodash.min.js' %}\"></script>\n    <script type=\"text/javascript\" src=\"{% static 'js/taskmanage.js' %}\"></script>\n    <script>\n        /* 编辑任务页面 通过project关联module树   */\n        $(\"#selprojectid_task_edit\").bind(\"change\", function () {\n            var s1SelectedVal = $('#selprojectid_task_edit').val();\n            var issmoke = $('#issmoke').val();\n            $.ajax({\n                type: \"GET\",\n                data: {'projectid': s1SelectedVal, 'issmoke': issmoke},\n                url: \"/setting/get/moduleList/\", //后台处理函数的url 这里用的是static url 需要与urls.py中的name一致\n                cache: false,\n                dataType: 'text',\n                success: function (result, TextStatus) {\n                    zNodes = eval(result)\n                    $.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n                    if ($(\"form#task_edit\").length > 0) {\n                        setTreeValue(\"{{ taskinfo.caselist}}\");\n                    }\n                },\n                error: function (result) {\n                    alert(result)\n                }\n\n            });\n        });\n        $(\"#issmoke\").bind(\"change\", function () {\n            var s1SelectedVal = $('#selprojectid_task_edit').val();\n            var issmoke = $('#issmoke').val();\n            $.ajax({\n                type: \"GET\",\n                data: {'projectid': s1SelectedVal, 'issmoke': issmoke},\n                url: \"/setting/get/moduleList/\", //后台处理函数的url 这里用的是static url 需要与urls.py中的name一致\n                cache: false,\n                dataType: 'text',\n                success: function (result, TextStatus) {\n                    zNodes = eval(result)\n                    $.fn.zTree.init($(\"#treeDemo\"), setting, zNodes);\n                    if ($(\"form#task_edit\").length > 0) {\n                        setTreeValue(\"{{ taskinfo.caselist}}\");\n                    }\n                },\n                error: function (result) {\n                    alert(result)\n                }\n\n            });\n        });\n    </script>\n{% endblock %}\n"
  },
  {
    "path": "automatic/templates/testtask/tasklist.html",
    "content": "{% extends 'frame.html' %}\n{% block title %}Automagic{% endblock %}\n{% block slideshow %}\n    <div class=\"ak-zper-midbox ak-jsch-mid\">\n         <div class=\"ak-zper-inbox-title ak-jsch-title clearfix\">\n               <div class=\"ak-left ak-jsch-row3 ak-zper-fix-btnbox\">\n                    <span class=\"ak-zper-remindback\"></span>\n                    <span class=\"inbox-text\">任务管理</span>\n               </div>\n                <select id=\"selproductid\" name=\"productname\" class=\"ak-right ak-left ac-aselect ac-margint8\">\n                      <option value=\"0\">-请选择产品-</option>\n                          {% for product in userandproduct  %}\n                              {% if product.username == request.user %}\n                                  <option value=\"{{ product.productname.id }}\" {% if request.GET.productname  == product.productname.name %}selected{% endif %}>{{ product.productname.name }}</option>\n                              {% endif %}\n                          {% endfor %}\n                </select>\n          </div>\n\n<!--      ---------------------华丽的分割线 main------------------------ -->\n      \t  <div class=\"col-md-12\">\n              <div class=\"ac-margin-tb15\" >\n                    <form id=\"tasklistform\" class=\"form-inline\" role=\"form\" action=\"\" method=\"GET\">\n                    <div class=\"panel panel-default\">\n                        <div class=\"panel-heading\">\n                            <input id=\"check_productid\" value=\"0\" name=\"check_productname\" hidden=\"true\">\n                            <select id=\"selprojectid\" name=\"projectid\" class=\"ak-left ac-aselect col01\">\n                              <option value=\"\">所属项目</option>\n                            </select>\n                            <select name=\"tasktype\" class=\"ak-left ac-aselect col02\">\n{#                              <option value=\"\">任务类型</option>#}\n                                 <option value=\"1\" {% if request.GET.tasktype  == '1' %}selected{% endif %} >执行用例</option>\n                                 <option value=\"2\" {% if request.GET.tasktype  == '2' %}selected{% endif %}>同步用例</option>\n                                 <option value=\"3\" {% if request.GET.tasktype  == '3' %}selected{% endif %}>Jenkin任务</option>\n                            </select>\n                              <div class=\"input-group\">\n                                <input type=\"input\" class=\"form-control search-width\" name=\"keyword\" value=\"{{ request.GET.keyword }}\"  placeholder=\"通过任务ID、描述、创建者搜索\">\n                                  <span class=\"input-group-btn\">\n                                      <button class=\"btn btn-primary\" id=\"search_btn\" type=\"submit\">Go!</button>\n                                  </span>\n                              </div>\n{#                            <div align=\"right\" class=\"form-group\">#}\n{#                                <a href=\"/task/add/\" class=\"ak-left ac-btn-addcase orange\" >创建任务</a>#}\n{#                            </div>#}\n                            <a href=\"/func/task/add/\" class=\"ak-right ac-btn-adduser blue\" >创建任务</a>\n                            <!-- /input-group -->\n                        </div>\n\n                            <table id=\"mytable\" class=\"table table-striped table-hover table-condensed ac-aelement-table\">\n                                <thead>\n                                  <tr>\n                                      <th>任务ID</th>\n                                      <th>任务描述</th>\n                                      <th>所属项目</th>\n                                      <th>任务类型</th>\n                                      <th>任务状态</th>\n                                      <th>用例集</th>\n{#                                      <th>任务/用例</th>#}\n                                      <th>创建者</th>\n                                      <th>创建时间</th>\n                                  <th>操作</th>\n                                  </tr>\n                                </thead>\n                                <tbody>\n                                  {% for task in tasklist %}\n                                    <tr>\n                                        <td>{{ task.id }}</td>\n                                        <td class=\"ac-alist-width-overflow-public\" title=\"{{ task.taskname }}\">{{ task.taskname }}</td>\n                                        <td>{{ task.projectid.name }}</td>\n                                        <td>{% if task.tasktype == '1' %}执行用例{% elif task.tasktype == '2' %}同步用例{% elif task.tasktype == '3' %}Jenkin任务{% endif %}</td>\n                                        <td>\n                                            {% if task.status == 0 %}\n                                                <span ng-if=\"f.flag==true\" class=\"label label-success ng-scope\">未执行</span>\n                                            {% elif task.status == 1 %}\n                                                <span ng-if=\"f.flag==false\" class=\"label label-danger ng-scope\">执行中</span>\n                                            {% else %}\n                                                <span ng-if=\"f.flag==false\" class=\"label label-info ng-scope\">已完成</span>\n                                            {% endif %}\n                                        </td>\n                                        <td class=\"ac-alist-width-overflow-public\" title=\"{{ task.caselist }}\">{{ task.caselist }}</td>\n{#                                        <td class=\"ac-alist-descp ac-alist-width-overflow\">#}\n{#                                            {% if task.tasktype == '1' %}#}\n{#                                                <a target=\"_blank\" href=\"http://172.17.3.70/testrail/index.php?/runs/view/{{ task.testrailrunid }}\"/>{{ task.testrailrunid }}#}\n{#                                            {% elif task.tasktype == '2' %}#}\n{#                                                <a target=\"_blank\" href=\"http://172.17.3.70/testrail/index.php?/suites/view/{{ task.testrailsuites }}&group_by=cases:section_id&group_oder=asc&group_id={{ task.testsectionid }}\"/>{{ task.testsectionid }}#}\n{#                                            {% endif %}#}\n{#                                        </td>#}\n                                        <td>{{ task.createat }}</td>\n                                        <td>{{ task.createtime|date:'Y-m-d H:i:s' }}</td>\n                                        <td>\n                                            <a title=\"编辑\" href=\"{% url 'taskupdate' task.id %}\" class=\"ke-ablock\" ><i class=\"glyphicon glyphicon-edit\"></i></a>\n                                            {% if task.status == 1 %}\n                                                <a title=\"执行中\" class=\"ke-ablock\"><i class=\"glyphicon glyphicon-record\"></i></a>\n                                            {% else %}\n                                                <a title=\"执行\" id=\"run{{ task.id }}\" href=\"#\" onclick=\"runtask({{ task.id }})\" class=\"ke-ablock\"><i class=\"glyphicon glyphicon-play-circle\"></i></a>\n                                            {% endif %}\n                                            {% if request.user.is_admin %}\n                                                <a title=\"删除\" href=\"{% url 'taskdel' task.id %}\" class=\"ke-ablock\" onclick=\"return confirm('您确定要删除吗？')\"><i class=\"glyphicon glyphicon-trash\"></i></a>\n                                            {% endif %}\n                                            <a href=\"#\" title=\"任务历史\" onclick=\"viewhistory({{ task.id }},{{ task.tasktype }})\" class=\"ke-ablock\" data-toggle=\"modal\" data-target=\"#viewhistory\"><i class=\"glyphicon glyphicon-tasks\"></i></a>\n                                        </td>\n                                    </tr>\n                                  {% endfor %}\n                                </tbody>\n                            </table>\n                    </div>\n                    {% if is_paginated %}\n                        <div class=\"panel-default\">\n                            <ul class=\"pagination\">\n                              <li><a href=\"javascript:window.location.href=window.location.search.match(/page=(\\d+|\\s*)/)===null? window.location.origin+(window.location.pathname +'?page=1'+(window.location.search?window.location.search.replace('?','&'):'')):window.location.search.replace(/page=(\\d+|\\s*)/, 'page=1')\">«</a></li>\n                              {% if page_obj.has_previous %}\n                                <!--<li><a href=\"{{ request.get_full_path }}&page={{ page_obj.previous_page_number }}\">上一页</a></li>-->\n                                  <li><a href=\"javascript:window.location.href=window.location.search.match(/page=(\\d+|\\s*)/)===null? window.location.href +'?page={{ page_obj.previous_page_number }}': window.location.search.replace(/page=(\\d+|\\s*)/, 'page={{ page_obj.previous_page_number }}')\">上一页</a></li>\n                              {% else %}\n                                <li class=\"previous disabled\"><a>上一页</a></li>\n                              {% endif %}\n                              {% for i in page_obj.paginator.page_range %}\n                                  <li {% if page_obj.number == i %}class=\"active\"{% endif %}><a href=\"javascript:window.location.href=window.location.search.match(/page=(\\d+|\\s*)/)===null? window.location.origin+(window.location.pathname +'?page={{ i }}'+(window.location.search?window.location.search.replace('?','&'):'')):window.location.search.replace(/page=(\\d+|\\s*)/, 'page={{ i }}')\">{{ i }}</a></li>\n                              {% endfor %}\n                              {% if page_obj.has_next %}\n                                <li><a href=\"javascript:window.location.href=window.location.search.match(/page=(\\d+|\\s*)/)===null? window.location.origin+(window.location.pathname +'?page={{ page_obj.next_page_number }}'+(window.location.search?window.location.search.replace('?','&'):'')):window.location.search.replace(/page=(\\d+|\\s*)/, 'page={{ page_obj.next_page_number }}')\">下一页</a></li>\n                              {% else %}\n                                <li class=\"previous disabled\"><a>下一页</a></li>\n                              {% endif %}\n                              <li><a href=\"javascript:window.location.href=window.location.search.match(/page=(\\d+|\\s*)/)===null? window.location.origin+(window.location.pathname +'?page={{ page_obj.paginator.num_pages  }}'+(window.location.search?window.location.search.replace('?','&'):'')):window.location.search.replace(/page=(\\d+|\\s*)/, 'page={{ page_obj.paginator.num_pages  }}')\">»</a></li>\n                                <li><a>当前第{{ page_obj.number }}页/共{{ tasksum }}条</a></li>\n                                <li><input id=\"curpage\" class=\"ac-acaseedit-input\" type=\"number\" style=\"width: 80px;\"></li>\n                                <li><button id=\"btn_skip\" onclick=\"btn_skip_click()\" type=\"button\" class=\"btn btn-sm btn-primary\">确定</button></li>\n                            </ul>\n                    </div>\n                    {% endif %}\n              </form>\n              </div>\n          </div>\n    <!--      ---------------------华丽的分割线 main end------------------------ -->\n\n    </div>\n    <!-- task history -->\n    <div class=\"modal fade ak-min-fullwidth-modal ak-znews-addsort-modal\" id=\"viewhistory\" tabindex=\"-1\" role=\"dialog\" aria-hidden=\"true\">\n            <div class=\"modal-dialog\">\n                  <div class=\"modal-content\" style=\"width: 1000px;\">\n                        <div class=\"modal-header clearfix\">\n                              <button type=\"button\" class=\"close close-back\" data-dismiss=\"modal\"> <span class=\"sr-only\">Close</span> </button>\n                              <h4 class=\"modal-title text-center\">任务历史</h4>\n                        </div>\n                        <div class=\"modal-body ak-main-body\">\n                            <table class=\"table table-striped table-hover table-condensed ac-aelement-table\">\n                                <thead>\n                                  <tr>\n                                      <th>开始时间</th>\n                                      <th>任务描述</th>\n                                      <th>All</th>\n                                      <th>Pass</th>\n                                      <th>Fail</th>\n                                      <th>Error</th>\n                                      <th>运行时间</th>\n                                      <th>执行用户</th>\n                                      <th>详细</th>\n                                  </tr>\n                                </thead>\n                                <tbody>\n\n                                </tbody>\n                                </table>\n                        </div>\n          </div>\n    </div>\n    </div>\n{% endblock %}\n{% block script %}\n    {% load static %}\n    <script>\n        function viewhistory(id, tasktype) {\n                    $.ajax({\n                        type:\"GET\",\n                        data:{'taskid':id},\n                        url: \"/func/task/taskhistory/\",\n                        cache: false,\n                        dataType:'json',\n                        async:false,\n\n                        success: function(result,TextStatus) {\n                            $(\"#viewhistory .ak-main-body\").empty();\n                             var tmpHtml = ''\n                            if (tasktype == 1){\n                                // alert(tasktype);\n                             for(i=0; i<result.length; i++) {\n                                     tmpHtml += '<tr>' +\n                                         '<td>'+result[i].starttime+'</td>' +\n                                         '<td>'+result[i].taskname+'</td>' +\n                                         '<td>'+result[i].case_tag_all+'</td>' +\n                                         '<td>'+result[i].case_tag_pass+'</td>' +\n                                         '<td>'+result[i].case_tag_fail+'</td>' +\n                                         '<td>'+result[i].case_tag_error+'</td>' +\n                                         '<td>'+result[i].exectime+'</td>' +\n                                         '<td>'+result[i].user.realname+'</td>' +\n                                         '<td><a target=\"_bank\" href=\"http://jenkinsm.acorn-net.com/TestResults/CornerStone/'+result[i].reporturl+'\"><i class=\"glyphicon glyphicon-indent-left\"></a></td>' +\n                                         '</tr>'\n                             }\n                            var tpl = ' <table class=\"table table-striped table-hover table-condensed ac-aelement-table\">'+\n                                '<thead>'+\n                                  '<tr>'+\n                                      '<th>开始时间</th>'+\n                                      '<th>任务描述</th>'+\n                                      '<th>All</th>'+\n                                      '<th>Pass</th>'+\n                                      '<th>Fail</th>'+\n                                      '<th>Error</th>'+\n                                      '<th>运行时间</th>'+\n                                      '<th>执行用户</th>'+\n                                      '<th>详细</th>'+\n                                  '</tr>'+\n                                '</thead>'+\n                                '<tbody>'+\n                                  tmpHtml\n                                '</tbody>'+\n                                '</table>'\n                             }\n                             else if (tasktype == 3){\n                                 var td_result = ''\n                             for(i=0; i<result.length; i++) {\n                                    if (result[i].result == 'SUCCESS'){\n                                        td_result = '<td><span class=\"label label-success\">'+result[i].result+'</span></td>'\n                                    }\n                                    else if(result[i].result == 'ABORTED'){\n                                        td_result = '<td><span class=\"label label-default\">'+result[i].result+'</span></td>'\n                                    }\n                                    else if(result[i].result == 'FAILURE'){\n                                        td_result = '<td><span class=\"label label-danger\">'+result[i].result+'</span></td>'\n                                    }\n                                     tmpHtml += '<tr>' +\n                                         '<td>'+result[i].starttime+'</td>' +\n                                         '<td class=\"ac-alist-width-overflow-public\" title=\"'+result[i].build_name+'\"><a target=\"_bank\" href=\"'+result[i].consoleurl+'\" class=\"ac-abtn blue\">'+result[i].build_name+'</td>' +\n                                         '<td>'+result[i].exectime+'</td>' +\n                                         td_result +\n                                         '<td class=\"ac-alist-width-overflow-public\" title=\"'+result[i].user+'\">'+result[i].user+'</td>' +\n                                         '<td><a target=\"_bank\" href=\"'+result[i].reporturl+'\" class=\"ke-block\"><i class=\"glyphicon glyphicon-indent-left\"></a></td>' +\n                                         '</tr>'\n                             }\n                             var tpl = ' <table class=\"table table-striped table-hover table-condensed ac-aelement-table\">'+\n                                '<thead>'+\n                                  '<tr>'+\n                                      '<th>开始时间</th>'+\n                                      '<th>任务描述</th>'+\n                                      '<th>运行时间</th>'+\n                                      '<th>运行结果</th>'+\n                                      '<th>执行用户</th>'+\n                                      '<th>详细</th>'+\n                                  '</tr>'+\n                                '</thead>'+\n                                '<tbody>'+\n                                  tmpHtml\n                                '</tbody>'+\n                                '</table>'\n                            }\n                            else if (tasktype == 2){\n                                //alert(tasktype);\n                                for(i=0; i<result.length; i++) {\n                                     tmpHtml += '<tr>' +\n                                         '<td>'+result[i].starttime+'</td>' +\n                                         '<td>'+result[i].taskname+'</td>' +\n                                         '<td class=\"ac-alist-width-overflow-public\" title=\"'+result[i].reporturl+'\">'+result[i].reporturl+'</td>' +\n                                         '<td>'+result[i].user+'</td>' +\n                                         '</tr>'\n                                }\n                                var tpl = ' <table class=\"table table-striped table-hover table-condensed ac-aelement-table\">'+\n                                '<thead>'+\n                                  '<tr>'+\n                                      '<th>开始时间</th>'+\n                                      '<th>任务描述</th>'+\n                                      '<th>CaseList</th>'+\n                                      '<th>执行用户</th>'+\n                                  '</tr>'+\n                                '</thead>'+\n                                '<tbody>'+\n                                  tmpHtml\n                                '</tbody>'+\n                                '</table>'\n                            }\n                             $('#viewhistory .ak-main-body').append(tpl)\n                             $('#viewhistory table').DataTable({\n                // \"sScrollX\": \"100%\",   //表格的宽\n                // \"sScrollXInner\": \"100%\",\n                \"bPaginate\": true,  //是否显示分页\n                \"bLengthChange\": true,  //每页显示的记录数\n                \"bFilter\": false, //搜索栏\n                \"bSort\": true, //是否支持排序功能\n                \"bInfo\": true, //显示表格信息\n                \"bAutoWidth\": true,  //自适应宽度\n                \"aaSorting\": [[0, \"desc\"]],  //给列表排序 ，第一个参数表示数组 (由0开始)。1 表示Browser列。第二个参数为 desc或是asc\n                \"oLanguage\": {\n                    \"sLengthMenu\": \"每页显示 _MENU_ 条记录\",\n                    \"sZeroRecords\": \"对不起，查询不到任何相关数据\",\n                    \"sInfo\": \"当前显示 _START_ 到 _END_ 条，共 _TOTAL_ 条记录\",\n                    \"sInfoEmtpy\": \"找不到相关数据\",\n                    \"sInfoFiltered\": \"数据表中共为 _MAX_ 条记录)\",\n                    \"sProcessing\": \"正在加载中...\",\n                    \"sSearch\": \"搜索\",\n                    \"sUrl\": \"\", //多语言配置文件，可将oLanguage的设置放在一个txt文件中，例：Javascript/datatable/dtCH.txt\n                    \"oPaginate\": {\n                        \"sFirst\": \"第一页\",\n                        \"sPrevious\": \" 上一页 \",\n                        \"sNext\": \" 下一页 \",\n                        \"sLast\": \" 最后一页 \"\n                    }\n                }, //多语言配置\n            });\n                         },\n                        error:function (result) {\n                            alert(result);\n                        }\n                     });\n            }\n        function btn_skip_click() {\n                var currpage = $('#curpage').val() === '' ? 1 : parseInt($('#curpage').val());\n                // console.log(currpage);\n                if (currpage > {{ page_obj.paginator.num_pages }}){\n                    currpage = {{ page_obj.paginator.num_pages }};\n                }\n                if (currpage < 1){\n                    currpage =1;\n                }\n                var url = window.location.search.match(/page=(\\d+|\\s*)/)===null? window.location.origin+(window.location.pathname +'?page='+currpage+(window.location.search?window.location.search.replace('?','&'):'')):window.location.search.replace(/page=(\\d+|\\s*)/, 'page='+currpage);\n                self.location = url;\n\n                return false;\n            }\n\n        $('#curpage').keypress(function(event){\n//            console.log(event.which);\n            if(event.which==13){\n                btn_skip_click()\n            }\n            event.stopPropagation();\n        });\n\n    </script>\n{% endblock %}\n"
  },
  {
    "path": "automatic/templates/webinterface/webinterface.html",
    "content": "{% extends 'frame.html' %}\n{% block title %}Automagic{% endblock %}\n{% block slideshow %}\n    <div class=\"ak-zper-midbox ak-jsch-mid\">\n        <div class=\"ak-zper-inbox-title ak-jsch-title clearfix\">\n            <div class=\"ak-left ak-jsch-row3 ak-zper-fix-btnbox\">\n                <span class=\"ak-zper-remindback\"></span>\n                <span class=\"inbox-text\">接口列表</span>\n            </div>\n\n            <select id=\"selproductid\" name=\"productname\" class=\"ak-right ak-left ac-aselect ac-margint8\">\n                <option value=\"0\">-请选择产品-</option>\n                {% for product in userandproduct %}\n                    {% if product.username == request.user %}\n                        <option value=\"{{ product.productname.id }}\"\n                                {% if request.GET.check_productname  == product.productname.id %}selected{% endif %}>{{ product.productname.name }}</option>\n                    {% endif %}\n                {% endfor %}\n            </select>\n        </div>\n\n        <!--      ---------------------华丽的分割线 main------------------------ -->\n        <div class=\"col-md-12\">\n            <div class=\"ac-margin-tb15\">\n                <div class=\"panel-group\" id=\"accordion\">\n                    <div class=\"panel-heading\">\n                        <form class=\"form-inline\" id=\"search\" role=\"form\" action=\"\" method=\"GET\">\n                            <input id=\"check_productid\" value=\"0\" name=\"check_productname\" hidden=\"true\">\n                            <select id=\"selprojectid\" name=\"projectid\" class=\"ak-left ac-aselect col01\">\n\n                            </select>\n                            <select id=\"selmoduleid\" name=\"moduleid\" class=\"ak-left ac-aselect col01\">\n                                <option value=\"\">所属模块</option>\n                            </select>\n                            <select name=\"casestatus\" class=\"ak-left ac-aselect col02\">\n                                <option value=\"\">状态</option>\n                                <option value=\"True\" {% if request.GET.casestatus  == 'True' %}selected{% endif %}>启 用\n                                </option>\n                                <option value=\"False\" {% if request.GET.casestatus  == 'False' %}selected{% endif %}>停\n                                    用\n                                </option>\n                            </select>\n                            <div class=\"input-group\">\n                                <input type=\"input\" class=\"form-control search-width\" name=\"keyword\"\n                                       value=\"{{ request.GET.keyword }}\" placeholder=\"通过用例ID或描述、作者等关键字搜索\">\n                                <span class=\"input-group-btn\">\n                                      <button class=\"btn btn-primary\" type=\"submit\" id=\"search_btn\">Go!</button>\n                                  </span>\n                            </div>\n                            <a href=\"/func/case/add/\" class=\"ak-right ac-btn-adduser blue\">添加用例</a>\n                        </form>\n                        <!-- /input-group -->\n                    </div>\n                    {% for case in caselist %}\n                        {% if case.isenabled == True %}\n                            <div class=\"panel panel-success\">\n                                <div class=\"panel-heading panel0\">\n                                    <div class=\"panel-title\">\n                                        <a id=\"{{ case.id }}\" onclick=\"changeIcon(this);\" data-toggle=\"collapse\"\n                                           data-parent=\"#accordion\"\n                                           href=\"#case{{ case.id }}\"><i\n                                                class=\"glyphicon glyphicon-plus\"></i></a>\n                                        <label class=\"label label-default\">{{ case.id }}</label>\n                                        <label class=\"label label-info\">{{ case.method |upper }}</label>\n                                        <label>{{ case.url }}</label>\n                                        <span style=\"padding-left: 100px;\"><label>{{ case.descr }}</label></span>\n                                        <span style=\"float: right;\">\n                                            <a title=\"编辑\" href=\"{% url 'caseupdate' case.id %}\"\n                                               class=\"ke-ablock\"><i class=\"glyphicon glyphicon-edit\"></i></a>\n                                                        {#                                            <a href=\"{% url 'casedel' case.id %}\" class=\"ac-abtn red\" role=\"button\" onclick=\"return confirm('您确定要删除吗？')\">删除</a>#}\n                                                        <a href=\"#\" title=\"执行\" id=\"run{{ case.id }}\"\n                                                           onclick=\"runcase({{ case.id }})\" class=\"ke-ablock\"><i\n                                                                class=\"glyphicon glyphicon-play-circle\"></i></a>\n                                            {% if case.debuginfo %}\n                                                <a href=\"#\" title=\"查看\"\n                                                   onclick=\"viewdebuginfo({{ case.id }})\" class=\"ke-ablock\"\n                                                   data-toggle=\"modal\" data-target=\"#debuginfo\"><i\n                                                        class=\"glyphicon glyphicon-eye-open\"></i></a>\n                                            {% else %}\n                                                <a title=\"查看\" class=\"ke-ablock\"><i\n                                                        class=\"glyphicon glyphicon-eye-close\"></i></a>\n                                            {% endif %}\n                                            <a href=\"{% url 'copycase' case.id %}\" title=\"复制\"\n                                               class=\"ke-ablock\"><i\n                                                    class=\"glyphicon glyphicon-copy\"></i></a>\n                                            </span>\n                                    </div>\n                                </div>\n                                <div id=\"case{{ case.id }}\" class=\"panel-collapse collapse\">\n                                    <div class=\"panel-body\">\n                                        <table class=\"table table-striped table-hover table-condensed ac-aelement-table\">\n                                            <thead>\n                                            <tr>\n                                                <th>PARAMS</th>\n                                                <th>EXECTIME</th>\n                                                <th>EXPECTED</th>\n                                                <th>ACTUAL</th>\n                                                <th>STATUS_CODE</th>\n                                                <th>CONTENT</th>\n                                                <th>OPTIONS</th>\n                                            </tr>\n                                            </thead>\n                                            <tbody>\n\n                                            </tbody>\n                                        </table>\n                                    </div>\n                                </div>\n                            </div>\n                        {% else %}\n                            <div class=\"panel panel-danger\">\n                                <div class=\"panel-heading panel0\">\n                                    <div class=\"panel-title\">\n                                        <a id=\"{{ case.id }}\" onclick=\"changeIcon(this);\" data-toggle=\"collapse\" data-parent=\"#accordion\"\n                                           href=\"#case{{ case.id }}\"><i\n                                                class=\"glyphicon glyphicon-plus\"></i></a>\n                                        <label class=\"label label-default\">{{ case.id }}</label>\n                                        <label class=\"label label-info\">{{ case.method |upper }}</label>\n                                        <label>{{ case.url }}</label>\n                                        <span style=\"padding-left: 100px;\"><label>{{ case.descr }}</label></span>\n                                        <span style=\"float: right;\">\n                                            <a title=\"编辑\" href=\"{% url 'caseupdate' case.id %}\"\n                                               class=\"ke-ablock\"><i class=\"glyphicon glyphicon-edit\"></i></a>\n                                                        {#                                            <a href=\"{% url 'casedel' case.id %}\" class=\"ac-abtn red\" role=\"button\" onclick=\"return confirm('您确定要删除吗？')\">删除</a>#}\n                                                        <a href=\"#\" title=\"执行\" id=\"run{{ case.id }}\"\n                                                           onclick=\"runcase({{ case.id }})\" class=\"ke-ablock\"><i\n                                                                class=\"glyphicon glyphicon-play-circle\"></i></a>\n                                            {% if case.debuginfo %}\n                                                <a href=\"#\" title=\"查看\"\n                                                   onclick=\"viewdebuginfo({{ case.id }})\" class=\"ke-ablock\"\n                                                   data-toggle=\"modal\" data-target=\"#debuginfo\"><i\n                                                        class=\"glyphicon glyphicon-eye-open\"></i></a>\n                                            {% else %}\n                                                <a title=\"查看\" class=\"ke-ablock\"><i\n                                                        class=\"glyphicon glyphicon-eye-close\"></i></a>\n                                            {% endif %}\n                                            <a href=\"{% url 'copycase' case.id %}\" title=\"复制\"\n                                               class=\"ke-ablock\"><i\n                                                    class=\"glyphicon glyphicon-copy\"></i></a>\n                                            </span>\n                                    </div>\n                                </div>\n                                <div id=\"case{{ case.id }}\" class=\"panel-collapse collapse\">\n                                    <div class=\"panel-body\">\n                                        <table class=\"table table-striped table-hover table-condensed ac-aelement-table\">\n                                            <thead>\n                                            <tr>\n                                                <th>PARAMS</th>\n                                                <th>EXECTIME</th>\n                                                <th>EXPECTED</th>\n                                                <th>ACTUAL</th>\n                                                <th>STATUS_CODE</th>\n                                                <th>CONTENT</th>\n                                                <th>OPTIONS</th>\n                                            </tr>\n                                            </thead>\n                                            <tbody>\n\n                                            </tbody>\n                                        </table>\n                                    </div>\n                                </div>\n                            </div>\n                        {% endif %}\n\n                    {% endfor %}\n                </div>\n\n                {% if is_paginated %}\n                    <div class=\"panel-default\">\n                        <ul class=\"pagination\">\n                            <li>\n                                <a href=\"javascript:window.location.href=window.location.search.match(/page=(\\d+|\\s*)/)===null? window.location.origin+(window.location.pathname +'?page=1'+(window.location.search?window.location.search.replace('?','&'):'')):window.location.search.replace(/page=(\\d+|\\s*)/, 'page=1')\">«</a>\n                            </li>\n                            {% if page_obj.has_previous %}\n                                <!--<li><a href=\"{{ request.get_full_path }}&page={{ page_obj.previous_page_number }}\">上一页</a></li>-->\n                                <li>\n                                    <a href=\"javascript:window.location.href=window.location.search.match(/page=(\\d+|\\s*)/)===null? window.location.href +'?page={{ page_obj.previous_page_number }}': window.location.search.replace(/page=(\\d+|\\s*)/, 'page={{ page_obj.previous_page_number }}')\">上一页</a>\n                                </li>\n                            {% else %}\n                                <li class=\"previous disabled\"><a>上一页</a></li>\n                            {% endif %}\n                            {#                              {% for i in page_obj.paginator.page_range %}#}\n                            {#                                  <li {% if page_obj.number == i %}class=\"active\"{% endif %}><a href=\"javascript:window.location.href=window.location.search.match(/page=(\\d+|\\s*)/)===null? window.location.origin+(window.location.pathname +'?page={{ i }}'+(window.location.search?window.location.search.replace('?','&'):'')):window.location.search.replace(/page=(\\d+|\\s*)/, 'page={{ i }}')\">{{ i }}</a></li>#}\n                            {#                                <li {% if page_obj.number == i %}class=\"active\"{% endif %}><a href=\"{{ request.get_full_path }}&page={{ i }}\">{{ i }}</a></li>#}\n                            {#                              {% endfor %}#}\n                            {% if page_obj.has_next %}\n                                <li>\n                                    <a href=\"javascript:window.location.href=window.location.search.match(/page=(\\d+|\\s*)/)===null? window.location.origin+(window.location.pathname +'?page={{ page_obj.next_page_number }}'+(window.location.search?window.location.search.replace('?','&'):'')):window.location.search.replace(/page=(\\d+|\\s*)/, 'page={{ page_obj.next_page_number }}')\">下一页</a>\n                                </li>\n                            {% else %}\n                                <li class=\"previous disabled\"><a>下一页</a></li>\n                            {% endif %}\n                            <li>\n                                <a href=\"javascript:window.location.href=window.location.search.match(/page=(\\d+|\\s*)/)===null? window.location.origin+(window.location.pathname +'?page={{ page_obj.paginator.num_pages }}'+(window.location.search?window.location.search.replace('?','&'):'')):window.location.search.replace(/page=(\\d+|\\s*)/, 'page={{ page_obj.paginator.num_pages }}')\">»</a>\n                            </li>\n                            <li><a>当前第{{ page_obj.number }}页/共{{ casesum }}条</a></li>\n                            <li><input id=\"curpage\" class=\"ac-acaseedit-input\" type=\"number\" style=\"width: 80px;\"></li>\n                            <li>\n                                <button id=\"btn_skip\" onclick=\"btn_skip_click()\" type=\"button\"\n                                        class=\"btn btn-sm btn-primary\">确定\n                                </button>\n                            </li>\n                        </ul>\n                    </div>\n                {% endif %}\n            </div>\n        </div>\n        <!--      ---------------------华丽的分割线 main end------------------------ -->\n\n    </div>\n\n    <div class=\"modal fade ak-min-fullwidth-modal ak-znews-addsort-modal\" id=\"debuginfo\" tabindex=\"-1\" role=\"dialog\"\n         aria-hidden=\"true\">\n        <div class=\"modal-dialog\">\n            <div class=\"modal-content\">\n                <div class=\"modal-header clearfix\">\n                    <button type=\"button\" class=\"close close-back\" data-dismiss=\"modal\"><span\n                            class=\"sr-only\">Close</span></button>\n                    <h4 class=\"modal-title text-center\">调试信息</h4>\n                </div>\n                <div class=\"modal-body ak-main-body\">\n                            <pre id=\"divdebuginfo\">\n                            </pre>\n                </div>\n            </div>\n        </div>\n    </div>\n{% endblock %}\n{% block script %}\n    <script>\n        $(document).ready(function () {\n            $(\"#accordion\").find(\".panel-collapse\").each(function () {\n                $(this).collapse('hide')\n            })\n        })\n        function btn_skip_click() {\n            var currpage = $('#curpage').val() === '' ? 1 : parseInt($('#curpage').val());\n            // console.log(currpage);\n            if (currpage > {{ page_obj.paginator.num_pages }}) {\n                currpage = {{ page_obj.paginator.num_pages }};\n            }\n            if (currpage < 1) {\n                currpage = 1;\n            }\n            var url = window.location.search.match(/page=(\\d+|\\s*)/) === null ? window.location.origin + (window.location.pathname + '?page=' + currpage + (window.location.search ? window.location.search.replace('?', '&') : '')) : window.location.search.replace(/page=(\\d+|\\s*)/, 'page=' + currpage);\n            self.location = url;\n\n            return false;\n        }\n\n        function changeIcon(ele) {\n                        /* 根据产品名称查询关键字列表 */\n            var webinterfaceid = $(ele).attr('id');\n            if ($(\"#case\"+webinterfaceid).find(\"tbody tr\").length == 0){\n            $.ajax({\n                type: \"GET\",\n                data: {'webinterfaceid': webinterfaceid},\n                url: \"/interf/get/response/\", //后台处理函数的url 这里用的是static url 需要与urls.py中的name一致\n                cache: false,\n                dataType: 'json',\n\n                success: function (result, TextStatus) {\n                    if (result.length > 0) {\n                        for (i = 0; i < result.length; i++){\n                        $(\"#case\"+webinterfaceid+\" tbody\").append('<tr>'\n                                                        +'<td class=\"ac-alist-width-overflow\">'+result[i].params+'</td>'\n                                                        +'<td>'+result[i].exectime+'</td>'\n                                                        +'<td>'+result[i].expected+'</td>'\n                                                        +'<td>'+result[i].actual+'</td>'\n                                                        +'<td>'+'<span class=\"label status_'+result[i].status_code+'\">'+result[i].status_code+'</span></td>'\n                                                        +'<td class=\"ac-alist-width-overflow\" data-toggle=\"tooltips\" data-placement=\"top\" title=\"'+result[i].Response_content+'\">'+result[i].Response_content+'</td>'\n                                                        +'<td><a href=\"#\" title=\"执行\" id=\"run'+result[i].id+'\" onclick=\"runcase('+result[i].id+')\" class=\"ke-ablock\"><i class=\"glyphicon glyphicon-play-circle\"></i></a>'\n                                                            +'<a href=\"#\" title=\"查看\" onclick=\"viewdebuginfo('+result[i].id+')\" class=\"ke-ablock\" data-toggle=\"modal\" data-target=\"#debuginfo\"><i class=\"glyphicon glyphicon-fire\"></i></a></td>'\n                                +'</tr>')\n                    }\n                    }\n                },\n                error: function (result) {\n{#                    alert(result);#}\n                }\n            });\n            }\n            var target = $(ele).find('i');\n            return target.hasClass('glyphicon-plus') ?\n                    target.removeClass('glyphicon-plus').addClass('glyphicon-minus') :\n                    target.addClass('glyphicon-plus').removeClass('glyphicon-minus');\n        }\n        $('#curpage').keypress(function (event) {\n            console.log(event.which);\n            if (event.which == 13) {\n                btn_skip_click()\n            }\n            event.stopPropagation();\n        })\n    </script>\n{% endblock %}\n"
  },
  {
    "path": "automatic/testcase/__init__.py",
    "content": ""
  },
  {
    "path": "automatic/testcase/admin.py",
    "content": "from django.contrib import admin\n\n# Register your models here.\n\nfrom automatic.testcase import models\n\n\nclass CaseAdmin(admin.ModelAdmin):\n    list_display = (id, 'casedesc', 'isenabled','issmoke', 'projectid', 'createat', 'createtime', 'updateat', 'updatetime')\n    search_fields = ('casedesc', 'projectid')\n\n\nclass StepAdmin(admin.ModelAdmin):\n    list_display = (id, 'caseid', 'stepid', 'descr', 'keywordid', 'elementid', 'inputtext')\n    search_fields = ('descr',)\n\n\nadmin.site.register(models.Case, CaseAdmin)\nadmin.site.register(models.Step, StepAdmin)"
  },
  {
    "path": "automatic/testcase/apps.py",
    "content": "from django.apps import AppConfig\n\n\nclass TestcaseConfig(AppConfig):\n    name = 'automatic.testcase'\n"
  },
  {
    "path": "automatic/testcase/forms.py",
    "content": "# -*- coding:utf-8 -*-\n\"\"\"\n__author__ = 'Ray'\nmail:tsbc@vip.qq.com\n2020-01-06\n\"\"\"\nfrom django import forms\nfrom automatic.testcase.models import *\n\n\nclass FormCase(forms.ModelForm):\n    class Meta:\n        model = Case\n        fields = ('casedesc','testrailcaseid','projectid','moduleid','isenabled','dependent')\n\n\nclass FormStep(forms.ModelForm):\n    class Meta:\n        model = Step\n        fields = ('caseid', 'descr', 'keywordid','elementid','inputtext')"
  },
  {
    "path": "automatic/testcase/migrations/0001_initial.py",
    "content": "# Generated by Django 3.0.2 on 2020-01-15 10:02\n\nimport django.core.validators\nfrom django.db import migrations, models\nimport django.db.models.deletion\nimport re\n\n\nclass Migration(migrations.Migration):\n\n    initial = True\n\n    dependencies = [\n        ('element', '0001_initial'),\n        ('management', '0001_initial'),\n        ('keywords', '0001_initial'),\n    ]\n\n    operations = [\n        migrations.CreateModel(\n            name='Case',\n            fields=[\n                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),\n                ('testrailcaseid', models.CharField(blank=True, max_length=12, null=True)),\n                ('casedesc', models.CharField(max_length=255, verbose_name='Title')),\n                ('isenabled', models.BooleanField(default=True)),\n                ('issmoke', models.BooleanField(default=False)),\n                ('dependent', models.CharField(blank=True, max_length=8, null=True)),\n                ('debuginfo', models.CharField(blank=True, max_length=9999, null=True)),\n                ('createtime', models.DateTimeField(auto_now_add=True)),\n                ('createat', models.CharField(blank=True, max_length=32, null=True)),\n                ('updatetime', models.DateTimeField(auto_now_add=True)),\n                ('updateat', models.CharField(blank=True, max_length=32, null=True)),\n                ('moduleid', models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, to='management.Module')),\n                ('projectid', models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, to='management.Project')),\n            ],\n        ),\n        migrations.CreateModel(\n            name='Caseset',\n            fields=[\n                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),\n                ('descr', models.CharField(max_length=200)),\n                ('caseid', models.CharField(max_length=255, validators=[django.core.validators.RegexValidator(re.compile('^\\\\d+(?:\\\\,\\\\d+)*\\\\Z'), code='invalid', message='Enter only digits separated by commas.')])),\n                ('isenabled', models.BooleanField(default=True)),\n                ('createtime', models.DateTimeField(auto_now_add=True)),\n                ('createat', models.CharField(blank=True, max_length=32, null=True)),\n                ('updatetime', models.DateTimeField(auto_now=True)),\n                ('updateat', models.CharField(blank=True, max_length=32, null=True)),\n            ],\n        ),\n        migrations.CreateModel(\n            name='Step',\n            fields=[\n                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),\n                ('stepid', models.IntegerField(blank=True, null=True)),\n                ('descr', models.CharField(blank=True, max_length=200, null=True)),\n                ('inputtext', models.CharField(blank=True, max_length=200, null=True)),\n                ('createtime', models.DateTimeField(auto_now_add=True)),\n                ('createat', models.CharField(blank=True, max_length=32, null=True)),\n                ('updatetime', models.DateTimeField(auto_now=True)),\n                ('updateat', models.CharField(blank=True, max_length=32, null=True)),\n                ('caseid', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='testcase.Case')),\n                ('elementid', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.DO_NOTHING, to='element.Element')),\n                ('keywordid', models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, to='keywords.Keyword')),\n            ],\n        ),\n    ]\n"
  },
  {
    "path": "automatic/testcase/migrations/__init__.py",
    "content": ""
  },
  {
    "path": "automatic/testcase/models.py",
    "content": "# -*- coding:utf-8 -*-\n\"\"\"\n__author__ = 'Ray'\nmail:tsbc@vip.qq.com\n2020-01-06\n\"\"\"\nfrom django.db import models\nfrom automatic.management.models import Project, Module\nfrom automatic.keywords.models import Keyword\nfrom automatic.element.models import Element\n# from django.core.validators import validate_comma_separated_integer_list\n# Create your models here.\n\n\nclass Case(models.Model):\n    projectid = models.ForeignKey(Project, on_delete=models.DO_NOTHING)\n    moduleid = models.ForeignKey(Module, on_delete=models.DO_NOTHING)\n    testrailcaseid = models.CharField(max_length=12,null=True, blank=True, editable=True)\n    casedesc = models.CharField(max_length=255, verbose_name=\"Title\")\n    isenabled = models.BooleanField(default=True)\n    issmoke = models.BooleanField(default=False)\n    dependent = models.CharField(max_length=8,null=True, blank=True, editable=True)\n    debuginfo = models.CharField(max_length=9999, null=True, blank=True, editable=True)\n    createtime = models.DateTimeField(auto_now_add=True)\n    createat = models.CharField(max_length=32,null=True, blank=True, editable=True)\n    updatetime = models.DateTimeField(auto_now_add=True)\n    updateat = models.CharField(max_length=32,null=True, blank=True, editable=True)\n\n    def __unicode__(self):\n        return self.casedesc\n\n# class Caseset(models.Model):\n#     descr = models.CharField(max_length=200)\n#     caseid = models.CharField(validators=[validate_comma_separated_integer_list],max_length=255)\n#     isenabled = models.BooleanField(default=True)\n#     createtime = models.DateTimeField(auto_now_add=True)\n#     createat = models.CharField(max_length=32, null=True, blank=True, editable=True)\n#     updatetime = models.DateTimeField(auto_now=True)\n#     updateat = models.CharField(max_length=32, null=True, blank=True, editable=True)\n#\n#     def __unicode__(self):\n#         return self.descr\n\n\nclass Step(models.Model):\n    caseid = models.ForeignKey(Case, on_delete=models.CASCADE)\n    stepid = models.IntegerField(null=True, blank=True, editable=True)\n    descr = models.CharField(max_length=200, null=True, blank=True, editable=True)\n    keywordid = models.ForeignKey(Keyword, on_delete=models.DO_NOTHING)\n    elementid = models.ForeignKey(Element,null=True, blank=True, on_delete=models.DO_NOTHING)\n    inputtext = models.CharField(max_length=200, null=True, blank=True, editable=True)\n    createtime = models.DateTimeField(auto_now_add=True)\n    createat = models.CharField(max_length=32, null=True, blank=True, editable=True)\n    updatetime = models.DateTimeField(auto_now=True)\n    updateat = models.CharField(max_length=32, null=True, blank=True, editable=True)\n\n    def __unicode__(self):\n        return self.descr\n"
  },
  {
    "path": "automatic/testcase/tests.py",
    "content": "from django.test import TestCase\n\n# Create your tests here.\n"
  },
  {
    "path": "automatic/testcase/urls.py",
    "content": "from django.conf.urls import url\nfrom django.urls import reverse_lazy\nfrom django.contrib.auth import views as contrib_auth_views\nfrom django.contrib.auth.decorators import login_required\nfrom automatic.testcase import views\n\nurlpatterns = [\n    url(r'^add/$', views.add_case, name='caseadd'),\n    url(r'^list/$|^$|^index/$', login_required(views.CaseListIndex.as_view()), name='caselist'),\n    url(r'^view/(?P<id>\\d+)/$', views.view_case, name='caseview'),\n    url(r'^update/(?P<id>\\d+)/$', views.update_case, name='caseupdate'),\n    url(r'^copy/(?P<id>\\d+)/$', views.copy_case, name='copycase'),\n    url(r'^del/(?P<id>\\d+)/$', views.del_case, name='casedel'),\n    url(r'^run/$', views.run_case, name='runcase'),\n    url(r'^caselist/$', views.get_caselist, name='getcase'),\n    url(r'^step/del/(?P<id>\\d+)/$', views.del_step, name='stepdel'),\n]"
  },
  {
    "path": "automatic/testcase/views.py",
    "content": "# -*- coding:utf-8 -*-\n\"\"\"\n__author__ = 'Ray'\nmail:tsbc@vip.qq.com\n2020-01-06\n\"\"\"\nimport os\nfrom django.contrib.auth.decorators import login_required\nfrom django.shortcuts import render, get_object_or_404\nfrom django.http import HttpResponse,HttpResponseRedirect\nfrom django.views.decorators.csrf import csrf_exempt\nfrom django.utils import timezone\nfrom automatic.testcase.forms import *\nfrom django.views.generic import ListView\nfrom automatic.management.models import Project, Module, UserAndProduct\nfrom automatic.testcase.models import Case\nfrom automatic.keywords.models import Keyword\nfrom automatic.element.models import Element\nfrom django.db.models import Q\nfrom django.urls import reverse\nfrom nameko.standalone.rpc import ClusterRpcProxy\nfrom automatic.settings.common import RABBITMQ_CONFIG, RABBITMQ_STATUS\n# Create your views here.\n\n\n@login_required()\ndef add_case(request):\n    if request.method == 'POST':\n        post_dict = request.POST\n        case_dict = {\"projectid\": post_dict['projectid'],\n                     \"moduleid\": post_dict['moduleid'],\n                     \"casedesc\": post_dict['casedesc'],\n                     \"testrailcaseid\": post_dict['testrailcaseid'] if 'testrailcaseid' in post_dict else None,\n                     \"dependent\": post_dict['dependent']\n                     }\n        projectid = Project.objects.get(pk=int(case_dict.get('projectid')))\n        moduleid = Module.objects.get(pk=int(case_dict.get('moduleid')))\n        casedesc = case_dict.get('casedesc')\n        if 'isenabled' in post_dict:\n            isenabled = True\n        else:\n            isenabled = False\n        if 'issmoke' in post_dict:\n            issmoke = True\n        else:\n            issmoke = False\n        testrailcaseid = case_dict.get('testrailcaseid')\n        dependent = case_dict.get('dependent')\n        createat = request.user.username\n        updateat = request.user.username\n\n        case = Case(projectid=projectid, moduleid=moduleid, casedesc=casedesc, isenabled=isenabled, createat=createat,\n                    updateat=updateat, dependent=dependent,testrailcaseid=testrailcaseid,issmoke=issmoke)\n        case.save()\n        element_list = post_dict.getlist(\"elementid\")\n        keyword_list = post_dict.getlist(\"keyword\")\n        value_list, desc_list = post_dict.getlist(\"inputtext\"), post_dict.getlist(\"descr\")\n        s = 1\n        for keyword, element, inputtext, descr in zip(keyword_list, element_list, value_list, desc_list):\n            kw = Keyword.objects.get(pk=int(keyword))\n            if element != 'None':\n                # print \"aaaa\", type(element)\n                ele = Element.objects.get(pk=int(element))\n                case.step_set.create(stepid=s, descr=descr, keywordid=kw, elementid=ele, inputtext=inputtext)\n            else:\n                # print \"bbbb\",element\n                case.step_set.create(stepid=s, descr=descr, keywordid=kw,inputtext=inputtext)\n            s += 1\n        return HttpResponse('添加成功')\n    else:\n        userandproduct = UserAndProduct.objects.all()\n        projectlist = Project.objects.all().order_by('-sortby')\n        modulelist = Module.objects.all().order_by('-sortby')\n        caseform = FormCase()\n        stepform = FormStep()\n        # keywordform = FormKeyword()\n        # elementform =FormElement()\n        # keywordlist = Keyword.objects.all()\n        return render(request, 'testcase/caseadd.html',{'userandproduct':userandproduct,'projectlist':projectlist,'modulelist':modulelist,'caseform':caseform,'stepform':stepform})\n\n\n@csrf_exempt\n@login_required()\ndef update_case(request, id):\n    tcase = Case.objects.get(id=int(id))\n    steplist = Step.objects.filter(caseid=tcase.id).order_by('stepid')\n    if request.method == 'POST':\n        post_dict = request.POST\n        case = Case.objects.filter(id=int(id))\n        case_dict = {\"projectid\": post_dict['projectid'],\n                     \"moduleid\": post_dict['moduleid'],\n                     \"casedesc\": post_dict['casedesc'],\n                     \"dependent\": post_dict['dependent'],\n                     \"testrailcaseid\": post_dict['testrailcaseid'] if 'testrailcaseid' in post_dict else None\n                     }\n\n        projectid = Project.objects.get(pk=int(case_dict.get('projectid')))\n        moduleid = Module.objects.get(pk=int(case_dict.get('moduleid')))\n        testrailcaseid = case_dict.get('testrailcaseid')\n        casedesc = case_dict.get('casedesc')\n        if 'isenabled' in post_dict:\n            isenabled = True\n        else:\n            isenabled = False\n        if 'issmoke' in post_dict:\n            issmoke = True\n        else:\n            issmoke = False\n        dependent = case_dict.get('dependent')\n        updateat = request.user.username\n        updatetime = timezone.now()\n        case.update(projectid=projectid, moduleid=moduleid, casedesc=casedesc, isenabled=isenabled,\n                    updateat=updateat, dependent=dependent,testrailcaseid=testrailcaseid,updatetime=updatetime,issmoke=issmoke)\n        keyword_list, element_list = post_dict.getlist(\"keyword\"), post_dict.getlist(\"elementid\")\n        value_list, desc_list = post_dict.getlist(\"inputtext\"), post_dict.getlist(\"descr\")\n        tcase.step_set.all().delete()\n        s = 1\n        for keyword, element, inputtext, descr in zip(keyword_list, element_list, value_list, desc_list):\n            kw = Keyword.objects.get(pk=int(keyword))\n            #print element\n            if element != 'None':\n                # print \"ccc\",element\n                elementid = Element.objects.get(pk=int(element))\n                tcase.step_set.create(stepid=s, descr=descr, keywordid=kw, elementid=elementid, inputtext=inputtext)\n            else:\n                # print \"ddd\",element\n                tcase.step_set.create(stepid=s, descr=descr, keywordid=kw, inputtext=inputtext)\n            s += 1\n        return HttpResponse('添加成功')\n    else:\n        modulelist = Module.objects.filter(projectid=tcase.projectid).order_by('-sortby')\n        project = tcase.projectid\n        projectlist = Project.objects.filter(productid=project.productid)\n        keywordlist = Keyword.objects.filter(Q(productid=0)|Q(productid=project.productid.pk))\n        elementlist = Element.objects.filter(projectid=project.pk)\n        return render(request, 'testcase/caseedit.html', {'project':project,'modulelist':modulelist,'elementlist':elementlist,'projectlist':projectlist,'keywordlist':keywordlist,'steplist':steplist,'tcase':tcase})\n\n\n@csrf_exempt\n@login_required()\ndef copy_case(request, id):\n    tcase = Case.objects.get(id=int(id))\n    steplist = Step.objects.filter(caseid=tcase.id).order_by('stepid')\n    if request.method == 'POST':\n        post_dict = request.POST\n        case_dict = {\"projectid\": post_dict['projectid'],\n                     \"moduleid\": post_dict['moduleid'],\n                     \"casedesc\": post_dict['casedesc'],\n                     \"dependent\": post_dict['dependent'],\n                     \"testrailcaseid\": post_dict['testrailcaseid'] if 'testrailcaseid' in post_dict else None\n                     }\n\n        projectid = Project.objects.get(pk=int(case_dict.get('projectid')))\n        moduleid = Module.objects.get(pk=int(case_dict.get('moduleid')))\n        testrailcaseid = case_dict.get('testrailcaseid')\n        casedesc = case_dict.get('casedesc')\n        if 'isenabled' in post_dict:\n            isenabled = True\n        else:\n            isenabled = False\n        if 'issmoke' in post_dict:\n            issmoke = True\n        else:\n            issmoke = False\n        dependent = case_dict.get('dependent')\n        createat = request.user.username\n        updateat = request.user.username\n\n        case = Case(projectid=projectid, moduleid=moduleid, casedesc=casedesc, isenabled=isenabled, createat=createat,\n                        updateat=updateat, dependent=dependent, testrailcaseid=testrailcaseid, issmoke=issmoke)\n        case.save()\n\n        keyword_list, element_list = post_dict.getlist(\"keyword\"), post_dict.getlist(\"elementid\")\n        value_list, desc_list = post_dict.getlist(\"inputtext\"), post_dict.getlist(\"descr\")\n        s = 1\n        for keyword, element, inputtext, descr in zip(keyword_list, element_list, value_list, desc_list):\n            kw = Keyword.objects.get(pk=int(keyword))\n            # print element\n            if element != 'None':\n                # print \"ccc\",element\n                elementid = Element.objects.get(pk=int(element))\n                case.step_set.create(stepid=s, descr=descr, keywordid=kw, elementid=elementid, inputtext=inputtext)\n            else:\n                # print \"ddd\",element\n                case.step_set.create(stepid=s, descr=descr, keywordid=kw, inputtext=inputtext)\n            s += 1\n        return HttpResponse('添加成功')\n    else:\n        modulelist = Module.objects.filter(projectid=tcase.projectid).order_by('-sortby')\n        project = Project.objects.get(name=tcase.projectid.name)\n        projectlist = Project.objects.filter(productid=project.productid)\n        keywordlist = Keyword.objects.filter(Q(productid=0) | Q(productid=project.productid.pk))\n        elementlist = Element.objects.filter(moduleid=tcase.moduleid)\n        return render(request, 'testcase/casecopy.html', {'project':project,'modulelist':modulelist,'elementlist':elementlist,'projectlist':projectlist,'keywordlist':keywordlist,'steplist':steplist,'tcase':tcase})\n\n\n@login_required()\ndef del_case(request,id):\n    case = get_object_or_404(Case,pk=int(id))\n    case.delete()\n    return HttpResponseRedirect(reverse('caselist'))\n\n\n@login_required()\ndef del_step(request, id):\n    step = get_object_or_404(Step, pk=int(id))\n    caseid = step.caseid\n    cid = Case.objects.get(casedesc=caseid)\n    step.delete()\n    return HttpResponseRedirect('/case/update/'+str(cid.pk))\n\n\n@login_required()\ndef view_case(request, id):\n    case = get_object_or_404(Case, pk=int(id))\n    steplist = case.step_set.all().order_by('stepid')\n    return render(request, 'testcase/caseview.html', locals())\n\n\nclass CaseListIndex(ListView):\n    context_object_name = 'caselist'\n    template_name = 'index.html'\n    paginate_by = 10\n    # raw_sql = \"select * from autoplat_case where projectid_id in (select id from autoplat_project where productid_id in (select productname_id from autoplat_userandproduct where username_id=3));\"\n    casesum = 0\n    model = Case\n    http_method_names = [u'get']\n\n    def get_queryset(self):\n        prodcutid = UserAndProduct.objects.filter(username = self.request.user).values('productname')\n        caselist = Case.objects.filter(projectid__in=Project.objects.filter(productid__in=prodcutid).values('id')).order_by('-pk')\n        prodcutid = self.request.GET.get('check_productname')\n        projectid = self.request.GET.get('projectid')\n        moduleid = self.request.GET.get('moduleid')\n        casestatus = self.request.GET.get('casestatus')\n        issmoke = self.request.GET.get('issmoke')\n        keyword = self.request.GET.get('keyword')\n        if prodcutid and int(prodcutid):\n            caselist = caselist.filter(projectid__in=Project.objects.filter(productid=prodcutid).values('id'))\n        if projectid:\n            caselist = caselist.filter(projectid=projectid)\n        if moduleid:\n            caselist = caselist.filter(moduleid=moduleid)\n        if casestatus:\n            caselist = caselist.filter(isenabled=casestatus)\n        if issmoke:\n            caselist = caselist.filter(issmoke=issmoke)\n        if keyword:\n            caselist = caselist.filter(Q(pk__icontains=keyword)|Q(casedesc__icontains=keyword)|Q(createat__icontains=keyword))\n        self.casesum = len(caselist)\n        return  caselist\n\n    def get_context_data(self, **kwargs):\n        context = super(CaseListIndex,self).get_context_data(**kwargs)\n        # namelist = Case.objects.values('casedesc').annotate()\n        # context['casedesc'] = namelist\n        context['projectlist'] = Project.objects.all().order_by('-sortby')\n        context['modulelist'] = Module.objects.all().order_by('-sortby')\n        # context['productlist'] = Product.objects.all().order_by('-sortby')\n        context['userandproduct'] = UserAndProduct.objects.all()\n        context['casesum'] = self.casesum\n        return context\n\n\ndef get_caselist(request):\n    caseid = request.GET['caseid']\n    projectid = Case.objects.get(pk=caseid).projectid\n    caselist = Case.objects.filter(projectid=projectid).order_by('id')\n    casenum = []\n    for i in caselist:\n        caseno = {}\n        caseno['caseid'] = i.pk\n        casenum.append(i.pk)\n        casenum.append(',')\n    return HttpResponse(casenum)\n\n\ndef run_case(request):\n    caseid = request.GET['caseid']\n    depentid = Case.objects.get(pk=caseid).dependent\n    if RABBITMQ_STATUS:\n        with ClusterRpcProxy(RABBITMQ_CONFIG) as rpc:\n            result = rpc.greeting_service.say_hello(caseid)\n            print(result)\n            return HttpResponse('true')\n    else:\n        if depentid == u'':\n            os.system(\"python seleniumkeyword/TestSuite.py -c %d\" % int(caseid))\n        else:\n            os.system(\"python seleniumkeyword/TestSuite.py -c \" + depentid + \",\" + caseid)\n        # print caseid\n        return HttpResponse('true')\n"
  },
  {
    "path": "automatic/testtask/__init__.py",
    "content": ""
  },
  {
    "path": "automatic/testtask/admin.py",
    "content": "from django.contrib import admin\n\n# Register your models here.\n\nfrom automatic.testtask import models\n\n\nclass KeywordAdmin(admin.ModelAdmin):\n    list_display = (id, 'taskname', 'tasktype','status', 'issmoke', 'createat', 'createtime', 'updateat', 'updatetime')\n    search_fields = ('taskname', 'tasktype')\n\n\nclass CodelistAdmin(admin.ModelAdmin):\n    list_display = (id, 'codename', 'codedescr', 'codevalue', 'createat', 'createtime', 'updateat', 'updatetime')\n    search_fields = ('codename',)\n\n\nclass TaskhistoryAdmin(admin.ModelAdmin):\n    list_display = (id, 'taskid', 'tasktype', 'taskname', 'case_tag_all', 'case_tag_pass', 'case_tag_fail', 'case_tag_error')\n    search_fields = ('taskid', 'taskname')\n\n\nadmin.site.register(models.Task, KeywordAdmin)\nadmin.site.register(models.Codelist, CodelistAdmin)\nadmin.site.register(models.Taskhistory, TaskhistoryAdmin)"
  },
  {
    "path": "automatic/testtask/apps.py",
    "content": "from django.apps import AppConfig\n\n\nclass TesttaskConfig(AppConfig):\n    name = 'automatic.testtask'\n"
  },
  {
    "path": "automatic/testtask/migrations/0001_initial.py",
    "content": "# Generated by Django 3.0.2 on 2020-01-15 10:02\n\nfrom django.conf import settings\nfrom django.db import migrations, models\nimport django.db.models.deletion\n\n\nclass Migration(migrations.Migration):\n\n    initial = True\n\n    dependencies = [\n        ('management', '0001_initial'),\n        migrations.swappable_dependency(settings.AUTH_USER_MODEL),\n    ]\n\n    operations = [\n        migrations.CreateModel(\n            name='Task',\n            fields=[\n                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),\n                ('taskname', models.CharField(max_length=255, verbose_name='任务描述')),\n                ('tasktype', models.CharField(blank=True, choices=[('1', '执行用例'), ('2', '用例同步'), ('3', '关联Jenkins')], max_length=32)),\n                ('status', models.SmallIntegerField(default=0, verbose_name='任务状态')),\n                ('issmoke', models.BooleanField(default=False)),\n                ('testrailsuites', models.CharField(blank=True, max_length=8, null=True, verbose_name='TestRail测试集ID')),\n                ('testrailrunid', models.CharField(blank=True, max_length=8, null=True, verbose_name='TestRail执行ID')),\n                ('testsectionid', models.CharField(blank=True, max_length=8, null=True, verbose_name='TestRail用例节点ID')),\n                ('jenkins_server_url', models.CharField(blank=True, max_length=100, null=True, verbose_name='JenkinsServer')),\n                ('user_id', models.CharField(blank=True, max_length=32, null=True, verbose_name='JenkinsUserid')),\n                ('api_token', models.CharField(blank=True, max_length=32, null=True, verbose_name='JenkinsApitoken')),\n                ('build_name', models.CharField(blank=True, max_length=32, null=True, verbose_name='JenkinsBuildName')),\n                ('caselist', models.CharField(max_length=10240, verbose_name='用例列表')),\n                ('createtime', models.DateTimeField(auto_now_add=True)),\n                ('createat', models.CharField(blank=True, max_length=32, null=True)),\n                ('updatetime', models.DateTimeField(auto_now=True)),\n                ('updateat', models.CharField(blank=True, max_length=32, null=True)),\n                ('projectid', models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, to='management.Project')),\n            ],\n        ),\n        migrations.CreateModel(\n            name='Taskhistory',\n            fields=[\n                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),\n                ('tasktype', models.CharField(blank=True, max_length=32)),\n                ('taskname', models.CharField(max_length=255, verbose_name='任务描述')),\n                ('case_tag_all', models.CharField(blank=True, max_length=8, null=True)),\n                ('case_tag_pass', models.CharField(blank=True, max_length=8, null=True)),\n                ('case_tag_fail', models.CharField(blank=True, max_length=8, null=True)),\n                ('case_tag_error', models.CharField(blank=True, max_length=8, null=True)),\n                ('starttime', models.DateTimeField(blank=True)),\n                ('exectime', models.CharField(blank=True, max_length=32, null=True)),\n                ('reporturl', models.CharField(max_length=255, null=True, verbose_name='report Url')),\n                ('build_name', models.CharField(blank=True, max_length=32, null=True)),\n                ('build_number', models.CharField(blank=True, max_length=8, null=True)),\n                ('taskid', models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, to='testtask.Task')),\n                ('userid', models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, to=settings.AUTH_USER_MODEL)),\n            ],\n        ),\n        migrations.CreateModel(\n            name='Codelist',\n            fields=[\n                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),\n                ('codename', models.CharField(max_length=32)),\n                ('codedescr', models.CharField(max_length=255)),\n                ('codevalue', models.CharField(max_length=255)),\n                ('createtime', models.DateTimeField(auto_now_add=True)),\n                ('createat', models.CharField(blank=True, max_length=32, null=True)),\n                ('updatetime', models.DateTimeField(auto_now=True)),\n                ('updateat', models.CharField(blank=True, max_length=32, null=True)),\n                ('taskid', models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, to='testtask.Task')),\n            ],\n        ),\n    ]\n"
  },
  {
    "path": "automatic/testtask/migrations/__init__.py",
    "content": ""
  },
  {
    "path": "automatic/testtask/models.py",
    "content": "# -*- coding:utf-8 -*-\n\"\"\"\n__author__ = 'Ray'\nmail:tsbc@vip.qq.com\n2020-01-06\n\"\"\"\nfrom django.db import models\nfrom automatic.management.models import Project, User\n# Create your models here.\n\n\nclass Task(models.Model):\n    Task_Choice = (\n        ('1', '执行用例'),\n        ('2', '用例同步'),\n        ('3', '关联Jenkins'),\n    )\n    taskname = models.CharField(max_length=255,verbose_name=\"任务描述\")\n    tasktype = models.CharField(max_length=32, choices=Task_Choice, blank=True, editable=True)\n    status = models.SmallIntegerField(default=0, verbose_name='任务状态')\n    issmoke = models.BooleanField(default=False)\n    testrailsuites = models.CharField(max_length=8, verbose_name='TestRail测试集ID', null=True, blank=True, editable=True)\n    testrailrunid = models.CharField(max_length=8,verbose_name='TestRail执行ID',null=True,blank=True, editable=True)\n    testsectionid = models.CharField(max_length=8, verbose_name='TestRail用例节点ID',null=True,blank=True, editable=True)\n    projectid = models.ForeignKey(Project, on_delete=models.DO_NOTHING)\n    jenkins_server_url = models.CharField(max_length=100, verbose_name='JenkinsServer', null=True, blank=True, editable=True)\n    user_id = models.CharField(max_length=32, verbose_name='JenkinsUserid', null=True, blank=True, editable=True)\n    api_token = models.CharField(max_length=32, verbose_name='JenkinsApitoken', null=True, blank=True, editable=True)\n    build_name = models.CharField(max_length=32, verbose_name='JenkinsBuildName', null=True, blank=True, editable=True)\n    caselist = models.CharField(max_length=10240, verbose_name='用例列表')\n    createtime = models.DateTimeField(auto_now_add=True)\n    createat = models.CharField(max_length=32, null=True, blank=True, editable=True)\n    updatetime = models.DateTimeField(auto_now=True)\n    updateat = models.CharField(max_length=32, null=True, blank=True, editable=True)\n\n    def __unicode__(self):\n        return  self.taskname\n\nclass Codelist(models.Model):\n    taskid = models.ForeignKey(Task, on_delete=models.DO_NOTHING)\n    codename = models.CharField(max_length=32)\n    codedescr = models.CharField(max_length=255)\n    codevalue = models.CharField(max_length=255)\n    createtime = models.DateTimeField(auto_now_add=True)\n    createat = models.CharField(max_length=32, null=True, blank=True, editable=True)\n    updatetime = models.DateTimeField(auto_now=True)\n    updateat = models.CharField(max_length=32, null=True, blank=True, editable=True)\n\n    def __unicode__(self):\n        return self.codename\n\nclass Taskhistory(models.Model):\n    taskid = models.ForeignKey(Task, on_delete=models.DO_NOTHING)\n    userid = models.ForeignKey(User, on_delete=models.DO_NOTHING)\n    tasktype = models.CharField(max_length=32, blank=True, editable=True)\n    taskname = models.CharField(max_length=255, verbose_name=\"任务描述\")\n    case_tag_all = models.CharField(max_length=8, null=True, blank=True, editable=True)\n    case_tag_pass = models.CharField(max_length=8, null=True, blank=True, editable=True)\n    case_tag_fail = models.CharField(max_length=8, null=True, blank=True, editable=True)\n    case_tag_error = models.CharField(max_length=8, null=True, blank=True, editable=True)\n    starttime = models.DateTimeField(blank=True, editable=True)\n    exectime = models.CharField(max_length=32, null=True, blank=True, editable=True)\n    reporturl = models.CharField(max_length=255, verbose_name=\"report Url\", null=True)\n    build_name = models.CharField(max_length=32, null=True, blank=True, editable=True)\n    build_number = models.CharField(max_length=8, null=True, blank=True, editable=True)\n\n    def __unicode__(self):\n        return self.pk"
  },
  {
    "path": "automatic/testtask/tests.py",
    "content": "from django.test import TestCase\n\n# Create your tests here.\n"
  },
  {
    "path": "automatic/testtask/urls.py",
    "content": "from django.conf.urls import url\nfrom django.contrib.auth.decorators import login_required\nfrom automatic.testtask import views\n\nurlpatterns = [\n    url(r'add/$', views.add_task, name='taskadd'),\n    url(r'list/$', login_required(views.TaskListIndex.as_view()), name='tasklist'),\n    url(r'settreetask/$', views.set_tree_task, name='settreetask'),\n    url(r'update/(?P<id>\\d+)/$', views.update_task, name='taskupdate'),\n    url(r'del/(?P<id>\\d+)/$', views.del_task, name='taskdel'),\n    url(r'run/$', views.run_task, name='runtask'),\n    url(r'taskhistory/$', views.get_task_history, name='gettaskhistroy'),\n]"
  },
  {
    "path": "automatic/testtask/views.py",
    "content": "# -*- coding:utf-8 -*-\n\"\"\"\n__author__ = 'Ray'\nmail:tsbc@vip.qq.com\n2020-01-06\n\"\"\"\nimport logging, json, os\nimport jenkins\nimport time\nfrom django.utils import timezone\nfrom django.contrib.auth.decorators import login_required\nfrom django.shortcuts import render, redirect, get_object_or_404\nfrom django.http import HttpResponse,HttpResponseRedirect\nfrom django.views.decorators.csrf import csrf_exempt\nfrom django.views.generic import ListView\nfrom django.db.models import Q\nfrom django.urls import reverse\nfrom automatic.testcase.models import Case\nfrom automatic.management.models import Product,Project,Module,User,UserAndProduct\nfrom automatic.testtask.models import Task, Taskhistory, Codelist\n# Create your views here.\n\n\n# fixed #27\ndef duration_change(num):\n    if num == 0:\n        x = 0\n    else:\n        x = str(num)[:-3]\n    if int(x) <= 60:\n        return str(x)+'s'\n    elif int(x) < 3600:\n        y = float(x)/60\n        z = str(y).split('.')\n        return z[0]+'min:'+ str(int(z[1])*6)[:2]+'s'\n    else:\n        y = divmod(int(x), 3600)\n        z = float(y[1])/60\n        m = str(z).split('.')\n        return str(y[0])+'h:'+m[0]+'min:'+ str(int(m[1])*6)[:2]+'s'\n\n\ndef timeStamp(timastamp):\n    timastamp = str(timastamp)[:10]\n    timeArray = time.localtime(int(timastamp))\n    chartime = time.strftime('%Y-%m-%d %H:%M:%S',timeArray)\n    return chartime\n\n\ndef testreport(path):\n    path = path[7:]\n    return path\n# fixed #27\n\nclass TaskListIndex(ListView):\n\tcontext_object_name = 'tasklist'\n\ttemplate_name = 'testtask/tasklist.html'\n\tpaginate_by = 10\n\t# raw_sql = \"select * from autoplat_case where projectid_id in (select id from autoplat_project where productid_id in (select productname_id from autoplat_userandproduct where username_id=3));\"\n\ttasksum = 0\n\tqueryset = Task.objects.filter(projectid=3)\n\thttp_method_names = [u'get']\n\n\tdef get_queryset(self):\n\t\ttasklist = Task.objects.all().order_by('-pk')\n\t\tprodcutid = UserAndProduct.objects.filter(username=self.request.user).values('productname')\n\t\ttasklist = Task.objects.filter(projectid__in=Project.objects.filter(productid__in=prodcutid).values('id')).order_by('-pk')\n\t\tprodcutid = self.request.GET.get('check_productname')\n\t\tprojectid = self.request.GET.get('projectid')\n\t\ttasktype = self.request.GET.get('tasktype')\n\t\tkeyword = self.request.GET.get('keyword')\n\n\t\tif prodcutid and int(prodcutid):\n\t\t\ttasklist = tasklist.filter(projectid__in=Project.objects.filter(productid=prodcutid).values('id'))\n\t\tif projectid:\n\t\t\ttasklist = tasklist.filter(projectid=projectid)\n\t\tif tasktype:\n\t\t\ttasklist = tasklist.filter(tasktype=tasktype)\n\t\telse:\n\t\t\ttasklist = tasklist.filter(tasktype=1)\n\t\tif keyword:\n\t\t\ttasklist = tasklist.filter(Q(pk__icontains=keyword)|Q(taskname__icontains=keyword)|Q(createat__icontains=keyword))\n\t\tself.tasksum = len(tasklist)\n\t\treturn  tasklist\n\n\tdef get_context_data(self, **kwargs):\n\t\tcontext = super(TaskListIndex,self).get_context_data(**kwargs)\n\t\t# tasklist = Task.objects.values('taskname').annotate()\n\t\tcontext['tasksum'] = self.tasksum\n\t\t# context['productlist'] = Product.objects.all().order_by('-sortby')\n\t\tcontext['userandproduct'] = UserAndProduct.objects.all()\n\t\treturn context\n\n\n@csrf_exempt\n@login_required()\ndef add_task(request):\n\tif request.method == 'POST':\n\t\tpost_dict = request.POST\n\t\ttaskname = post_dict['taskname']\n\t\trunid = post_dict['testrailrunid'] if 'testrailrunid' in post_dict else None\n\t\tsectionid = post_dict['testsectionid'] if 'testsectionid' in post_dict else None\n\t\tsuitesid = post_dict['testrailsuites'] if 'testsectionid' in post_dict else None\n\t\tapi_token = post_dict['api_token']\n\t\tjenkins_server_url = post_dict['jenkins_server_url']\n\t\tuser_id = post_dict['user_id']\n\t\tbuild_name = post_dict['build_name']\n\t\tprojectid = Project.objects.get(pk=int(post_dict['projectid']))\n\t\tcaseids = post_dict['caseids']\n\t\ttasktype = post_dict['tasktype']\n\t\tissmoke = post_dict['issmoke']\n\t\tif int(issmoke):\n\t\t\tissmoke = True\n\t\telse:\n\t\t\tissmoke = False\n\t\tcreateat = request.user.username\n\t\tupdateat = request.user.username\n\t\ttask = Task(taskname=taskname, testrailrunid=runid, testrailsuites=suitesid, testsectionid=sectionid, projectid=projectid,\n\t\t\t\t\t\tapi_token=api_token,jenkins_server_url=jenkins_server_url,caselist=caseids, tasktype=tasktype,\n\t\t\t\t\tuser_id=user_id,build_name=build_name,createat=createat, updateat=updateat, issmoke=issmoke)\n\t\ttask.save()\n\t\tif 'codename' in post_dict:\n\t\t\tcodename_list,codedescr_list, codevalue_list = post_dict.getlist(\"codename\"),post_dict.getlist(\"codedescr\"), post_dict.getlist(\"codevalue\")\n\t\t\tfor codename, codedescr, codevalue in zip(codename_list, codedescr_list, codevalue_list):\n\t\t\t\t\ttask.codelist_set.create(codedescr=codedescr, codename=codename, codevalue=codevalue)\n\t\treturn HttpResponse('任务创建成功')\n\telse:\n\t\tuserandproduct = UserAndProduct.objects.all()\n\t\tprojectlist = Project.objects.all().order_by('-sortby')\n\t\tmodulelist = Module.objects.all().order_by('-sortby')\n\t\tcaselist =  Case.objects.filter(isenabled=True)\n\t\treturn render(request, 'testtask/taskadd.html',{'userandproduct':userandproduct,'projectlist':projectlist,'modulelist':modulelist,'caselist':caselist})\n\n@csrf_exempt\n@login_required()\ndef update_task(request,id):\n\ttaskinfo = Task.objects.get(pk=id)\n\tproject = Project.objects.get(pk=taskinfo.projectid.pk)\n\t# print(project)\n\tif request.method == 'POST':\n\t\tpost_dict = request.POST\n\t\ttaskname = post_dict['taskname']\n\t\ttestrailrunid = post_dict['testrailrunid'] if 'testrailrunid' in post_dict else None\n\t\ttestsectionid = post_dict['testsectionid'] if 'testsectionid' in post_dict else None\n\t\tsuitesid = post_dict['testrailsuites'] if 'testrailsuites' in post_dict else None\n\t\tapi_token = post_dict['api_token']\n\t\tjenkins_server_url = post_dict['jenkins_server_url']\n\t\tuser_id = post_dict['user_id']\n\t\tbuild_name = post_dict['build_name']\n\t\tprojectid = Project.objects.get(pk=int(post_dict['projectid']))\n\t\tcaseids = post_dict['caseids']\n\t\ttasktype = post_dict['tasktype']\n\t\tissmoke = post_dict['issmoke']\n\t\tif int(issmoke):\n\t\t\tissmoke = True\n\t\telse:\n\t\t\tissmoke = False\n\t\tupdateat = request.user.username\n\t\tupdatetime = timezone.now()\n\t\ttask = Task.objects.filter(pk= id)\n\t\ttask.update(projectid=projectid, taskname=taskname, tasktype=tasktype, status = 0,caselist=caseids, testrailrunid=testrailrunid,\n\t\t\t\t\tapi_token=api_token,jenkins_server_url=jenkins_server_url,updateat=updateat, updatetime=updatetime,\n\t\t\t\t\tuser_id=user_id,build_name=build_name,testsectionid=testsectionid,testrailsuites=suitesid,issmoke=issmoke)\n\t\ttaskinfo.codelist_set.all().delete()\n\t\tcodename_list, codedescr_list, codevalue_list = post_dict.getlist(\"codename\"), post_dict.getlist(\"codedescr\"), post_dict.getlist(\"codevalue\")\n\t\tfor codename, codedescr, codevalue in zip(codename_list, codedescr_list, codevalue_list):\n\t\t\ttaskinfo.codelist_set.create(codedescr=codedescr, codename=codename, codevalue=codevalue,updateat=updateat)\n\t\treturn HttpResponse('任务修改成功')\n\telse:\n\t\tuserandproduct = UserAndProduct.objects.all()\n\t\tprojectlist = Project.objects.filter(productid=project.productid).order_by('-sortby')\n\t\tmodulelist = Module.objects.all().order_by('-sortby')\n\t\tcaselist =  Case.objects.filter(isenabled=True)\n\t\ttaskcase = taskinfo.caselist\n\t\tcodelist = Codelist.objects.filter(taskid=id)\n\t\tcasesum = len(taskcase.split(','))\n\t\treturn render(request, 'testtask/taskedit.html',{'taskinfo':taskinfo,'codelist':codelist, 'casesum':casesum, 'userandproduct':userandproduct,'projectlist':projectlist,'modulelist':modulelist,'caselist':caselist})\n\ndef del_task(request,id):\n\ttask = get_object_or_404(Task, pk=int(id))\n\ttask.delete()\n\treturn HttpResponseRedirect(reverse('tasklist'))\n\n@csrf_exempt\n@login_required()\ndef run_task(request):\n\ttaskid = request.GET['taskid']\n\tuserid = request.user.username\n\ttask = Task.objects.get(pk=taskid)\n\ttasktype = task.tasktype\n\trunid = task.testrailrunid\n\tsectionid = task.testsectionid\n\tif tasktype == '1':\n\t\tif runid:\n\t\t\tos.system(\"python seleniumkeyword/TestSuite.py -t %s -u %s -r %s &\" % (taskid, userid, runid))\n\t\telse:\n\t\t\tos.system(\"python seleniumkeyword/TestSuite.py -t %s &\" % taskid )\n\telif tasktype == '2':\n\t\tos.system(\"python seleniumkeyword/AddCase.py -t %s -u %s -s %s &\" % (taskid, userid, sectionid))\n\t\tstarttime = timezone.now()\n\t\ttask.status = 1\n\t\ttask.save()\n\t\tcaselist = task.caselist\n\t\tth = Taskhistory(taskid=task, userid=request.user, tasktype='2', taskname=task.taskname, starttime=starttime,reporturl=caselist)\n\t\tth.save()\n\telif tasktype == '3':\n\t\tjenkins_server_url = task.jenkins_server_url\n\t\tuser_id = task.user_id\n\t\tapi_token = task.api_token\n\t\tbuild_name = task.build_name\n\n\t\tserver = jenkins.Jenkins(jenkins_server_url,user_id,api_token)\n\t\tstarttime = timezone.now()\n\t\tserver.build_job(build_name)\n\t\ttask.status=1\n\t\ttask.save()\n\t\t# build_num = jenkins.get_nextBuildNumber()\n\t\t# th = Taskhistory(taskid=task, userid=request.user, tasktype='3', taskname=task.taskname, starttime=starttime, build_name=task.build_name, build_number=build_num)\n\t\t# th.save()\n\treturn HttpResponseRedirect(reverse('tasklist'))\n\n@login_required()\ndef set_tree_task(request):\n\ttaskid = request.GET['taskid']\n\ttask = Task.objects.get(pk=taskid)\n\t# print elementinfo['projectid'],elementinfo['moduleid'],elementinfo['locmode']\n\treturn HttpResponse(task.caselist)\n\n@csrf_exempt\n@login_required()\ndef get_task_history(request):\n\ttask_history = []\n\ttaskid = request.GET['taskid']\n\ttask = Task.objects.get(id=taskid)\n\n\tif task.tasktype == '1':\n\t\ttaskhistory = Taskhistory.objects.filter(taskid=taskid).order_by('-id')[:20]\n\t\tfor i in taskhistory:\n\t\t\tth = {}\n\t\t\tth['starttime'] = str(i.starttime)[:19]\n\t\t\tth['taskid'] = i.taskid.id\n\t\t\tth['tasktype'] = i.tasktype\n\t\t\tth['taskname'] = i.taskname\n\t\t\tth['case_tag_all'] = i.case_tag_all\n\t\t\tth['case_tag_pass'] = i.case_tag_pass\n\t\t\tth['case_tag_fail'] = i.case_tag_fail\n\t\t\tth['case_tag_error'] = i.case_tag_error\n\t\t\tif i.exectime is not None and len(i.exectime) > 7:\n\t\t\t\tth['exectime'] = i.exectime[:-7]\n\t\t\tth['user'] = i.userid.realname\n\t\t\tth['reporturl'] = i.reporturl\n\t\t\ttask_history.append(th)\n\t\treturn HttpResponse(json.dumps(task_history))\n\telif task.tasktype == '2':\n\t\ttaskhistory = Taskhistory.objects.filter(taskid=taskid).order_by('-id')\n\t\tfor i in taskhistory:\n\t\t\tth = {}\n\t\t\tth['starttime'] = str(i.starttime)[:19]\n\t\t\tth['taskid'] = i.taskid.id\n\t\t\tth['tasktype'] = i.tasktype\n\t\t\tth['taskname'] = i.taskname\n\t\t\tth['reporturl'] = i.reporturl\n\t\t\tth['user'] = i.userid.realname\n\t\t\ttask_history.append(th)\n\t\treturn HttpResponse(json.dumps(task_history))\n\telif task.tasktype == '3':\n\t\tjenkins_server_url = task.jenkins_server_url\n\t\tuser_id = task.user_id\n\t\tapi_token = task.api_token\n\t\tbuild_name = task.build_name\n\t\turl = 'http://jenkinsm.acorn-net.com/TestResults/'\n\t\treportdir = '/'\n\t\tif task.projectid.productid.id == 1:\n\t\t\treportdir = 'CornerStone/'\n\t\telif task.projectid.productid.id in (4, 5):#根据productid在jenkins创建对应的result目录\n\t\t\treportdir = 'GemStone/'\n\t\turl = url + reportdir\n\t\ttry:\n\t\t\tserver = jenkins.Jenkins(jenkins_server_url, user_id, api_token)\n\t\t\tjenkinsjob = server.get_job_info(task.build_name)\n\t\t\tfor i in jenkinsjob['builds'][:40]:\n\t\t\t\tbi = server.get_build_info(build_name, i['number'])\n\t\t\t\tth={}\n\t\t\t\tth['starttime']= timeStamp(bi['timestamp'])\n\t\t\t\tth['build_name'] = bi['fullDisplayName']\n\t\t\t\tth['exectime'] = duration_change(bi['duration'])\n\t\t\t\tth['result'] = bi['result']\n\t\t\t\tth['user'] = bi['actions'][0]['causes'][0]['shortDescription']\n\t\t\t\tth['consoleurl'] = bi['url']+'console'\n\t\t\t\tif len(bi['artifacts'])>0:\n\t\t\t\t\tth['reporturl'] = url+testreport(bi['artifacts'][0]['relativePath'])\n\t\t\t\telse:\n\t\t\t\t\tth['reporturl'] = '#'\n\t\t\t\ttask_history.append(th)\n\t\t\treturn HttpResponse(json.dumps(task_history))\n\t\texcept:\n\t\t\treturn HttpResponse(json.dumps(task_history))\n"
  },
  {
    "path": "automatic/urls.py",
    "content": "\"\"\"automatic URL Configuration\n\nThe `urlpatterns` list routes URLs to views. For more information please see:\n    https://docs.djangoproject.com/en/3.0/topics/http/urls/\nExamples:\nFunction views\n    1. Add an import:  from my_app import views\n    2. Add a URL to urlpatterns:  path('', views.home, name='home')\nClass-based views\n    1. Add an import:  from other_app.views import Home\n    2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')\nIncluding another URLconf\n    1. Import the include() function: from django.urls import include, path\n    2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))\n\"\"\"\nfrom django.contrib import admin\n# from django.urls import path\nfrom django.conf.urls import include, url\nfrom auto_auth import urls as auth_urls\nfrom automatic.testcase import urls as case_urls\nfrom automatic.management import urls as mgt_urls\nfrom automatic.element import urls as ele_urls\nfrom automatic.keywords import urls as keywords_urls\nfrom automatic.testtask import urls as task_urls\nfrom automatic.webinterface import urls as interf_urls\nfrom auto_auth.views import index\n\nurlpatterns = [\n    url('^$', index),\n    url('^index/', index),\n    url('admin/', admin.site.urls),\n    url(r'^account/', include(auth_urls)),\n\n    url(r'^setting/', include(mgt_urls)),\n\n    url(r'^func/case/', include(case_urls)),\n\n    url(r'^func/element/', include(ele_urls)),\n\n    url(r'^func/keyword/', include(keywords_urls)),\n\n    url(r'^func/task/', include(task_urls)),\n\n    url(r'^interface/', include(interf_urls)),\n\n\n\n    # url(r'^interf/web/home/$',  login_required(interface.WebinterfaceListIndex.as_view()), name='webinterface'),\n    # url(r'^interf/get/response/$', interface.get_response, name='getresponse'),\n    # url(r'^tools/syslog/home/$', automate.page_syslog, name='toolsyslog'),\n    # url(r'^tools/snmp/home/$', automate.comingsoon, name='toolsnmp'),\n    # url(r'^accounts/', include(oidc_urls)),\n]\n"
  },
  {
    "path": "automatic/webinterface/__init__.py",
    "content": ""
  },
  {
    "path": "automatic/webinterface/admin.py",
    "content": "from django import forms\nfrom django.contrib import admin\n# Register your models here.\nfrom automatic.webinterface import models\n\nclass WebinterfaceAdmin(admin.ModelAdmin):\n    list_display = (id , 'projectid','moduleid', 'descr', 'isenabled','url', 'method')\n    search_fields = ('descr',)\n\n    def save_model(self, request, obj, form, change):\n        if change:  # change\n            obj_original = self.model.objects.get(pk=obj.pk)\n        else:  # add\n            obj_original = None\n\n        obj.user = request.user\n        obj.save()\n\n    def get_search_results(self, request, queryset, search_term):\n        queryset, use_distinct = super(WebinterfaceAdmin, self).get_search_results(request, queryset, search_term)\n        try:\n            search_term_as_int = int(search_term)\n            queryset |= self.model.objects.filter(age=search_term_as_int)\n        except:\n            pass\n        return queryset, use_distinct\n\nclass WebresponseAdmin(admin.ModelAdmin):\n    list_display = (id , 'webinterfaceid','params', 'exectime', 'expected','actual', 'status_code', 'Response_content')\n    search_fields = ('webinterfaceid',)\n\nadmin.site.register(models.Webinterface,WebinterfaceAdmin)\nadmin.site.register(models.Webresponse, WebresponseAdmin)"
  },
  {
    "path": "automatic/webinterface/apps.py",
    "content": "from __future__ import unicode_literals\n\nfrom django.apps import AppConfig\n\n\nclass WebinterfaceConfig(AppConfig):\n    name = 'automatic.webinterface'\n"
  },
  {
    "path": "automatic/webinterface/migrations/0001_initial.py",
    "content": "# Generated by Django 3.0.2 on 2020-01-15 10:02\n\nfrom django.db import migrations, models\nimport django.db.models.deletion\n\n\nclass Migration(migrations.Migration):\n\n    initial = True\n\n    dependencies = [\n        ('management', '0001_initial'),\n    ]\n\n    operations = [\n        migrations.CreateModel(\n            name='Webinterface',\n            fields=[\n                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),\n                ('testrailcaseid', models.CharField(blank=True, max_length=12, null=True)),\n                ('descr', models.CharField(max_length=255, verbose_name='Title')),\n                ('isenabled', models.BooleanField(default=True)),\n                ('url', models.CharField(blank=True, max_length=1024)),\n                ('method', models.CharField(blank=True, choices=[('POST', 'post'), ('GET', 'get'), ('OPTIONS', 'options'), ('HEAD', 'head'), ('PUT', 'put'), ('PATCH', 'patch'), ('DELETE', 'delete')], max_length=12)),\n                ('headers', models.CharField(blank=True, default=None, max_length=1024, null=True)),\n                ('cookies', models.CharField(blank=True, default=None, max_length=1024, null=True)),\n                ('data', models.TextField(blank=True, default=None, null=True)),\n                ('files', models.CharField(blank=True, default=None, max_length=1024, null=True)),\n                ('auth', models.CharField(blank=True, default=None, max_length=1024, null=True)),\n                ('timeout', models.CharField(blank=True, default=None, max_length=8, null=True)),\n                ('allow_redirects', models.CharField(blank=True, default=None, max_length=1024, null=True)),\n                ('proxies', models.CharField(blank=True, default=None, max_length=1024, null=True)),\n                ('verify', models.CharField(blank=True, default=None, max_length=1024, null=True)),\n                ('stream', models.CharField(blank=True, default=None, max_length=1024, null=True)),\n                ('cert', models.CharField(blank=True, default=None, max_length=1024, null=True)),\n                ('debuginfo', models.TextField(blank=True, null=True)),\n                ('createtime', models.DateTimeField(auto_now_add=True)),\n                ('createat', models.CharField(blank=True, max_length=32, null=True)),\n                ('updatetime', models.DateTimeField(auto_now_add=True)),\n                ('updateat', models.CharField(blank=True, max_length=32, null=True)),\n                ('moduleid', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='management.Module')),\n                ('projectid', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='management.Project')),\n            ],\n        ),\n        migrations.CreateModel(\n            name='Webresponse',\n            fields=[\n                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),\n                ('params', models.TextField(blank=True, null=True)),\n                ('exectime', models.CharField(blank=True, max_length=16)),\n                ('expected', models.CharField(blank=True, max_length=255, null=True)),\n                ('actual', models.CharField(blank=True, max_length=255, null=True)),\n                ('status_code', models.CharField(blank=True, max_length=4)),\n                ('Response_content', models.TextField(blank=True)),\n                ('createtime', models.DateTimeField(auto_now_add=True)),\n                ('createat', models.CharField(blank=True, max_length=32, null=True)),\n                ('updatetime', models.DateTimeField(auto_now_add=True)),\n                ('updateat', models.CharField(blank=True, max_length=32, null=True)),\n                ('webinterfaceid', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='webinterface.Webinterface')),\n            ],\n        ),\n    ]\n"
  },
  {
    "path": "automatic/webinterface/migrations/__init__.py",
    "content": ""
  },
  {
    "path": "automatic/webinterface/models.py",
    "content": "# -*- coding:utf-8 -*-\n\"\"\"\n__author__ = 'Ray'\nmail:tsbc@vip.qq.com\n2020-01-08\n\"\"\"\n\nfrom __future__ import unicode_literals\nfrom django.db import models\nfrom automatic.management.models import Project, Module\n# Create your models here.\n\nclass Webinterface(models.Model):\n    Method_Choice = (\n        ('POST','post'),\n        ('GET','get'),\n        ('OPTIONS','options'),\n        ('HEAD','head'),\n        ('PUT','put'),\n        ('PATCH','patch'),\n        ('DELETE','delete'),\n    )\n    projectid = models.ForeignKey(Project, on_delete=models.CASCADE)\n    moduleid = models.ForeignKey(Module, on_delete=models.CASCADE)\n    testrailcaseid = models.CharField(max_length=12,null=True, blank=True, editable=True)\n    descr = models.CharField(max_length=255, verbose_name=\"Title\")\n    isenabled = models.BooleanField(default=True)\n    url = models.CharField(max_length=1024, blank=True, editable=True)\n    method = models.CharField(max_length=12, choices=Method_Choice, blank=True, editable=True)\n    headers = models.CharField(max_length=1024, default=None,null=True, blank=True, editable=True)\n    cookies = models.CharField(max_length=1024, default=None,null=True, blank=True, editable=True)\n    data = models.TextField(null=True, blank=True, default=None,editable=True)\n    files = models.CharField(max_length=1024, default=None,null=True, blank=True, editable=True)\n    auth = models.CharField(max_length=1024, default=None,null=True, blank=True, editable=True)\n    timeout = models.CharField(max_length=8, default=None,null=True, blank=True, editable=True)\n    allow_redirects = models.CharField(max_length=1024, default=None,null=True, blank=True, editable=True)\n    proxies = models.CharField(max_length=1024, default=None,null=True, blank=True, editable=True)\n    verify = models.CharField(max_length=1024, default=None,null=True, blank=True, editable=True)\n    stream = models.CharField(max_length=1024, default=None,null=True, blank=True, editable=True)\n    cert = models.CharField(max_length=1024, default=None,null=True, blank=True, editable=True)\n    debuginfo = models.TextField(null=True, blank=True, editable=True)\n    createtime = models.DateTimeField(auto_now_add=True)\n    createat = models.CharField(max_length=32,null=True, blank=True, editable=True)\n    updatetime = models.DateTimeField(auto_now_add=True)\n    updateat = models.CharField(max_length=32,null=True, blank=True, editable=True)\n\n    def __unicode__(self):\n        return self.descr\n\n\nclass Webresponse(models.Model):\n    webinterfaceid = models.ForeignKey(Webinterface, on_delete=models.CASCADE)\n    params = models.TextField(null=True, blank=True, editable=True)\n    exectime = models.CharField(max_length=16, null=False, blank=True)\n    expected = models.CharField(max_length=255, null=True, blank=True, editable=True)\n    actual = models.CharField(max_length=255, null=True, blank=True, editable=True)\n    status_code = models.CharField(max_length=4,null=False, blank=True)\n    Response_content = models.TextField(blank=True)\n    createtime = models.DateTimeField(auto_now_add=True)\n    createat = models.CharField(max_length=32,null=True, blank=True, editable=True)\n    updatetime = models.DateTimeField(auto_now_add=True)\n    updateat = models.CharField(max_length=32,null=True, blank=True, editable=True)\n\n    def __unicode__(self):\n        return str(self.id)"
  },
  {
    "path": "automatic/webinterface/tests.py",
    "content": "from django.test import TestCase\n\n# Create your tests here.\n"
  },
  {
    "path": "automatic/webinterface/urls.py",
    "content": "from django.conf.urls import url\nfrom django.contrib.auth.decorators import login_required\nfrom automatic.webinterface import views\n\nurlpatterns = [\n    url(r'list/$',  login_required(views.WebinterfaceListIndex.as_view()), name='webinterface'),\n    url(r'response/$', views.get_response, name='getresponse'),\n]"
  },
  {
    "path": "automatic/webinterface/views.py",
    "content": "from django.http import HttpResponse\nfrom automatic.webinterface.models import *\nfrom django.views.generic import ListView\nfrom automatic.management.models import UserAndProduct, Project, Module\nfrom django.db.models import Q\nfrom django.contrib.auth.decorators import login_required\nimport json\n# Create your views here.\n\n\nclass WebinterfaceListIndex(ListView):\n\tcontext_object_name = 'caselist'\n\ttemplate_name = 'webinterface/webinterface.html'\n\tpaginate_by = 10\n\t# raw_sql = \"select * from autoplat_case where projectid_id in (select id from autoplat_project where productid_id in (select productname_id from autoplat_userandproduct where username_id=3));\"\n\tcasesum = 0\n\tmodel = Webinterface\n\thttp_method_names = [u'get']\n\n\tdef get_queryset(self):\n\t\tprodcutid = UserAndProduct.objects.filter(username = self.request.user).values('productname')\n\t\tcaselist = Webinterface.objects.filter(projectid__in=Project.objects.filter(productid__in=prodcutid).values('id')).order_by('-pk')\n\t\tprodcutid = self.request.GET.get('check_productname')\n\t\tprojectid = self.request.GET.get('projectid')\n\t\tmoduleid = self.request.GET.get('moduleid')\n\t\tcasestatus = self.request.GET.get('casestatus')\n\t\tkeyword = self.request.GET.get('keyword')\n\t\tif prodcutid and int(prodcutid):\n\t\t\tcaselist = caselist.filter(projectid__in=Project.objects.filter(productid=prodcutid).values('id'))\n\t\tif projectid:\n\t\t\tcaselist = caselist.filter(projectid=projectid)\n\t\tif moduleid:\n\t\t\tcaselist = caselist.filter(moduleid=moduleid)\n\t\tif casestatus:\n\t\t\tcaselist = caselist.filter(isenabled=casestatus)\n\t\tif keyword:\n\t\t\tcaselist = caselist.filter(Q(pk__icontains=keyword)|Q(descr=keyword)|Q(createat__icontains=keyword))\n\t\tself.casesum = len(caselist)\n\t\treturn caselist\n\n\tdef get_context_data(self, **kwargs):\n\t\tprojectid = self.request.GET.get('projectid')\n\t\tcontext = super(WebinterfaceListIndex,self).get_context_data(**kwargs)\n\t\t# namelist = Case.objects.values('casedesc').annotate()\n\t\t# context['casedesc'] = namelist\n\t\tcontext['projectlist'] = Project.objects.all().order_by('-sortby')\n\t\tcontext['modulelist'] = Module.objects.all().order_by('-sortby')\n\t\t# context['productlist'] = Product.objects.all().order_by('-sortby')\n\t\tcontext['userandproduct'] = UserAndProduct.objects.all()\n\t\t# context['casedata'] = Webresponse.objects.all()\n\t\tcontext['casesum'] = self.casesum\n\t\treturn context\n\n@login_required()\ndef get_response(request):\n\tresponsedata = []\n\twebinterfaceid = request.GET['webinterfaceid']\n\tdatalist = Webresponse.objects.filter(webinterfaceid=webinterfaceid)\n\tfor i in datalist:\n\t\tresponseinfo = {}\n\t\tresponseinfo['id'] = i.id\n\t\tresponseinfo['params'] = i.params\n\t\tresponseinfo['exectime'] = i.exectime\n\t\tresponseinfo['expected'] = i.expected\n\t\tresponseinfo['actual'] = i.actual\n\t\tresponseinfo['status_code'] = i.status_code\n\t\tresponseinfo['Response_content'] = i.Response_content\n\t\tresponsedata.append(responseinfo)\n\treturn HttpResponse(json.dumps(responsedata))"
  },
  {
    "path": "automatic/wsgi.py",
    "content": "\"\"\"\nWSGI config for automatic project.\n\nIt exposes the WSGI callable as a module-level variable named ``application``.\n\nFor more information on this file, see\nhttps://docs.djangoproject.com/en/3.0/howto/deployment/wsgi/\n\"\"\"\n\nimport os\n\nfrom django.core.wsgi import get_wsgi_application\n\nos.environ.setdefault('DJANGO_SETTINGS_MODULE', 'automatic.settings')\n\napplication = get_wsgi_application()\n"
  },
  {
    "path": "docker-compose.yml",
    "content": "version: '2.0'\nservices:\n  mariadb:\n    image: tsbc520/automagic:2.0\n    container_name: \"automagic\"\n    restart: always\n    environment:\n      MYSQL_USERNAME: \"root\"\n      MYSQL_PASSWORD: \"123456\"\n      MYSQL_HOST: \"192.168.10.167\"\n      MYSQL_PORT: 3306\n      MYSQL_DBNAME: \"autodb\"\n    ports:\n      - \"8000:8000\""
  },
  {
    "path": "init.sh",
    "content": "#!/bin/bash\nset -e\n\necho '生成Django表结构....'\npython3 manage.py makemigrations\necho 'Django表结构更新完成.'\n\necho '创建表结构....'\npython3 manage.py migrate\necho '表结构创建完成.'\n\necho '创建Django超级用户'\necho \"from django.contrib.auth import get_user_model; User = get_user_model(); User.objects.create_superuser('admin', 'admin@automagic.cn', 'admin@123')\" | python3 manage.py shell\necho '创建超级用户admin，密码：admin@123 完成'\n"
  },
  {
    "path": "insertkeyword.sql",
    "content": "INSERT INTO `keywords_keyword` VALUES ('2', 0, 'click', '点击', now(), 'admin', now(), 'admin');\nINSERT INTO `keywords_keyword` VALUES ('3', 0, 'InputText', '输入文本', now(), 'admin', now(), 'admin');\nINSERT INTO `keywords_keyword` VALUES ('4', 0, 'assert', '通用断言', now(), 'admin', now(), 'admin');\nINSERT INTO `keywords_keyword` VALUES ('5', 0, 'navigate', '页面跳转', now(), 'admin', now(), 'admin');\nINSERT INTO `keywords_keyword` VALUES ('6', 0, 'sleep', '等待[n]秒', now(), 'admin', now(), 'admin');\nINSERT INTO `keywords_keyword` VALUES ('7', 0, 'switchframe', '切换iframe', now(), 'admin', now(), 'admin');\nINSERT INTO `keywords_keyword` VALUES ('8', 0, 'defaultframe', '返回默认Frame', now(), 'admin', now(), 'admin');\nINSERT INTO `keywords_keyword` VALUES ('9', 0, 'assertTrue', '验证元素存在', now(), 'admin', now(), 'admin');\nINSERT INTO `keywords_keyword` VALUES ('10', 0, 'closeBrowser', '关闭浏览器', now(), 'admin', now(), 'admin');\nINSERT INTO `keywords_keyword` VALUES ('11', 0, 'select', '下拉选择框input:[value]', now(), 'admin', now(), 'admin');\nINSERT INTO `keywords_keyword` VALUES ('12', 0, 'assertUrl', '验证当前页面Url地址[input:期望值]', now(), 'admin', now(), 'admin');\nINSERT INTO `keywords_keyword` VALUES ('14', 0, 'uploadfile', '上传文件', now(), 'admin', now(), 'admin');\nINSERT INTO `keywords_keyword` VALUES ('15', 0, 'ssh', 'ssh访问设备[host,port,user,pass,cmd]', now(), 'admin', now(), 'admin');\nINSERT INTO `keywords_keyword` VALUES ('16', 0, 'assertFalse', '验证元素不存在', now(), 'admin', now(), 'admin');\nINSERT INTO `keywords_keyword` VALUES ('17', 0, 'jscript', '执行javascript脚本', now(), 'admin', now(), 'admin');\nINSERT INTO `keywords_keyword` VALUES ('18', 0, 'moveScroll', '移动滚动条到某元素位置', now(), 'admin', now(), 'admin');\nINSERT INTO `keywords_keyword` VALUES ('19', 0, 'checkclick', '循环勾选一组复选框 [location：父级元素]', now(), 'admin', now(), 'admin');\nINSERT INTO `keywords_keyword` VALUES ('20', 0, 'selectText', '下拉选择框input:[Text]', now(), 'admin', now(), 'admin');\nINSERT INTO `keywords_keyword` VALUES ('21', 0, 'clicks', '点击一组元素中第n个元素input:[n]', now(), 'admin', now(), 'admin');\nINSERT INTO `keywords_keyword` VALUES ('22', 0, 'timestamp', '文本框输入当前时间戳', now(), 'admin', now(), 'admin');\nINSERT INTO `keywords_keyword` VALUES ('23', 0, 'submit', '表单提交', now(), 'admin', now(), 'admin');\nINSERT INTO `keywords_keyword` VALUES ('24', 0, 'isEnabled', '验证元素是否置灰', now(), 'admin', now(), 'admin');\nINSERT INTO `keywords_keyword` VALUES ('25', 0, 'Notassert', '通用断言【反向】', now(), 'admin', now(), 'admin');\nINSERT INTO `keywords_keyword` VALUES ('26', 0, 'untilshow', '通过监听元素可用，验证页面加载状态', now(), 'admin', now(), 'admin');\nINSERT INTO `keywords_keyword` VALUES ('27', 0, 'exists_file', '验证data目录中某个文件是否存在', now(), 'admin', now(), 'admin');\nINSERT INTO `keywords_keyword` VALUES ('28', 0, 'udpsend', 'udp协议发送syslog日志，使用参数看工具syslog', now(), 'admin', now(), 'admin');\nINSERT INTO `keywords_keyword` VALUES ('29', 0, 'refresh', '页面刷新', now(), 'admin', now(), 'admin');"
  },
  {
    "path": "manage.py",
    "content": "#!/usr/bin/env python\n\"\"\"Django's command-line utility for administrative tasks.\"\"\"\nimport os\nimport sys\n\n\ndef main():\n    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'automatic.settings.common')\n    try:\n        from django.core.management import execute_from_command_line\n    except ImportError as exc:\n        raise ImportError(\n            \"Couldn't import Django. Are you sure it's installed and \"\n            \"available on your PYTHONPATH environment variable? Did you \"\n            \"forget to activate a virtual environment?\"\n        ) from exc\n    execute_from_command_line(sys.argv)\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "requirements/base.txt",
    "content": "django==3.2.18\npyMySql==1.0.2\ntestrail==0.3.13\npython-jenkins==1.7.0\nrequests==2.25.1\nnameko==2.14.0\n"
  },
  {
    "path": "requirements/seleniumreq.txt",
    "content": "selenium==3.141.0\nparamiko==2.10.1\nscapy==2.4.3"
  },
  {
    "path": "seleniumkeyword/AddCase.py",
    "content": "# -*- coding: utf-8 -*-\n\nimport argparse\nimport testrail\nimport MySQLdb\n\n\ndef get_args():\n    '''\n    获取命令行参数\n    :return: 命令行参数命名空间\n    '''\n\n    parser = argparse.ArgumentParser()\n    parser.add_argument('-u', action='store', dest='user_id', type=str, help='User ID')\n    parser.add_argument('-t', action='store', dest='task_id', type=str, help='Task ID')\n    parser.add_argument('-s', action='store', dest='section_id', type=str, help='Section ID')\n    rst = parser.parse_args()\n    return rst\n\n\ndef add_cass(user, password, section_id, case_data):\n    '''\n    增加testrail测试用例\n    :param user: testrail用户名\n    :param password: testrail密码\n    :param case_data: 需要添加的case\n    :return: None\n    '''\n\n    client = testrail.APIClient('http://172.17.3.70/testrail/')\n    client.user = user\n    client.password = password\n\n    result = []\n    try:\n        for case_id, testrailcaseid, data in case_data:\n            if testrailcaseid not in ('', None, 'None'):\n                client.send_post('update_case/%s' % testrailcaseid, data)\n            else:\n                testrailcaseid_new = client.send_post('add_case/%s' % section_id, data).get('id', '')\n                result.append((case_id, testrailcaseid_new))\n    except Exception as e:\n        print(e)\n    finally:\n        return result\n\n\nclass MyPySql(object):\n    def __init__(self):\n        self.conn = None\n        self.cur = None\n        self.set_conn()\n\n    def set_conn(self):\n        self.conn = MySQLdb.connect(host='172.21.129.32', port=3306, user='automagic', passwd='admin@123', db='autoplat', charset='utf8')\n        self.cur = self.conn.cursor()\n\n    def execute(self, sql):\n        try:\n            self.conn.ping()\n        except:\n            self.set_conn()\n\n        self.cur.execute(sql)\n\n    def fetchall(self):\n        return self.cur.fetchall()\n\n    def commit(self):\n        self.conn.commit()\n\n    def close(self):\n        self.conn.close()\n\n\nif \"__main__\" == __name__:\n\n    my_py_sql = MyPySql()\n    args = get_args()\n\n    user = None\n    password = None\n    case_ids = None\n\n    my_py_sql.execute(r'''UPDATE autoplat_task SET status = 1 WHERE id = %s''' % args.task_id)\n    my_py_sql.commit()\n\n    if args.user_id is not None and args.task_id is not None:\n        # 获取用户对应的testrail用户名和密码\n        my_py_sql.execute(u\"\"\"SELECT testrailuser, testrailpass FROM autoplat_user WHERE username = '%s'\"\"\" % args.user_id)\n        user_info = my_py_sql.fetchall()\n        if user_info:\n            user, password = user_info[0]\n\n        # 获取任务对应的case_id\n        my_py_sql.execute(u'''SELECT caselist FROM autoplat_task WHERE id = %s''' % args.task_id)\n        case_info = my_py_sql.fetchall()\n        \n        if case_info:\n            case_ids = case_info[0][0]\n        if case_ids is not None:\n            casedict = eval(case_ids)\n            if type(casedict) is int:\n                case_ids = case_ids\n            else:\n                case_ids = ''\n                for i in casedict:\n                    case_ids = case_ids + ',' + casedict[i]\n                case_ids = case_ids[1:]\n\n    if user is not None and password is not None and case_ids is not None:\n        # 获取所有case的详细信息\n        my_py_sql.execute(u'''SELECT tb2.id, tb2.casedesc, tb1.descr, tb2.testrailcaseid\n                    FROM autoplat_step AS tb1 LEFT JOIN autoplat_case AS tb2 ON tb1.caseid_id = tb2.id\n                    WHERE tb1.caseid_id IN (%s) ORDER BY tb1.caseid_id, tb1.id ''' % case_ids)\n        case_info = my_py_sql.fetchall()\n\n        case_data = []\n        tmp_id = None\n        data = {}\n        step_num = 1\n        for item in case_info:\n            case_id, case_desc, step_desc, testrailcaseid = item\n            if tmp_id != case_id:\n                tmp_id = case_id\n                step_num = 1\n                data = {\"title\": u'%s:%s' % (case_id, case_desc),\n                        \"template_id\": u'1',\n                        \"type_id\": u'1',\n                        \"priority_id\": u'4',\n                        \"custom_caseversion_id\": u'8',\n                        \"custom_automation_status\": u'2',\n                        \"custom_steps\": u'step_%s %s' % (step_num, step_desc)}\n                case_data.append([case_id, testrailcaseid, data])\n                step_num += 1\n            else:\n                data['custom_steps'] = u'%s\\nstep_%s %s' % (data['custom_steps'], step_num, step_desc)\n                step_num += 1\n\n        # 同步所有用例到testrail\n        add_result = []\n        if case_data:\n            add_result = add_cass(user, password, args.section_id, case_data)\n\n        if add_result:\n            when_list = []\n            for result in add_result:\n                when_list.append(r'''WHEN %s THEN \"%s\"''' % result)\n\n            sql_str = r'''UPDATE autoplat_case SET testrailcaseid = CASE id %s END WHERE id in (%s)''' % (r' '.join(when_list), case_ids)\n            my_py_sql.execute(sql_str)\n            my_py_sql.commit()\n\n    my_py_sql.execute(r'''UPDATE autoplat_task SET status = 2 WHERE id = %s''' % args.task_id)\n    my_py_sql.commit()\n    my_py_sql.close()\n\n"
  },
  {
    "path": "seleniumkeyword/Base.py",
    "content": "# -*- coding: utf-8 -*-\n\nimport time,datetime\nimport os,sys\nfrom selenium.webdriver.support.wait import WebDriverWait\nfrom selenium.webdriver.support.select import Select\nfrom selenium import webdriver\nfrom selenium.webdriver.common.action_chains import ActionChains\nimport SimulatorUtil\n# import paramiko\nimport re\n\nif sys.platform.startswith('win'):\n\tfrom sendlog import tcpsendingsyslog, udpsendingsyslog\nelse:\n\tfrom sendlog import sendingdata, tcpsendingsyslog, udpsendingsyslog\n\nclass Action(object):\n\tkeyword2action = {}\n\n\tdef __init__(self):\n\t\t# option = webdriver.ChromeOptions()\n\t\t# option.add_argument('test-type')\n\t\t# self.driver = webdriver.Chrome(chrome_options=option)\n\t\t# self.driver = webdriver.PhantomJS()\n\t\tself.driver = None\n\n\tdef __del__(self):\n\t\tif self.driver is not None:\n\t\t\tself.driver.quit()\n\t\t\tself.driver = None\n\n\t@classmethod\n\tdef add_action(cls, keyword):\n\t\tdef deco(func):\n\t\t\tdef _deco(*args, **kwargs):\n\t\t\t\tprint(args[1])\n\t\t\t\treturn func(*args, **kwargs)\n\t\t\tcls.keyword2action[keyword] = _deco\n\t\t\treturn _deco\n\t\treturn deco\n\n\t# 元素高亮显示\n\tdef highlightElement(self, element):\n\t\tself.driver.execute_script(\"element = arguments[0];\" +\n\t\t\t\t\t\t\t\t   \"original_style = element.getAttribute('style');\" +\n\t\t\t\t\t\t\t\t   \"element.setAttribute('style', original_style + \\\";\" +\n\t\t\t\t\t\t\t\t   \"background: #1874cd; border: 2px solid red;\\\");\" +\n\t\t\t\t\t\t\t\t   \"setTimeout(function(){element.setAttribute('style', original_style);}, 1000);\",\n\t\t\t\t\t\t\t\t   element)\n\t#页面顶部加步骤输出\n\tdef notes(self, text):\n\t\tjs1 = u\"\"\"var bodyDom = document.getElementsByTagName('body')[0];\n\t\tvar insertDiv = document.createElement('div');\n\t\tinsertDiv.id = 'sdiv';\n\t\tinsertDiv.style.backgroundColor = 'red';\n\t\tinsertDiv.style.height = '20px';\n\t\tinsertDiv.style.color = '#FFF';\n\t\tinsertDiv.style.textalign = 'center';\n\t\tinsertDiv.innerText = '\"\"\"\n\t\tjs2 = u\"\"\"';\n\t\tvar firstdiv = bodyDom.getElementsByTagName('div')[0];\n\t\tbodyDom.insertBefore(insertDiv,firstdiv);\n\t\t\"\"\"\n\t\tjs = js1 + text +js2\n\t\tself.driver.execute_script(js)\n\n\t#更新顶部note显示内容\n\tdef show_note(self,stext):\n\t\tjs = u\"insertDiv = document.getElementById('sdiv');insertDiv.innerText ='\"+stext+\"';\"\n\t\tself.save_runing_log(stext)\n\t\tself.driver.execute_script(js)\n\n\t# 重写定义send_keys方法\n\tdef send_keys(self, loc, value):\n\t\ttry:\n\t\t\tself.find_element(loc).clear()\n\t\texcept:\n\t\t\tprint(u\"%s 元素 %s 没有clear属性\" % (self, loc))\n\t\tself.find_element(loc).send_keys(value)\n\n\t# 重写元素定位方法\n\tdef find_element(self, loc):\n\t\tfor i in range(3):\n\t\t\ttry:\n\t\t\t\t# WebDriverWait(self.driver, 15).until(lambda driver: True if driver.find_element(*loc) is not None else False)\n\t\t\t\telement = WebDriverWait(self.driver, 10).until(lambda driver: driver.find_element(*loc))\n\t\t\t\t# element = self.driver.find_element(*loc)\n\t\t\t\tself.highlightElement(element)\n\t\t\t\treturn element\n\t\t\texcept:\n\t\t\t\tpass\n\t\t# print u\"%s 页面中未能找到 %s 元素\" % (self, loc)\n\n\t# 重写一组元素定位方法\n\tdef find_elements(self, loc):\n\t\ttry:\n\t\t\telements = self.driver.find_elements(*loc)\n\t\t\tif len(elements):\n\t\t\t\treturn elements\n\t\texcept:\n\t\t\tprint(u\"%s 页面中未能找到 %s 元素\" % (self, loc))\n\n\t#判断元素是否存在\n\tdef isElementExsit(self, loc):\n\t\ttry:\n\t\t\tWebDriverWait(self.driver, 15).until(\n\t\t\t\tlambda driver: True if driver.find_element(*loc) is not None else False)\n\t\t\t# element = self.driver.find_element(*loc)\n\t\t\t# self.highlightElement(element)\n\t\t\treturn True\n\t\texcept:\n\t\t\treturn False\n\n\t# 定位一组元素中索引为第i个的元素 i从0开始\n\tdef find_elements_i(self, index, loc):\n\t\ttry:\n\t\t\telements = self.driver.find_elements(*loc)\n\t\t\tif elements[index] is not None:\n\t\t\t\treturn elements[index]\n\t\texcept:\n\t\t\tprint(u\"%s 页面中未能找到%s的第 %s 个元素 \" % (self, loc, index))\n\n\t# saveScreenshot:通过图片名称，进行截图保存\n\tdef saveScreenshot(self, name):\n\t\t\"\"\"\n\t\t快照截图\n\t\tname:图片名称\n\t\t\"\"\"\n\t\timage = self.driver.save_screenshot(self.savePngName(name))\n\t\treturn image\n\n\t# 生成图片的名称\n\tdef savePngName(self, name):\n\t\t\"\"\"\n\t\tname：自定义图片的名称\n\t\t\"\"\"\n\t\tday = time.strftime('%Y-%m-%d', time.localtime(time.time()))\n\t\tfp = \"result/\" + day + \"/image\"\n\t\ttm = self.saveTime()\n\t\tfile_type = \".png\"\n\t\t# 判断存放截图的目录是否存在，如果存在打印并返回目录名称，如果不存在，创建该目录后，再返回目录名称\n\t\tif os.path.exists(fp):\n\t\t\tfilename = str(fp) + \"/\" + str(tm) + str(\"_\") + str(name) + str(file_type)\n\t\t\tprint(filename)\n\t\t\treturn filename\n\t\telse:\n\t\t\tos.makedirs(fp)\n\t\t\tfilename = str(fp) + \"/\" + str(tm) + str(\"_\") + str(name) + str(file_type)\n\t\t\tprint(filename)\n\t\t\treturn filename\n\n\t#生成log\n\tdef save_runing_log(self, text):\n\t\t\"\"\"\n\t\t:param text:\n\t\t:return:\n\t\t\"\"\"\n\t\tday = time.strftime('%Y-%m-%d', time.localtime(time.time()))\n\t\trunning_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))\n\t\tfile_type = \"running.log\"\n\t\tfp = \"result/\" + day\n\t\tif os.path.exists(fp):\n\t\t\tfilename = str(fp) + \"/\" + str(file_type)\n\t\t\twith open(filename,\"a\") as f:\n\t\t\t\tf.write(running_time + \"  \" + text + '\\n')\n\t\t\t# os.system(\"echo \" + running_time + \"  \" + text + \">> \" + filename)\n\t\telse:\n\t\t\tos.makedirs(fp)\n\t\t\tfilename = str(fp) + \"/\" + str(file_type)\n\t\t\t# os.system(\"echo \" + running_time + \"  \"  + text + \">> \" + filename)\n\t\t\twith open(filename,\"a\") as f:\n\t\t\t\tf.write(running_time + \"  \" + text + '\\n')\n\n\t# 生成图片的名称\n\tdef saveVideoName(self, name):\n\t\t\"\"\"\n\t\tname：自定义图片的名称\n\t\t\"\"\"\n\t\tday = time.strftime('%Y-%m-%d', time.localtime(time.time()))\n\t\tfp = \"result/\" + day + \"/image\"\n\t\ttm = self.saveTime()\n\t\tfile_type = \".ogv\"\n\t\t# 判断存放截图的目录是否存在，如果存在打印并返回目录名称，如果不存在，创建该目录后，再返回目录名称\n\t\tif os.path.exists(fp):\n\t\t\tfilename = str(fp) + \"/\" + str(tm) + str(\"_\") + str(name) + str(file_type)\n\t\t\tprint(filename)\n\t\t\treturn filename\n\t\telse:\n\t\t\tos.makedirs(fp)\n\t\t\tfilename = str(fp) + \"/\" + str(tm) + str(\"_\") + str(name) + str(file_type)\n\t\t\tprint(filename)\n\t\t\treturn filename\n\n\t# 获取系统当前时间\n\tdef saveTime(self):\n\t\t\"\"\"\n\t\t返回当前系统时间以括号中（2014-08-29-15_21_55）展示\n\t\t\"\"\"\n\t\treturn time.strftime('%Y-%m-%d-%H_%M_%S', time.localtime(time.time()))\n\n################################################################################\n# 关键字函数必须用Aciton.add_action(keyword)装饰起进行装饰\n# 函数的形参必须为4个:action_object(Aciton对象), step_desc(步骤描述信息，可用于记录log),\n#\t\t\t\t  value(需要输入的值，多个输入值用逗号隔开), loc(元素的定位信息)\n# 函数正常退出时不能有返回值（使用默认的返回值None），出错时返回字符串（记录出错信息）\n################################################################################\n\n@Action.add_action('openBrowser')\ndef action_openBrowser(action_object, step_desc, value, loc):\n\t\"\"\"\n\topenBrowser 通过传参选择启动浏览器\n\t:param action_object:\n\t:param step_desc:\n\t:param value:\n\t:param loc:\n\t:return:\n\t\"\"\"\n\t# if action_object[0].driver is None:\n\tdownloaddir = os.path.abspath(os.curdir)+\"/data\"\n\tprefs = {\"download.default_directory\":downloaddir}\n\tbrowser = value #传入浏览器对象\n\n\tif action_object.driver == None:\n\t\tif browser.upper() == 'IE':\n\t\t\taction_object.driver = webdriver.Ie()\n\t\telif browser.upper() == 'CHROME':\n\t\t\toption = webdriver.ChromeOptions()\n\t\t\toption.add_experimental_option(\"prefs\", prefs)\n\t\t\toption.add_argument('–no-sandbox')\n\t\t\taction_object.driver = webdriver.Chrome(chrome_options=option)\n\t\telif browser.upper() == 'CHROME-HEADLESS':\n\t\t\toption = webdriver.ChromeOptions()\n\t\t\toption.add_experimental_option(\"prefs\", prefs)\n\t\t\toption.add_argument('–no-sandbox')\n\t\t\toption.add_argument('-headless')  # 不打开图形界面\n\t\t\taction_object.driver = webdriver.Chrome(chrome_options=option)\n\t\telif browser.upper() == 'FIREFOX':\n\t\t\tfp = webdriver.FirefoxProfile(profile_directory=downloaddir)\n\t\t\tfp.set_preference('browser.download.manager.showWhenStarting', False)\n\t\t\t# fp.set_preference('browser.download.folderList', 2)  # 设置Firefox的默认下载文件夹。0是桌面；1是“我的下载”；2是自定义。\n\t\t\tfp.set_preference('browser.download.dir', downloaddir)  # 设置自定义路径时，定义的路径\n\t\t\tfp.set_preference('browser.helperApps.neverAsk.saveToDisk', 'application/octet-stream')  # application/zip 不询问下载路径；后面的参数为要下载页面的文件类型的值。\n\t\t\taction_object.driver = webdriver.Firefox(firefox_profile=None)\n\t\telif browser.upper() == 'FIREFOX-HEADLESS':\n\t\t\tfp = webdriver.FirefoxProfile(profile_directory=downloaddir)\n\t\t\tfp.set_preference('browser.download.manager.showWhenStarting', False)\n\t\t\t# fp.set_preference('browser.download.folderList', 2)  # 设置Firefox的默认下载文件夹。0是桌面；1是“我的下载”；2是自定义。\n\t\t\tfp.set_preference('browser.download.dir', downloaddir)  # 设置自定义路径时，定义的路径\n\t\t\tfp.set_preference('browser.helperApps.neverAsk.saveToDisk', 'application/octet-stream')\n\t\t\tfirefox_option = webdriver.FirefoxOptions()\n\t\t\tfirefox_option.set_headless()\n\t\t\taction_object.driver = webdriver.Firefox(firefox_profile=fp, firefox_options=firefox_option)\n\t\telif browser.upper() == 'SAFARI':\n\t\t\taction_object.driver = webdriver.Safari()\n\t\telif browser.upper() == 'NW':\n\t\t\toption = webdriver.ChromeOptions()\n\t\t\toption.add_experimental_option(\"prefs\", prefs)\n\t\t\toption.add_argument('–no-sandbox')\n\t\t\tchromedriver = os.path.abspath(os.curdir)+\"\\\\nwjs-sdk-v0.19.3-win-x64\\\\chromedriver.exe\"\n\t\t\taction_object.driver = webdriver.Chrome(chromedriver, chrome_options=option)\n\t\t\tjs = \"var gui=require(\\\"nw.gui\\\"); var win=gui.Window.get(); win.maximize()\"\n\t\t\taction_object.driver.execute_script(js)\n\t\telse:\n\t\t\toption = webdriver.ChromeOptions()\n\t\t\toption.add_experimental_option(\"prefs\", prefs)\n\t\t\toption.add_argument('–no-sandbox')\n\t\t\taction_object.driver = webdriver.Chrome(chrome_options=option)\n\t\tif browser.upper() != 'NW':\n\t\t\taction_object.driver.set_window_size(1600, 900)\n\t\t\taction_object.driver.maximize_window()\n\n@Action.add_action('InputText')\ndef action_InputText(action_object, step_desc, value, loc):\n\t\"\"\"\n\t文本框输入内容\n\t:param action_object:\n\t:param step_desc:\n\t:param value: text\n\t:param loc:\n\t:return:\n\t\"\"\"\n\tprint(loc, value)\n\ttextinput = value\n\tif 'now+' in value:\n\t\tnow_str = value.split('+')\n\t\tnum = int(now_str[1])\n\t\ttextinput = (datetime.datetime.now()+datetime.timedelta(minutes=num)).strftime('%Y-%m-%d %H:%M:%S')\n\telif 'now-' in value:\n\t\tnow_str = value.split('-')\n\t\tnum = int(now_str[1])\n\t\ttextinput = (datetime.datetime.now() + datetime.timedelta(minutes=-num)).strftime('%Y-%m-%d %H:%M:%S')\n\telif value.lower() == 'now':\n\t\ttextinput = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))\n\taction_object.send_keys(loc, textinput)\n\n@Action.add_action('uploadfile')\ndef action_uploadfile(action_object, step_desc, value, loc):\n\t\"\"\"\n\t上传文件\n\t:param action_object:\n\t:param step_desc:\n\t:param value:filename\n\t:param loc:\n\t:return:\n\t\"\"\"\n\tcurrent_path = os.path.split(os.path.realpath(__file__))[0]\n\tprint(loc, current_path+'/data/'+value)\n\taction_object.send_keys(loc, current_path+'/data/'+value)\n\n@Action.add_action('jscript')\ndef action_jscript(action_object, step_desc, value, loc):\n\t\"\"\"\n\t执行javaScript\n\t:param action_object:\n\t:param step_desc:\n\t:param value:\n\t:param loc: javascript\n\t:return:\n\t\"\"\"\n\tprint(value)\n\ttry:\n\t\taction_object.driver.execute_script(value)\n\texcept Exception as e:\n\t\treturn str(e)\n\n@Action.add_action('moveScroll')\ndef action_moveScroll(action_object, step_desc, value, loc):\n\t\"\"\"\n\t移动滚动条到某一元素位置（垂直）\n\t:param action_object:\n\t:param step_desc:\n\t:param value:\n\t:param loc: 目标元素\n\t:return:\n\t\"\"\"\n\tprint(loc, value)\n\ttry:\n\t\telement = action_object.find_element(loc)\n\t\taction_object.driver.execute_script(\"arguments[0].scrollIntoView();\", element)\n\texcept Exception as e:\n\t\treturn str(e)\n\n@Action.add_action('scrollIntoView')\ndef action_moveScroll(action_object, step_desc, value, loc):\n\t\"\"\"\n\t移动到某元素的位置\n\t:param action_object:\n\t:param step_desc:\n\t:param value:\n\t:param loc: 目标元素\n\t:return:\n\t\"\"\"\n\tprint(loc, value)\n\ttry:\n\t\telement = action_object.find_element(loc)\n\t\tActionChains(action_object.driver).move_to_element(element).perform()\n\texcept Exception as e:\n\t\treturn str(e)\n\n@Action.add_action('timestamp')\ndef action_timestamp(action_object, step_desc, value, loc):\n\t\"\"\"\n\t时间戳 输入当前时间戳\n\t:param action_object:\n\t:param step_desc:\n\t:param value:\n\t:param loc:\n\t:return:\n\t\"\"\"\n\tprint(loc, value)\n\tt = time.time()  # 获取当前时间戳\n\tb = str(t).split('.')\n\tc = b[0]\n\t# print type(value), type(c)\n\t# if type(value) is float:\n\t# \tf = str(value).split('.')\n\t# \ttxt = f[0] + c\n\t# else:\n\t# \ttxt = value + c\n\t# print loc, txt\n\taction_object.send_keys(loc, c)\n\n\n@Action.add_action('submit')\ndef action_submit(action_object, step_desc, value, loc):\n\t\"\"\"\n\t表单提交\n\t:param action_object:\n\t:param step_desc:\n\t:param value:\n\t:param loc: from location\n\t:return:\n\t\"\"\"\n\tprint(loc, value)\n\taction_object.saveScreenshot(\"submit\")\n\taction_object.find_element(loc).click()\n\n@Action.add_action('refresh')\ndef action_refresh(action_object, step_desc, value, loc):\n\t\"\"\"\n\t时间戳 输入当前时间戳\n\t:param action_object:\n\t:param step_desc:\n\t:param value:\n\t:param loc:\n\t:return:\n\t\"\"\"\n\taction_object.driver.refresh()\n\n@Action.add_action('closeBrowser')\ndef action_closeBrowser(action_object, step_desc, value, loc):\n\t\"\"\"\n\t关闭浏览器\n\t:param action_object:\n\t:param step_desc:\n\t:param value:\n\t:param loc:\n\t:return:\n\t\"\"\"\n\ttime.sleep(1)\n\taction_object.driver.quit()\n\n\n@Action.add_action('navigate')\ndef action_navigate(action_object, step_desc, value, loc):\n\t\"\"\"\n\t网页跳转\n\t:param action_object:\n\t:param step_desc:\n\t:param value: 跳转url  http://192.168.110.114/login,[title]\n\t:param loc:\n\t:return:\n\t\"\"\"\n\turl = value\n\tpagetitle = None\n\tif ',' in value:\n\t\turl, pagetitle = value.strip().split(',')[:2]\n\tprint(url)\n\taction_object.driver.get(url)\n\ttry:\n\t\taction_object.notes(u'步骤走马灯')\n\texcept:\n\t\tpass\n\t# 使用assert进行校验，打开的链接地址是否与配置的地址一致。调用on_page()方法\n\tif pagetitle is not None:\n\t\tassert pagetitle in action_object.driver.title, u\"打开开页面失败 %s\" % url\n\n\n@Action.add_action('click')\ndef action_click(action_object, step_desc, value, loc):\n\t\"\"\"\n\t点击一个元素\n\t:param action_object:\n\t:param step_desc:\n\t:param value:\n\t:param loc:\n\t:return:\n\t\"\"\"\n\tprint(loc, value)\n\taction_object.find_element(loc).click()\n\n\n@Action.add_action('clicks')\ndef action_clicks(action_object, step_desc, value, loc):\n\t\"\"\"\n\t点击一组元素中的某一个元素\n\t:param action_object:\n\t:param step_desc:\n\t:param value: int 第几个从0开始\n\t:param loc: 一组元素\n\t:return:\n\t\"\"\"\n\tprint(loc, value)\n\taction_object.find_elements_i(int(value), loc).click()\n\n\n@Action.add_action('checkclick')\ndef action_checkclick(action_object, step_desc, value, loc):\n\t\"\"\"\n\tcheckBox复选框循环全选\n\t:param action_object:\n\t:param step_desc:\n\t:param value:\n\t:param loc: 所有复选框对应的父级元素\n\t:return:\n\t\"\"\"\n\tprint(loc, value)\n\tif action_object.find_element(loc) is not None:\n\t\taa = action_object.find_element(loc)\n\t\tfor i in aa.find_elements_by_css_selector('input[type=\"checkbox\"]'):\n\t\t\ti.click()\n\n@Action.add_action('select')\ndef action_select(action_object, step_desc, value,loc):\n\t\"\"\"\n\tOption下拉框选择\n\t:param action_object:\n\t:param step_desc:\n\t:param value: 选择的框对应的value值\n\t:param loc: select元素\n\t:return:\n\t\"\"\"\n\tprint(loc, value)\n\tSelect(action_object.find_element(loc)).select_by_value(value)\n\n@Action.add_action('selectText')\ndef action_selectText(action_object, step_desc, value,loc):\n\t\"\"\"\n\tOption下拉框选择\n\t:param action_object:\n\t:param step_desc:\n\t:param value: 选择菜单对应的Text文本内容\n\t:param loc: select元素\n\t:return:\n\t\"\"\"\n\tprint(loc, value)\n\tSelect(action_object.find_element(loc)).select_by_visible_text(value)\n\n\n@Action.add_action('swichframe')\ndef action_swichframe(action_object, step_desc, value, loc):\n\t\"\"\"\n\t切换frame\n\t:param action_object:\n\t:param step_desc:\n\t:param value:\n\t:param loc:要切换的frame元素\n\t:return:\n\t\"\"\"\n\tprint(loc)\n\treturn action_object.driver.switch_to_frame(loc)\n\n\n@Action.add_action('defaultframe')\ndef action_defaultframe(action_object, step_desc, value, loc):\n\t\"\"\"\n\t进入默认frame\n\t:param action_object:\n\t:param step_desc:\n\t:param value:\n\t:param loc:\n\t:return:\n\t\"\"\"\n\tprint(loc, value)\n\taction_object.driver.switch_to_default_content()\n\n\n@Action.add_action('assert')\ndef action_assert(action_object, step_desc, value, loc):\n\tprint(loc, value)\n\texpected = action_object.find_element(loc).text\n\tprint(u'预期结果：' + value)\n\tprint(u'实际结果：' + expected)\n\tif value not in expected:\n\t\treturn u'实际结果和预期结果不同！'\n\n@Action.add_action('ValueAssert')\ndef action_valueassert(action_object, step_desc, value, loc):\n\t\"\"\"\n\t通过执行jQuery获取元素取值与另一元素取值进行对比\n\t:param action_object:\n\t:param step_desc:\n\t:param value:\n\t:param loc: element need css selector\n\t:return:jQuery('#login_text_username').val()\n\t\"\"\"\n\tprint(loc, value)\n\texpected = action_object.driver.execute_script(\"return jQuery('\"+loc[1]+\"').val()\")\n\tprint(u'预期结果：' + value)\n\tprint(u'实际结果：' + expected)\n\tif value != expected:\n\t\treturn u'实际结果和预期结果不同！'\n\n@Action.add_action('Notassert')\ndef action_notassert(action_object, step_desc, value, loc):\n\tprint(loc, value)\n\telements = action_object.find_elements(loc)\n\tfor i in elements:\n\t\tif value in i.text:\n\t\t\tprint(u'预期结果：' + value)\n\t\t\tprint(u'实际结果：' + i.text)\n\t\t\treturn u'实际结果和预期结果相同！'\n\tprint(u'预期结果：实际结果和预期结果不同！')\n\n@Action.add_action('assertTrue')\ndef action_assertTrue(action_object, step_desc, value, loc):\n\t\"\"\"\n\t断言界面元素是存在的\n\t:param action_object:\n\t:param step_desc:\n\t:param value:\n\t:param loc:\n\t:return:\n\t\"\"\"\n\tprint(loc)\n\tprint(u'预期结果：元素存在')\n\tif action_object.isElementExsit(loc):\n\t\tprint(u'实际结果：元素存在')\n\telse:\n\t\taction_object.saveScreenshot(\"assertTrueError\")\n\t\treturn u'实际结果：元素不存在'\n\n\n@Action.add_action('assertFalse')\ndef action_assertFalse(action_object, step_desc, value, loc):\n\t\"\"\"\n\t断言界面元素是不存在的\n\t:param action_object:\n\t:param step_desc:\n\t:param value:\n\t:param loc:\n\t:return: 元素不存在:true, 存在:false\n\t\"\"\"\n\tprint(loc)\n\tprint(u'预期结果：元素不存在')\n\n\tif action_object.isElementExsit(loc):\n\t\taction_object.saveScreenshot(\"assertTrueError\")\n\t\treturn u'实际结果：元素存在'\n\telse:\n\t\tprint(u'实际结果：元素不存在')\n\n@Action.add_action('assertUrl')\ndef action_assertUrl(action_object, step_desc, value, loc):\n\t\"\"\"\n\t验证URL是否正确\n\t:param action_object:\n\t:param step_desc:\n\t:param value:\n\t:param loc: 预期结果\n\t:return:\n\t\"\"\"\n\tprint(value)\n\texpected = action_object.driver.current_url\n\tprint(u'预期结果：' + value)\n\tprint(u'实际结果：' + expected)\n\tif value not in expected:\n\t\taction_object.saveScreenshot(\"urlError\")\n\t\treturn u'实际结果和预期结果不同！'\n\n\n@Action.add_action('isDisplayed')\ndef action_isDisplayed(action_object, step_desc, value, loc):\n\t\"\"\"\n\t验证元素是隐藏元素\n\t:param action_object:\n\t:param step_desc:\n\t:param value:\n\t:param loc: location\n\t:return: 隐藏为True,显示为 False\n\t\"\"\"\n\tprint(loc)\n\tprint(u'预期结果：元素是隐藏的',action_object.find_element(loc).is_displayed())\n\tif action_object.find_element(loc).is_displayed():\n\t\treturn u'实际结果：元素是可见'\n\telse:\n\t\tprint(u'实际结果：元素是隐藏的')\n\n\n@Action.add_action('isEnabled')\ndef action_isEnabled(action_object, step_desc, value, loc):\n\t\"\"\"\n\t验证元素是否置灰\n\t:param action_object:\n\t:param step_desc:\n\t:param value:\n\t:param loc: location\n\t:return:\n\t\"\"\"\n\tprint(loc)\n\tprint(u'预期结果：元素是置灰的')\n\tnot_active = \"blurred\" in action_object.find_element(loc).get_attribute(\"class\")\n\tdisabled = action_object.find_element(loc).get_attribute(\"disabled\")\n\tprint(\"active:\",not_active,\"-\",\"disabled:\",disabled)\n\n\tif disabled is not None:\n\t\tprint(u'实际结果：元素是置灰的')\n\telif not_active:\n\t\tprint(u'实际结果：元素是置灰的')\n\telse:\n\t\treturn u'实际结果：元素是可用的'\n\n\n@Action.add_action('sleep')\ndef action_sleep(action_object, step_desc, value, loc):\n\t\"\"\"\n\t强制脚本等待关键字\n\t:param action_object:\n\t:param step_desc:\n\t:param value: 等待时间单位是秒（s），float型\n\t:param loc:\n\t:return:\n\t\"\"\"\n\ttime.sleep(float(value))\n\n\n@Action.add_action('ssh')\ndef sshclient_execmd(action_object, step_desc, value, loc):\n\t\"\"\"\n\t通过ssh连接linux执行命令\n\t:param action_object:\n\t:param step_desc:\n\t:param value:[hostname,port,username,password,[command1;command2;command3;command4]]\n\t:param loc:\n\t:return:\n\t\"\"\"\n\tprint(value)\n\thostname,port,username,password,execmd=value.split(',')\n\tparamiko.util.log_to_file(\"paramiko.log\")\n\ts = paramiko.SSHClient()\n\ts.set_missing_host_key_policy(paramiko.AutoAddPolicy())\n\ts.connect(hostname=hostname, port=int(port), username=username, password=password)\n\texecmd = execmd.replace(\";\", \",\")\n\texecmds = execmd.split(',')\n\ttt = s.invoke_shell()\n\tfor i in execmds:\n\t\ttt.send(i)\n\t\ttt.send('\\n')\n\t\ttt.send(' ')\n\t\ttt.send(' ')\n\t\ttt.send(' ')\n\t\ttt.send(' ')\n\twhile not tt.recv_ready():\n\t\ttime.sleep(5)\n\tprint(tt.recv(4096))\n\ts.close()\n\n\t# stdin, stdout, stderr = s.exec_command(execmd)\n\t# stdin.write(\"Y\")\n\t# print stdout.read()\n\t# s.close()\n\n@Action.add_action('exists_file')\ndef exists_file(action_object, step_desc, value, loc):\n\t\"\"\"\n\tassert file exists\n\t:param action_object:\n\t:param step_desc:\n\t:param value:[filename],[file type]\n\t:param loc:\n\t:return:\n\t\"\"\"\n\tcurrent_path = os.path.split(os.path.realpath(__file__))[0]\n\tfname, ftype = value.split(',')\n\tday = time.strftime('%Y-%-m-%-d', time.localtime(time.time()))\n\tif ftype.lower() == 'pdf':\n\t\tpfname = fname + '_' + day + '.pdf'\n\telif ftype.lower() == 'html':\n\t\tpfname = fname + '_' + day + '.html'\n\telse:\n\t\tpfname = fname + '.' + ftype.lower()\n\tprint(loc, current_path + '/data/' + pfname)\n\tfilename = current_path + '/data/' + pfname\n\tif os.path.exists(filename):\n\t\tprint(u\"文件[\"+filename+u\"]下载成功！\")\n\telse:\n\t\treturn u\"文件下载失败！\"\n\n@Action.add_action('udpsend')\ndef action_udpsend(action_object,step_desc, value, loc):\n\t\"\"\"\n\t调用sendlog中的脚本进行syslog发包\n\t:param action_object:\n\t:param step_desc:\n\t:param value:参数  -sip -dip -c -t...\n\t:param loc:\n\t:return:\n\t\"\"\"\n\n\tif '-t' in value or '-sip' in value:\n\t\tprint('sudo python sendlog/sendingdata.py ' + str(value))\n\t\ttry:\n\t\t\tos.system('sudo python sendlog/sendingdata.py ' + str(value))\n\t\texcept Exception as e:\n\t\t\tprint(e)\n\tif '-d ' in value:\n\t\tprint('sudo python sendlog/udpsendingsyslog.py ' + value)\n\t\ttry:\n\t\t\tos.system('sudo python sendlog/udpsendingsyslog.py ' + str(value))\n\t\texcept Exception as e:\n\t\t\tprint(e)\n\n@Action.add_action('dpiblacklist')\ndef sshclient_dpiblacklist(action_object, step_desc, value, loc):\n\t\"\"\"\n\t验证DPI端口映射下发\n\t:param action_object:\n\t:param step_desc:\n\t:param value:[hostname,port,username,password,execmd[port1;port2;p]]\n\t:param loc:\n\t:return:\n\t\"\"\"\n\tprint(value)\n\thostname, port, username, password, count_num, descr  = value.split(',')\n\n\ttry:\n\t\tparamiko.util.log_to_file(\"paramiko.log\")\n\t\ts = paramiko.SSHClient()\n\t\ts.set_missing_host_key_policy(paramiko.AutoAddPolicy())\n\t\ts.connect(hostname=hostname, port=int(port), username=username, password=password)\n\t\ttt = s.invoke_shell()\n\t\ttt.send('configure terminal')\n\t\ttt.send('\\n')\n\t\ttt.send('dpi')\n\t\ttt.send('\\n')\n\t\ttt.send('show dpi blacklist')\n\t\ttt.send('\\n')\n\t\ttt.send(' ')\n\t\twhile not tt.recv_ready():\n\t\t\tprint(\"working...\")\n\t\t\ttime.sleep(15)\n\t\tinfo = tt.recv(4096)\n\t\ts.close()\n\t\tif info.count('Rule Index') == int(count_num):\n\t\t\tif descr in info:\n\t\t\t\tprint(u\"黑名单下发成功.\")\n\t\t\telse:\n\t\t\t\treturn u\"下发黑名单不匹配.\"\n\t\telse:\n\t\t\treturn u\"黑名单开启数量不匹配.\"\n\n\texcept:\n\t\treturn u\"DPI 连接失败\"\n##############################################################################################\n#\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t #\n#\t\t\t\t\t\t\t\t MiddleWare  关键字  START\t\t\t\t\t\t\t\t\t #\n#\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t #\n##############################################################################################\n\n@Action.add_action('login')\ndef action_login(action_object, step_desc, value, loc):\n\t\"\"\"\n\t构造登录使用的公用方法\n\t\"\"\"\n\tprint(loc, value)\n\tusername, password, VerifyNo = value.split(',')\n\taction_object.find_element(('id', 'login_text_username')).clear()\n\taction_object.find_element(('id', 'login_text_username')).send_keys(username)\n\taction_object.find_element(('id', 'login_text_password')).clear()\n\taction_object.find_element(('id', 'login_text_password')).send_keys(password)\n\taction_object.find_element(('id', 'login_text_verifycode')).clear()\n\taction_object.find_element(('id', 'login_text_verifycode')).send_keys(VerifyNo)\n\taction_object.find_element(('id', 'login_button_loginButton')).click()\n\ttime.sleep(0.5)\n\n\n@Action.add_action('logout')\ndef action_logout(action_object, step_desc, value, loc):\n\t\"\"\"\n\t注销通用方法\n\t\"\"\"\n\taction_object.find_element(('id', 'header_a_navUser')).click()\n\taction_object.find_element(('css', '#header_li_logOut > a')).click()\n\n@Action.add_action('addtopo')\ndef action_addtopo(action_object, step_desc, value, loc):\n\t\"\"\"\n\tclick all elements\n\t\"\"\"\n\ttry:\n\t\tbtn = action_object.find_elements(loc)\n\t\t# if btn:\n\t\t# \tfor i in btn:\n\t\t# \t\ti.click()\n\t\t# \t\ttime.sleep(2.5)\n\t\t#\n\t\tlist = len(btn)\n\t\tprint(list)\n\t\tfor i in range(list):\n\t\t\taction_object.find_element(('id', 'securitydevice-securityNewDeviceTable_a_addModal_0')).click()\n\t\t\ttime.sleep(2.5)\n\texcept:\n\t\tprint('Not found new device.')\n\n@Action.add_action('clearTopo')\ndef action_clear_topo(action_object, step_desc, value, loc):\n\t\"\"\"\n\tclear 拓扑\n\t:param action_object:\n\t:param step_desc:\n\t:param value:\n\t:param loc:\n\t:return:\n\t\"\"\"\n\tif action_object.isElementExsit(('id','topology-singleTopo_button_downloadTopo')):\n\t\ttry:\n\t\t\taction_object.find_element(('css','button[class=\"btn btn-default dropdown-toggle ng-scope\"]')).click()\n\t\t\taction_object.find_element(('css','ul[class=\"dropdown-menu pull-right ng-scope\"]')).click()\n\t\t\ttime.sleep(2)\n\t\t\taction_object.find_element(('css','button[ng-click=\"confirm()\"]')).click()\n\t\texcept Exception as e:\n\t\t\tprint(\"clear topo failed!\")\n\ttime.sleep(3)\n\n@Action.add_action('Reset')\ndef action_reset(action_object, step_desc, value, loc):\n\t\"\"\"\n\t重置或重启系统\n\t:param action_object:\n\t:param step_desc:\n\t:param value: restart | reset\n\t:param loc:\n\t:return:\n\t\"\"\"\n\ttime.sleep(1)\n\t# 点击系统重置\n\taction_object.find_element(('css', '#setting-systemconsole_li_systemReset a')).click()\n\ttime.sleep(1)\n\tif value.upper() == 'RESTART':\n\t\t# 点击重启设备\n\t\taction_object.find_element(('css', '#setting-systemconsole_button_restartModal')).click()\n\t\ttime.sleep(1)\n\t\t# 点击确定\n\t\taction_object.find_element(('css', '.modal-content button:nth-child(2)')).click()\n\telse:\n\t\t# 点击重置系统\n\t\taction_object.find_element(('css', '#setting-systemconsole_button_resetModal')).click()\n\t\ttime.sleep(1)\n\t\t# 点击确定\n\t\taction_object.find_element(('css', '.modal-content button:nth-child(2)')).click()\n\n\ttime.sleep(20)\n\tfor i in range(30):\n\t\tprint(i+1)\n\t\taction_object.driver.refresh()\n\t\ttry:\n\t\t\tif action_object.find_element(('css', '#login_text_username')) is not None:\n\t\t\t\tbreak\n\t\texcept:\n\t\t\tpass\n\t\ttime.sleep(10)\n\n@Action.add_action('restartmw')\ndef action_restartmw(action_object, step_desc, value, loc):\n\t\"\"\"\n\t重启MW设备\n\t:param action_object:\n\t:param step_desc:\n\t:param value:\n\t:param loc:\n\t:return:\n\t\"\"\"\n\turl = action_object.driver.current_url\n\thostname = re.search('\\d+\\.\\d+\\.\\d+\\.\\d+',url).group(0)\n\tport = 22\n\tusername = 'acorn'\n\tpassword = 'Ag0@dbegiNNingmakesag0@dending.'\n\n\ttry:\n\t\tparamiko.util.log_to_file(\"paramiko.log\")\n\t\ts = paramiko.SSHClient()\n\t\ts.set_missing_host_key_policy(paramiko.AutoAddPolicy())\n\t\ts.connect(hostname=hostname, port=port, username=username, password=password)\n\t\ttt = s.invoke_shell()\n\t\ttt.send('sudo reboot')\n\t\ttt.send('\\n')\n\t\ttt.send(password)\n\t\ttt.send('\\n')\n\t\twhile not tt.recv_ready():\n\t\t\tprint(\"working...\")\n\t\t\ttime.sleep(10)\n\t\tprint(tt.recv(1024))\n\t\ts.close()\n\texcept:\n\t\treturn u\"MW 连接失败\"\n\ttime.sleep(20)\n\tfor i in range(30):\n\t\tprint(i+1)\n\t\taction_object.driver.get(\"https://\"+hostname+\"/login\")\n\t\ttry:\n\t\t\tif action_object.find_element(('css', '#login_text_username')) is not None:\n\t\t\t\tbreak\n\t\texcept:\n\t\t\tpass\n\t\ttime.sleep(10)\n\n@Action.add_action('Setadmin')\ndef action_setadmin(action_object, step_desc, value, loc):\n\t\"\"\"\n\t设置admin初始密码\n\t:param action_object:\n\t:param step_desc:\n\t:param value:password\n\t:param loc:\n\t:return:\n\t\"\"\"\n\ttime.sleep(1)\n\t# 选择分区管理\n\taction_object.find_element(('css', '#header_li_domain a')).click()\n\ttime.sleep(1)\n\t# 输入密码\n\taction_object.find_element(('css', '#domain_password_newPassword')).send_keys(value)\n\ttime.sleep(0.5)\n\t# 输入确认密码\n\taction_object.find_element(('css', '#domain_password_confPassword')).send_keys(value)\n\ttime.sleep(2)\n\taction_object.find_element(('id', 'domain_button_saveUser')).click()\n\ttime.sleep(0.5)\n\tif action_object.find_element(('css', '.close')) is not None:\n\t\taction_object.find_element(('css', '.close')).click()\n\ttime.sleep(5)\n\n@Action.add_action('redirect')\ndef sshclient_execmd_redirection(action_object, step_desc, value, loc):\n\t\"\"\"\n\t重新指派DPI\n\t:param action_object:\n\t:param step_desc:\n\t:param value:[hostname,port,username,password,[mw_ip;start|stop]]\n\t:param loc:\n\t:return:\n\t\"\"\"\n\tprint(value)\n\thostname,port,username,password,execmd=value.split(',')\n\ttry:\n\t\tdpi_ip,status = execmd.split(';')\n\texcept:\n\t\tdpi_ip = execmd\n\t\tstatus = 'start'\n\ttry:\n\t\tparamiko.util.log_to_file(\"paramiko.log\")\n\t\ts = paramiko.SSHClient()\n\t\ts.set_missing_host_key_policy(paramiko.AutoAddPolicy())\n\t\ts.connect(hostname=hostname, port=int(port), username=username, password=password)\n\n\t\tif status == 'stop':\n\t\t\ttt = s.invoke_shell()\n\t\t\ttt.send('configure terminal')\n\t\t\ttt.send('\\n')\n\t\t\ttt.send('manager-ui ip '+dpi_ip)\n\t\t\ttt.send('\\n')\n\t\t\ttt.send('write file')\n\t\t\ttt.send('\\n')\n\t\t\ttt.send('stop dpi')\n\t\t\ttt.send('\\n')\n\t\t\ttime.sleep(15)\n\t\t\twhile not tt.recv_ready():\n\t\t\t\tprint(\"working...\")\n\t\t\t\ttime.sleep(20)\n\t\t\tprint(tt.recv(4096))\n\t\t\ts.close()\n\t\telse:\n\t\t\ttt = s.invoke_shell()\n\t\t\ttt.send('configure terminal')\n\t\t\ttt.send('\\n')\n\t\t\ttt.send('manager-ui ip '+dpi_ip)\n\t\t\ttt.send('\\n')\n\t\t\ttt.send('write file')\n\t\t\ttt.send('\\n')\n\t\t\ttt.send('stop dpi')\n\t\t\ttt.send('\\n')\n\t\t\ttime.sleep(15)\n\t\t\twhile not tt.recv_ready():\n\t\t\t\tprint(\"working...\")\n\t\t\t\ttime.sleep(20)\n\t\t\tprint(tt.recv(4096))\n\t\t\ts.close()\n\t\t\tst = paramiko.SSHClient()\n\t\t\tst.set_missing_host_key_policy(paramiko.AutoAddPolicy())\n\t\t\tst.connect(hostname=hostname, port=int(port), username=username, password=password)\n\t\t\tts = st.invoke_shell()\n\t\t\tts.send('configure terminal')\n\t\t\tts.send('\\n')\n\t\t\tts.send('start dpi')\n\t\t\tts.send('\\n')\n\t\t\twhile not ts.recv_ready():\n\t\t\t\tprint(\"working...\")\n\t\t\t\ttime.sleep(10)\n\t\t\tprint(ts.recv(4096))\n\t\t\tst.close()\n\texcept:\n\t\treturn u\"DPI 连接失败\"\n\n@Action.add_action('dpinetport')\ndef sshclient_dpinetport(action_object, step_desc, value, loc):\n\t\"\"\"\n\t验证DPI端口映射下发\n\t:param action_object:\n\t:param step_desc:\n\t:param value:[hostname,port,username,password,execmd[port1;port2;p]]\n\t:param loc:\n\t:return:\n\t\"\"\"\n\tprint(value)\n\thostname,port,username,password,execmd=value.split(',')\n\ttry:\n\t\tl2 = execmd.split(';')\n\texcept:\n\t\treturn u'没有填写验证端口'\n\ttry:\n\t\tparamiko.util.log_to_file(\"paramiko.log\")\n\t\ts = paramiko.SSHClient()\n\t\ts.set_missing_host_key_policy(paramiko.AutoAddPolicy())\n\t\ts.connect(hostname=hostname, port=int(port), username=username, password=password)\n\t\ttt = s.invoke_shell()\n\t\ttt.send('configure terminal')\n\t\ttt.send('\\n')\n\t\ttt.send('dpi')\n\t\ttt.send('\\n')\n\t\ttt.send('show dpi netport')\n\t\ttt.send('\\n')\n\t\ttt.send(' ')\n\t\twhile not tt.recv_ready():\n\t\t\tprint(\"working...\")\n\t\t\ttime.sleep(15)\n\t\tinfo = tt.recv(4096)\n\t\ts.close()\n\t\ta = info.split('\\r\\n')\n\t\tportlist = []\n\t\tfor i in a:\n\t\t\tportlist.append(i[i.find(': ')+2:i.find(' (')])\n\t\tportlist = list(set(portlist))\n\t\tportlist.remove('')\n\t\tl1 = set(portlist)\n\t\tl2 = set(l2)\n\t\tif len(l1 -l2) == 0:\n\t\t\tprint(u\"端口映射下发DPI成功\")\n\t\telse:\n\t\t\tprint(l1)\n\t\t\treturn u\"端口映射下发DPI失败\"\n\texcept:\n\t\treturn u\"DPI 连接失败\"\n\n@Action.add_action('sendTrafoFlowData')\ndef action_sendTrafoFlowData(action_object, step_desc, value, loc):\n\t\"\"\"\n\t通过trafo发送指定类型的 pcap 包\n\t:param action_object:\n\t:param step_desc:\n\t:param value:类型\n\t:param loc:\n\t:return:\n\t\"\"\"\n\ttrafoServerIp, datatype = value.split(',')\n\tSimulatorUtil.sendTrafoFlowData(simulatorIP='192.168.110.77:4000', trafoServerIp=trafoServerIp, type=datatype, timeoutSeconds=None)\n\n@Action.add_action('sendEventAndIncident')\ndef action_sendEventAndIncident(action_object, step_desc, value, loc):\n\t\"\"\"\n\t发送指定类型的 Event\n\t:param action_object:\n\t:param step_desc:\n\t:param value:类型\n\t:param loc:\n\t:return:\n\t\"\"\"\n\n\ttry:\n\t\ttestServerIP, dpisn = value.split(',')\n\t\tprint(testServerIP,dpisn)\n\texcept Exception:\n\t\treturn \"type error!!!\"\n\tSimulatorUtil.sendEventAndIncident(simulatorIP='192.168.110.77:4000', testServerIP=testServerIP, dpisn=dpisn, type='incident')\n\n@Action.add_action('countnum')\ndef action_countnum(action_object, step_desc, value, loc):\n\t\"\"\"\n\t统计元素出现个数是否与预期一致\n\t:param action_object:\n\t:param step_desc:\n\t:param value: 预期结果\n\t:param loc:\n\t:return:\n\t\"\"\"\n\tcountnum = action_object.find_elements(loc)\n\tcountnum = len(countnum)\n\tvalue = int(value)\n\tprint(u\"预期结果：\"+str(value))\n\tif countnum == value:\n\t\tprint(u\"实际结果：\"+str(countnum))\n\telse:\n\t\treturn u\"实际结果：\"+str(countnum)\n\n@Action.add_action('Ele2countnum')\ndef action_ele_2_countnum(action_object, step_desc, value, loc):\n\t\"\"\"\n\t通过正则匹配获取数字与元素统计进行比较\n\t:param action_object:\n\t:param step_desc:\n\t:param value: 通过正则匹配获取数字[元素]\n\t:param loc: 元素列表\n\t:return:\n\t\"\"\"\n\tcountnum = action_object.find_elements(loc)\n\tcountnum = len(countnum)\n\n\tshowtext = action_object.find_element((\"xpath\", value)).text\n\tstr1 = re.compile(r'\\d+')\n\tshownum = str1.findall(showtext)[0]\n\n\tprint(u\"元素统计数量：\" + str(countnum))\n\tif countnum == int(shownum):\n\t\tprint(u\"界面显示：\" + str(shownum))\n\telse:\n\t\treturn u\"界面显示：\" + str(shownum)\n\n@Action.add_action('ntpsyn')\ndef action_ele_2_countnum(action_object, step_desc, value, loc):\n\t\"\"\"\n\t通过正则匹配获取数字与元素统计进行比较\n\t:param action_object:\n\t:param step_desc:\n\t:param value: 通过正则匹配获取数字[元素]\n\t:param loc: 元素列表\n\t:return:\n\t\"\"\"\n\tsystem_time = action_object.find_element(('css','#setting_systemconsole_container_editNtpSync input.time-picker-input')).get_attribute('placeholder')\n\tlocal_time = (action_object.find_element(('css','#setting_systemconsole_container_editNtpSync div.local-time')).text)\n\tif system_time[:5] != local_time.split(' ')[1][:5]:\n\t\treturn u'系统时间与本地时间不一至'\n\n@Action.add_action('untilshow')\ndef action_untilshow(action_object, step_desc, value, loc):\n\t\"\"\"\n\t持续监听页面元素状态（智能等待），直到发现元素\n\t:param action_object:\n\t:param step_desc:\n\t:param value:\n\t:param loc:\n\t:return:\n\t\"\"\"\n\tfor i in range(300):\n\t\ttry:\n\t\t\tif action_object.find_element(loc) is not None:\n\t\t\t\tbreak\n\t\texcept:\n\t\t\tpass\n\t\ttime.sleep(1)\n\n@Action.add_action('ipmac_switch')\ndef action_ipmac_switch(action_object, step_desc, value, loc):\n\t\"\"\"\n\tIP/MAC绑定按钮\n\t:param action_object:\n\t:param step_desc:\n\t:param value: 开启/关闭\n\t:param loc:\n\t:return:\n\t\"\"\"\n\tloc_status = action_object.find_element(('xpath', '//span[text()=\"IP/MAC地址绑定\"]/following-sibling::span//label')).text\n\tif value == u\"开启\":\n\t\tif loc_status == u\"关闭\":\n\t\t\taction_object.find_element(('id', 'rule-ipmac_checkbox')).click()\n\telse:\n\t\tif loc_status == u\"开启\":\n\t\t\taction_object.find_element(('id', 'rule-ipmac_checkbox')).click()\n\n@Action.add_action('security_detail')\ndef action_security_detail(action_object, step_desc, value, loc):\n    \"\"\"\n        功能模式切换\n        :param action_object:\n        :param step_desc:\n        :param value: 路由保护模式/智能保护模式\n        :param loc:\n        :return:\n        \"\"\"\n    securitydetail = action_object.find_element(('xpath', '//h5[text()=\"功能模式\"]/following-sibling::p')).text\n    # loc_status = action_object.find_element(('xpath', '//span[text()=\"IP/MAC地址绑定\"]/following-sibling::span//label')).text\n    if value == u\"路由保护模式\":\n        if securitydetail == u\"智能保护模式\":\n            action_object.find_element(('css', 'button[ng-hide=\"securitydetail.isEdited\"]')).click()\n            Select(action_object.find_element(('css','div[ng-show=\"securitydetail.isEdited\"]>select'))).select_by_visible_text(u\"路由保护模式\")\n            action_object.find_element(('css', 'button[ng-click=\"securitydetail.editDone(\\'basic\\')\"]')).click()\n            time.sleep(60)\n    else:\n        if securitydetail == u\"路由保护模式\":\n            action_object.find_element(('css', 'button[ng-hide=\"securitydetail.isEdited\"]')).click()\n            Select(action_object.find_element(('css', 'div[ng-show=\"securitydetail.isEdited\"]>select'))).select_by_visible_text(u\"智能保护模式\")\n            time.sleep(1)\n            action_object.find_element(('id', 'confirmPanel_button_confirm')).click()\n            time.sleep(1)\n            action_object.find_element(('css', 'button[ng-click=\"securitydetail.editDone(\\'basic\\')\"]')).click()\n            time.sleep(60)\n\n@Action.add_action('click_add_rule')\ndef action_security_detail(action_object, step_desc, value, loc):\n\t\"\"\"\n\tclick add rule button\n\t:param action_object:\n\t:param step_desc:\n\t:param value:\n\t:param loc:\n\t:return:\n\t\"\"\"\n\tif action_object.isElementExsit(('id','rule-blackList-policyDetail_button_createRules')):\n\t\ttry:\n\t\t\taction_object.find_element(('id','rule-blackList-policyDetail_button_createRules')).click()\n\t\t\ttime.sleep(2)\n\t\texcept Exception as e:\n\t\t\tprint(\"not found add rule button\")\n#\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t #\n#\t\t\t\t\t\t\t\t MiddleWare  关键字  END\t\t\t\t\t\t\t\t\t\t #\n##############################################################################################\n\n\n\n\n\n\n\n\n\n##############################################################################################\n#\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t #\n#\t\t\t\t\t\t\t\t 漏洞挖掘  关键字  START\t\t\t\t\t\t\t\t\t\t #\n#\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t #\n##############################################################################################\n\n@Action.add_action('delete_task')\ndef delete_task(action_object, step_desc, value, loc):\n\t\"\"\"\n\t删除漏挖任务\n\t\"\"\"\n\taction_object.find_element((\"xpath\", \"//input[@placeholder='输入关键字']\")).clear()\n\taction_object.find_element((\"xpath\", \"//input[@placeholder='输入关键字']\")).send_keys(value)\n\ttime.sleep(2)\n\taction_object.find_element((\"xpath\", \"//button[@tooltip='删除']\")).click()\n\ttime.sleep(2)\n\taction_object.find_element((\"xpath\", \"//button[@ng-click='deleteTask()']\")).click()\n\taction_object.find_element((\"xpath\", \"//input[@placeholder='输入关键字']\")).clear()\n\n@Action.add_action('create_louwa_task')\ndef create_louwa_task(action_object, step_desc, value, loc):\n\t\"\"\"\n\t新建漏挖任务\n\t\"\"\"\n\tpara = re.split(',', value)\n\taction_object.find_element((\"id\", \"task-work-panel\")).click()\n\ttime.sleep(1)\n\taction_object.find_element((\"id\", \"create-louwa-task\")).click()\n\ttime.sleep(1)\n\taction_object.find_element((\"id\", \"louwa-task-name\")).send_keys(para[0])\n\taction_object.find_element((\"id\", \"louwa-project-choose\")).click()\n\ttime.sleep(1)\n\taction_object.find_element((\"xpath\", \"//*[@id='louwa-project-choose']/li[@title='%s']\" % para[1])).click()\n\ttime.sleep(1)\n\taction_object.find_element((\"id\", \"task-type-choose\")).click()\n\ttime.sleep(1)\n\taction_object.find_element((\"xpath\", \"//*[@id='task-type-choose']/li\")).click()\n\ttime.sleep(1)\n\taction_object.find_element((\"id\", \"bus-type-choose\")).click()\n\ttime.sleep(1)\n\taction_object.find_element((\"xpath\", \"//*[@id='bus-type-choose']/li[contains(text(),'%s')]\" % para[2])).click()\n\ttime.sleep(1)\n\tif int(para[3]) == 0:\n\t\taction_object.find_element((\"xpath\", \"//*[@id='is-create-louwa-task']/button[1]\")).click()\n\telif int(para[3]) == 1:\n\t\taction_object.find_element((\"xpath\", \"//*[@id='is-create-louwa-task']/button[2]\")).click()\n\telif int(para[3]) == 2:\n\t\taction_object.find_element((\"xpath\", \"//*[@id='is-create-louwa-task']/button[3]\")).click()\n\n@Action.add_action('check_description')\ndef check_description(action_object, step_desc, value, loc):\n\t\"\"\"\n\t检查描述框的值是否符合预期\n\t\"\"\"\n\tdescription = action_object.find_element((\"xpath\", \"//textarea[@ng-model='unsavedTask.desc']\")).get_attribute(\"value\")\n\tif value == description:\n\t\tprint(u'描述信息正确')\n\telse:\n\t\treturn u'描述信息错误'\n\n\n#\t\t\t\t\t\t\t\t \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t #\n#\t\t\t\t\t\t\t\t漏洞挖掘  关键字  END\t\t\t\t\t\t\t\t\t\t\t #\n##############################################################################################"
  },
  {
    "path": "seleniumkeyword/CustomKeyword.py",
    "content": "# -*- coding: utf-8 -*-\n\"\"\"\n__author__ = 'Ray'\nmail:tsbc@vip.qq.com\n2017-01-19\n\"\"\"\nfrom Base import *\n\n\n################################################################################\n# 关键字函数必须用Aciton.add_action(keyword)装饰起进行装饰\n# 函数的形参必须为4个:action_object(Aciton对象), step_desc(步骤描述信息，可用于记录log),\n#\t\t\t\t  value(需要输入的值，多个输入值用逗号隔开), loc(元素的定位信息)\n# 函数正常退出时不能有返回值（使用默认的返回值None），出错时返回字符串（记录出错信息）\n################################################################################\n\n\n\n##############################################################################################\n#\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t #\n#\t\t\t\t\t\t\t\t 自定义关键字  START\t\t\t\t\t\t\t\t\t         #\n#\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t #\n##############################################################################################\n\n@Action.add_action('keau1000_login')\ndef action_login(action_object, step_desc, value, loc):\n\t\"\"\"\n\t构造登录使用的公用方法\n\t\"\"\"\n\tprint(value)\n\tusername, password = value.split(',')\n\taction_object.find_element(('id', 'login_txtUserName')).clear()\n\taction_object.find_element(('id', 'login_txtUserName')).send_keys(username)\n\taction_object.find_element(('id', 'login_txtUserPassword')).clear()\n\taction_object.find_element(('id', 'login_txtUserPassword')).send_keys(password)\n\t# action_object.find_element(('id', 'login_text_verifycode')).clear()\n\t# action_object.find_element(('id', 'login_text_verifycode')).send_keys(VerifyNo)\n\taction_object.find_element(('id', 'login_btnLogin')).click()\n\ttime.sleep(0.5)\n\ttry:\n\t\taction_object.find_element(('css', 'button.btn-guidestyle.btn-g-over')).click()\n\texcept:\n\t\tpass\n\n\n@Action.add_action('keau1000_reset')\ndef action_reset(action_object, step_desc, value, loc):\n\t\"\"\"\n\treset platform\n\t\"\"\"\n\t# print loc, value\n\t# username, password = value.split(',')\n\turl = action_object.driver.current_url\n\thostname = re.search('\\d+\\.\\d+\\.\\d+\\.\\d+', url).group(0)\n\taction_object.find_element(('css', 'ul.nav-list li:nth-child(8) span')).click()\n\ttime.sleep(0.5)\n\taction_object.find_element(('css', 'ul.nav-list li:nth-child(8) div li:nth-child(2)')).click()\n\ttime.sleep(0.5)\n\taction_object.find_element(('id', 'system_system_btnResetDevice')).click()\n\ttime.sleep(30)\n\tfor i in range(180):\n\t\tprint(i + 1,)\n\t\taction_object.driver.get(\"https://\" + hostname)\n\t\tif action_object.isElementExsit(('id', 'login_txtUserName')):\n\t\t\tbreak\n\t\ttime.sleep(1)\n\taction_object.find_element(('id', 'login_txtUserName')).clear()\n\taction_object.find_element(('id', 'login_txtUserName')).send_keys('admin')\n\taction_object.find_element(('id', 'login_txtUserPassword')).clear()\n\taction_object.find_element(('id', 'login_txtUserPassword')).send_keys('admin@123')\n\t# action_object.find_element(('id', 'login_text_verifycode')).clear()\n\t# action_object.find_element(('id', 'login_text_verifycode')).send_keys(VerifyNo)\n\taction_object.find_element(('id', 'login_btnLogin')).click()\n\taction_object.find_element(('css', 'div.row-setting label[for=\"device_centralize_rabMode1\"]')).click()\n\taction_object.find_element(('id', 'device_centralize_btnMode')).click()\n\ttime.sleep(30)\n\tfor i in range(180):\n\t\tprint(i + 1,)\n\t\taction_object.driver.get(\"https://\" + hostname)\n\t\tif action_object.isElementExsit(('id', 'login_txtUserName')):\n\t\t\tbreak\n\t\ttime.sleep(1)\n\taction_object.find_element(('id', 'login_txtUserName')).clear()\n\taction_object.find_element(('id', 'login_txtUserName')).send_keys('admin')\n\taction_object.find_element(('id', 'login_txtUserPassword')).clear()\n\taction_object.find_element(('id', 'login_txtUserPassword')).send_keys('admin@123')\n\t# action_object.find_element(('id', 'login_text_verifycode')).clear()\n\t# action_object.find_element(('id', 'login_text_verifycode')).send_keys(VerifyNo)\n\taction_object.find_element(('id', 'login_btnLogin')).click()\n\ttime.sleep(1)\n\t# action_object.find_element(('css', 'button.btn-guidestyle.btn-g-over')).click()\n\tif action_object.isElementExsit(('id', 'spanSystemTime')):\n\t\tprint(\"reset succesful.\")\n\telse:\n\t\treturn \"reset failed!\"\n\n#\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t #\n#\t\t\t\t\t\t\t\t 自定义关键字  END\t\t\t\t\t\t\t\t\t         #\n##############################################################################################\n"
  },
  {
    "path": "seleniumkeyword/HTMLTestRunner.py",
    "content": "\"\"\"\nA TestRunner for use with the Python unit testing framework. It\ngenerates a HTML report to show the result at a glance.\n\nThe simplest way to use this is to invoke its main method. E.g.\n\n    import unittest\n    import HTMLTestRunner\n\n    ... define your tests ...\n\n    if __name__ == '__main__':\n        HTMLTestRunner.main()\n\n\nFor more customization options, instantiates a HTMLTestRunner object.\nHTMLTestRunner is a counterpart to unittest's TextTestRunner. E.g..\n\n    # output to a file\n    fp = file('my_report.html', 'wb')\n    runner = HTMLTestRunner.HTMLTestRunner(\n                stream=fp,\n                title='My unit test',\n                description='This demonstrates the report output by HTMLTestRunner.'\n                )\n\n    # Use an external stylesheet.\n    # See the Template_mixin class for more customizable options\n    runner.STYLESHEET_TMPL = '<link rel=\"stylesheet\" href=\"my_stylesheet.css\" type=\"text/css\">'\n\n    # run the test\n    runner.run(my_test_suite)\n\n\n------------------------------------------------------------------------\nCopyright (c) 2004-2007, Wai Yip Tung\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n* Redistributions of source code must retain the above copyright notice,\n  this list of conditions and the following disclaimer.\n* Redistributions in binary form must reproduce the above copyright\n  notice, this list of conditions and the following disclaimer in the\n  documentation and/or other materials provided with the distribution.\n* Neither the name Wai Yip Tung nor the names of its contributors may be\n  used to endorse or promote products derived from this software without\n  specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS\nIS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED\nTO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\nPARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER\nOR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\nEXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\nPROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\nLIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\nNEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\"\"\"\n\n# URL: http://tungwaiyip.info/software/HTMLTestRunner.html\n\n__author__ = \"Wai Yip Tung\"\n__version__ = \"0.8.2\"\n\n\n\"\"\"\nChange History\n\nVersion 0.8.2\n* Show output inline instead of popup window (Viorel Lupu).\n\nVersion in 0.8.1\n* Validated XHTML (Wolfgang Borgert).\n* Added description of test classes and test cases.\n\nVersion in 0.8.0\n* Define Template_mixin class for customization.\n* Workaround a IE 6 bug that it does not treat <script> block as CDATA.\n\nVersion in 0.7.1\n* Back port to Python 2.3 (Frank Horowitz).\n* Fix missing scroll bars in detail log (Podi).\n\"\"\"\n\n# TODO: color stderr\n# TODO: simplify javascript using ,ore than 1 class in the class attribute?\n\nimport datetime\nimport sys\nimport time\nimport unittest\nfrom io import StringIO\nfrom xml.sax import saxutils\n\n\n# ------------------------------------------------------------------------\n# The redirectors below are used to capture output during testing. Output\n# sent to sys.stdout and sys.stderr are automatically captured. However\n# in some cases sys.stdout is already cached before HTMLTestRunner is\n# invoked (e.g. calling logging.basicConfig). In order to capture those\n# output, use the redirectors for the cached stream.\n#\n# e.g.\n#   >>> logging.basicConfig(stream=HTMLTestRunner.stdout_redirector)\n#   >>>\n\nclass OutputRedirector(object):\n    \"\"\" Wrapper to redirect stdout or stderr \"\"\"\n    def __init__(self, fp):\n        self.fp = fp\n\n    def write(self, s):\n        self.fp.write(s)\n\n    def writelines(self, lines):\n        self.fp.writelines(lines)\n\n    def flush(self):\n        self.fp.flush()\n\nstdout_redirector = OutputRedirector(sys.stdout)\nstderr_redirector = OutputRedirector(sys.stderr)\n\n\n\n# ----------------------------------------------------------------------\n# Template\n\nclass Template_mixin(object):\n    \"\"\"\n    Define a HTML template for report customerization and generation.\n\n    Overall structure of an HTML report\n\n    HTML\n    +------------------------+\n    |<html>                  |\n    |  <head>                |\n    |                        |\n    |   STYLESHEET           |\n    |   +----------------+   |\n    |   |                |   |\n    |   +----------------+   |\n    |                        |\n    |  </head>               |\n    |                        |\n    |  <body>                |\n    |                        |\n    |   HEADING              |\n    |   +----------------+   |\n    |   |                |   |\n    |   +----------------+   |\n    |                        |\n    |   REPORT               |\n    |   +----------------+   |\n    |   |                |   |\n    |   +----------------+   |\n    |                        |\n    |   ENDING               |\n    |   +----------------+   |\n    |   |                |   |\n    |   +----------------+   |\n    |                        |\n    |  </body>               |\n    |</html>                 |\n    +------------------------+\n    \"\"\"\n\n    STATUS = {\n    0: 'pass',\n    1: 'fail',\n    2: 'error',\n    }\n\n    DEFAULT_TITLE = 'Unit Test Report'\n    DEFAULT_DESCRIPTION = ''\n\n    # ------------------------------------------------------------------------\n    # HTML Template\n\n    HTML_TMPL = r\"\"\"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n    <title>%(title)s</title>\n    <meta name=\"generator\" content=\"%(generator)s\"/>\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"/>\n    <script src=\"../jquery.min.js\"></script>\n    <script src=\"../highcharts.js\"></script>\n    %(stylesheet)s\n\n</head>\n<body>\n<script language=\"javascript\" type=\"text/javascript\"><!--\noutput_list = Array();\n\n/* level - 0:Summary; 1:Failed; 2:All */\nfunction showCase(level) {\n    trs = document.getElementsByTagName(\"tr\");\n    for (var i = 0; i < trs.length; i++) {\n        tr = trs[i];\n        id = tr.id;\n        if (id.substr(0,2) == 'ft') {\n            if (level < 1) {\n                tr.className = 'hiddenRow';\n            }\n            else {\n                tr.className = '';\n            }\n        }\n        if (id.substr(0,2) == 'pt') {\n            if (level > 1) {\n                tr.className = '';\n            }\n            else {\n                tr.className = 'hiddenRow';\n            }\n        }\n    }\n}\n\n\nfunction showClassDetail(cid, count) {\n    var id_list = Array(count);\n    var toHide = 1;\n    for (var i = 0; i < count; i++) {\n        tid0 = 't' + cid.substr(1) + '.' + (i+1);\n        tid = 'f' + tid0;\n        tr = document.getElementById(tid);\n        if (!tr) {\n            tid = 'p' + tid0;\n            tr = document.getElementById(tid);\n        }\n        id_list[i] = tid;\n        if (tr.className) {\n            toHide = 0;\n        }\n    }\n    for (var i = 0; i < count; i++) {\n        tid = id_list[i];\n        if (toHide) {\n            document.getElementById('div_'+tid).style.display = 'none'\n            document.getElementById(tid).className = 'hiddenRow';\n        }\n        else {\n            document.getElementById(tid).className = '';\n        }\n    }\n}\n\n\nfunction showTestDetail(div_id){\n    var details_div = document.getElementById(div_id)\n    var displayState = details_div.style.display\n    // alert(displayState)\n    if (displayState != 'block' ) {\n        displayState = 'block'\n        details_div.style.display = 'block'\n    }\n    else {\n        details_div.style.display = 'none'\n    }\n}\n\n\nfunction html_escape(s) {\n    s = s.replace(/&/g,'&amp;');\n    s = s.replace(/</g,'&lt;');\n    s = s.replace(/>/g,'&gt;');\n    return s;\n}\n\n/* obsoleted by detail in <div>\nfunction showOutput(id, name) {\n    var w = window.open(\"\", //url\n                    name,\n                    \"resizable,scrollbars,status,width=800,height=450\");\n    d = w.document;\n    d.write(\"<pre>\");\n    d.write(html_escape(output_list[id]));\n    d.write(\"\\n\");\n    d.write(\"<a href='javascript:window.close()'>close</a>\\n\");\n    d.write(\"</pre>\\n\");\n    d.close();\n}\n*/\n--></script>\n%(heading)s\n%(report)s\n%(ending)s\n\n</body>\n</html>\n\"\"\"\n    # variables: (title, generator, stylesheet, heading, report, ending)\n\n\n    # ------------------------------------------------------------------------\n    # Stylesheet\n    #\n    # alternatively use a <link> for external style sheet, e.g.\n    #   <link rel=\"stylesheet\" href=\"$url\" type=\"text/css\">\n\n    STYLESHEET_TMPL = \"\"\"\n<style type=\"text/css\" media=\"screen\">\nbody        { font-family: verdana, arial, helvetica, sans-serif; font-size: 80%; }\ntable       { font-size: 100%; }\npre         { }\n\n/* -- heading ---------------------------------------------------------------------- */\nh1 {\n    font-size: 16pt;\n    color: gray;\n}\n.heading {\n    margin:0 auto;\n   /* margin-top: 0ex;\n    margin-bottom: 1ex;*/\n}\n\n.heading .attribute {\n    margin-top: 1ex;\n    margin-bottom: 0;\n}\n\n.heading .description {\n    margin-top: 2ex;\n    margin-bottom: 2ex;\n}\n\n/* -- css div popup ------------------------------------------------------------------------ */\na.popup_link {\n}\n\na.popup_link:hover {\n    color: red;\n}\n\n.popup_window {\n    display: none;\n    position: relative;\n    left: 0px;\n    top: 0px;\n    /*border: solid #627173 1px; */\n    padding: 10px;\n    background-color: #E6E6D6;\n    font-family: \"Lucida Console\", \"Courier New\", Courier, monospace;\n    text-align: left;\n    font-size: 8pt;\n    width: 500px;\n}\n\n}\n/* -- report ------------------------------------------------------------------------ */\n#show_detail_line {\n    margin-top: 3ex;\n    margin-bottom: 1ex;\n}\n#result_table {\n    width: 99%;\n    margin:0 auto;\n    border-collapse: collapse;\n    border: 1px solid #ddd;\n}\n#header_row {\n    font-weight: bold;\n    color: #333;\n    /*background-color: #ddd;*/\n}\n#result_table td {\n    border: 1px solid #ddd;\n    padding: 8px;\n}\n#result_table > tbody > tr:nth-of-type(2n+1)    {background-color:#f9f9f9;}\n\n#total_row  { font-weight: bold; }\n.passClass  { background-color: #6c6; }\n.failClass  { background-color: #c60; }\n.errorClass { background-color: #dcebfa; }\n.passCase   { color: #6c6; }\n.failCase   { color: #c60; font-weight: bold; }\n.errorCase  { color: #c00; font-weight: bold; }\n.hiddenRow  { display: none; }\n.testcase   { margin-left: 2em; }\n.ak-tab-title    {width:99%;height:35px;margin:0 auto;padding:0;list-style:none;background-color:#63a8eb;}\n.ak-tab-title li {float:left;width:150px;height:35px;line-height:35px;border-right:1px solid #fff;}\n.ak-tab-title li a     {display:block;text-decoration:none;text-align:center;color:#fff;}\n.ak-tab-title li a:hover {background-color:#97cafc;}\n.ak-left    {float:left;}\n.ak-right   {float:right}\n.ak-clear   {clear:both;}\n.ak-bchart  {min-width:450px;height:250px;margin-bottom:10px;}\n/* -- ending ---------------------------------------------------------------------- */\n#ending {\n}\n\n</style>\n\"\"\"\n\n\n\n    # ------------------------------------------------------------------------\n    # Heading\n    #\n\n    HEADING_TMPL = \"\"\"\n<div class='heading'>\n    <div class=\"ak-left\">\n        <h1>%(title)s</h1>\n        %(parameters)s\n        <p class='description'>%(description)s</p>\n    </div>\n    <div id=\"container\" class=\"ak-left ak-bchart\"></div>\n</div>\n<div class=\"ak-clear\"></div>\n\"\"\" # variables: (title, parameters, description)\n\n    HEADING_ATTRIBUTE_TMPL = \"\"\"<p class='attribute'><strong>%(name)s:</strong> %(value)s</p>\n\"\"\" # variables: (name, value)\n\n\n\n    # ------------------------------------------------------------------------\n    # Report\n    #\n\n    REPORT_TMPL = \"\"\"\n<script>\n    $(function () {\n        // Radialize the colors\n        Highcharts.getOptions().colors = Highcharts.map(Highcharts.getOptions().colors, function (color) {\n            return {\n                radialGradient: { cx: 0.5, cy: 0.3, r: 0.7 },\n                stops: [\n                    [0, color],\n                    [1, Highcharts.Color(color).brighten(-0.3).get('rgb')] // darken\n                ]\n            };\n        });\n        // Build the chart\n        $('#container').highcharts({\n            legend: {\n                layout: 'vertical',\n                backgroundColor: '',\n                align: 'right',\n                verticalAlign: 'top',\n                floating: true,\n                labelFormatter: function () {\n                return this.name +'  ('+this.num+')';\n    }\n            },\n            chart: {\n                plotBackgroundColor: null,\n                plotBorderWidth: null,\n                plotShadow: false\n            },\n            title: {\n                text: ''\n            },\n            tooltip: {\n                pointFormat: '{series.name}: <b>{point.percentage:.1f}%%</b>'\n            },\n            plotOptions: {\n                pie: {\n                    allowPointSelect: true,\n                    cursor: 'pointer',\n                    dataLabels: {\n                        enabled: true,\n                        format: '<b>{point.name}</b>: {point.percentage:.1f} %%',\n                        style: {\n                            color: (Highcharts.theme && Highcharts.theme.contrastTextColor) || 'black'\n                        },\n                        connectorColor: 'silver'\n                        },\n                    showInLegend: true\n                    }\n            },\n            series: [{\n                type: 'pie',\n                name: 'Q',\n                data: [\n                    {\n                        name: 'SUCESS',\n                        y: %(Pass)s/%(count)s*100,\n                        num: %(Pass)s,\n                        color: '#5cb85c',\n                    },\n                    {\n                        name: 'FAILED',\n                        y: %(fail)s/%(count)s*100,\n                        num: %(fail)s,\n                        color: '#d9534f',\n                        sliced: true,\n                        selected: true,\n\n                    },\n                    {\n                        name: 'ERROR',\n                        y: %(error)s/%(count)s*100,\n                        num: %(error)s,\n                        color: '#a0a0a0',\n                    },\n                ]\n            }]\n        });\n    });\nfunction showVideo(dom){\n    var videoDom = $(dom).next()[0];\n    if(videoDom){\n        launchFullScreen(videoDom);\n        videoDom.load();\n        videoDom.play();\n    }\n}\n\nfunction launchFullScreen(element) {\n  if(element.requestFullScreen) {\n    element.requestFullScreen();\n  } else if(element.mozRequestFullScreen) {\n    element.mozRequestFullScreen();\n  } else if(element.webkitRequestFullScreen) {\n    element.webkitRequestFullScreen();\n  }\n}\n</script>\n<ul id='show_detail_line' class=\"ak-tab-title\">\n<li><a href='javascript:showCase(0)'>Summary</a></li>\n<li><a href='javascript:showCase(1)'>Failed</a></li>\n<li><a href='javascript:showCase(2)'>All</a></li>\n</ul>\n<table id='result_table'>\n<colgroup>\n<col align='left' />\n<col align='right' />\n<col align='right' />\n<col align='right' />\n<col align='right' />\n<col align='right' />\n</colgroup>\n<tr id='header_row'>\n    <td colspan='2'>Test Group/Test case</td>\n    <td>Count</td>\n    <td>Pass</td>\n    <td>Fail</td>\n    <td>Error</td>\n    <td>View</td>\n    <td>Screenshot</td>\n\n</tr>\n%(test_list)s\n<tr id='total_row'>\n    <td colspan='2'>Total</td>\n    <td>%(count)s</td>\n    <td>%(Pass)s</td>\n    <td>%(fail)s</td>\n    <td>%(error)s</td>\n    <td>&nbsp;</td>\n    <td>&nbsp;</td>\n</tr>\n</table>\n\"\"\" # variables: (test_list, count, Pass, fail, error)\n\n    REPORT_CLASS_TMPL = r\"\"\"\n<tr class='%(style)s'>\n    <td>case_id</td>\n    <td>%(desc)s</td>\n    <td>%(count)s</td>\n    <td>%(Pass)s</td>\n    <td>%(fail)s</td>\n    <td>%(error)s</td>\n    <td><a href=\"javascript:showClassDetail('%(cid)s',%(count)s)\">Detail</a></td>\n    <td>&nbsp;</td>\n</tr>\n\"\"\" # variables: (style, desc, count, Pass, fail, error, cid)\n    REPORT_TEST_WITH_OUTPUT_TMPL_V = r\"\"\"\n<tr id='%(tid)s' class='%(Class)s'>\n    <td  align='center'>%(tid)s</td>\n    <td class='%(style)s'><div class='testcase'>%(desc)s:%(summary)s</div></td>\n    <td colspan='5' align='center'>\n\n    <!--css div popup start-->\n    <a class=\"popup_link\" onfocus='this.blur();' href=\"javascript:showTestDetail('div_%(tid)s')\" >\n        %(status)s</a>\n\n    <div id='div_%(tid)s' class=\"popup_window\">\n        <div style='text-align: right; color:red;cursor:pointer'>\n        <a onfocus='this.blur();' onclick=\"document.getElementById('div_%(tid)s').style.display = 'none' \" >\n           [x]</a>\n        </div>\n        <pre>\n        %(script)s\n        </pre>\n    </div>\n    <!--css div popup end-->\n\n    </td>\n    <td align='center'>\n    <a class=\"showVideo\" onclick=\"showVideo(this);\" title=\"%(image)s\">\n     <img src=\"../video.jpg\" height=30 width=30 border=0 />\n    </a>\n    <video style=\"display:none\" width=\"250\" height=\"100\" controls=\"controls\">\n      <source src=\"%(image)s\" type=\"video/ogg\" />\n    </video>\n    </td>\n</tr>\n\"\"\"\n    REPORT_TEST_WITH_OUTPUT_TMPL = r\"\"\"\n<tr id='%(tid)s' class='%(Class)s'>\n    <td  align='center'>%(tid)s</td>\n    <td class='%(style)s'><div class='testcase'>%(desc)s:%(summary)s</div></td>\n    <td colspan='5' align='center'>\n\n    <!--css div popup start-->\n    <a class=\"popup_link\" onfocus='this.blur();' href=\"javascript:showTestDetail('div_%(tid)s')\" >\n        %(status)s</a>\n\n    <div id='div_%(tid)s' class=\"popup_window\">\n        <div style='text-align: right; color:red;cursor:pointer'>\n        <a onfocus='this.blur();' onclick=\"document.getElementById('div_%(tid)s').style.display = 'none' \" >\n           [x]</a>\n        </div>\n        <pre>\n        %(script)s\n        </pre>\n    </div>\n    <!--css div popup end-->\n\n    </td>\n    <td align='center'>\n    <a target=\"_blank\" href=\"%(image)s\" title=\"%(image)s\">\n     <img src=\"../img.png\" height=30 width=30 border=0 />\n    </a>\n    </td>\n</tr>\n\"\"\" # variables: (tid, Class, style, desc, status)\n\n\n    REPORT_TEST_NO_OUTPUT_TMPL = r\"\"\"\n<tr id='%(tid)s' class='%(Class)s'>\n    <td class='%(style)s'>case_id</td>\n    <td class='%(style)s'><div class='testcase'>%(desc)s</div></td>\n    <td colspan='5' align='center'>%(status)s</td>\n</tr>\n\"\"\" # variables: (tid, Class, style, desc, status)\n\n\n    REPORT_TEST_OUTPUT_TMPL = r\"\"\"\n%(id)s: %(output)s\n\"\"\" # variables: (id, output)\n\n    REPORT_TEST_OUTPUT_IMAGE = r\"\"\"\n%(screenshot)s\n\"\"\"\n\n    REPORT_TEST_OUTPUT_CASEID = r\"\"\"\n%(case_id)s\n\"\"\"\n\n    # ------------------------------------------------------------------------\n    # ENDING\n    #\n\n    ENDING_TMPL = \"\"\"<div id='ending'>&nbsp;</div>\"\"\"\n\n# -------------------- The end of the Template class -------------------\n\n\nTestResult = unittest.TestResult\n\nclass _TestResult(TestResult):\n    # note: _TestResult is a pure representation of results.\n    # It lacks the output and reporting ability compares to unittest._TextTestResult.\n\n    def __init__(self, verbosity=1, result_list=None, tag_list=None):\n        TestResult.__init__(self)\n        self.result_list = result_list\n        self.tag_list = tag_list\n        self.stdout0 = None\n        self.stderr0 = None\n        self.success_count = 0\n        self.failure_count = 0\n        self.error_count = 0\n        self.image_view = 0\n\n        self.verbosity = verbosity\n\n        # result is a list of result in 4 tuple\n        # (\n        #   result code (0: success; 1: fail; 2: error),\n        #   TestCase object,\n        #   Test output (byte string),\n        #   stack trace,\n        # )\n        self.result = []\n\n\n    def startTest(self, test):\n        TestResult.startTest(self, test)\n        # just one buffer for both stdout and stderr\n        self.outputBuffer = StringIO()\n        stdout_redirector.fp = self.outputBuffer\n        stderr_redirector.fp = self.outputBuffer\n        self.stdout0 = sys.stdout\n        self.stderr0 = sys.stderr\n        sys.stdout = stdout_redirector\n        sys.stderr = stderr_redirector\n\n    def complete_output(self):\n        \"\"\"\n        Disconnect\n        output redirection and return buffer.\n        Safe to call multiple times.\n        \"\"\"\n        if self.stdout0:\n            sys.stdout = self.stdout0\n            sys.stderr = self.stderr0\n            self.stdout0 = None\n            self.stderr0 = None\n        return self.outputBuffer.getvalue()\n\n\n    def stopTest(self, test):\n        # Usually one of addSuccess, addError or addFailure would have been called.\n        # But there are some path in unittest that would bypass this.\n        # We must disconnect stdout in stopTest(), which is guaranteed to be called.\n        self.complete_output()\n\n\n    def addSuccess(self, test):\n        self.success_count += 1\n        TestResult.addSuccess(self, test)\n        output = self.complete_output()\n        if self.result_list is not None:\n            self.result_list.append(output)\n        if self.tag_list is not None:\n            self.tag_list[0] += 1\n            self.tag_list[1] += 1\n        self.result.append((0, test, output, ''))\n        if self.verbosity > 1:\n            sys.stderr.write('ok ')\n            sys.stderr.write(str(test))\n            sys.stderr.write('\\n')\n        else:\n            sys.stderr.write('.')\n\n    def addError(self, test, err):\n        self.error_count += 1\n        TestResult.addError(self, test, err)\n        _, _exc_str = self.errors[-1]\n        output = self.complete_output()\n        if self.result_list is not None:\n            self.result_list.append(output)\n        if self.tag_list is not None:\n            self.tag_list[0] += 1\n            self.tag_list[3] += 1\n        if _exc_str.strip().endswith('ERROR'):\n            _exc_str = ''\n        self.result.append((2, test, output, _exc_str))\n        if self.verbosity > 1:\n            sys.stderr.write('E  ')\n            sys.stderr.write(str(test))\n            sys.stderr.write('\\n')\n        else:\n            sys.stderr.write('E')\n\n    def addFailure(self, test, err):\n        self.failure_count += 1\n        TestResult.addFailure(self, test, err)\n        _, _exc_str = self.failures[-1]\n        output = self.complete_output()\n        if self.result_list is not None:\n            self.result_list.append(output)\n        if self.tag_list is not None:\n            self.tag_list[0] += 1\n            self.tag_list[2] += 1\n        if _exc_str.strip().endswith('FAIL'):\n            _exc_str = ''\n        self.result.append((1, test, output, _exc_str))\n        if self.verbosity > 1:\n            sys.stderr.write('F  ')\n            sys.stderr.write(str(test))\n            sys.stderr.write('\\n')\n        else:\n            sys.stderr.write('F')\n\n\nclass HTMLTestRunner(Template_mixin):\n    \"\"\"\n    \"\"\"\n    def __init__(self, stream=sys.stdout, verbosity=1, title=None, description=None, result_list=None, tag_list=None):\n        self.result_list = result_list\n        self.tag_list = tag_list\n        self.stream = stream\n        self.verbosity = verbosity\n        if title is None:\n            self.title = self.DEFAULT_TITLE\n        else:\n            self.title = title\n        if description is None:\n            self.description = self.DEFAULT_DESCRIPTION\n        else:\n            self.description = description\n\n        self.startTime = datetime.datetime.now()\n\n\n    def run(self, test):\n        \"Run the given test case or test suite.\"\n        result = _TestResult(self.verbosity, result_list=self.result_list, tag_list=self.tag_list)\n        test(result)\n        self.stopTime = datetime.datetime.now()\n        self.generateReport(test, result)\n        print('\\nTime Elapsed: %s' % (self.stopTime-self.startTime), file=sys.stderr)\n        return result\n\n    def sortResult(self, result_list):\n        # unittest does not seems to run in any particular order.\n        # Here at least we want to group them together by class.\n        rmap = {}\n        classes = []\n        for n,t,o,e in result_list:\n            cls = t.__class__\n            if cls not in rmap:\n                rmap[cls] = []\n                classes.append(cls)\n            rmap[cls].append((n,t,o,e))\n        r = [(cls, rmap[cls]) for cls in classes]\n        return r\n\n\n    def getReportAttributes(self, result):\n        \"\"\"\n        Return report attributes as a list of (name, value).\n        Override this to add custom attributes.\n        \"\"\"\n        startTime = str(self.startTime)[:19]\n        duration = str(self.stopTime - self.startTime)\n        status = []\n        if result.success_count: status.append('Pass %s'    % result.success_count)\n        if result.failure_count: status.append('Failure %s' % result.failure_count)\n        if result.error_count:   status.append('Error %s'   % result.error_count  )\n        if status:\n            status = ' '.join(status)\n        else:\n            status = 'none'\n        return [\n            ('Start Time', startTime),\n            ('Duration', duration),\n            ('Status', status),\n        ]\n\n\n    def generateReport(self, test, result):\n        report_attrs = self.getReportAttributes(result)\n        generator = 'HTMLTestRunner %s' % __version__\n        stylesheet = self._generate_stylesheet()\n        heading = self._generate_heading(report_attrs)\n        report = self._generate_report(result)\n        ending = self._generate_ending()\n        output = self.HTML_TMPL % dict(\n            title = saxutils.escape(self.title),\n            generator = generator,\n            stylesheet = stylesheet,\n            heading = heading,\n            report = report,\n            ending = ending,\n        )\n        self.stream.write(output.encode('utf8'))\n\n\n    def _generate_stylesheet(self):\n        return self.STYLESHEET_TMPL\n\n\n    def _generate_heading(self, report_attrs):\n        a_lines = []\n        for name, value in report_attrs:\n            line = self.HEADING_ATTRIBUTE_TMPL % dict(\n                    name = saxutils.escape(name),\n                    value = saxutils.escape(value),\n                )\n            a_lines.append(line)\n        heading = self.HEADING_TMPL % dict(\n            title = saxutils.escape(self.title),\n            parameters = ''.join(a_lines),\n            description = saxutils.escape(self.description),\n        )\n        return heading\n\n\n    def _generate_report(self, result):\n        rows = []\n        sortedResult = self.sortResult(result.result)\n        for cid, (cls, cls_results) in enumerate(sortedResult):\n            # subtotal for a class\n            np = nf = ne = 0\n            for n,t,o,e in cls_results:\n                if n == 0: np += 1\n                elif n == 1: nf += 1\n                else: ne += 1\n\n            # format class description\n            if cls.__module__ == \"__main__\":\n                name = cls.__name__\n            else:\n                name = \"%s.%s\" % (cls.__module__, cls.__name__)\n            doc = cls.__doc__ and cls.__doc__.split(\"\\n\")[0] or \"\"\n            desc = doc and '%s: %s' % (name, doc) or name\n\n            row = self.REPORT_CLASS_TMPL % dict(\n                style = ne > 0 and 'errorClass' or nf > 0 and 'failClass' or 'passClass',\n                desc = desc,\n                count = np+nf+ne,\n                Pass = np,\n                fail = nf,\n                error = ne,\n                cid = 'c%s' % (cid+1),\n            )\n            rows.append(row)\n\n            for tid, (n,t,o,e) in enumerate(cls_results):\n                self._generate_report_test(rows, cid, tid, n, t, o, e)\n\n        report = self.REPORT_TMPL % dict(\n            test_list = ''.join(rows),\n            count = str(result.success_count+result.failure_count+result.error_count),\n            Pass = str(result.success_count),\n            fail = str(result.failure_count),\n            error = str(result.error_count),\n        )\n        return report\n\n\n    def _generate_report_test(self, rows, cid, tid, n, t, o, e):\n        # e.g. 'pt1.1', 'ft1.1', etc\n        has_output = bool(o or e)\n        tid = (n == 0 and 'p' or 'f') + 't%s.%s' % (cid+1,tid+1)\n        name = t.id().split('.')[-1]\n        doc = t.shortDescription() or \"\"\n        desc = doc and ('%s: %s' % (name, doc)) or name\n\n        # o and e should be byte string because they are collected from stdout and stderr?\n        if isinstance(o,str):\n            # TODO: some problem with 'string_escape': it escape \\n and mess up formating\n            # uo = unicode(o.encode('string_escape'))\n            uo = o\n        else:\n            uo = o\n        if isinstance(e,str):\n            # TODO: some problem with 'string_escape': it escape \\n and mess up formating\n            # ue = unicode(e.encode('string_escape'))\n            ue = e\n        else:\n            ue = e\n\n        script = self.REPORT_TEST_OUTPUT_TMPL % dict(\n            id = tid,\n            output = saxutils.escape(uo+ue),\n        )\n        image = self.REPORT_TEST_OUTPUT_IMAGE % dict(\n            screenshot=saxutils.escape(uo + ue)\n        )\n        caseid = self.REPORT_TEST_OUTPUT_CASEID % dict(\n            case_id = saxutils.escape(uo+ue)\n        )\n        if \"ogv\" in image:\n            tmpl = has_output and self.REPORT_TEST_WITH_OUTPUT_TMPL_V or self.REPORT_TEST_NO_OUTPUT_TMPL\n            msg = image[image.find(\"image\"):(int(image.find(\"ogv\"))+3)]\n        else:\n            tmpl = has_output and self.REPORT_TEST_WITH_OUTPUT_TMPL or self.REPORT_TEST_NO_OUTPUT_TMPL\n            msg = image[image.find(\"image\"):(int(image.find(\"png\")) + 3)]\n\n        row = tmpl % dict(\n            tid = tid,\n            Class = (n == 0 and 'hiddenRow' or 'none'),\n            style = n == 2 and 'errorCase' or (n == 1 and 'failCase' or 'none'),\n            desc = desc,\n            script = script,\n            summary = image[image.find(\"[\"):(int(image.find(\"]\"))+1)],\n            image = msg,\n            caseid = caseid[caseid.find(\"case\"):(int(caseid.find(\"case\"))+9)],\n            status = self.STATUS[n],\n        )\n        rows.append(row)\n        if not has_output:\n            return\n\n    def _generate_ending(self):\n        return self.ENDING_TMPL\n\n\n##############################################################################\n# Facilities for running tests from the command line\n##############################################################################\n\n# Note: Reuse unittest.TestProgram to launch test. In the future we may\n# build our own launcher to support more specific command line\n# parameters like test title, CSS, etc.\nclass TestProgram(unittest.TestProgram):\n    \"\"\"\n    A variation of the unittest.TestProgram. Please refer to the base\n    class for command line parameters.\n    \"\"\"\n    def runTests(self):\n        # Pick HTMLTestRunner as the default test runner.\n        # base class's testRunner parameter is not useful because it means\n        # we have to instantiate HTMLTestRunner before we know self.verbosity.\n        if self.testRunner is None:\n            self.testRunner = HTMLTestRunner(verbosity=self.verbosity)\n        unittest.TestProgram.runTests(self)\n\nmain = TestProgram\n\n##############################################################################\n# Executing this module from the command line\n##############################################################################\n\nif __name__ == \"__main__\":\n    main(module=None)\n"
  },
  {
    "path": "seleniumkeyword/README.MD",
    "content": "# Seleniumkeyword介绍 #\n\nseleniumkword是客户端执行脚本，AutoMagic的执行效果展示主要靠它来体现，它的执行依附于web平台存储的用例和场景数据，seleniumkeyword可以不需要部署在服务器端，只要它能够连接到服务器端的数据库，在本地部署即可执行。（这样也方便我们做分布式执行测试用例）\n\n## 安装运行环境 ##\n\n在安装python、selenium、 mysqldb 的环境下运行\n\n## 目录脚本说明 ##\n\n**TestSuite.py  测试用例执行脚本引擎是 ，它可以通过参数实现不同的执行方式**\n\n>-t  [taskid]    指定执行的AutoMagic任务\n\n>-u  [userid]    指定执行脚本的用户\n\n>-r  [runid]     执行测试用例脚本要同步的TestRailRunid，它只有在执行 -t 参数时才会生效。\n\n>-c  [caseid]    指定要执行的单个用例的编号\n\n>-p  [projectid] 指定要执行的项目id，会依次执行项目中所有模块和用例状态是启用的所有用例\n\n>-b  [browser]   指定执行用例过程所使用浏览器，默认使用chrome浏览器,也可在执行case过程中通过openbrowser关键字重置\n\n>-v  [1] 指定是否启用录屏功能（仅支持Linux系统，需要安装recordmydesktop录屏软件）\n\n>-d  [1] 钉钉消息接口，启用后可以将测试结果发送的钉钉群中\n\nExp:\n\n``` python TestSuite.py -t 1 -u tsbc -r 1433 -b chrome -v 1```\n\n**CustomKeyword.py  是我们自定义关键字维护脚本。**\n\n>自定义关键字示例：\n```python\n@Action.add_action('InputText')\ndef action_InputText(action_object, step_desc, value, loc):\n\t\"\"\"\n\t文本框输入内容\n\t:param action_object:\n\t:param step_desc:\n\t:param value: text\n\t:param loc:\n\t:return:\n\t\"\"\"\n\tprint loc, value\n\taction_object.send_keys(loc, value)\n```\n\n**AddCase.py 同步用例到TestRail到脚本**\n\n>-t  [taskid]    指定执行同步的AutoMagic任务\n\n>-u  [userid]    指定执行脚本的用户\n\n>-s  [sctionid]     执行同步case到TestRail的那个用例集（section_id代表所在用例集）\n\n**HTMLTestRunner.py 生成报告的脚本文件**\n\n**RestApiUtil.py、RestApiUtil.py 是发包MW模拟安全事件和发送pcap发包接口**\n\n**testrail.py TestRail的接口API**\n\n**result目录： 为报告接口目录**\n>在生成的每日报告目录中会生成用例执行过程日志文件\n\n**data目录： 执行上传附件关键字，附件存放目录**\n\n**sendlog目录： 通过tcp、udp 514 发送Syslog 的应用**\n\n"
  },
  {
    "path": "seleniumkeyword/RestApiUtil.py",
    "content": "# -*-coding:utf-8-*-\n\"\"\"\n__author__ = 'Ray'\nmail:tsbc@vip.qq.com\n2016-09-03\n\"\"\"\nimport requests\nimport json\n\n\ndef call_post(url_post, para_dict):\n    data = json.dumps(para_dict)\n    req = requests.post(url_post, data=data)\n    if req.status_code != 200:\n        print(\"Failed: HTTP error code: %s\" % req.status_code)\n        return None\n    else:\n        return req.text\n\n\ndef call_get(url_get):\n    response = requests.get(url_get)\n    if response.status_code != 200:\n        print(\"Failed: HTTP error code: %s\" % response.status_code)\n        return None\n    else:\n        return response.text\n\n\nif \"__main__\" == __name__:\n    pass\n"
  },
  {
    "path": "seleniumkeyword/SimulatorUtil.py",
    "content": "# -*-coding:utf-8-*-\n\"\"\"\n__author__ = 'Ray'\nmail:tsbc@vip.qq.com\n2016-09-03\n\"\"\"\nfrom RestApiUtil import call_get, call_post\n\n\ndef sendFlowData(simulatorIP, testServerIP, type):\n    url_post = \"http://\"+simulatorIP+\"/api/v1/kafka/send/flowdata\"\n    para_dict = {\"mw_ip\": testServerIP}\n    if \"modbus\" == type:\n        para_dict[\"filename\"] = \"modbus.flowData2\"\n    elif \"all\" == type:\n        para_dict[\"filename\"] = \"all.flowData2\"\n\n    call_post(url_post, para_dict)\n\ndef sendTrafoFlowData(simulatorIP, trafoServerIp, type, timeoutSeconds=None):\n    url_post = \"http://\" + simulatorIP + \"/api/v1/trafo/run\"\n    para_dict = {}\n    para_dict = {\"trafo_ip\": trafoServerIp,\n                 \"trafo_usr\": \"test\",\n                 \"trafo_passwd\": \"admin@123\",\n                 \"debug_level\": \"1\"}\n    if timeoutSeconds is None:\n        para_dict[\"timer\"] = '120'\n    else:\n        para_dict[\"timer\"] = timeoutSeconds\n    confFileName = \"eth1-2_58_\" + type + \".json\"\n    para_dict[\"conf_file\"] = confFileName\n    call_post(url_post, para_dict)\n\ndef sendAuditFlowData(simulatorIP, testServerIP, type):\n    url_post = \"http://\"+simulatorIP+\"/api/v1/kafka/send/networkanalysis\"\n    para_dict = {}\n    para_dict[\"dest_ip\"] = testServerIP\n\n    fileNameDict = {\"telnet\": \"telnet.telnetAccountingData\",\n                    \"http\": \"http.httpAccountingData\",\n                    \"ftp\": \"ftp.ftpAccountingData\",\n                    \"smtp\": \"smtp.smtpAccountingData\",\n                    \"pop3\": \"pop3.pop3AccountingData\"}\n    para_dict[\"filename\"] = fileNameDict[type]\n    call_post(url_post, para_dict)\n\ndef sendEventAndIncident(simulatorIP, testServerIP, dpisn, type):\n    url_post = ''\n    para_dict = {\"dest_ip\": testServerIP,\n                 \"box_id\": dpisn}\n    if 'incident' == type:\n        url_post = \"http://\" + simulatorIP + \"/api/v1/kafka/send/incident\"\n        para_dict[\"filename\"] = \"whitelist.alert2\"\n    else:\n        url_post = \"http://\" + simulatorIP + \"/api/v1/kafka/send/boxevent\"\n        if \"event1\" == type:\n            ports = [True, True, False, False]\n        else:\n            ports = [True, True, True, True]\n        para_dict[\"ports\"] = ports\n\n    call_post(url_post, para_dict)\n\ndef generateDpiLog(simulatorIP, testServerIP, dpisn, type):\n    url_post = ''\n    para_dict = {\"dest_ip\": testServerIP,\n                 \"box_id\": dpisn}\n\n    if 'dpilogin' == type:\n        url_post = \"http://\"+simulatorIP+\"/api/v1/kafka/send/dpiuserlogin\"\n        para_dict[\"user_ip\"] = \"10.0.10.199\"\n        para_dict[\"reason\"] = \"DpiUserLogin Auto Test\"\n        para_dict[\"user\"] = \"Auto Tester\"\n        para_dict[\"result\"] = 1\n    elif 'dpicmdlog' == type:\n        url_post = \"http://\" + simulatorIP + \"/api/v1/kafka/send/dpicmdlog\";\n        para_dict[\"cmd\"] = \"DpiCmdLog Auto Test\"\n        para_dict[\"user_ip\"] = \"10.0.10.199\"\n        para_dict[\"user\"] =\"Auto Tester\"\n        para_dict[\"result\"] = 0\n    elif 'dpifwlog' == type:\n        url_post = \"http://\" + simulatorIP + \"/api/v1/kafka/send/dpifwlog\"\n        para_dict[\"reason\"] = \"DpiFwLog Auto Test\"\n\n    call_post(url_post, para_dict)\n\nif '__main__' == __name__:\n    #sendFlowData('127.0.0.1:4000', '192.168.1.135', 'all')\n\tfor i in xrange(1):\n\t\t#sendEventAndIncident('192.168.116.3:4000', '172.18.51.111', 'ZB0202C400000092', 'incident')\n\t\tsendTrafoFlowData('192.168.110.77:4000', '192.168.110.77', 'dnp3', timeoutSeconds=None)\n\t\t# sendFlowData('192.168.116.3:4000', '192.168.110.114', 'modbus')\n"
  },
  {
    "path": "seleniumkeyword/TestSuite.py",
    "content": "# -*- coding: utf-8 -*-\n\"\"\"\n__author__ = 'Ray'\nmail:tsbc@vip.qq.com\n2020-01-14\n\"\"\"\n\nimport argparse\nimport os\nimport time\nimport unittest\nimport json\nimport subprocess\n# import testrail\nimport MySQLdb\nimport datetime\nimport HTMLTestRunner\nimport popautomagic\nfrom Base import Action\nfrom CustomKeyword import *\nfrom settings import *\n\n\nclass TestSuite(unittest.TestCase):\n\tdef tearDown(self):\n\t\t'''\n\t\t每个测试用例执行后的收尾函数\n\t\t:return:\n\t\t'''\n\t\tController.case_id_list.append(self.case_id)\n\t\tController.flag_list.append([self.testrail_case_id, self.result_flag])\n\n\tdef action_test(self, step_list):\n\t\t'''\n\t\t生成详细的测试用例\n\t\t:param step_list:\n\t\t:return: None\n\t\t'''\n\t\tself.case_id, self.testrail_case_id, case_desc = step_list[0][0:3]\n\t\tresult = None\n\t\tprint(\"[%s]\" % case_desc)\n\t\ttext = u'[%d:' % self.case_id + case_desc + u']'\n\t\ttry:\n\t\t\tfor idx, step_info in enumerate(step_list):\n\t\t\t\tstepid = idx\n\t\t\t\tprint(u'step%d' % (stepid + 1),)\n\t\t\t\tif stepid >= 0:\n\t\t\t\t\ttextstr = text + u'step%d:' % (stepid + 1) + step_info[3:][1]\n\t\t\t\t\ttry:\n\t\t\t\t\t\tController.action.show_note(textstr)\n\t\t\t\t\texcept:\n\t\t\t\t\t\tpass\n\t\t\t\tresult = Controller.action_test(*step_info[3:])\n\t\t\t\tif result is not None:\n\t\t\t\t\tresult = u'step%d: %s' % (idx + 1, result)\n\t\t\t\t\tbreak\n\t\texcept Exception as e:\n\t\t\tself.result_flag = 2\n\t\t\ttext_result = u'【case_%d ERROR】 step%d: %s' % (self.case_id, idx + 1, e)\n\t\t\tprint(text_result)\n\t\t\tController.action.save_runing_log(text_result)\n\t\t\tif Controller.video is not None:\n\t\t\t\tsubprocess.Popen(\"pkill -2 recordmydesktop\", shell=True)\n\t\t\telse:\n\t\t\t\tController.action.saveScreenshot(str(self.case_id))\n\t\t\traise Exception(u'ERROR')\n\t\telse:\n\t\t\tif result is None:\n\t\t\t\tself.result_flag = 1\n\t\t\t\ttext_result =  u'【case_%d PASS】' % self.case_id\n\t\t\t\tprint(text_result)\n\t\t\t\tController.action.save_runing_log(text_result)\n\t\t\t\tif Controller.video is not None:\n\t\t\t\t\tsubprocess.Popen(\"pkill -2 recordmydesktop\", shell=True)\n\t\t\telse:\n\t\t\t\tself.result_flag = 5\n\t\t\t\ttext_result =  u'【case_%d FAIL】 %s' % (self.case_id, result)\n\t\t\t\tprint(text_result)\n\t\t\t\tController.action.save_runing_log(text_result)\n\t\t\t\tif Controller.video is not None:\n\t\t\t\t\tsubprocess.Popen(\"pkill -2 recordmydesktop\", shell=True)\n\t\t\t\telse:\n\t\t\t\t\tController.action.saveScreenshot(str(self.case_id))\n\t\t\t\tself.assertTrue(False, msg=u'FAIL')\n\n\t@staticmethod\n\tdef generateTest(step_list):\n\t\tdef func(self):\n\t\t\tif Controller.video is not None:\n\t\t\t\ttime.sleep(5)\n\t\t\t\timage = Controller.action.saveVideoName(step_list[0][0])\n\t\t\t\tvideo = subprocess.Popen(\"recordmydesktop --no-sound -o %s > video.log\" % image + \".ogv\", shell=True)\n\t\t\t\tself.action_test(step_list)\n\t\t\t\tsubprocess.Popen(\"kill -2 %s\" % str(video.pid + 1), shell=True)\n\t\t\telse:\n\t\t\t\tself.action_test(step_list)\n\n\t\treturn func\n\n\nclass Controller(object):\n\taction = None\n\tclient = None\n\tuser = ''\n\tpassword = ''\n\trun_id = None\n\tresult_list = []\n\tcase_id_list = []\n\tflag_list = []\n\texpand_paras_dict = None\n\tconn = None\n\tcur = None\n\targs = None\n\tstart = None\n\t# [all, pass, fail, error, result_path]\n\ttag_list = [0, 0, 0, 0, '']\n\ttask_type = None\n\ttask_name = None\n\tvideo = None\n\n\t@classmethod\n\tdef update_task_history(cls):\n\t\tif Controller.args.user_id is not None:\n\t\t\tuser_id = Controller.args.user_id\n\t\t\tController.my_execute(u'''SELECT id FROM auto_auth_user WHERE username = '%s' ''' % Controller.args.user_id)\n\t\t\ttask_info = Controller.cur.fetchall()\n\t\t\tif task_info:\n\t\t\t\tuser_id = task_info[0][0]\n\t\t\texectime = datetime.datetime.now() - Controller.start\n\t\t\tsql_str = u\"\"\"INSERT INTO testtask_taskhistory (tasktype, taskname, case_tag_all, case_tag_pass,\n\t\t\t\t\t\tcase_tag_fail, case_tag_error, starttime, exectime, taskid_id, userid_id, reporturl, build_name, build_number)\n\t\t\t\t\t\tVALUES (%s, '%s', %s, %s, %s, %s, '%s', '%s', %s, %s, '%s', '', '')\"\"\" % \\\n\t\t\t\t\t  (Controller.task_type, Controller.task_name, Controller.tag_list[0], Controller.tag_list[1],\n\t\t\t\t\t   Controller.tag_list[2], Controller.tag_list[3], Controller.start,exectime,\n\t\t\t\t\t   Controller.args.task_id, user_id, Controller.tag_list[4])\n\t\t\tController.my_execute(sql_str)\n\t\t\tController.conn.commit()\n\t\t# 通过钉钉接口，使用钉钉机器人把测试结果发送对应群中\n\t\tif Controller.args.popding is not None:\n\t\t\turl = \"https://oapi.dingtalk.com/robot/send?access_token=8d36288c964c024ca2e5e53a45faddde0adcb2c6c638e9a59a16096f5d866715\"\n\t\t\t#url = \"https://oapi.dingtalk.com/robot/send?access_token=e0c23e2f9242783f0ad34ccf21197a41f663c9b63ddc87fc386722654914c7ee\"\n\t\t\tcount_num, pass_num, fail_num, error_num = Controller.tag_list[0], Controller.tag_list[1], Controller.tag_list[\n\t\t\t\t2], Controller.tag_list[3]\n\t\t\treporturl = Controller.tag_list[4]\n\t\t\tdata_markdown = json.dumps({\n\t\t\t\t\"msgtype\": \"markdown\",\n\t\t\t\t\"markdown\": {\n\t\t\t\t\t\"title\": \"AutoMagic TestReprot\",\n\t\t\t\t\t\"text\": \"![screenshot](http://192.168.110.65/static/images/automagic.png) \\n\" +\n\t\t\t\t\t\t\t\">[AutoMagic TestReprot](http://jenkinsm.acorn-net.com/TestResults/CornerStone/\" + reporturl + \") \\n\\n \" +\n\t\t\t\t\t\t\t\">总共 \" + str(count_num) + \" Case，Pass \" + str(pass_num) + \"，Fail \" + str(fail_num) + \"，Error \" + str(error_num) + \"\\n\"+\n\t\t\t\t\t\t\t\"运行时间: \"+str(exectime)[:-7]\n\t\t\t\t}\n\t\t\t})\n\t\t\tpopautomagic.sendAutoMagic(url, data_markdown)\n\n\t@classmethod\n\tdef get_client(cls):\n\t\t'''\n\t\t获取testrail接口对象\n\t\t:return: 返回testrail接口对象\n\t\t'''\n\t\tif cls.client is None:\n\t\t\tcls.client = testrail.APIClient(TESTRAIL_URL)\n\t\t\tcls.client.user = cls.user\n\t\t\tcls.client.password = cls.password\n\n\t\treturn cls.client\n\n\t@classmethod\n\tdef init(cls):\n\t\tcls.args = get_args()\n\t\tcls.action = Action()\n\t\tcls.set_conn()\n\t\tcls.start = datetime.datetime.now()\n\t\tbrowser = Controller.args.browser\n\t\tController.video = Controller.args.video\n\t\tif browser is not None:\n\t\t\tController.action_test('openBrowser', '', browser, None, None)\n\t\telse:\n\t\t\tController.action_test('openBrowser', '', 'chrome', None, None)\n\n\t@classmethod\n\tdef set_conn(cls):\n\t\tcls.conn = MySQLdb.connect(host=DB_HOST, port=DB_PORT, user=DB_USER, passwd=DB_PASS, db=DB_NAME,\n\t\t\t\t\t\t\t\t   charset='utf8')\n\t\tprint(\"Mysql Connet Info\", \"host:\", DB_HOST, \"port:\", DB_PORT)\n\t\tcls.cur = cls.conn.cursor()\n\n\t@classmethod\n\tdef my_execute(cls, sql):\n\t\ttry:\n\t\t\tcls.conn.ping()\n\t\texcept:\n\t\t\tcls.set_conn()\n\n\t\tcls.cur.execute(sql)\n\n\t@classmethod\n\tdef action_test(cls, *args):\n\t\taction_keyword = cls.action.keyword2action.get(args[0], None)\n\t\tif action_keyword is not None:\n\t\t\t# action_object, step_desc, value, loc\n\t\t\tif cls.expand_paras_dict is None:\n\t\t\t\t# 以非任务方式执行cass\n\t\t\t\treturn action_keyword(cls.action, args[1], args[2], (args[3], args[4]))\n\t\t\telse:\n\t\t\t\t# 以任务方式执行cass，需要进行扩展参数的替换\n\t\t\t\treturn action_keyword(cls.action, args[1], cls.expand_paras(args[2]), (args[3], args[4]))\n\n\t\telse:\n\t\t\treturn u\"关键字处理函数未定义！\"\n\n\t@classmethod\n\tdef set_expand_paras_dict(cls, task_id):\n\t\tController.my_execute(u'''SELECT codename, codevalue FROM testtask_codelist WHERE taskid_id = %s''' % task_id)\n\t\texpand_paras = Controller.cur.fetchall()\n\t\tcls.expand_paras_dict = {}\n\t\tfor code_name, code_value in expand_paras:\n\t\t\tcls.expand_paras_dict[u'{%s}' % code_name] = code_value\n\n\t@classmethod\n\tdef expand_paras(cls, input_text):\n\t\tfor expand_para in cls.expand_paras_dict:\n\t\t\tinput_text = input_text.replace(expand_para, cls.expand_paras_dict[expand_para])\n\t\treturn input_text\n\n\t@classmethod\n\tdef update_result(cls):\n\t\t'''\n\t\t将测试用例结果更新到数据库\n\t\t:return: None\n\t\t'''\n\t\tcase_id_str = '(%s)' % ','.join(str(case_id) for case_id in Controller.case_id_list)\n\t\twhen_list = []\n\t\tfor idx in range(len(Controller.result_list)):\n\t\t\twhen_list.append('''WHEN %s THEN \"%s\"''' % (Controller.case_id_list[idx],\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t  Controller.result_list[idx].replace('\"', \"'\") + (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t  u'\\n运行时间：%s' % time.ctime(time.time()))))\n\t\tsql_str = '''UPDATE testcase_case SET debuginfo = CASE id %s END WHERE id IN %s''' % (\n\t\tu' '.join(when_list), case_id_str)\n\t\tController.my_execute(sql_str)\n\t\tController.conn.commit()\n\n\t@classmethod\n\tdef update_testrail(cls):\n\t\tprint(\"testrail update start...\")\n\t\ttry:\n\t\t\tclient = Controller.get_client()\n\t\t\tfor flag_info, result in zip(cls.flag_list, cls.result_list):\n\t\t\t\tif cls.run_id and cls.user and cls.password and flag_info[0]:\n\t\t\t\t\tpara_str = u'add_result_for_case/%s/%s' % (cls.run_id, flag_info[0])\n\t\t\t\t\ttry:\n\t\t\t\t\t\tclient.send_post(para_str, {'status_id': flag_info[1], 'comment': result})\n\t\t\t\t\texcept Exception as e:\n\t\t\t\t\t\tprint(e)\n\t\texcept Exception as e:\n\t\t\tprint(e)\n\t\tprint(\"testrail update end...\")\n\n\ndef get_args():\n\t'''\n\t解析命令行参数\n\t:return: 命令行参数命名空间\n\t'''\n\tparser = argparse.ArgumentParser()\n\tparser.add_argument('-r', action='store', dest='run_id', type=str, help='Run ID')\n\tparser.add_argument('-p', action='store', dest='project_id', type=str, help='Project ID')\n\tparser.add_argument('-c', action='store', dest='case_id', type=str, help='Case ID')\n\tparser.add_argument('-u', action='store', dest='user_id', type=str, help='User ID')\n\tparser.add_argument('-t', action='store', dest='task_id', type=str, help='Task ID')\n\tparser.add_argument('-b', action='store', dest='browser', type=str, help='Browser')\n\tparser.add_argument('-v', action='store', dest='video', type=str, help='Video True or False')\n\tparser.add_argument('-d', action='store', dest='popding', type=str, help='ding ding poping')\n\trst = parser.parse_args()\n\treturn rst\n\n\ndef gen_test_cass(suite):\n\t'''\n\t生成测试用例\n\t:param suite: 测试用例集对象\n\t:return:\n\t'''\n\n\tproject_id = Controller.args.project_id\n\ttask_id = Controller.args.task_id\n\n\tpid_info = u''\n\tcid_info = u''\n\n\tif project_id is not None:\n\t\tpid_info = u'AND tb4.projectid_id = %s' % project_id\n\t\tcase_id = None\n\telif task_id is not None:\n\t\t# 查询、初始化任务相关的扩展参数\n\t\tController.set_expand_paras_dict(task_id)\n\n\t\tController.run_id = Controller.args.run_id\n\t\tuser_id = Controller.args.user_id\n\t\tif user_id is not None:\n\t\t\tController.my_execute(\n\t\t\t\tu\"\"\"SELECT testrailuser, testrailpass FROM auto_auth_user WHERE username = '%s'\"\"\" % user_id)\n\t\t\tuser_info = Controller.cur.fetchall()\n\t\t\tif user_info:\n\t\t\t\tController.user, Controller.password = user_info[0]\n\n\t\tController.my_execute(u'''SELECT caselist FROM testtask_task WHERE id = %s''' % task_id)\n\t\tcaseid = Controller.cur.fetchall()\n\t\tif caseid:\n\t\t\tcase_id = caseid[0][0]\n\t\telse:\n\t\t\tcase_id = '0'\n\telse:\n\t\tcase_id = Controller.args.case_id\n\n\tif case_id is not None:\n\t\tcasedict = eval(case_id)\n\t\tif isinstance(casedict, int):\n\t\t\tpass\n\t\telse:\n\t\t\tcase_id = ''\n\t\t\t# caselist = {}\n\t\t\t# for i in casedict:\n\t\t\t# \tprint(i)\n\t\t\t# \tcaselist[int(i)] = casedict[i]\n\t\t\t# casedict = sorted(caselist.items())\n\t\t\t# print(list(casedict))\n\t\t\t# for i in casedict:\n\t\t\tcase_id = ','.join([str(s) for s in casedict])\n\n\t\t\tprint(case_id)\n\t\tcid_info = u'AND tb4.id IN (%s)' % case_id\n\n\tController.my_execute(u'''SELECT tb4.id, tb5.stepid, tb4.casedesc, tb6.keyword, tb5.descr, tb5.inputtext, tb7.locmode, tb7.location\n\t\t\t\t\t\t\tFROM management_product AS tb1\n\t\t\t\t\t\t\tRIGHT JOIN management_project tb2 ON tb2.productid_id = tb1.id\n\t\t\t\t\t\t\tRIGHT JOIN management_module tb3 ON tb3.projectid_id = tb2.id\n\t\t\t\t\t\t\tRIGHT JOIN testcase_case AS tb4 ON tb4.moduleid_id = tb3.id\n\t\t\t\t\t\t\tRIGHT JOIN testcase_step AS tb5 ON tb5.caseid_id = tb4.id\n\t\t\t\t\t\t\tLEFT JOIN keywords_keyword AS tb6 ON tb6.id = tb5.keywordid_id\n\t\t\t\t\t\t\tLEFT JOIN element_element AS tb7 ON tb7.id = tb5.elementid_id\n\t\t\t\t\t\t\tWHERE tb1.isenabled = 1 AND tb2.isenabled = 1 AND tb3.isenabled AND tb4.isenabled = 1\n\t\t\t\t\t\t\t%s %s\n\t\t\t\t\t\t\tORDER BY tb3.sortby DESC , tb4.id ASC, tb5.stepid ASC''' % (pid_info, cid_info))\n\tcase_list = Controller.cur.fetchall()\n\t# 输出Case步骤\n\tfor x in case_list:\n\t\tx = str(x).replace('u\\'','\\'')\n\t\tprint(x)\n\tcase_flag = None\n\tstep_flag = 0\n\ttest_attr = [int(idx.strip()) for idx in case_id.split(',')] if case_id not in ['', None, 'None'] else []\n\n\t# 解析所有case信息，并生成所有的测试用例函数\n\tfor idx, case in enumerate(case_list):\n\t\tif case_flag != case[0]:\n\t\t\tif step_flag != idx:\n\t\t\t\tsetattr(TestSuite, 'test_case%d' % case_flag, TestSuite.generateTest(case_list[step_flag:idx]))\n\t\t\t\tif case_flag in test_attr:\n\t\t\t\t\ttest_attr[test_attr.index(case_flag)] = 'test_case%d' % case_flag\n\t\t\t\telse:\n\t\t\t\t\ttest_attr.append('test_case%d' % case_flag)\n\t\t\t\tstep_flag = idx\n\t\t\tcase_flag = case[0]\n\tif case_flag:\n\t\tsetattr(TestSuite, 'test_case%d' % case[0], TestSuite.generateTest(case_list[step_flag:]))\n\t\tif case[0] in test_attr:\n\t\t\ttest_attr[test_attr.index(case[0])] = 'test_case%d' % case[0]\n\t\telse:\n\t\t\ttest_attr.append('test_case%d' % case[0])\n\n\tfor test_fun in test_attr:\n\t\tif type(test_fun) != int:\n\t\t\tsuite.addTest(TestSuite(test_fun))\n\n\ndef run_suite():\n\tsuite = unittest.TestSuite()\n\tgen_test_cass(suite)\n\n\t# 获取系统当前时间\n\tnow = time.strftime('%Y-%m-%d-%H_%M_%S', time.localtime(time.time()))\n\tday = time.strftime('%Y-%m-%d', time.localtime(time.time()))\n\n\tresult = os.path.join(os.path.split(os.path.realpath(__file__))[0], 'result', day)\n\n\t# 定义个报告存放路径，支持相对路径\n\tif not os.path.exists(result):\n\t\tos.mkdir(result)\n\n\tfilename = os.path.join(result, \"%s_result.html\" % now)\n\n\tController.tag_list[4] = os.path.join(day, \"%s_result.html\" % now)\n\n\tfp = open(filename, 'wb')\n\n\treport_title = u'自动化测试报告'\n\tif Controller.args.task_id is not None:\n\t\tController.my_execute(\n\t\t\tu'''SELECT taskname, tasktype FROM testtask_task WHERE id = %s''' % Controller.args.task_id)\n\t\ttask_info = Controller.cur.fetchall()\n\t\tif task_info:\n\t\t\treport_title = u'%s报告' % task_info[0][0]\n\t\t\tController.task_name = task_info[0][0]\n\t\t\tController.task_type = task_info[0][1]\n\n\t# 定义测试报告\n\trunner = HTMLTestRunner.HTMLTestRunner(stream=fp, verbosity=1, title=report_title, description=u'用例执行情况：',\n\t\t\t\t\t\t\t\t\t\t   result_list=Controller.result_list, tag_list=Controller.tag_list)\n\n\t# 运行测试用例\n\trunner.run(suite)\n\n\t# 关闭报告文件\n\tfp.close()\n\n\nif \"__main__\" == __name__:\n\t# 初始化控制类对象：实例化浏览器实例\n\tController.init()\n\ttry:\n\t\tif Controller.args.task_id is not None:\n\t\t\tController.my_execute('''UPDATE testtask_task SET status = 1 WHERE id = %s''' % Controller.args.task_id)\n\t\t\tController.conn.commit()\n\n\t\trun_suite()\n\n\t\tController.update_result()\n\t\t# Controller.update_testrail()\n\texcept KeyboardInterrupt:\n\t\trun_suite()\n\tfinally:\n\t\t# 释放控制类对象信息：关闭浏览器实例\n\t\tif Controller.args.task_id is not None:\n\t\t\tController.my_execute('''UPDATE testtask_task SET status = 2 WHERE id = %s''' % Controller.args.task_id)\n\t\t\tController.conn.commit()\n\n\t\tController.conn.close()\n\n\t\tController.conn = None\n\t\tController.cur = None\n\t\tController.action = None\n\t\tController.client = None\n\t\tController.run_id = None\n\t\tdel Controller.result_list[:]\n\t\tdel Controller.case_id_list[:]\n\t\tdel Controller.flag_list[:]\n\t\tif Controller.args.task_id is not None:\n\t\t\tController.update_task_history()\n"
  },
  {
    "path": "seleniumkeyword/__init__.py",
    "content": ""
  },
  {
    "path": "seleniumkeyword/data/readme.md",
    "content": "### 浏览器文件下载默认目录"
  },
  {
    "path": "seleniumkeyword/mwupgrade.py",
    "content": "# -*- coding:utf-8 -*-\nimport re\n\nimport paramiko\n\n__author__ = 'Ray'\nfrom selenium import webdriver\nimport unittest\nimport time\nimport sys, os\nreload(sys)\nsys.setdefaultencoding('utf-8')\n\nclass Demo(unittest.TestCase):\n\n\t#脚本初始化\n\tdef setUp(self):\n\t\toption = webdriver.ChromeOptions()\n\t\toption.add_argument('test-type')\n\t\tself.driver = webdriver.Chrome(chrome_options=option)\n\t\tself.driver.implicitly_wait(30)\n\t\tself.base_url = \"https://192.168.110.114/login\"\n\t\tself.username = 'root'\n\t\tself.password = 'root12345'\n\t\tself.verifycode = '@c0rnC0d$'\n\n\t#测试用例\n\tdef test_mwupgrade(self):\n\t\t\"\"\"\n\t\tmwupgrade script\n\t\t\"\"\"\n\t\tdriver = self.driver\n\t\tprint ur\"========【MW在线升级程序】=============\"\n\n\t\tprint ur\"获取升级文件\"\n\t\tmwupgrade = self.get_bin()\n\t\tif mwupgrade is not None:\n\t\t\tdriver.get(self.base_url + \"/\")\n\t\t\tdriver.maximize_window()\n\t\t\tprint ur\"进行登录\"\n\t\t\tdriver.find_element_by_id(\"login_text_username\").clear()\n\t\t\tdriver.find_element_by_id(\"login_text_username\").send_keys(self.username)\n\t\t\tdriver.find_element_by_id(\"login_text_password\").clear()\n\t\t\tdriver.find_element_by_id(\"login_text_password\").send_keys(self.password)\n\t\t\tdriver.find_element_by_id(\"login_text_verifycode\").clear()\n\t\t\tdriver.find_element_by_id(\"login_text_verifycode\").send_keys(self.verifycode)\n\t\t\tdriver.find_element_by_id(\"login_button_loginButton\").click()\n\t\t\t\n\t\t\ttime.sleep(2)\n\t\t\t#点击系统重置\n\t\t\tdriver.find_element_by_css_selector(\"#setting-systemconsole_li_systemReset a\").click()\n\t\t\ttime.sleep(1)\n\t\t\t#点击恢复出厂\n\t\t\tdriver.find_element_by_css_selector(\"#setting-systemconsole_button_resetModal\").click()\n\t\t\ttime.sleep(2)\n\t\t\t#点击确定\n\t\t\tdriver.find_element_by_css_selector(\".modal-content button:nth-child(2)\").click()\n\t\t\t#等待160秒\n\t\t\tprint \"重置中请稍等...\"\n\t\t\tfor j in xrange(15):\n\t\t\t\tfor i in xrange(20):\n\t\t\t\t\ttime.sleep(1)\n\t\t\t\t\tprint '.',\n\t\t\t\tprint \".\"\n\t\t\t#点击开始升级\n\t\t\t\n\t\t\tprint ur\"重置完成，重新登录进行升级\"\n\t\t\tdriver.get(self.base_url + \"/\")\n\t\t\tdriver.find_element_by_id(\"login_text_username\").clear()\n\t\t\tdriver.find_element_by_id(\"login_text_username\").send_keys(self.username)\n\t\t\tdriver.find_element_by_id(\"login_text_password\").clear()\n\t\t\tdriver.find_element_by_id(\"login_text_password\").send_keys(self.password)\n\t\t\tdriver.find_element_by_id(\"login_text_verifycode\").clear()\n\t\t\tdriver.find_element_by_id(\"login_text_verifycode\").send_keys(self.verifycode)\n\t\t\tdriver.find_element_by_id(\"login_button_loginButton\").click()\n\t\t\ttime.sleep(2)\n\t\t\t#点击系统设置\n\t\t\tdriver.find_element_by_css_selector(\"#header_li_setting a\").click()\n\t\t\tprint \"点击系统升级\"\n\t\t\t#点击系统升级\n\t\t\ttime.sleep(1)\n\t\t\tdriver.find_element_by_css_selector(\"#setting-systemconsole_li_systemUpgrade a\").click()\n\t\t\ttime.sleep(1)\n\t\t\t#上传升级文件\n\t\t\tprint ur\"上传升级文件\"\n\t\t\tdriver.find_element_by_css_selector(ur\"#setting-systemconsole_li_systemUpgrade_browse>input\").send_keys(mwupgrade)\n\t\t\t#等待180秒\n\t\t\tfor j in xrange(8):\n\t\t\t\tfor i in xrange(20):\n\t\t\t\t\ttime.sleep(1)\n\t\t\t\t\tprint '.',\n\t\t\t\tprint \".\"\n\t\t\t#点击开始升级\n\t\t\tprint u\"点击开始升级\"\n\t\t\tdriver.find_element_by_css_selector(\"#setting-systemconsole_li_systemUpgrade_start\").click()\n\t\t\ttime.sleep(3)\n\t\t\t#点击确认升级\n\t\t\tprint u\"点击确认升级\"\n\t\t\tdriver.find_element_by_xpath(\"//button[@ng-click='done()']\").click()\n\t\t\t#等待160秒\n\t\t\tprint ur\"开始升级,并重启服务\"\n\t\t\tfor j in xrange(15):\n\t\t\t\tfor i in xrange(20):\n\t\t\t\t\ttime.sleep(1)\n\t\t\t\t\tprint '.',\n\t\t\t\tprint \".\"\n\t\t\turl = driver.current_url\n\t\t\thostname = re.search('\\d+\\.\\d+\\.\\d+\\.\\d+', url).group(0)\n\t\t\tport = 22\n\t\t\tusername = 'acorn'\n\t\t\tpassword = 'Ag0@dbegiNNingmakesag0@dending.'\n\n\t\t\ttry:\n\t\t\t\tparamiko.util.log_to_file(\"paramiko.log\")\n\t\t\t\ts = paramiko.SSHClient()\n\t\t\t\ts.set_missing_host_key_policy(paramiko.AutoAddPolicy())\n\t\t\t\ts.connect(hostname=hostname, port=port, username=username, password=password)\n\n\t\t\t\ttt = s.invoke_shell()\n\t\t\t\ttt.send('sudo reboot')\n\t\t\t\ttt.send('\\n')\n\t\t\t\ttt.send(password)\n\t\t\t\ttt.send('\\n')\n\t\t\t\twhile not tt.recv_ready():\n\t\t\t\t\tprint \"working...\"\n\t\t\t\t\ttime.sleep(10)\n\t\t\t\tprint tt.recv(1024)\n\t\t\t\ts.close()\n\t\t\texcept:\n\t\t\t\tprint  u\"MW 连接失败\"\n\t\t\tprint ur\"重新登录,验证版本\"\n\t\t\tdriver.get(self.base_url + \"/\")\n\t\t\ttime.sleep(3)\n\t\t\tdriver.find_element_by_id(\"login_text_username\").clear()\n\t\t\tdriver.find_element_by_id(\"login_text_username\").send_keys(self.username)\n\t\t\tdriver.find_element_by_id(\"login_text_password\").clear()\n\t\t\tdriver.find_element_by_id(\"login_text_password\").send_keys(self.password)\n\t\t\tdriver.find_element_by_id(\"login_text_verifycode\").clear()\n\t\t\tdriver.find_element_by_id(\"login_text_verifycode\").send_keys(self.verifycode)\n\t\t\tdriver.find_element_by_id(\"login_button_loginButton\").click()\n\t\t\t#等待1秒\n\t\t\ttime.sleep(1)\n\t\t\tprint ur\"检查系统当前验证版本\"\n\t\t\t#点击系统设置\n\t\t\tdriver.find_element_by_css_selector(\"#header_li_setting a\").click()\n\t\t\t#点击系统升级\n\t\t\tdriver.find_element_by_css_selector(\"#setting-systemconsole_li_systemUpgrade a\").click()\n\t\t\ttime.sleep(1)\n\n\t\t\t#获取当前版本号\n\t\t\tmc_version_text = driver.find_element_by_xpath(u\"//div[contains(text(),'当前系统版本号')]\").text\n\t\t\t#进行版本校验\n\t\t\tprint mc_version_text\n\t\t\tprint ur\"升级包:\"+mwupgrade\n\t\t\tmwupgradetext = mc_version_text[mc_version_text.find('MC'):mc_version_text.find('-C0')]\n\t\t\tif mwupgradetext in mwupgrade:\n\t\t\t\tprint ur\"版本一致升级成功！ 进行版本测试。\"\n\t\t\t\tself.driver.quit()\n\t\t\t\tos.system(\"python TestSuite.py -t 1 -u tsbc -r 1433\")\n\t\t\telse:\n\t\t\t\tprint ur\"版本不一致升级失败！\"\n\t\t\t\tself.driver.quit()\n\t\telse:\n\t\t\tprint ur\"升级文件不存在，升级失败\"\n\t\t\tself.driver.quit()\n\n\t#脚本退出\n\tdef tearDown(self):\n\t\tpass\n\n\tdef get_bin(self):\n\t\tcurrent_path = os.path.split(os.path.realpath(__file__))[0]\n\t\tfor item in os.listdir(current_path):\n\t\t\tif os.path.splitext(item)[1].upper() == '.BIN':\n\t\t\t\treturn os.path.realpath(item)\n\t\treturn None\n\nif __name__ == \"__main__\":\n\tunittest.main()\n"
  },
  {
    "path": "seleniumkeyword/popautomagic.py",
    "content": "# -*- coding: utf-8 -*-\n\"\"\"\n__author__ = 'Ray'\nmail:tsbc@vip.qq.com\n2017-03-01\n\"\"\"\n\nimport requests, json\n\n\ndef sendAutoMagic(url, data):\n\n\theaders = {\"Content-Type\": \"application/json\"}\n\trequests.post(url, data=data, headers=headers)\n\n\n# call_post(url_post, data_text)\n\n\nif '__main__' == __name__:\n\t#MWQA\n\turl_post = \"https://oapi.dingtalk.com/robot/send?access_token=8d36288c964c024ca2e5e53a45faddde0adcb2c6c638e9a59a16096f5d866715\"\n\t#Test\n\t#url_post = \"https://oapi.dingtalk.com/robot/send?access_token=e0c23e2f9242783f0ad34ccf21197a41f663c9b63ddc87fc386722654914c7ee\"\n\n\tdata_text = json.dumps({\n\t\t\"msgtype\": \"text\",\n\t\t\"text\": {\n\t\t\t\"content\": \"圈人\"\n\t\t},\n\t\t\"at\": {\n\t\t\t\"atMobiles\": [\n\t\t\t\t\"18217516787\",#wenjuang.wang\n\t\t\t\t\"15891390680\" #yongbo.he\n\t\t\t],\n\t\t\t\"isAtAll\": False\n\t\t}\n\t})\n\n\tdata_link = json.dumps({\"msgtype\": \"link\",\n\t                        \"link\": {\n\t\t                        \"text\": \"这个即将发布的新版本，创始人陈航（花名“无招”）称它为“红树林”。而在此之前，每当面临重大升级，产品经理们都会取一个应景的代号，这一次，为什么是“红树林”？\",\n\t\t                        \"title\": \"时代的火车向前开\", \"picUrl\": \"\",\n\t\t                        \"messageUrl\": \"https://mp.weixin.qq.com/s?__biz=MzA4NjMwMTA2Ng==&mid=2650316842&idx=1&sn=60da3ea2b29f1dcc43a7c8e4a7c97a16&scene=2&srcid=09189AnRJEdIiWVaKltFzNTw&from=timeline&isappinstalled=0&key=&ascene=2&uin=&devicetype=android-23&version=26031933&nettype=WIFI\"}\n\t                        })\n\n\tcount_num, pass_num, fail_num, error_num = 631, 328, 101, 202\n\tdata_markdown = json.dumps({\n\t\t\"msgtype\": \"markdown\",\n\t\t\"markdown\": {\n\t\t\t\"title\": \"AutoMagic TestReprot\",\n\t\t\t\"text\": \"![screenshot](http://192.168.110.65/static/images/automagic.png) \\n\" +\n\t\t\t        \">[AutoMagic TestReprot](http://jenkinsm.acorn-net.com/TestResults/CornerStone/2017-02-19/2017-02-19-00_55_46_result.html) \\n\\n \" +\n\t\t\t        \">执行CASE\" + str(count_num) + \"个，Pass\" + str(pass_num) + \"个，Fail\" + str(fail_num) + \"个，Error\" + str(\n\t\t\t\terror_num) + \"个\\n\"\n\t\t\t}\n\t})\n\tdata_md = json.dumps({\n\t\t\"msgtype\": \"markdown\",\n\t\t\"markdown\": {\n\t\t\t\"title\": \"Script Update\",\n\t\t\t\"text\": \"![screenshot](http://192.168.110.65/static/images/automagic.png) \\n\" +\n\t\t\t        \">[192.168.115.1](\\\\192.168.115.1) \\n\\n \" +\n\t\t\t        \">sendingdata.py 脚本更新\\n\" +\n\t\t\t        \">1.添加 -t 参数调整线程数量，默认为1\\n\"\n\t\t\t        \">2.添加 -s 参数调整发包速度（单位是秒）可以是小数\\n\"\n\t\t}\n\t})\n\tdata_test = '''{\"msgtype\": \"text\", \"text\": {\"content\": \"我就是我,颜色不一样的烟火!!!\"}}'''\n\tsendAutoMagic(url_post, data_md)\n"
  },
  {
    "path": "seleniumkeyword/result/highcharts.js",
    "content": "/*\n Highcharts JS v5.0.6 (2016-12-07)\n\n (c) 2009-2016 Torstein Honsi\n\n License: www.highcharts.com/license\n*/\n(function(L,a){\"object\"===typeof module&&module.exports?module.exports=L.document?a(L):a:L.Highcharts=a(L)})(\"undefined\"!==typeof window?window:this,function(L){L=function(){var a=window,D=a.document,C=a.navigator&&a.navigator.userAgent||\"\",G=D&&D.createElementNS&&!!D.createElementNS(\"http://www.w3.org/2000/svg\",\"svg\").createSVGRect,I=/(edge|msie|trident)/i.test(C)&&!window.opera,h=!G,f=/Firefox/.test(C),p=f&&4>parseInt(C.split(\"Firefox/\")[1],10);return a.Highcharts?a.Highcharts.error(16,!0):{product:\"Highcharts\",\nversion:\"5.0.6\",deg2rad:2*Math.PI/360,doc:D,hasBidiBug:p,hasTouch:D&&void 0!==D.documentElement.ontouchstart,isMS:I,isWebKit:/AppleWebKit/.test(C),isFirefox:f,isTouchDevice:/(Mobile|Android|Windows Phone)/.test(C),SVG_NS:\"http://www.w3.org/2000/svg\",chartCount:0,seriesTypes:{},symbolSizes:{},svg:G,vml:h,win:a,charts:[],marginNames:[\"plotTop\",\"marginRight\",\"marginBottom\",\"plotLeft\"],noop:function(){}}}();(function(a){var D=[],C=a.charts,G=a.doc,I=a.win;a.error=function(h,f){h=a.isNumber(h)?\"Highcharts error #\"+\nh+\": www.highcharts.com/errors/\"+h:h;if(f)throw Error(h);I.console&&console.log(h)};a.Fx=function(a,f,p){this.options=f;this.elem=a;this.prop=p};a.Fx.prototype={dSetter:function(){var a=this.paths[0],f=this.paths[1],p=[],v=this.now,l=a.length,u;if(1===v)p=this.toD;else if(l===f.length&&1>v)for(;l--;)u=parseFloat(a[l]),p[l]=isNaN(u)?a[l]:v*parseFloat(f[l]-u)+u;else p=f;this.elem.attr(\"d\",p,null,!0)},update:function(){var a=this.elem,f=this.prop,p=this.now,v=this.options.step;if(this[f+\"Setter\"])this[f+\n\"Setter\"]();else a.attr?a.element&&a.attr(f,p,null,!0):a.style[f]=p+this.unit;v&&v.call(a,p,this)},run:function(a,f,p){var h=this,l=function(a){return l.stopped?!1:h.step(a)},u;this.startTime=+new Date;this.start=a;this.end=f;this.unit=p;this.now=this.start;this.pos=0;l.elem=this.elem;l.prop=this.prop;l()&&1===D.push(l)&&(l.timerId=setInterval(function(){for(u=0;u<D.length;u++)D[u]()||D.splice(u--,1);D.length||clearInterval(l.timerId)},13))},step:function(a){var f=+new Date,h,v=this.options;h=this.elem;\nvar l=v.complete,u=v.duration,d=v.curAnim,c;if(h.attr&&!h.element)h=!1;else if(a||f>=u+this.startTime){this.now=this.end;this.pos=1;this.update();a=d[this.prop]=!0;for(c in d)!0!==d[c]&&(a=!1);a&&l&&l.call(h);h=!1}else this.pos=v.easing((f-this.startTime)/u),this.now=this.start+(this.end-this.start)*this.pos,this.update(),h=!0;return h},initPath:function(h,f,p){function v(a){var e,b;for(q=a.length;q--;)e=\"M\"===a[q]||\"L\"===a[q],b=/[a-zA-Z]/.test(a[q+3]),e&&b&&a.splice(q+1,0,a[q+1],a[q+2],a[q+1],a[q+\n2])}function l(a,e){for(;a.length<m;){a[0]=e[m-a.length];var b=a.slice(0,t);[].splice.apply(a,[0,0].concat(b));z&&(b=a.slice(a.length-t),[].splice.apply(a,[a.length,0].concat(b)),q--)}a[0]=\"M\"}function u(a,e){for(var c=(m-a.length)/t;0<c&&c--;)b=a.slice().splice(a.length/F-t,t*F),b[0]=e[m-t-c*t],y&&(b[t-6]=b[t-2],b[t-5]=b[t-1]),[].splice.apply(a,[a.length/F,0].concat(b)),z&&c--}f=f||\"\";var d,c=h.startX,n=h.endX,y=-1<f.indexOf(\"C\"),t=y?7:3,m,b,q;f=f.split(\" \");p=p.slice();var z=h.isArea,F=z?2:1,e;\ny&&(v(f),v(p));if(c&&n){for(q=0;q<c.length;q++)if(c[q]===n[0]){d=q;break}else if(c[0]===n[n.length-c.length+q]){d=q;e=!0;break}void 0===d&&(f=[])}f.length&&a.isNumber(d)&&(m=p.length+d*F*t,e?(l(f,p),u(p,f)):(l(p,f),u(f,p)));return[f,p]}};a.extend=function(a,f){var h;a||(a={});for(h in f)a[h]=f[h];return a};a.merge=function(){var h,f=arguments,p,v={},l=function(h,d){var c,n;\"object\"!==typeof h&&(h={});for(n in d)d.hasOwnProperty(n)&&(c=d[n],a.isObject(c,!0)&&\"renderTo\"!==n&&\"number\"!==typeof c.nodeType?\nh[n]=l(h[n]||{},c):h[n]=d[n]);return h};!0===f[0]&&(v=f[1],f=Array.prototype.slice.call(f,2));p=f.length;for(h=0;h<p;h++)v=l(v,f[h]);return v};a.pInt=function(a,f){return parseInt(a,f||10)};a.isString=function(a){return\"string\"===typeof a};a.isArray=function(a){a=Object.prototype.toString.call(a);return\"[object Array]\"===a||\"[object Array Iterator]\"===a};a.isObject=function(h,f){return h&&\"object\"===typeof h&&(!f||!a.isArray(h))};a.isNumber=function(a){return\"number\"===typeof a&&!isNaN(a)};a.erase=\nfunction(a,f){for(var h=a.length;h--;)if(a[h]===f){a.splice(h,1);break}};a.defined=function(a){return void 0!==a&&null!==a};a.attr=function(h,f,p){var v,l;if(a.isString(f))a.defined(p)?h.setAttribute(f,p):h&&h.getAttribute&&(l=h.getAttribute(f));else if(a.defined(f)&&a.isObject(f))for(v in f)h.setAttribute(v,f[v]);return l};a.splat=function(h){return a.isArray(h)?h:[h]};a.syncTimeout=function(a,f,p){if(f)return setTimeout(a,f,p);a.call(0,p)};a.pick=function(){var a=arguments,f,p,v=a.length;for(f=\n0;f<v;f++)if(p=a[f],void 0!==p&&null!==p)return p};a.css=function(h,f){a.isMS&&!a.svg&&f&&void 0!==f.opacity&&(f.filter=\"alpha(opacity\\x3d\"+100*f.opacity+\")\");a.extend(h.style,f)};a.createElement=function(h,f,p,v,l){h=G.createElement(h);var u=a.css;f&&a.extend(h,f);l&&u(h,{padding:0,border:\"none\",margin:0});p&&u(h,p);v&&v.appendChild(h);return h};a.extendClass=function(h,f){var p=function(){};p.prototype=new h;a.extend(p.prototype,f);return p};a.pad=function(a,f,p){return Array((f||2)+1-String(a).length).join(p||\n0)+a};a.relativeLength=function(a,f){return/%$/.test(a)?f*parseFloat(a)/100:parseFloat(a)};a.wrap=function(a,f,p){var h=a[f];a[f]=function(){var a=Array.prototype.slice.call(arguments),f=arguments,d=this;d.proceed=function(){h.apply(d,arguments.length?arguments:f)};a.unshift(h);a=p.apply(this,a);d.proceed=null;return a}};a.getTZOffset=function(h){var f=a.Date;return 6E4*(f.hcGetTimezoneOffset&&f.hcGetTimezoneOffset(h)||f.hcTimezoneOffset||0)};a.dateFormat=function(h,f,p){if(!a.defined(f)||isNaN(f))return a.defaultOptions.lang.invalidDate||\n\"\";h=a.pick(h,\"%Y-%m-%d %H:%M:%S\");var v=a.Date,l=new v(f-a.getTZOffset(f)),u,d=l[v.hcGetHours](),c=l[v.hcGetDay](),n=l[v.hcGetDate](),y=l[v.hcGetMonth](),t=l[v.hcGetFullYear](),m=a.defaultOptions.lang,b=m.weekdays,q=m.shortWeekdays,z=a.pad,v=a.extend({a:q?q[c]:b[c].substr(0,3),A:b[c],d:z(n),e:z(n,2,\" \"),w:c,b:m.shortMonths[y],B:m.months[y],m:z(y+1),y:t.toString().substr(2,2),Y:t,H:z(d),k:d,I:z(d%12||12),l:d%12||12,M:z(l[v.hcGetMinutes]()),p:12>d?\"AM\":\"PM\",P:12>d?\"am\":\"pm\",S:z(l.getSeconds()),L:z(Math.round(f%\n1E3),3)},a.dateFormats);for(u in v)for(;-1!==h.indexOf(\"%\"+u);)h=h.replace(\"%\"+u,\"function\"===typeof v[u]?v[u](f):v[u]);return p?h.substr(0,1).toUpperCase()+h.substr(1):h};a.formatSingle=function(h,f){var p=/\\.([0-9])/,v=a.defaultOptions.lang;/f$/.test(h)?(p=(p=h.match(p))?p[1]:-1,null!==f&&(f=a.numberFormat(f,p,v.decimalPoint,-1<h.indexOf(\",\")?v.thousandsSep:\"\"))):f=a.dateFormat(h,f);return f};a.format=function(h,f){for(var p=\"{\",v=!1,l,u,d,c,n=[],y;h;){p=h.indexOf(p);if(-1===p)break;l=h.slice(0,\np);if(v){l=l.split(\":\");u=l.shift().split(\".\");c=u.length;y=f;for(d=0;d<c;d++)y=y[u[d]];l.length&&(y=a.formatSingle(l.join(\":\"),y));n.push(y)}else n.push(l);h=h.slice(p+1);p=(v=!v)?\"}\":\"{\"}n.push(h);return n.join(\"\")};a.getMagnitude=function(a){return Math.pow(10,Math.floor(Math.log(a)/Math.LN10))};a.normalizeTickInterval=function(h,f,p,v,l){var u,d=h;p=a.pick(p,1);u=h/p;f||(f=l?[1,1.2,1.5,2,2.5,3,4,5,6,8,10]:[1,2,2.5,5,10],!1===v&&(1===p?f=a.grep(f,function(a){return 0===a%1}):.1>=p&&(f=[1/p])));\nfor(v=0;v<f.length&&!(d=f[v],l&&d*p>=h||!l&&u<=(f[v]+(f[v+1]||f[v]))/2);v++);return d*p};a.stableSort=function(a,f){var p=a.length,h,l;for(l=0;l<p;l++)a[l].safeI=l;a.sort(function(a,d){h=f(a,d);return 0===h?a.safeI-d.safeI:h});for(l=0;l<p;l++)delete a[l].safeI};a.arrayMin=function(a){for(var f=a.length,p=a[0];f--;)a[f]<p&&(p=a[f]);return p};a.arrayMax=function(a){for(var f=a.length,p=a[0];f--;)a[f]>p&&(p=a[f]);return p};a.destroyObjectProperties=function(a,f){for(var p in a)a[p]&&a[p]!==f&&a[p].destroy&&\na[p].destroy(),delete a[p]};a.discardElement=function(h){var f=a.garbageBin;f||(f=a.createElement(\"div\"));h&&f.appendChild(h);f.innerHTML=\"\"};a.correctFloat=function(a,f){return parseFloat(a.toPrecision(f||14))};a.setAnimation=function(h,f){f.renderer.globalAnimation=a.pick(h,f.options.chart.animation,!0)};a.animObject=function(h){return a.isObject(h)?a.merge(h):{duration:h?500:0}};a.timeUnits={millisecond:1,second:1E3,minute:6E4,hour:36E5,day:864E5,week:6048E5,month:24192E5,year:314496E5};a.numberFormat=\nfunction(h,f,p,v){h=+h||0;f=+f;var l=a.defaultOptions.lang,u=(h.toString().split(\".\")[1]||\"\").length,d,c,n=Math.abs(h);-1===f?f=Math.min(u,20):a.isNumber(f)||(f=2);d=String(a.pInt(n.toFixed(f)));c=3<d.length?d.length%3:0;p=a.pick(p,l.decimalPoint);v=a.pick(v,l.thousandsSep);h=(0>h?\"-\":\"\")+(c?d.substr(0,c)+v:\"\");h+=d.substr(c).replace(/(\\d{3})(?=\\d)/g,\"$1\"+v);f&&(v=Math.abs(n-d+Math.pow(10,-Math.max(f,u)-1)),h+=p+v.toFixed(f).slice(2));return h};Math.easeInOutSine=function(a){return-.5*(Math.cos(Math.PI*\na)-1)};a.getStyle=function(h,f){return\"width\"===f?Math.min(h.offsetWidth,h.scrollWidth)-a.getStyle(h,\"padding-left\")-a.getStyle(h,\"padding-right\"):\"height\"===f?Math.min(h.offsetHeight,h.scrollHeight)-a.getStyle(h,\"padding-top\")-a.getStyle(h,\"padding-bottom\"):(h=I.getComputedStyle(h,void 0))&&a.pInt(h.getPropertyValue(f))};a.inArray=function(a,f){return f.indexOf?f.indexOf(a):[].indexOf.call(f,a)};a.grep=function(a,f){return[].filter.call(a,f)};a.find=function(a,f){return[].find.call(a,f)};a.map=function(a,\nf){for(var p=[],h=0,l=a.length;h<l;h++)p[h]=f.call(a[h],a[h],h,a);return p};a.offset=function(a){var f=G.documentElement;a=a.getBoundingClientRect();return{top:a.top+(I.pageYOffset||f.scrollTop)-(f.clientTop||0),left:a.left+(I.pageXOffset||f.scrollLeft)-(f.clientLeft||0)}};a.stop=function(a,f){for(var p=D.length;p--;)D[p].elem!==a||f&&f!==D[p].prop||(D[p].stopped=!0)};a.each=function(a,f,p){return Array.prototype.forEach.call(a,f,p)};a.addEvent=function(h,f,p){function v(a){a.target=a.srcElement||\nI;p.call(h,a)}var l=h.hcEvents=h.hcEvents||{};h.addEventListener?h.addEventListener(f,p,!1):h.attachEvent&&(h.hcEventsIE||(h.hcEventsIE={}),h.hcEventsIE[p.toString()]=v,h.attachEvent(\"on\"+f,v));l[f]||(l[f]=[]);l[f].push(p);return function(){a.removeEvent(h,f,p)}};a.removeEvent=function(h,f,p){function v(a,c){h.removeEventListener?h.removeEventListener(a,c,!1):h.attachEvent&&(c=h.hcEventsIE[c.toString()],h.detachEvent(\"on\"+a,c))}function l(){var a,c;if(h.nodeName)for(c in f?(a={},a[f]=!0):a=d,a)if(d[c])for(a=\nd[c].length;a--;)v(c,d[c][a])}var u,d=h.hcEvents,c;d&&(f?(u=d[f]||[],p?(c=a.inArray(p,u),-1<c&&(u.splice(c,1),d[f]=u),v(f,p)):(l(),d[f]=[])):(l(),h.hcEvents={}))};a.fireEvent=function(h,f,p,v){var l;l=h.hcEvents;var u,d;p=p||{};if(G.createEvent&&(h.dispatchEvent||h.fireEvent))l=G.createEvent(\"Events\"),l.initEvent(f,!0,!0),a.extend(l,p),h.dispatchEvent?h.dispatchEvent(l):h.fireEvent(f,l);else if(l)for(l=l[f]||[],u=l.length,p.target||a.extend(p,{preventDefault:function(){p.defaultPrevented=!0},target:h,\ntype:f}),f=0;f<u;f++)(d=l[f])&&!1===d.call(h,p)&&p.preventDefault();v&&!p.defaultPrevented&&v(p)};a.animate=function(h,f,p){var v,l=\"\",u,d,c;a.isObject(p)||(v=arguments,p={duration:v[2],easing:v[3],complete:v[4]});a.isNumber(p.duration)||(p.duration=400);p.easing=\"function\"===typeof p.easing?p.easing:Math[p.easing]||Math.easeInOutSine;p.curAnim=a.merge(f);for(c in f)a.stop(h,c),d=new a.Fx(h,p,c),u=null,\"d\"===c?(d.paths=d.initPath(h,h.d,f.d),d.toD=f.d,v=0,u=1):h.attr?v=h.attr(c):(v=parseFloat(a.getStyle(h,\nc))||0,\"opacity\"!==c&&(l=\"px\")),u||(u=f[c]),u.match&&u.match(\"px\")&&(u=u.replace(/px/g,\"\")),d.run(v,u,l)};a.seriesType=function(h,f,p,v,l){var u=a.getOptions(),d=a.seriesTypes;u.plotOptions[h]=a.merge(u.plotOptions[f],p);d[h]=a.extendClass(d[f]||function(){},v);d[h].prototype.type=h;l&&(d[h].prototype.pointClass=a.extendClass(a.Point,l));return d[h]};a.uniqueKey=function(){var a=Math.random().toString(36).substring(2,9),f=0;return function(){return\"highcharts-\"+a+\"-\"+f++}}();I.jQuery&&(I.jQuery.fn.highcharts=\nfunction(){var h=[].slice.call(arguments);if(this[0])return h[0]?(new (a[a.isString(h[0])?h.shift():\"Chart\"])(this[0],h[0],h[1]),this):C[a.attr(this[0],\"data-highcharts-chart\")]});G&&!G.defaultView&&(a.getStyle=function(h,f){var p={width:\"clientWidth\",height:\"clientHeight\"}[f];if(h.style[f])return a.pInt(h.style[f]);\"opacity\"===f&&(f=\"filter\");if(p)return h.style.zoom=1,Math.max(h[p]-2*a.getStyle(h,\"padding\"),0);h=h.currentStyle[f.replace(/\\-(\\w)/g,function(a,l){return l.toUpperCase()})];\"filter\"===\nf&&(h=h.replace(/alpha\\(opacity=([0-9]+)\\)/,function(a,l){return l/100}));return\"\"===h?1:a.pInt(h)});Array.prototype.forEach||(a.each=function(a,f,p){for(var h=0,l=a.length;h<l;h++)if(!1===f.call(p,a[h],h,a))return h});Array.prototype.indexOf||(a.inArray=function(a,f){var p,h=0;if(f)for(p=f.length;h<p;h++)if(f[h]===a)return h;return-1});Array.prototype.filter||(a.grep=function(a,f){for(var p=[],h=0,l=a.length;h<l;h++)f(a[h],h)&&p.push(a[h]);return p});Array.prototype.find||(a.find=function(a,f){var p,\nh=a.length;for(p=0;p<h;p++)if(f(a[p],p))return a[p]})})(L);(function(a){var D=a.each,C=a.isNumber,G=a.map,I=a.merge,h=a.pInt;a.Color=function(f){if(!(this instanceof a.Color))return new a.Color(f);this.init(f)};a.Color.prototype={parsers:[{regex:/rgba\\(\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]?(?:\\.[0-9]+)?)\\s*\\)/,parse:function(a){return[h(a[1]),h(a[2]),h(a[3]),parseFloat(a[4],10)]}},{regex:/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/,parse:function(a){return[h(a[1],\n16),h(a[2],16),h(a[3],16),1]}},{regex:/rgb\\(\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*\\)/,parse:function(a){return[h(a[1]),h(a[2]),h(a[3]),1]}}],names:{white:\"#ffffff\",black:\"#000000\"},init:function(f){var p,h,l,u;if((this.input=f=this.names[f]||f)&&f.stops)this.stops=G(f.stops,function(d){return new a.Color(d[1])});else for(l=this.parsers.length;l--&&!h;)u=this.parsers[l],(p=u.regex.exec(f))&&(h=u.parse(p));this.rgba=h||[]},get:function(a){var f=this.input,h=this.rgba,l;this.stops?\n(l=I(f),l.stops=[].concat(l.stops),D(this.stops,function(f,d){l.stops[d]=[l.stops[d][0],f.get(a)]})):l=h&&C(h[0])?\"rgb\"===a||!a&&1===h[3]?\"rgb(\"+h[0]+\",\"+h[1]+\",\"+h[2]+\")\":\"a\"===a?h[3]:\"rgba(\"+h.join(\",\")+\")\":f;return l},brighten:function(a){var f,v=this.rgba;if(this.stops)D(this.stops,function(l){l.brighten(a)});else if(C(a)&&0!==a)for(f=0;3>f;f++)v[f]+=h(255*a),0>v[f]&&(v[f]=0),255<v[f]&&(v[f]=255);return this},setOpacity:function(a){this.rgba[3]=a;return this}};a.color=function(f){return new a.Color(f)}})(L);\n(function(a){var D,C,G=a.addEvent,I=a.animate,h=a.attr,f=a.charts,p=a.color,v=a.css,l=a.createElement,u=a.defined,d=a.deg2rad,c=a.destroyObjectProperties,n=a.doc,y=a.each,t=a.extend,m=a.erase,b=a.grep,q=a.hasTouch,z=a.isArray,F=a.isFirefox,e=a.isMS,r=a.isObject,x=a.isString,A=a.isWebKit,k=a.merge,w=a.noop,K=a.pick,J=a.pInt,N=a.removeEvent,g=a.stop,B=a.svg,S=a.SVG_NS,M=a.symbolSizes,R=a.win;D=a.SVGElement=function(){return this};D.prototype={opacity:1,SVG_NS:S,textProps:\"direction fontSize fontWeight fontFamily fontStyle color lineHeight width textDecoration textOverflow textOutline\".split(\" \"),\ninit:function(a,H){this.element=\"span\"===H?l(H):n.createElementNS(this.SVG_NS,H);this.renderer=a},animate:function(E,H,g){H=a.animObject(K(H,this.renderer.globalAnimation,!0));0!==H.duration?(g&&(H.complete=g),I(this,E,H)):this.attr(E,null,g);return this},colorGradient:function(E,H,g){var e=this.renderer,c,b,B,r,m,w,q,d,x,n,P,t=[],A;E.linearGradient?b=\"linearGradient\":E.radialGradient&&(b=\"radialGradient\");if(b){B=E[b];m=e.gradients;q=E.stops;n=g.radialReference;z(B)&&(E[b]=B={x1:B[0],y1:B[1],x2:B[2],\ny2:B[3],gradientUnits:\"userSpaceOnUse\"});\"radialGradient\"===b&&n&&!u(B.gradientUnits)&&(r=B,B=k(B,e.getRadialAttr(n,r),{gradientUnits:\"userSpaceOnUse\"}));for(P in B)\"id\"!==P&&t.push(P,B[P]);for(P in q)t.push(q[P]);t=t.join(\",\");m[t]?n=m[t].attr(\"id\"):(B.id=n=a.uniqueKey(),m[t]=w=e.createElement(b).attr(B).add(e.defs),w.radAttr=r,w.stops=[],y(q,function(E){0===E[1].indexOf(\"rgba\")?(c=a.color(E[1]),d=c.get(\"rgb\"),x=c.get(\"a\")):(d=E[1],x=1);E=e.createElement(\"stop\").attr({offset:E[0],\"stop-color\":d,\n\"stop-opacity\":x}).add(w);w.stops.push(E)}));A=\"url(\"+e.url+\"#\"+n+\")\";g.setAttribute(H,A);g.gradient=t;E.toString=function(){return A}}},applyTextOutline:function(a){var E=this.element,g,e,k,b;-1!==a.indexOf(\"contrast\")&&(a=a.replace(/contrast/g,this.renderer.getContrast(E.style.fill)));this.fakeTS=!0;this.ySetter=this.xSetter;g=[].slice.call(E.getElementsByTagName(\"tspan\"));a=a.split(\" \");e=a[a.length-1];(k=a[0])&&\"none\"!==k&&(k=k.replace(/(^[\\d\\.]+)(.*?)$/g,function(a,E,H){return 2*E+H}),y(g,function(a){\"highcharts-text-outline\"===\na.getAttribute(\"class\")&&m(g,E.removeChild(a))}),b=E.firstChild,y(g,function(a,H){0===H&&(a.setAttribute(\"x\",E.getAttribute(\"x\")),H=E.getAttribute(\"y\"),a.setAttribute(\"y\",H||0),null===H&&E.setAttribute(\"y\",0));a=a.cloneNode(1);h(a,{\"class\":\"highcharts-text-outline\",fill:e,stroke:e,\"stroke-width\":k,\"stroke-linejoin\":\"round\"});E.insertBefore(a,b)}))},attr:function(a,H,e,k){var E,b=this.element,c,B=this,r;\"string\"===typeof a&&void 0!==H&&(E=a,a={},a[E]=H);if(\"string\"===typeof a)B=(this[a+\"Getter\"]||\nthis._defaultGetter).call(this,a,b);else{for(E in a)H=a[E],r=!1,k||g(this,E),this.symbolName&&/^(x|y|width|height|r|start|end|innerR|anchorX|anchorY)/.test(E)&&(c||(this.symbolAttr(a),c=!0),r=!0),!this.rotation||\"x\"!==E&&\"y\"!==E||(this.doTransform=!0),r||(r=this[E+\"Setter\"]||this._defaultSetter,r.call(this,H,E,b),this.shadows&&/^(width|height|visibility|x|y|d|transform|cx|cy|r)$/.test(E)&&this.updateShadows(E,H,r));this.doTransform&&(this.updateTransform(),this.doTransform=!1)}e&&e();return B},updateShadows:function(a,\nH,g){for(var E=this.shadows,e=E.length;e--;)g.call(E[e],\"height\"===a?Math.max(H-(E[e].cutHeight||0),0):\"d\"===a?this.d:H,a,E[e])},addClass:function(a,H){var E=this.attr(\"class\")||\"\";-1===E.indexOf(a)&&(H||(a=(E+(E?\" \":\"\")+a).replace(\"  \",\" \")),this.attr(\"class\",a));return this},hasClass:function(a){return-1!==h(this.element,\"class\").indexOf(a)},removeClass:function(a){h(this.element,\"class\",(h(this.element,\"class\")||\"\").replace(a,\"\"));return this},symbolAttr:function(a){var E=this;y(\"x y r start end width height innerR anchorX anchorY\".split(\" \"),\nfunction(g){E[g]=K(a[g],E[g])});E.attr({d:E.renderer.symbols[E.symbolName](E.x,E.y,E.width,E.height,E)})},clip:function(a){return this.attr(\"clip-path\",a?\"url(\"+this.renderer.url+\"#\"+a.id+\")\":\"none\")},crisp:function(a,g){var E,H={},e;g=g||a.strokeWidth||0;e=Math.round(g)%2/2;a.x=Math.floor(a.x||this.x||0)+e;a.y=Math.floor(a.y||this.y||0)+e;a.width=Math.floor((a.width||this.width||0)-2*e);a.height=Math.floor((a.height||this.height||0)-2*e);u(a.strokeWidth)&&(a.strokeWidth=g);for(E in a)this[E]!==a[E]&&\n(this[E]=H[E]=a[E]);return H},css:function(a){var g=this.styles,E={},k=this.element,b,c,r=\"\";b=!g;a&&a.color&&(a.fill=a.color);if(g)for(c in a)a[c]!==g[c]&&(E[c]=a[c],b=!0);if(b){b=this.textWidth=a&&a.width&&\"text\"===k.nodeName.toLowerCase()&&J(a.width)||this.textWidth;g&&(a=t(g,E));this.styles=a;b&&!B&&this.renderer.forExport&&delete a.width;if(e&&!B)v(this.element,a);else{g=function(a,g){return\"-\"+g.toLowerCase()};for(c in a)r+=c.replace(/([A-Z])/g,g)+\":\"+a[c]+\";\";h(k,\"style\",r)}this.added&&(b&&\nthis.renderer.buildText(this),a&&a.textOutline&&this.applyTextOutline(a.textOutline))}return this},strokeWidth:function(){return this[\"stroke-width\"]||0},on:function(a,g){var E=this,e=E.element;q&&\"click\"===a?(e.ontouchstart=function(a){E.touchEventFired=Date.now();a.preventDefault();g.call(e,a)},e.onclick=function(a){(-1===R.navigator.userAgent.indexOf(\"Android\")||1100<Date.now()-(E.touchEventFired||0))&&g.call(e,a)}):e[\"on\"+a]=g;return this},setRadialReference:function(a){var g=this.renderer.gradients[this.element.gradient];\nthis.element.radialReference=a;g&&g.radAttr&&g.animate(this.renderer.getRadialAttr(a,g.radAttr));return this},translate:function(a,g){return this.attr({translateX:a,translateY:g})},invert:function(a){this.inverted=a;this.updateTransform();return this},updateTransform:function(){var a=this.translateX||0,g=this.translateY||0,e=this.scaleX,k=this.scaleY,b=this.inverted,c=this.rotation,B=this.element;b&&(a+=this.attr(\"width\"),g+=this.attr(\"height\"));a=[\"translate(\"+a+\",\"+g+\")\"];b?a.push(\"rotate(90) scale(-1,1)\"):\nc&&a.push(\"rotate(\"+c+\" \"+(B.getAttribute(\"x\")||0)+\" \"+(B.getAttribute(\"y\")||0)+\")\");(u(e)||u(k))&&a.push(\"scale(\"+K(e,1)+\" \"+K(k,1)+\")\");a.length&&B.setAttribute(\"transform\",a.join(\" \"))},toFront:function(){var a=this.element;a.parentNode.appendChild(a);return this},align:function(a,g,e){var E,H,k,b,c={};H=this.renderer;k=H.alignedObjects;var B,r;if(a){if(this.alignOptions=a,this.alignByTranslate=g,!e||x(e))this.alignTo=E=e||\"renderer\",m(k,this),k.push(this),e=null}else a=this.alignOptions,g=this.alignByTranslate,\nE=this.alignTo;e=K(e,H[E],H);E=a.align;H=a.verticalAlign;k=(e.x||0)+(a.x||0);b=(e.y||0)+(a.y||0);\"right\"===E?B=1:\"center\"===E&&(B=2);B&&(k+=(e.width-(a.width||0))/B);c[g?\"translateX\":\"x\"]=Math.round(k);\"bottom\"===H?r=1:\"middle\"===H&&(r=2);r&&(b+=(e.height-(a.height||0))/r);c[g?\"translateY\":\"y\"]=Math.round(b);this[this.placed?\"animate\":\"attr\"](c);this.placed=!0;this.alignAttr=c;return this},getBBox:function(a,g){var E,H=this.renderer,k,b=this.element,c=this.styles,B,r=this.textStr,m,w=H.cache,q=H.cacheKeys,\nx;g=K(g,this.rotation);k=g*d;B=c&&c.fontSize;void 0!==r&&(x=r.toString(),-1===x.indexOf(\"\\x3c\")&&(x=x.replace(/[0-9]/g,\"0\")),x+=[\"\",g||0,B,b.style.width,b.style[\"text-overflow\"]].join());x&&!a&&(E=w[x]);if(!E){if(b.namespaceURI===this.SVG_NS||H.forExport){try{(m=this.fakeTS&&function(a){y(b.querySelectorAll(\".highcharts-text-outline\"),function(g){g.style.display=a})})&&m(\"none\"),E=b.getBBox?t({},b.getBBox()):{width:b.offsetWidth,height:b.offsetHeight},m&&m(\"\")}catch(T){}if(!E||0>E.width)E={width:0,\nheight:0}}else E=this.htmlGetBBox();H.isSVG&&(a=E.width,H=E.height,e&&c&&\"11px\"===c.fontSize&&\"16.9\"===H.toPrecision(3)&&(E.height=H=14),g&&(E.width=Math.abs(H*Math.sin(k))+Math.abs(a*Math.cos(k)),E.height=Math.abs(H*Math.cos(k))+Math.abs(a*Math.sin(k))));if(x&&0<E.height){for(;250<q.length;)delete w[q.shift()];w[x]||q.push(x);w[x]=E}}return E},show:function(a){return this.attr({visibility:a?\"inherit\":\"visible\"})},hide:function(){return this.attr({visibility:\"hidden\"})},fadeOut:function(a){var g=\nthis;g.animate({opacity:0},{duration:a||150,complete:function(){g.attr({y:-9999})}})},add:function(a){var g=this.renderer,e=this.element,E;a&&(this.parentGroup=a);this.parentInverted=a&&a.inverted;void 0!==this.textStr&&g.buildText(this);this.added=!0;if(!a||a.handleZ||this.zIndex)E=this.zIndexSetter();E||(a?a.element:g.box).appendChild(e);if(this.onAdd)this.onAdd();return this},safeRemoveChild:function(a){var g=a.parentNode;g&&g.removeChild(a)},destroy:function(){var a=this.element||{},e=this.renderer.isSVG&&\n\"SPAN\"===a.nodeName&&this.parentGroup,k,b;a.onclick=a.onmouseout=a.onmouseover=a.onmousemove=a.point=null;g(this);this.clipPath&&(this.clipPath=this.clipPath.destroy());if(this.stops){for(b=0;b<this.stops.length;b++)this.stops[b]=this.stops[b].destroy();this.stops=null}this.safeRemoveChild(a);for(this.destroyShadows();e&&e.div&&0===e.div.childNodes.length;)a=e.parentGroup,this.safeRemoveChild(e.div),delete e.div,e=a;this.alignTo&&m(this.renderer.alignedObjects,this);for(k in this)delete this[k];return null},\nshadow:function(a,g,e){var E=[],b,k,H=this.element,c,B,r,m;if(!a)this.destroyShadows();else if(!this.shadows){B=K(a.width,3);r=(a.opacity||.15)/B;m=this.parentInverted?\"(-1,-1)\":\"(\"+K(a.offsetX,1)+\", \"+K(a.offsetY,1)+\")\";for(b=1;b<=B;b++)k=H.cloneNode(0),c=2*B+1-2*b,h(k,{isShadow:\"true\",stroke:a.color||\"#000000\",\"stroke-opacity\":r*b,\"stroke-width\":c,transform:\"translate\"+m,fill:\"none\"}),e&&(h(k,\"height\",Math.max(h(k,\"height\")-c,0)),k.cutHeight=c),g?g.element.appendChild(k):H.parentNode.insertBefore(k,\nH),E.push(k);this.shadows=E}return this},destroyShadows:function(){y(this.shadows||[],function(a){this.safeRemoveChild(a)},this);this.shadows=void 0},xGetter:function(a){\"circle\"===this.element.nodeName&&(\"x\"===a?a=\"cx\":\"y\"===a&&(a=\"cy\"));return this._defaultGetter(a)},_defaultGetter:function(a){a=K(this[a],this.element?this.element.getAttribute(a):null,0);/^[\\-0-9\\.]+$/.test(a)&&(a=parseFloat(a));return a},dSetter:function(a,g,e){a&&a.join&&(a=a.join(\" \"));/(NaN| {2}|^$)/.test(a)&&(a=\"M 0 0\");e.setAttribute(g,\na);this[g]=a},dashstyleSetter:function(a){var g,e=this[\"stroke-width\"];\"inherit\"===e&&(e=1);if(a=a&&a.toLowerCase()){a=a.replace(\"shortdashdotdot\",\"3,1,1,1,1,1,\").replace(\"shortdashdot\",\"3,1,1,1\").replace(\"shortdot\",\"1,1,\").replace(\"shortdash\",\"3,1,\").replace(\"longdash\",\"8,3,\").replace(/dot/g,\"1,3,\").replace(\"dash\",\"4,3,\").replace(/,$/,\"\").split(\",\");for(g=a.length;g--;)a[g]=J(a[g])*e;a=a.join(\",\").replace(/NaN/g,\"none\");this.element.setAttribute(\"stroke-dasharray\",a)}},alignSetter:function(a){this.element.setAttribute(\"text-anchor\",\n{left:\"start\",center:\"middle\",right:\"end\"}[a])},opacitySetter:function(a,g,e){this[g]=a;e.setAttribute(g,a)},titleSetter:function(a){var g=this.element.getElementsByTagName(\"title\")[0];g||(g=n.createElementNS(this.SVG_NS,\"title\"),this.element.appendChild(g));g.firstChild&&g.removeChild(g.firstChild);g.appendChild(n.createTextNode(String(K(a),\"\").replace(/<[^>]*>/g,\"\")))},textSetter:function(a){a!==this.textStr&&(delete this.bBox,this.textStr=a,this.added&&this.renderer.buildText(this))},fillSetter:function(a,\ng,e){\"string\"===typeof a?e.setAttribute(g,a):a&&this.colorGradient(a,g,e)},visibilitySetter:function(a,g,e){\"inherit\"===a?e.removeAttribute(g):e.setAttribute(g,a)},zIndexSetter:function(a,g){var e=this.renderer,k=this.parentGroup,b=(k||e).element||e.box,c,B=this.element,H;c=this.added;var r;u(a)&&(B.zIndex=a,a=+a,this[g]===a&&(c=!1),this[g]=a);if(c){(a=this.zIndex)&&k&&(k.handleZ=!0);g=b.childNodes;for(r=0;r<g.length&&!H;r++)k=g[r],c=k.zIndex,k!==B&&(J(c)>a||!u(a)&&u(c)||0>a&&!u(c)&&b!==e.box)&&(b.insertBefore(B,\nk),H=!0);H||b.appendChild(B)}return H},_defaultSetter:function(a,g,e){e.setAttribute(g,a)}};D.prototype.yGetter=D.prototype.xGetter;D.prototype.translateXSetter=D.prototype.translateYSetter=D.prototype.rotationSetter=D.prototype.verticalAlignSetter=D.prototype.scaleXSetter=D.prototype.scaleYSetter=function(a,g){this[g]=a;this.doTransform=!0};D.prototype[\"stroke-widthSetter\"]=D.prototype.strokeSetter=function(a,g,e){this[g]=a;this.stroke&&this[\"stroke-width\"]?(D.prototype.fillSetter.call(this,this.stroke,\n\"stroke\",e),e.setAttribute(\"stroke-width\",this[\"stroke-width\"]),this.hasStroke=!0):\"stroke-width\"===g&&0===a&&this.hasStroke&&(e.removeAttribute(\"stroke\"),this.hasStroke=!1)};C=a.SVGRenderer=function(){this.init.apply(this,arguments)};C.prototype={Element:D,SVG_NS:S,init:function(a,g,e,k,b,c){var B;k=this.createElement(\"svg\").attr({version:\"1.1\",\"class\":\"highcharts-root\"}).css(this.getStyle(k));B=k.element;a.appendChild(B);-1===a.innerHTML.indexOf(\"xmlns\")&&h(B,\"xmlns\",this.SVG_NS);this.isSVG=!0;\nthis.box=B;this.boxWrapper=k;this.alignedObjects=[];this.url=(F||A)&&n.getElementsByTagName(\"base\").length?R.location.href.replace(/#.*?$/,\"\").replace(/([\\('\\)])/g,\"\\\\$1\").replace(/ /g,\"%20\"):\"\";this.createElement(\"desc\").add().element.appendChild(n.createTextNode(\"Created with Highcharts 5.0.6\"));this.defs=this.createElement(\"defs\").add();this.allowHTML=c;this.forExport=b;this.gradients={};this.cache={};this.cacheKeys=[];this.imgCount=0;this.setSize(g,e,!1);var H;F&&a.getBoundingClientRect&&(g=function(){v(a,\n{left:0,top:0});H=a.getBoundingClientRect();v(a,{left:Math.ceil(H.left)-H.left+\"px\",top:Math.ceil(H.top)-H.top+\"px\"})},g(),this.unSubPixelFix=G(R,\"resize\",g))},getStyle:function(a){return this.style=t({fontFamily:'\"Lucida Grande\", \"Lucida Sans Unicode\", Arial, Helvetica, sans-serif',fontSize:\"12px\"},a)},setStyle:function(a){this.boxWrapper.css(this.getStyle(a))},isHidden:function(){return!this.boxWrapper.getBBox().width},destroy:function(){var a=this.defs;this.box=null;this.boxWrapper=this.boxWrapper.destroy();\nc(this.gradients||{});this.gradients=null;a&&(this.defs=a.destroy());this.unSubPixelFix&&this.unSubPixelFix();return this.alignedObjects=null},createElement:function(a){var g=new this.Element;g.init(this,a);return g},draw:w,getRadialAttr:function(a,g){return{cx:a[0]-a[2]/2+g.cx*a[2],cy:a[1]-a[2]/2+g.cy*a[2],r:g.r*a[2]}},buildText:function(a){for(var g=a.element,e=this,k=e.forExport,c=K(a.textStr,\"\").toString(),r=-1!==c.indexOf(\"\\x3c\"),m=g.childNodes,w,E,q,x,d=h(g,\"x\"),t=a.styles,A=a.textWidth,z=t&&\nt.lineHeight,l=t&&t.textOutline,F=t&&\"ellipsis\"===t.textOverflow,f=m.length,u=A&&!a.added&&this.box,p=function(a){var k;k=/(px|em)$/.test(a&&a.style.fontSize)?a.style.fontSize:t&&t.fontSize||e.style.fontSize||12;return z?J(z):e.fontMetrics(k,a.getAttribute(\"style\")?a:g).h};f--;)g.removeChild(m[f]);r||l||F||A||-1!==c.indexOf(\" \")?(w=/<.*class=\"([^\"]+)\".*>/,E=/<.*style=\"([^\"]+)\".*>/,q=/<.*href=\"(http[^\"]+)\".*>/,u&&u.appendChild(g),c=r?c.replace(/<(b|strong)>/g,'\\x3cspan style\\x3d\"font-weight:bold\"\\x3e').replace(/<(i|em)>/g,\n'\\x3cspan style\\x3d\"font-style:italic\"\\x3e').replace(/<a/g,\"\\x3cspan\").replace(/<\\/(b|strong|i|em|a)>/g,\"\\x3c/span\\x3e\").split(/<br.*?>/g):[c],c=b(c,function(a){return\"\"!==a}),y(c,function(b,c){var r,H=0;b=b.replace(/^\\s+|\\s+$/g,\"\").replace(/<span/g,\"|||\\x3cspan\").replace(/<\\/span>/g,\"\\x3c/span\\x3e|||\");r=b.split(\"|||\");y(r,function(b){if(\"\"!==b||1===r.length){var m={},l=n.createElementNS(e.SVG_NS,\"tspan\"),z,f;w.test(b)&&(z=b.match(w)[1],h(l,\"class\",z));E.test(b)&&(f=b.match(E)[1].replace(/(;| |^)color([ :])/,\n\"$1fill$2\"),h(l,\"style\",f));q.test(b)&&!k&&(h(l,\"onclick\",'location.href\\x3d\"'+b.match(q)[1]+'\"'),v(l,{cursor:\"pointer\"}));b=(b.replace(/<(.|\\n)*?>/g,\"\")||\" \").replace(/&lt;/g,\"\\x3c\").replace(/&gt;/g,\"\\x3e\");if(\" \"!==b){l.appendChild(n.createTextNode(b));H?m.dx=0:c&&null!==d&&(m.x=d);h(l,m);g.appendChild(l);!H&&c&&(!B&&k&&v(l,{display:\"block\"}),h(l,\"dy\",p(l)));if(A){m=b.replace(/([^\\^])-/g,\"$1- \").split(\" \");z=\"nowrap\"===t.whiteSpace;for(var K=1<r.length||c||1<m.length&&!z,u,y,J=[],M=p(l),P=a.rotation,\nO=b,N=O.length;(K||F)&&(m.length||J.length);)a.rotation=0,u=a.getBBox(!0),y=u.width,!B&&e.forExport&&(y=e.measureSpanWidth(l.firstChild.data,a.styles)),u=y>A,void 0===x&&(x=u),F&&x?(N/=2,\"\"===O||!u&&.5>N?m=[]:(O=b.substring(0,O.length+(u?-1:1)*Math.ceil(N)),m=[O+(3<A?\"\\u2026\":\"\")],l.removeChild(l.firstChild))):u&&1!==m.length?(l.removeChild(l.firstChild),J.unshift(m.pop())):(m=J,J=[],m.length&&!z&&(l=n.createElementNS(S,\"tspan\"),h(l,{dy:M,x:d}),f&&h(l,\"style\",f),g.appendChild(l)),y>A&&(A=y)),m.length&&\nl.appendChild(n.createTextNode(m.join(\" \").replace(/- /g,\"-\")));a.rotation=P}H++}}})}),x&&a.attr(\"title\",a.textStr),u&&u.removeChild(g),l&&a.applyTextOutline&&a.applyTextOutline(l)):g.appendChild(n.createTextNode(c.replace(/&lt;/g,\"\\x3c\").replace(/&gt;/g,\"\\x3e\")))},getContrast:function(a){a=p(a).rgba;return 510<a[0]+a[1]+a[2]?\"#000000\":\"#FFFFFF\"},button:function(a,g,b,c,B,r,m,w,q){var H=this.label(a,g,b,q,null,null,null,null,\"button\"),E=0;H.attr(k({padding:8,r:2},B));var x,d,n,l;B=k({fill:\"#f7f7f7\",\nstroke:\"#cccccc\",\"stroke-width\":1,style:{color:\"#333333\",cursor:\"pointer\",fontWeight:\"normal\"}},B);x=B.style;delete B.style;r=k(B,{fill:\"#e6e6e6\"},r);d=r.style;delete r.style;m=k(B,{fill:\"#e6ebf5\",style:{color:\"#000000\",fontWeight:\"bold\"}},m);n=m.style;delete m.style;w=k(B,{style:{color:\"#cccccc\"}},w);l=w.style;delete w.style;G(H.element,e?\"mouseover\":\"mouseenter\",function(){3!==E&&H.setState(1)});G(H.element,e?\"mouseout\":\"mouseleave\",function(){3!==E&&H.setState(E)});H.setState=function(a){1!==a&&\n(H.state=E=a);H.removeClass(/highcharts-button-(normal|hover|pressed|disabled)/).addClass(\"highcharts-button-\"+[\"normal\",\"hover\",\"pressed\",\"disabled\"][a||0]);H.attr([B,r,m,w][a||0]).css([x,d,n,l][a||0])};H.attr(B).css(t({cursor:\"default\"},x));return H.on(\"click\",function(a){3!==E&&c.call(H,a)})},crispLine:function(a,g){a[1]===a[4]&&(a[1]=a[4]=Math.round(a[1])-g%2/2);a[2]===a[5]&&(a[2]=a[5]=Math.round(a[2])+g%2/2);return a},path:function(a){var g={fill:\"none\"};z(a)?g.d=a:r(a)&&t(g,a);return this.createElement(\"path\").attr(g)},\ncircle:function(a,g,e){a=r(a)?a:{x:a,y:g,r:e};g=this.createElement(\"circle\");g.xSetter=g.ySetter=function(a,g,e){e.setAttribute(\"c\"+g,a)};return g.attr(a)},arc:function(a,g,e,b,k,c){r(a)&&(g=a.y,e=a.r,b=a.innerR,k=a.start,c=a.end,a=a.x);a=this.symbol(\"arc\",a||0,g||0,e||0,e||0,{innerR:b||0,start:k||0,end:c||0});a.r=e;return a},rect:function(a,g,e,b,k,c){k=r(a)?a.r:k;var B=this.createElement(\"rect\");a=r(a)?a:void 0===a?{}:{x:a,y:g,width:Math.max(e,0),height:Math.max(b,0)};void 0!==c&&(a.strokeWidth=\nc,a=B.crisp(a));a.fill=\"none\";k&&(a.r=k);B.rSetter=function(a,g,e){h(e,{rx:a,ry:a})};return B.attr(a)},setSize:function(a,g,e){var b=this.alignedObjects,k=b.length;this.width=a;this.height=g;for(this.boxWrapper.animate({width:a,height:g},{step:function(){this.attr({viewBox:\"0 0 \"+this.attr(\"width\")+\" \"+this.attr(\"height\")})},duration:K(e,!0)?void 0:0});k--;)b[k].align()},g:function(a){var g=this.createElement(\"g\");return a?g.attr({\"class\":\"highcharts-\"+a}):g},image:function(a,g,e,b,k){var c={preserveAspectRatio:\"none\"};\n1<arguments.length&&t(c,{x:g,y:e,width:b,height:k});c=this.createElement(\"image\").attr(c);c.element.setAttributeNS?c.element.setAttributeNS(\"http://www.w3.org/1999/xlink\",\"href\",a):c.element.setAttribute(\"hc-svg-href\",a);return c},symbol:function(a,g,e,b,k,c){var B=this,r,H=this.symbols[a],m=u(g)&&H&&H(Math.round(g),Math.round(e),b,k,c),w=/^url\\((.*?)\\)$/,q,x;H?(r=this.path(m),r.attr(\"fill\",\"none\"),t(r,{symbolName:a,x:g,y:e,width:b,height:k}),c&&t(r,c)):w.test(a)&&(q=a.match(w)[1],r=this.image(q),\nr.imgwidth=K(M[q]&&M[q].width,c&&c.width),r.imgheight=K(M[q]&&M[q].height,c&&c.height),x=function(){r.attr({width:r.width,height:r.height})},y([\"width\",\"height\"],function(a){r[a+\"Setter\"]=function(a,g){var e={},b=this[\"img\"+g],k=\"width\"===g?\"translateX\":\"translateY\";this[g]=a;u(b)&&(this.element&&this.element.setAttribute(g,b),this.alignByTranslate||(e[k]=((this[g]||0)-b)/2,this.attr(e)))}}),u(g)&&r.attr({x:g,y:e}),r.isImg=!0,u(r.imgwidth)&&u(r.imgheight)?x():(r.attr({width:0,height:0}),l(\"img\",{onload:function(){var a=\nf[B.chartIndex];0===this.width&&(v(this,{position:\"absolute\",top:\"-999em\"}),n.body.appendChild(this));M[q]={width:this.width,height:this.height};r.imgwidth=this.width;r.imgheight=this.height;r.element&&x();this.parentNode&&this.parentNode.removeChild(this);B.imgCount--;if(!B.imgCount&&a&&a.onload)a.onload()},src:q}),this.imgCount++));return r},symbols:{circle:function(a,g,e,b){var k=.166*e;return[\"M\",a+e/2,g,\"C\",a+e+k,g,a+e+k,g+b,a+e/2,g+b,\"C\",a-k,g+b,a-k,g,a+e/2,g,\"Z\"]},square:function(a,g,e,b){return[\"M\",\na,g,\"L\",a+e,g,a+e,g+b,a,g+b,\"Z\"]},triangle:function(a,g,e,b){return[\"M\",a+e/2,g,\"L\",a+e,g+b,a,g+b,\"Z\"]},\"triangle-down\":function(a,g,e,b){return[\"M\",a,g,\"L\",a+e,g,a+e/2,g+b,\"Z\"]},diamond:function(a,g,e,b){return[\"M\",a+e/2,g,\"L\",a+e,g+b/2,a+e/2,g+b,a,g+b/2,\"Z\"]},arc:function(a,g,e,b,k){var c=k.start;e=k.r||e||b;var B=k.end-.001;b=k.innerR;var r=k.open,m=Math.cos(c),H=Math.sin(c),w=Math.cos(B),B=Math.sin(B);k=k.end-c<Math.PI?0:1;return[\"M\",a+e*m,g+e*H,\"A\",e,e,0,k,1,a+e*w,g+e*B,r?\"M\":\"L\",a+b*w,g+b*B,\n\"A\",b,b,0,k,0,a+b*m,g+b*H,r?\"\":\"Z\"]},callout:function(a,g,e,b,k){var c=Math.min(k&&k.r||0,e,b),B=c+6,r=k&&k.anchorX;k=k&&k.anchorY;var m;m=[\"M\",a+c,g,\"L\",a+e-c,g,\"C\",a+e,g,a+e,g,a+e,g+c,\"L\",a+e,g+b-c,\"C\",a+e,g+b,a+e,g+b,a+e-c,g+b,\"L\",a+c,g+b,\"C\",a,g+b,a,g+b,a,g+b-c,\"L\",a,g+c,\"C\",a,g,a,g,a+c,g];r&&r>e?k>g+B&&k<g+b-B?m.splice(13,3,\"L\",a+e,k-6,a+e+6,k,a+e,k+6,a+e,g+b-c):m.splice(13,3,\"L\",a+e,b/2,r,k,a+e,b/2,a+e,g+b-c):r&&0>r?k>g+B&&k<g+b-B?m.splice(33,3,\"L\",a,k+6,a-6,k,a,k-6,a,g+c):m.splice(33,3,\"L\",\na,b/2,r,k,a,b/2,a,g+c):k&&k>b&&r>a+B&&r<a+e-B?m.splice(23,3,\"L\",r+6,g+b,r,g+b+6,r-6,g+b,a+c,g+b):k&&0>k&&r>a+B&&r<a+e-B&&m.splice(3,3,\"L\",r-6,g,r,g-6,r+6,g,e-c,g);return m}},clipRect:function(g,e,b,k){var c=a.uniqueKey(),B=this.createElement(\"clipPath\").attr({id:c}).add(this.defs);g=this.rect(g,e,b,k,0).add(B);g.id=c;g.clipPath=B;g.count=0;return g},text:function(a,g,e,b){var k=!B&&this.forExport,c={};if(b&&(this.allowHTML||!this.forExport))return this.html(a,g,e);c.x=Math.round(g||0);e&&(c.y=Math.round(e));\nif(a||0===a)c.text=a;a=this.createElement(\"text\").attr(c);k&&a.css({position:\"absolute\"});b||(a.xSetter=function(a,g,e){var b=e.getElementsByTagName(\"tspan\"),k,c=e.getAttribute(g),B;for(B=0;B<b.length;B++)k=b[B],k.getAttribute(g)===c&&k.setAttribute(g,a);e.setAttribute(g,a)});return a},fontMetrics:function(a,g){a=a||g&&g.style&&g.style.fontSize||this.style&&this.style.fontSize;a=/px/.test(a)?J(a):/em/.test(a)?parseFloat(a)*(g?this.fontMetrics(null,g.parentNode).f:16):12;g=24>a?a+3:Math.round(1.2*\na);return{h:g,b:Math.round(.8*g),f:a}},rotCorr:function(a,g,e){var b=a;g&&e&&(b=Math.max(b*Math.cos(g*d),4));return{x:-a/3*Math.sin(g*d),y:b}},label:function(a,g,e,b,c,B,r,m,w){var q=this,x=q.g(\"button\"!==w&&\"label\"),d=x.text=q.text(\"\",0,0,r).attr({zIndex:1}),H,n,l=0,A=3,z=0,F,f,K,p,J,h={},M,S,E=/^url\\((.*?)\\)$/.test(b),v=E,P,R,O,Q;w&&x.addClass(\"highcharts-\"+w);v=E;P=function(){return(M||0)%2/2};R=function(){var a=d.element.style,g={};n=(void 0===F||void 0===f||J)&&u(d.textStr)&&d.getBBox();x.width=\n(F||n.width||0)+2*A+z;x.height=(f||n.height||0)+2*A;S=A+q.fontMetrics(a&&a.fontSize,d).b;v&&(H||(x.box=H=q.symbols[b]||E?q.symbol(b):q.rect(),H.addClass((\"button\"===w?\"\":\"highcharts-label-box\")+(w?\" highcharts-\"+w+\"-box\":\"\")),H.add(x),a=P(),g.x=a,g.y=(m?-S:0)+a),g.width=Math.round(x.width),g.height=Math.round(x.height),H.attr(t(g,h)),h={})};O=function(){var a=z+A,g;g=m?0:S;u(F)&&n&&(\"center\"===J||\"right\"===J)&&(a+={center:.5,right:1}[J]*(F-n.width));if(a!==d.x||g!==d.y)d.attr(\"x\",a),void 0!==g&&d.attr(\"y\",\ng);d.x=a;d.y=g};Q=function(a,g){H?H.attr(a,g):h[a]=g};x.onAdd=function(){d.add(x);x.attr({text:a||0===a?a:\"\",x:g,y:e});H&&u(c)&&x.attr({anchorX:c,anchorY:B})};x.widthSetter=function(a){F=a};x.heightSetter=function(a){f=a};x[\"text-alignSetter\"]=function(a){J=a};x.paddingSetter=function(a){u(a)&&a!==A&&(A=x.padding=a,O())};x.paddingLeftSetter=function(a){u(a)&&a!==z&&(z=a,O())};x.alignSetter=function(a){a={left:0,center:.5,right:1}[a];a!==l&&(l=a,n&&x.attr({x:K}))};x.textSetter=function(a){void 0!==\na&&d.textSetter(a);R();O()};x[\"stroke-widthSetter\"]=function(a,g){a&&(v=!0);M=this[\"stroke-width\"]=a;Q(g,a)};x.strokeSetter=x.fillSetter=x.rSetter=function(a,g){\"fill\"===g&&a&&(v=!0);Q(g,a)};x.anchorXSetter=function(a,g){c=a;Q(g,Math.round(a)-P()-K)};x.anchorYSetter=function(a,g){B=a;Q(g,a-p)};x.xSetter=function(a){x.x=a;l&&(a-=l*((F||n.width)+2*A));K=Math.round(a);x.attr(\"translateX\",K)};x.ySetter=function(a){p=x.y=Math.round(a);x.attr(\"translateY\",p)};var V=x.css;return t(x,{css:function(a){if(a){var g=\n{};a=k(a);y(x.textProps,function(e){void 0!==a[e]&&(g[e]=a[e],delete a[e])});d.css(g)}return V.call(x,a)},getBBox:function(){return{width:n.width+2*A,height:n.height+2*A,x:n.x-A,y:n.y-A}},shadow:function(a){a&&(R(),H&&H.shadow(a));return x},destroy:function(){N(x.element,\"mouseenter\");N(x.element,\"mouseleave\");d&&(d=d.destroy());H&&(H=H.destroy());D.prototype.destroy.call(x);x=q=R=O=Q=null}})}};a.Renderer=C})(L);(function(a){var D=a.attr,C=a.createElement,G=a.css,I=a.defined,h=a.each,f=a.extend,p=\na.isFirefox,v=a.isMS,l=a.isWebKit,u=a.pInt,d=a.SVGRenderer,c=a.win,n=a.wrap;f(a.SVGElement.prototype,{htmlCss:function(a){var c=this.element;if(c=a&&\"SPAN\"===c.tagName&&a.width)delete a.width,this.textWidth=c,this.updateTransform();a&&\"ellipsis\"===a.textOverflow&&(a.whiteSpace=\"nowrap\",a.overflow=\"hidden\");this.styles=f(this.styles,a);G(this.element,a);return this},htmlGetBBox:function(){var a=this.element;\"text\"===a.nodeName&&(a.style.position=\"absolute\");return{x:a.offsetLeft,y:a.offsetTop,width:a.offsetWidth,\nheight:a.offsetHeight}},htmlUpdateTransform:function(){if(this.added){var a=this.renderer,c=this.element,m=this.translateX||0,b=this.translateY||0,q=this.x||0,d=this.y||0,n=this.textAlign||\"left\",e={left:0,center:.5,right:1}[n],r=this.styles;G(c,{marginLeft:m,marginTop:b});this.shadows&&h(this.shadows,function(a){G(a,{marginLeft:m+1,marginTop:b+1})});this.inverted&&h(c.childNodes,function(e){a.invertChild(e,c)});if(\"SPAN\"===c.tagName){var x=this.rotation,A=u(this.textWidth),k=r&&r.whiteSpace,w=[x,\nn,c.innerHTML,this.textWidth,this.textAlign].join();w!==this.cTT&&(r=a.fontMetrics(c.style.fontSize).b,I(x)&&this.setSpanRotation(x,e,r),G(c,{width:\"\",whiteSpace:k||\"nowrap\"}),c.offsetWidth>A&&/[ \\-]/.test(c.textContent||c.innerText)&&G(c,{width:A+\"px\",display:\"block\",whiteSpace:k||\"normal\"}),this.getSpanCorrection(c.offsetWidth,r,e,x,n));G(c,{left:q+(this.xCorr||0)+\"px\",top:d+(this.yCorr||0)+\"px\"});l&&(r=c.offsetHeight);this.cTT=w}}else this.alignOnAdd=!0},setSpanRotation:function(a,d,m){var b={},\nq=v?\"-ms-transform\":l?\"-webkit-transform\":p?\"MozTransform\":c.opera?\"-o-transform\":\"\";b[q]=b.transform=\"rotate(\"+a+\"deg)\";b[q+(p?\"Origin\":\"-origin\")]=b.transformOrigin=100*d+\"% \"+m+\"px\";G(this.element,b)},getSpanCorrection:function(a,c,m){this.xCorr=-a*m;this.yCorr=-c}});f(d.prototype,{html:function(a,c,m){var b=this.createElement(\"span\"),q=b.element,d=b.renderer,l=d.isSVG,e=function(a,e){h([\"opacity\",\"visibility\"],function(b){n(a,b+\"Setter\",function(a,b,c,r){a.call(this,b,c,r);e[c]=b})})};b.textSetter=\nfunction(a){a!==q.innerHTML&&delete this.bBox;q.innerHTML=this.textStr=a;b.htmlUpdateTransform()};l&&e(b,b.element.style);b.xSetter=b.ySetter=b.alignSetter=b.rotationSetter=function(a,e){\"align\"===e&&(e=\"textAlign\");b[e]=a;b.htmlUpdateTransform()};b.attr({text:a,x:Math.round(c),y:Math.round(m)}).css({fontFamily:this.style.fontFamily,fontSize:this.style.fontSize,position:\"absolute\"});q.style.whiteSpace=\"nowrap\";b.css=b.htmlCss;l&&(b.add=function(a){var c,r=d.box.parentNode,k=[];if(this.parentGroup=\na){if(c=a.div,!c){for(;a;)k.push(a),a=a.parentGroup;h(k.reverse(),function(a){var m,x=D(a.element,\"class\");x&&(x={className:x});c=a.div=a.div||C(\"div\",x,{position:\"absolute\",left:(a.translateX||0)+\"px\",top:(a.translateY||0)+\"px\",display:a.display,opacity:a.opacity,pointerEvents:a.styles&&a.styles.pointerEvents},c||r);m=c.style;f(a,{on:function(){b.on.apply({element:k[0].div},arguments);return a},translateXSetter:function(e,g){m.left=e+\"px\";a[g]=e;a.doTransform=!0},translateYSetter:function(e,g){m.top=\ne+\"px\";a[g]=e;a.doTransform=!0}});e(a,m)})}}else c=r;c.appendChild(q);b.added=!0;b.alignOnAdd&&b.htmlUpdateTransform();return b});return b}})})(L);(function(a){var D,C,G=a.createElement,I=a.css,h=a.defined,f=a.deg2rad,p=a.discardElement,v=a.doc,l=a.each,u=a.erase,d=a.extend;D=a.extendClass;var c=a.isArray,n=a.isNumber,y=a.isObject,t=a.merge;C=a.noop;var m=a.pick,b=a.pInt,q=a.SVGElement,z=a.SVGRenderer,F=a.win;a.svg||(C={docMode8:v&&8===v.documentMode,init:function(a,b){var e=[\"\\x3c\",b,' filled\\x3d\"f\" stroked\\x3d\"f\"'],\nc=[\"position: \",\"absolute\",\";\"],k=\"div\"===b;(\"shape\"===b||k)&&c.push(\"left:0;top:0;width:1px;height:1px;\");c.push(\"visibility: \",k?\"hidden\":\"visible\");e.push(' style\\x3d\"',c.join(\"\"),'\"/\\x3e');b&&(e=k||\"span\"===b||\"img\"===b?e.join(\"\"):a.prepVML(e),this.element=G(e));this.renderer=a},add:function(a){var e=this.renderer,b=this.element,c=e.box,k=a&&a.inverted,c=a?a.element||a:c;a&&(this.parentGroup=a);k&&e.invertChild(b,c);c.appendChild(b);this.added=!0;this.alignOnAdd&&!this.deferUpdateTransform&&this.updateTransform();\nif(this.onAdd)this.onAdd();this.className&&this.attr(\"class\",this.className);return this},updateTransform:q.prototype.htmlUpdateTransform,setSpanRotation:function(){var a=this.rotation,b=Math.cos(a*f),c=Math.sin(a*f);I(this.element,{filter:a?[\"progid:DXImageTransform.Microsoft.Matrix(M11\\x3d\",b,\", M12\\x3d\",-c,\", M21\\x3d\",c,\", M22\\x3d\",b,\", sizingMethod\\x3d'auto expand')\"].join(\"\"):\"none\"})},getSpanCorrection:function(a,b,c,q,k){var e=q?Math.cos(q*f):1,r=q?Math.sin(q*f):0,x=m(this.elemHeight,this.element.offsetHeight),\nd;this.xCorr=0>e&&-a;this.yCorr=0>r&&-x;d=0>e*r;this.xCorr+=r*b*(d?1-c:c);this.yCorr-=e*b*(q?d?c:1-c:1);k&&\"left\"!==k&&(this.xCorr-=a*c*(0>e?-1:1),q&&(this.yCorr-=x*c*(0>r?-1:1)),I(this.element,{textAlign:k}))},pathToVML:function(a){for(var e=a.length,b=[];e--;)n(a[e])?b[e]=Math.round(10*a[e])-5:\"Z\"===a[e]?b[e]=\"x\":(b[e]=a[e],!a.isArc||\"wa\"!==a[e]&&\"at\"!==a[e]||(b[e+5]===b[e+7]&&(b[e+7]+=a[e+7]>a[e+5]?1:-1),b[e+6]===b[e+8]&&(b[e+8]+=a[e+8]>a[e+6]?1:-1)));return b.join(\" \")||\"x\"},clip:function(a){var e=\nthis,b;a?(b=a.members,u(b,e),b.push(e),e.destroyClip=function(){u(b,e)},a=a.getCSS(e)):(e.destroyClip&&e.destroyClip(),a={clip:e.docMode8?\"inherit\":\"rect(auto)\"});return e.css(a)},css:q.prototype.htmlCss,safeRemoveChild:function(a){a.parentNode&&p(a)},destroy:function(){this.destroyClip&&this.destroyClip();return q.prototype.destroy.apply(this)},on:function(a,b){this.element[\"on\"+a]=function(){var a=F.event;a.target=a.srcElement;b(a)};return this},cutOffPath:function(a,c){var e;a=a.split(/[ ,]/);\ne=a.length;if(9===e||11===e)a[e-4]=a[e-2]=b(a[e-2])-10*c;return a.join(\" \")},shadow:function(a,c,q){var e=[],k,r=this.element,d=this.renderer,x,n=r.style,g,B=r.path,l,t,z,f;B&&\"string\"!==typeof B.value&&(B=\"x\");t=B;if(a){z=m(a.width,3);f=(a.opacity||.15)/z;for(k=1;3>=k;k++)l=2*z+1-2*k,q&&(t=this.cutOffPath(B.value,l+.5)),g=['\\x3cshape isShadow\\x3d\"true\" strokeweight\\x3d\"',l,'\" filled\\x3d\"false\" path\\x3d\"',t,'\" coordsize\\x3d\"10 10\" style\\x3d\"',r.style.cssText,'\" /\\x3e'],x=G(d.prepVML(g),null,{left:b(n.left)+\nm(a.offsetX,1),top:b(n.top)+m(a.offsetY,1)}),q&&(x.cutOff=l+1),g=['\\x3cstroke color\\x3d\"',a.color||\"#000000\",'\" opacity\\x3d\"',f*k,'\"/\\x3e'],G(d.prepVML(g),null,null,x),c?c.element.appendChild(x):r.parentNode.insertBefore(x,r),e.push(x);this.shadows=e}return this},updateShadows:C,setAttr:function(a,b){this.docMode8?this.element[a]=b:this.element.setAttribute(a,b)},classSetter:function(a){(this.added?this.element:this).className=a},dashstyleSetter:function(a,b,c){(c.getElementsByTagName(\"stroke\")[0]||\nG(this.renderer.prepVML([\"\\x3cstroke/\\x3e\"]),null,null,c))[b]=a||\"solid\";this[b]=a},dSetter:function(a,b,c){var e=this.shadows;a=a||[];this.d=a.join&&a.join(\" \");c.path=a=this.pathToVML(a);if(e)for(c=e.length;c--;)e[c].path=e[c].cutOff?this.cutOffPath(a,e[c].cutOff):a;this.setAttr(b,a)},fillSetter:function(a,b,c){var e=c.nodeName;\"SPAN\"===e?c.style.color=a:\"IMG\"!==e&&(c.filled=\"none\"!==a,this.setAttr(\"fillcolor\",this.renderer.color(a,c,b,this)))},\"fill-opacitySetter\":function(a,b,c){G(this.renderer.prepVML([\"\\x3c\",\nb.split(\"-\")[0],' opacity\\x3d\"',a,'\"/\\x3e']),null,null,c)},opacitySetter:C,rotationSetter:function(a,b,c){c=c.style;this[b]=c[b]=a;c.left=-Math.round(Math.sin(a*f)+1)+\"px\";c.top=Math.round(Math.cos(a*f))+\"px\"},strokeSetter:function(a,b,c){this.setAttr(\"strokecolor\",this.renderer.color(a,c,b,this))},\"stroke-widthSetter\":function(a,b,c){c.stroked=!!a;this[b]=a;n(a)&&(a+=\"px\");this.setAttr(\"strokeweight\",a)},titleSetter:function(a,b){this.setAttr(b,a)},visibilitySetter:function(a,b,c){\"inherit\"===a&&\n(a=\"visible\");this.shadows&&l(this.shadows,function(c){c.style[b]=a});\"DIV\"===c.nodeName&&(a=\"hidden\"===a?\"-999em\":0,this.docMode8||(c.style[b]=a?\"visible\":\"hidden\"),b=\"top\");c.style[b]=a},xSetter:function(a,b,c){this[b]=a;\"x\"===b?b=\"left\":\"y\"===b&&(b=\"top\");this.updateClipping?(this[b]=a,this.updateClipping()):c.style[b]=a},zIndexSetter:function(a,b,c){c.style[b]=a}},C[\"stroke-opacitySetter\"]=C[\"fill-opacitySetter\"],a.VMLElement=C=D(q,C),C.prototype.ySetter=C.prototype.widthSetter=C.prototype.heightSetter=\nC.prototype.xSetter,C={Element:C,isIE8:-1<F.navigator.userAgent.indexOf(\"MSIE 8.0\"),init:function(a,b,c){var e,k;this.alignedObjects=[];e=this.createElement(\"div\").css({position:\"relative\"});k=e.element;a.appendChild(e.element);this.isVML=!0;this.box=k;this.boxWrapper=e;this.gradients={};this.cache={};this.cacheKeys=[];this.imgCount=0;this.setSize(b,c,!1);if(!v.namespaces.hcv){v.namespaces.add(\"hcv\",\"urn:schemas-microsoft-com:vml\");try{v.createStyleSheet().cssText=\"hcv\\\\:fill, hcv\\\\:path, hcv\\\\:shape, hcv\\\\:stroke{ behavior:url(#default#VML); display: inline-block; } \"}catch(w){v.styleSheets[0].cssText+=\n\"hcv\\\\:fill, hcv\\\\:path, hcv\\\\:shape, hcv\\\\:stroke{ behavior:url(#default#VML); display: inline-block; } \"}}},isHidden:function(){return!this.box.offsetWidth},clipRect:function(a,b,c,m){var e=this.createElement(),r=y(a);return d(e,{members:[],count:0,left:(r?a.x:a)+1,top:(r?a.y:b)+1,width:(r?a.width:c)-1,height:(r?a.height:m)-1,getCSS:function(a){var b=a.element,c=b.nodeName,g=a.inverted,e=this.top-(\"shape\"===c?b.offsetTop:0),k=this.left,b=k+this.width,m=e+this.height,e={clip:\"rect(\"+Math.round(g?\nk:e)+\"px,\"+Math.round(g?m:b)+\"px,\"+Math.round(g?b:m)+\"px,\"+Math.round(g?e:k)+\"px)\"};!g&&a.docMode8&&\"DIV\"===c&&d(e,{width:b+\"px\",height:m+\"px\"});return e},updateClipping:function(){l(e.members,function(a){a.element&&a.css(e.getCSS(a))})}})},color:function(b,c,m,q){var e=this,r,d=/^rgba/,n,x,g=\"none\";b&&b.linearGradient?x=\"gradient\":b&&b.radialGradient&&(x=\"pattern\");if(x){var B,t,z=b.linearGradient||b.radialGradient,f,F,H,A,u,p=\"\";b=b.stops;var h,y=[],v=function(){n=['\\x3cfill colors\\x3d\"'+y.join(\",\")+\n'\" opacity\\x3d\"',H,'\" o:opacity2\\x3d\"',F,'\" type\\x3d\"',x,'\" ',p,'focus\\x3d\"100%\" method\\x3d\"any\" /\\x3e'];G(e.prepVML(n),null,null,c)};f=b[0];h=b[b.length-1];0<f[0]&&b.unshift([0,f[1]]);1>h[0]&&b.push([1,h[1]]);l(b,function(g,b){d.test(g[1])?(r=a.color(g[1]),B=r.get(\"rgb\"),t=r.get(\"a\")):(B=g[1],t=1);y.push(100*g[0]+\"% \"+B);b?(H=t,A=B):(F=t,u=B)});if(\"fill\"===m)if(\"gradient\"===x)m=z.x1||z[0]||0,b=z.y1||z[1]||0,f=z.x2||z[2]||0,z=z.y2||z[3]||0,p='angle\\x3d\"'+(90-180*Math.atan((z-b)/(f-m))/Math.PI)+'\"',\nv();else{var g=z.r,C=2*g,D=2*g,I=z.cx,U=z.cy,L=c.radialReference,T,g=function(){L&&(T=q.getBBox(),I+=(L[0]-T.x)/T.width-.5,U+=(L[1]-T.y)/T.height-.5,C*=L[2]/T.width,D*=L[2]/T.height);p='src\\x3d\"'+a.getOptions().global.VMLRadialGradientURL+'\" size\\x3d\"'+C+\",\"+D+'\" origin\\x3d\"0.5,0.5\" position\\x3d\"'+I+\",\"+U+'\" color2\\x3d\"'+u+'\" ';v()};q.added?g():q.onAdd=g;g=A}else g=B}else d.test(b)&&\"IMG\"!==c.tagName?(r=a.color(b),q[m+\"-opacitySetter\"](r.get(\"a\"),m,c),g=r.get(\"rgb\")):(g=c.getElementsByTagName(m),\ng.length&&(g[0].opacity=1,g[0].type=\"solid\"),g=b);return g},prepVML:function(a){var b=this.isIE8;a=a.join(\"\");b?(a=a.replace(\"/\\x3e\",' xmlns\\x3d\"urn:schemas-microsoft-com:vml\" /\\x3e'),a=-1===a.indexOf('style\\x3d\"')?a.replace(\"/\\x3e\",' style\\x3d\"display:inline-block;behavior:url(#default#VML);\" /\\x3e'):a.replace('style\\x3d\"','style\\x3d\"display:inline-block;behavior:url(#default#VML);')):a=a.replace(\"\\x3c\",\"\\x3chcv:\");return a},text:z.prototype.html,path:function(a){var b={coordsize:\"10 10\"};c(a)?b.d=\na:y(a)&&d(b,a);return this.createElement(\"shape\").attr(b)},circle:function(a,b,c){var e=this.symbol(\"circle\");y(a)&&(c=a.r,b=a.y,a=a.x);e.isCircle=!0;e.r=c;return e.attr({x:a,y:b})},g:function(a){var b;a&&(b={className:\"highcharts-\"+a,\"class\":\"highcharts-\"+a});return this.createElement(\"div\").attr(b)},image:function(a,b,c,m,k){var e=this.createElement(\"img\").attr({src:a});1<arguments.length&&e.attr({x:b,y:c,width:m,height:k});return e},createElement:function(a){return\"rect\"===a?this.symbol(a):z.prototype.createElement.call(this,\na)},invertChild:function(a,c){var e=this;c=c.style;var m=\"IMG\"===a.tagName&&a.style;I(a,{flip:\"x\",left:b(c.width)-(m?b(m.top):1),top:b(c.height)-(m?b(m.left):1),rotation:-90});l(a.childNodes,function(b){e.invertChild(b,a)})},symbols:{arc:function(a,b,c,m,k){var e=k.start,q=k.end,d=k.r||c||m;c=k.innerR;m=Math.cos(e);var r=Math.sin(e),g=Math.cos(q),B=Math.sin(q);if(0===q-e)return[\"x\"];e=[\"wa\",a-d,b-d,a+d,b+d,a+d*m,b+d*r,a+d*g,b+d*B];k.open&&!c&&e.push(\"e\",\"M\",a,b);e.push(\"at\",a-c,b-c,a+c,b+c,a+c*g,\nb+c*B,a+c*m,b+c*r,\"x\",\"e\");e.isArc=!0;return e},circle:function(a,b,c,m,k){k&&h(k.r)&&(c=m=2*k.r);k&&k.isCircle&&(a-=c/2,b-=m/2);return[\"wa\",a,b,a+c,b+m,a+c,b+m/2,a+c,b+m/2,\"e\"]},rect:function(a,b,c,m,k){return z.prototype.symbols[h(k)&&k.r?\"callout\":\"square\"].call(0,a,b,c,m,k)}}},a.VMLRenderer=D=function(){this.init.apply(this,arguments)},D.prototype=t(z.prototype,C),a.Renderer=D);z.prototype.measureSpanWidth=function(a,b){var c=v.createElement(\"span\");a=v.createTextNode(a);c.appendChild(a);I(c,\nb);this.box.appendChild(c);b=c.offsetWidth;p(c);return b}})(L);(function(a){function D(){var h=a.defaultOptions.global,l,u=h.useUTC,d=u?\"getUTC\":\"get\",c=u?\"setUTC\":\"set\";a.Date=l=h.Date||p.Date;l.hcTimezoneOffset=u&&h.timezoneOffset;l.hcGetTimezoneOffset=u&&h.getTimezoneOffset;l.hcMakeTime=function(a,c,d,m,b,q){var n;u?(n=l.UTC.apply(0,arguments),n+=I(n)):n=(new l(a,c,f(d,1),f(m,0),f(b,0),f(q,0))).getTime();return n};G(\"Minutes Hours Day Date Month FullYear\".split(\" \"),function(a){l[\"hcGet\"+a]=d+\na});G(\"Milliseconds Seconds Minutes Hours Date Month FullYear\".split(\" \"),function(a){l[\"hcSet\"+a]=c+a})}var C=a.color,G=a.each,I=a.getTZOffset,h=a.merge,f=a.pick,p=a.win;a.defaultOptions={colors:\"#7cb5ec #434348 #90ed7d #f7a35c #8085e9 #f15c80 #e4d354 #2b908f #f45b5b #91e8e1\".split(\" \"),symbols:[\"circle\",\"diamond\",\"square\",\"triangle\",\"triangle-down\"],lang:{loading:\"Loading...\",months:\"January February March April May June July August September October November December\".split(\" \"),shortMonths:\"Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec\".split(\" \"),\nweekdays:\"Sunday Monday Tuesday Wednesday Thursday Friday Saturday\".split(\" \"),decimalPoint:\".\",numericSymbols:\"kMGTPE\".split(\"\"),resetZoom:\"Reset zoom\",resetZoomTitle:\"Reset zoom level 1:1\",thousandsSep:\" \"},global:{useUTC:!0,VMLRadialGradientURL:\"http://code.highcharts.com/5.0.6/gfx/vml-radial-gradient.png\"},chart:{borderRadius:0,defaultSeriesType:\"line\",ignoreHiddenSeries:!0,spacing:[10,10,15,10],resetZoomButton:{theme:{zIndex:20},position:{align:\"right\",x:-10,y:10}},width:null,height:null,borderColor:\"#335cad\",\nbackgroundColor:\"#ffffff\",plotBorderColor:\"#cccccc\"},title:{text:\"Chart title\",align:\"center\",margin:15,widthAdjust:-44},subtitle:{text:\"\",align:\"center\",widthAdjust:-44},plotOptions:{},labels:{style:{position:\"absolute\",color:\"#333333\"}},legend:{enabled:!0,align:\"center\",layout:\"horizontal\",labelFormatter:function(){return this.name},borderColor:\"#999999\",borderRadius:0,navigation:{activeColor:\"#003399\",inactiveColor:\"#cccccc\"},itemStyle:{color:\"#333333\",fontSize:\"12px\",fontWeight:\"bold\"},itemHoverStyle:{color:\"#000000\"},\nitemHiddenStyle:{color:\"#cccccc\"},shadow:!1,itemCheckboxStyle:{position:\"absolute\",width:\"13px\",height:\"13px\"},squareSymbol:!0,symbolPadding:5,verticalAlign:\"bottom\",x:0,y:0,title:{style:{fontWeight:\"bold\"}}},loading:{labelStyle:{fontWeight:\"bold\",position:\"relative\",top:\"45%\"},style:{position:\"absolute\",backgroundColor:\"#ffffff\",opacity:.5,textAlign:\"center\"}},tooltip:{enabled:!0,animation:a.svg,borderRadius:3,dateTimeLabelFormats:{millisecond:\"%A, %b %e, %H:%M:%S.%L\",second:\"%A, %b %e, %H:%M:%S\",\nminute:\"%A, %b %e, %H:%M\",hour:\"%A, %b %e, %H:%M\",day:\"%A, %b %e, %Y\",week:\"Week from %A, %b %e, %Y\",month:\"%B %Y\",year:\"%Y\"},footerFormat:\"\",padding:8,snap:a.isTouchDevice?25:10,backgroundColor:C(\"#f7f7f7\").setOpacity(.85).get(),borderWidth:1,headerFormat:'\\x3cspan style\\x3d\"font-size: 10px\"\\x3e{point.key}\\x3c/span\\x3e\\x3cbr/\\x3e',pointFormat:'\\x3cspan style\\x3d\"color:{point.color}\"\\x3e\\u25cf\\x3c/span\\x3e {series.name}: \\x3cb\\x3e{point.y}\\x3c/b\\x3e\\x3cbr/\\x3e',shadow:!0,style:{color:\"#333333\",cursor:\"default\",\nfontSize:\"12px\",pointerEvents:\"none\",whiteSpace:\"nowrap\"}},credits:{enabled:!0,href:\"http://www.highcharts.com\",position:{align:\"right\",x:-10,verticalAlign:\"bottom\",y:-5},style:{cursor:\"pointer\",color:\"#999999\",fontSize:\"9px\"},text:\"\"}};a.setOptions=function(f){a.defaultOptions=h(!0,a.defaultOptions,f);D();return a.defaultOptions};a.getOptions=function(){return a.defaultOptions};a.defaultPlotOptions=a.defaultOptions.plotOptions;D()})(L);(function(a){var D=a.arrayMax,C=a.arrayMin,G=a.defined,\nI=a.destroyObjectProperties,h=a.each,f=a.erase,p=a.merge,v=a.pick;a.PlotLineOrBand=function(a,f){this.axis=a;f&&(this.options=f,this.id=f.id)};a.PlotLineOrBand.prototype={render:function(){var a=this,f=a.axis,d=f.horiz,c=a.options,n=c.label,h=a.label,t=c.to,m=c.from,b=c.value,q=G(m)&&G(t),z=G(b),F=a.svgElem,e=!F,r=[],x,A=c.color,k=v(c.zIndex,0),w=c.events,r={\"class\":\"highcharts-plot-\"+(q?\"band \":\"line \")+(c.className||\"\")},K={},J=f.chart.renderer,N=q?\"bands\":\"lines\",g=f.log2lin;f.isLog&&(m=g(m),t=\ng(t),b=g(b));z?(r={stroke:A,\"stroke-width\":c.width},c.dashStyle&&(r.dashstyle=c.dashStyle)):q&&(A&&(r.fill=A),c.borderWidth&&(r.stroke=c.borderColor,r[\"stroke-width\"]=c.borderWidth));K.zIndex=k;N+=\"-\"+k;(A=f[N])||(f[N]=A=J.g(\"plot-\"+N).attr(K).add());e&&(a.svgElem=F=J.path().attr(r).add(A));if(z)r=f.getPlotLinePath(b,F.strokeWidth());else if(q)r=f.getPlotBandPath(m,t,c);else return;if(e&&r&&r.length){if(F.attr({d:r}),w)for(x in c=function(g){F.on(g,function(b){w[g].apply(a,[b])})},w)c(x)}else F&&\n(r?(F.show(),F.animate({d:r})):(F.hide(),h&&(a.label=h=h.destroy())));n&&G(n.text)&&r&&r.length&&0<f.width&&0<f.height&&!r.flat?(n=p({align:d&&q&&\"center\",x:d?!q&&4:10,verticalAlign:!d&&q&&\"middle\",y:d?q?16:10:q?6:-4,rotation:d&&!q&&90},n),this.renderLabel(n,r,q,k)):h&&h.hide();return a},renderLabel:function(a,f,d,c){var n=this.label,l=this.axis.chart.renderer;n||(n={align:a.textAlign||a.align,rotation:a.rotation,\"class\":\"highcharts-plot-\"+(d?\"band\":\"line\")+\"-label \"+(a.className||\"\")},n.zIndex=c,\nthis.label=n=l.text(a.text,0,0,a.useHTML).attr(n).add(),n.css(a.style));c=[f[1],f[4],d?f[6]:f[1]];f=[f[2],f[5],d?f[7]:f[2]];d=C(c);l=C(f);n.align(a,!1,{x:d,y:l,width:D(c)-d,height:D(f)-l});n.show()},destroy:function(){f(this.axis.plotLinesAndBands,this);delete this.axis;I(this)}};a.AxisPlotLineOrBandExtension={getPlotBandPath:function(a,f){f=this.getPlotLinePath(f,null,null,!0);(a=this.getPlotLinePath(a,null,null,!0))&&f?(a.flat=a.toString()===f.toString(),a.push(f[4],f[5],f[1],f[2],\"z\")):a=null;\nreturn a},addPlotBand:function(a){return this.addPlotBandOrLine(a,\"plotBands\")},addPlotLine:function(a){return this.addPlotBandOrLine(a,\"plotLines\")},addPlotBandOrLine:function(f,h){var d=(new a.PlotLineOrBand(this,f)).render(),c=this.userOptions;d&&(h&&(c[h]=c[h]||[],c[h].push(f)),this.plotLinesAndBands.push(d));return d},removePlotBandOrLine:function(a){for(var l=this.plotLinesAndBands,d=this.options,c=this.userOptions,n=l.length;n--;)l[n].id===a&&l[n].destroy();h([d.plotLines||[],c.plotLines||\n[],d.plotBands||[],c.plotBands||[]],function(c){for(n=c.length;n--;)c[n].id===a&&f(c,c[n])})}}})(L);(function(a){var D=a.correctFloat,C=a.defined,G=a.destroyObjectProperties,I=a.isNumber,h=a.merge,f=a.pick,p=a.deg2rad;a.Tick=function(a,f,h,d){this.axis=a;this.pos=f;this.type=h||\"\";this.isNew=!0;h||d||this.addLabel()};a.Tick.prototype={addLabel:function(){var a=this.axis,l=a.options,p=a.chart,d=a.categories,c=a.names,n=this.pos,y=l.labels,t=a.tickPositions,m=n===t[0],b=n===t[t.length-1],c=d?f(d[n],\nc[n],n):n,d=this.label,t=t.info,q;a.isDatetimeAxis&&t&&(q=l.dateTimeLabelFormats[t.higherRanks[n]||t.unitName]);this.isFirst=m;this.isLast=b;l=a.labelFormatter.call({axis:a,chart:p,isFirst:m,isLast:b,dateTimeLabelFormat:q,value:a.isLog?D(a.lin2log(c)):c});C(d)?d&&d.attr({text:l}):(this.labelLength=(this.label=d=C(l)&&y.enabled?p.renderer.text(l,0,0,y.useHTML).css(h(y.style)).add(a.labelGroup):null)&&d.getBBox().width,this.rotation=0)},getLabelSize:function(){return this.label?this.label.getBBox()[this.axis.horiz?\n\"height\":\"width\"]:0},handleOverflow:function(a){var l=this.axis,h=a.x,d=l.chart.chartWidth,c=l.chart.spacing,n=f(l.labelLeft,Math.min(l.pos,c[3])),c=f(l.labelRight,Math.max(l.pos+l.len,d-c[1])),y=this.label,t=this.rotation,m={left:0,center:.5,right:1}[l.labelAlign],b=y.getBBox().width,q=l.getSlotWidth(),z=q,F=1,e,r={};if(t)0>t&&h-m*b<n?e=Math.round(h/Math.cos(t*p)-n):0<t&&h+m*b>c&&(e=Math.round((d-h)/Math.cos(t*p)));else if(d=h+(1-m)*b,h-m*b<n?z=a.x+z*(1-m)-n:d>c&&(z=c-a.x+z*m,F=-1),z=Math.min(q,\nz),z<q&&\"center\"===l.labelAlign&&(a.x+=F*(q-z-m*(q-Math.min(b,z)))),b>z||l.autoRotation&&(y.styles||{}).width)e=z;e&&(r.width=e,(l.options.labels.style||{}).textOverflow||(r.textOverflow=\"ellipsis\"),y.css(r))},getPosition:function(a,f,h,d){var c=this.axis,n=c.chart,l=d&&n.oldChartHeight||n.chartHeight;return{x:a?c.translate(f+h,null,null,d)+c.transB:c.left+c.offset+(c.opposite?(d&&n.oldChartWidth||n.chartWidth)-c.right-c.left:0),y:a?l-c.bottom+c.offset-(c.opposite?c.height:0):l-c.translate(f+h,null,\nnull,d)-c.transB}},getLabelPosition:function(a,f,h,d,c,n,y,t){var m=this.axis,b=m.transA,q=m.reversed,z=m.staggerLines,l=m.tickRotCorr||{x:0,y:0},e=c.y;C(e)||(e=0===m.side?h.rotation?-8:-h.getBBox().height:2===m.side?l.y+8:Math.cos(h.rotation*p)*(l.y-h.getBBox(!1,0).height/2));a=a+c.x+l.x-(n&&d?n*b*(q?-1:1):0);f=f+e-(n&&!d?n*b*(q?1:-1):0);z&&(h=y/(t||1)%z,m.opposite&&(h=z-h-1),f+=m.labelOffset/z*h);return{x:a,y:Math.round(f)}},getMarkPath:function(a,f,h,d,c,n){return n.crispLine([\"M\",a,f,\"L\",a+(c?\n0:-h),f+(c?h:0)],d)},render:function(a,l,h){var d=this.axis,c=d.options,n=d.chart.renderer,p=d.horiz,t=this.type,m=this.label,b=this.pos,q=c.labels,z=this.gridLine,F=t?t+\"Tick\":\"tick\",e=d.tickSize(F),r=this.mark,x=!r,A=q.step,k={},w=!0,K=d.tickmarkOffset,J=this.getPosition(p,b,K,l),u=J.x,J=J.y,g=p&&u===d.pos+d.len||!p&&J===d.pos?-1:1,B=t?t+\"Grid\":\"grid\",S=c[B+\"LineWidth\"],M=c[B+\"LineColor\"],v=c[B+\"LineDashStyle\"],B=f(c[F+\"Width\"],!t&&d.isXAxis?1:0),F=c[F+\"Color\"];h=f(h,1);this.isActive=!0;z||(k.stroke=\nM,k[\"stroke-width\"]=S,v&&(k.dashstyle=v),t||(k.zIndex=1),l&&(k.opacity=0),this.gridLine=z=n.path().attr(k).addClass(\"highcharts-\"+(t?t+\"-\":\"\")+\"grid-line\").add(d.gridGroup));if(!l&&z&&(b=d.getPlotLinePath(b+K,z.strokeWidth()*g,l,!0)))z[this.isNew?\"attr\":\"animate\"]({d:b,opacity:h});e&&(d.opposite&&(e[0]=-e[0]),x&&(this.mark=r=n.path().addClass(\"highcharts-\"+(t?t+\"-\":\"\")+\"tick\").add(d.axisGroup),r.attr({stroke:F,\"stroke-width\":B})),r[x?\"attr\":\"animate\"]({d:this.getMarkPath(u,J,e[0],r.strokeWidth()*\ng,p,n),opacity:h}));m&&I(u)&&(m.xy=J=this.getLabelPosition(u,J,m,p,q,K,a,A),this.isFirst&&!this.isLast&&!f(c.showFirstLabel,1)||this.isLast&&!this.isFirst&&!f(c.showLastLabel,1)?w=!1:!p||d.isRadial||q.step||q.rotation||l||0===h||this.handleOverflow(J),A&&a%A&&(w=!1),w&&I(J.y)?(J.opacity=h,m[this.isNew?\"attr\":\"animate\"](J)):m.attr(\"y\",-9999),this.isNew=!1)},destroy:function(){G(this,this.axis)}}})(L);(function(a){var D=a.addEvent,C=a.animObject,G=a.arrayMax,I=a.arrayMin,h=a.AxisPlotLineOrBandExtension,\nf=a.color,p=a.correctFloat,v=a.defaultOptions,l=a.defined,u=a.deg2rad,d=a.destroyObjectProperties,c=a.each,n=a.extend,y=a.fireEvent,t=a.format,m=a.getMagnitude,b=a.grep,q=a.inArray,z=a.isArray,F=a.isNumber,e=a.isString,r=a.merge,x=a.normalizeTickInterval,A=a.pick,k=a.PlotLineOrBand,w=a.removeEvent,K=a.splat,J=a.syncTimeout,N=a.Tick;a.Axis=function(){this.init.apply(this,arguments)};a.Axis.prototype={defaultOptions:{dateTimeLabelFormats:{millisecond:\"%H:%M:%S.%L\",second:\"%H:%M:%S\",minute:\"%H:%M\",hour:\"%H:%M\",\nday:\"%e. %b\",week:\"%e. %b\",month:\"%b '%y\",year:\"%Y\"},endOnTick:!1,labels:{enabled:!0,style:{color:\"#666666\",cursor:\"default\",fontSize:\"11px\"},x:0},minPadding:.01,maxPadding:.01,minorTickLength:2,minorTickPosition:\"outside\",startOfWeek:1,startOnTick:!1,tickLength:10,tickmarkPlacement:\"between\",tickPixelInterval:100,tickPosition:\"outside\",title:{align:\"middle\",style:{color:\"#666666\"}},type:\"linear\",minorGridLineColor:\"#f2f2f2\",minorGridLineWidth:1,minorTickColor:\"#999999\",lineColor:\"#ccd6eb\",lineWidth:1,\ngridLineColor:\"#e6e6e6\",tickColor:\"#ccd6eb\"},defaultYAxisOptions:{endOnTick:!0,tickPixelInterval:72,showLastLabel:!0,labels:{x:-8},maxPadding:.05,minPadding:.05,startOnTick:!0,title:{rotation:270,text:\"Values\"},stackLabels:{enabled:!1,formatter:function(){return a.numberFormat(this.total,-1)},style:{fontSize:\"11px\",fontWeight:\"bold\",color:\"#000000\",textOutline:\"1px contrast\"}},gridLineWidth:1,lineWidth:0},defaultLeftAxisOptions:{labels:{x:-15},title:{rotation:270}},defaultRightAxisOptions:{labels:{x:15},\ntitle:{rotation:90}},defaultBottomAxisOptions:{labels:{autoRotation:[-45],x:0},title:{rotation:0}},defaultTopAxisOptions:{labels:{autoRotation:[-45],x:0},title:{rotation:0}},init:function(a,b){var g=b.isX;this.chart=a;this.horiz=a.inverted?!g:g;this.isXAxis=g;this.coll=this.coll||(g?\"xAxis\":\"yAxis\");this.opposite=b.opposite;this.side=b.side||(this.horiz?this.opposite?0:2:this.opposite?1:3);this.setOptions(b);var c=this.options,e=c.type;this.labelFormatter=c.labels.formatter||this.defaultLabelFormatter;\nthis.userOptions=b;this.minPixelPadding=0;this.reversed=c.reversed;this.visible=!1!==c.visible;this.zoomEnabled=!1!==c.zoomEnabled;this.hasNames=\"category\"===e||!0===c.categories;this.categories=c.categories||this.hasNames;this.names=this.names||[];this.isLog=\"logarithmic\"===e;this.isDatetimeAxis=\"datetime\"===e;this.isLinked=l(c.linkedTo);this.ticks={};this.labelEdge=[];this.minorTicks={};this.plotLinesAndBands=[];this.alternateBands={};this.len=0;this.minRange=this.userMinRange=c.minRange||c.maxZoom;\nthis.range=c.range;this.offset=c.offset||0;this.stacks={};this.oldStacks={};this.stacksTouched=0;this.min=this.max=null;this.crosshair=A(c.crosshair,K(a.options.tooltip.crosshairs)[g?0:1],!1);var k;b=this.options.events;-1===q(this,a.axes)&&(g?a.axes.splice(a.xAxis.length,0,this):a.axes.push(this),a[this.coll].push(this));this.series=this.series||[];a.inverted&&g&&void 0===this.reversed&&(this.reversed=!0);this.removePlotLine=this.removePlotBand=this.removePlotBandOrLine;for(k in b)D(this,k,b[k]);\nthis.isLog&&(this.val2lin=this.log2lin,this.lin2val=this.lin2log)},setOptions:function(a){this.options=r(this.defaultOptions,\"yAxis\"===this.coll&&this.defaultYAxisOptions,[this.defaultTopAxisOptions,this.defaultRightAxisOptions,this.defaultBottomAxisOptions,this.defaultLeftAxisOptions][this.side],r(v[this.coll],a))},defaultLabelFormatter:function(){var g=this.axis,b=this.value,c=g.categories,e=this.dateTimeLabelFormat,k=v.lang,m=k.numericSymbols,k=k.numericSymbolMagnitude||1E3,q=m&&m.length,d,r=g.options.labels.format,\ng=g.isLog?b:g.tickInterval;if(r)d=t(r,this);else if(c)d=b;else if(e)d=a.dateFormat(e,b);else if(q&&1E3<=g)for(;q--&&void 0===d;)c=Math.pow(k,q+1),g>=c&&0===10*b%c&&null!==m[q]&&0!==b&&(d=a.numberFormat(b/c,-1)+m[q]);void 0===d&&(d=1E4<=Math.abs(b)?a.numberFormat(b,-1):a.numberFormat(b,-1,void 0,\"\"));return d},getSeriesExtremes:function(){var a=this,e=a.chart;a.hasVisibleSeries=!1;a.dataMin=a.dataMax=a.threshold=null;a.softThreshold=!a.isXAxis;a.buildStacks&&a.buildStacks();c(a.series,function(g){if(g.visible||\n!e.options.chart.ignoreHiddenSeries){var c=g.options,k=c.threshold,B;a.hasVisibleSeries=!0;a.isLog&&0>=k&&(k=null);if(a.isXAxis)c=g.xData,c.length&&(g=I(c),F(g)||g instanceof Date||(c=b(c,function(a){return F(a)}),g=I(c)),a.dataMin=Math.min(A(a.dataMin,c[0]),g),a.dataMax=Math.max(A(a.dataMax,c[0]),G(c)));else if(g.getExtremes(),B=g.dataMax,g=g.dataMin,l(g)&&l(B)&&(a.dataMin=Math.min(A(a.dataMin,g),g),a.dataMax=Math.max(A(a.dataMax,B),B)),l(k)&&(a.threshold=k),!c.softThreshold||a.isLog)a.softThreshold=\n!1}})},translate:function(a,b,c,e,k,m){var g=this.linkedParent||this,B=1,q=0,d=e?g.oldTransA:g.transA;e=e?g.oldMin:g.min;var r=g.minPixelPadding;k=(g.isOrdinal||g.isBroken||g.isLog&&k)&&g.lin2val;d||(d=g.transA);c&&(B*=-1,q=g.len);g.reversed&&(B*=-1,q-=B*(g.sector||g.len));b?(a=(a*B+q-r)/d+e,k&&(a=g.lin2val(a))):(k&&(a=g.val2lin(a)),a=B*(a-e)*d+q+B*r+(F(m)?d*m:0));return a},toPixels:function(a,b){return this.translate(a,!1,!this.horiz,null,!0)+(b?0:this.pos)},toValue:function(a,b){return this.translate(a-\n(b?0:this.pos),!0,!this.horiz,null,!0)},getPlotLinePath:function(a,b,c,e,k){var g=this.chart,B=this.left,m=this.top,q,d,r=c&&g.oldChartHeight||g.chartHeight,n=c&&g.oldChartWidth||g.chartWidth,f;q=this.transB;var w=function(a,g,b){if(a<g||a>b)e?a=Math.min(Math.max(g,a),b):f=!0;return a};k=A(k,this.translate(a,null,null,c));a=c=Math.round(k+q);q=d=Math.round(r-k-q);F(k)?this.horiz?(q=m,d=r-this.bottom,a=c=w(a,B,B+this.width)):(a=B,c=n-this.right,q=d=w(q,m,m+this.height)):f=!0;return f&&!e?null:g.renderer.crispLine([\"M\",\na,q,\"L\",c,d],b||1)},getLinearTickPositions:function(a,b,c){var g,k=p(Math.floor(b/a)*a),e=p(Math.ceil(c/a)*a),B=[];if(b===c&&F(b))return[b];for(b=k;b<=e;){B.push(b);b=p(b+a);if(b===g)break;g=b}return B},getMinorTickPositions:function(){var a=this.options,b=this.tickPositions,c=this.minorTickInterval,k=[],e,m=this.pointRangePadding||0;e=this.min-m;var m=this.max+m,q=m-e;if(q&&q/c<this.len/3)if(this.isLog)for(m=b.length,e=1;e<m;e++)k=k.concat(this.getLogTickPositions(c,b[e-1],b[e],!0));else if(this.isDatetimeAxis&&\n\"auto\"===a.minorTickInterval)k=k.concat(this.getTimeTicks(this.normalizeTimeTickInterval(c),e,m,a.startOfWeek));else for(b=e+(b[0]-e)%c;b<=m&&b!==k[0];b+=c)k.push(b);0!==k.length&&this.trimTicks(k,a.startOnTick,a.endOnTick);return k},adjustForMinRange:function(){var a=this.options,b=this.min,k=this.max,e,m=this.dataMax-this.dataMin>=this.minRange,q,d,r,f,n,w;this.isXAxis&&void 0===this.minRange&&!this.isLog&&(l(a.min)||l(a.max)?this.minRange=null:(c(this.series,function(a){f=a.xData;for(d=n=a.xIncrement?\n1:f.length-1;0<d;d--)if(r=f[d]-f[d-1],void 0===q||r<q)q=r}),this.minRange=Math.min(5*q,this.dataMax-this.dataMin)));k-b<this.minRange&&(w=this.minRange,e=(w-k+b)/2,e=[b-e,A(a.min,b-e)],m&&(e[2]=this.isLog?this.log2lin(this.dataMin):this.dataMin),b=G(e),k=[b+w,A(a.max,b+w)],m&&(k[2]=this.isLog?this.log2lin(this.dataMax):this.dataMax),k=I(k),k-b<w&&(e[0]=k-w,e[1]=A(a.min,k-w),b=G(e)));this.min=b;this.max=k},getClosest:function(){var a;this.categories?a=1:c(this.series,function(b){var g=b.closestPointRange,\nc=b.visible||!b.chart.options.chart.ignoreHiddenSeries;!b.noSharedTooltip&&l(g)&&c&&(a=l(a)?Math.min(a,g):g)});return a},nameToX:function(a){var b=z(this.categories),g=b?this.categories:this.names,c=a.options.x,k;a.series.requireSorting=!1;l(c)||(c=!1===this.options.uniqueNames?a.series.autoIncrement():q(a.name,g));-1===c?b||(k=g.length):k=c;this.names[k]=a.name;return k},updateNames:function(){var a=this;0<this.names.length&&(this.names.length=0,this.minRange=void 0,c(this.series||[],function(b){b.xIncrement=\nnull;if(!b.points||b.isDirtyData)b.processData(),b.generatePoints();c(b.points,function(g,c){var k;g.options&&void 0===g.options.x&&(k=a.nameToX(g),k!==g.x&&(g.x=k,b.xData[c]=k))})}))},setAxisTranslation:function(a){var b=this,g=b.max-b.min,k=b.axisPointRange||0,m,q=0,d=0,r=b.linkedParent,f=!!b.categories,n=b.transA,w=b.isXAxis;if(w||f||k)m=b.getClosest(),r?(q=r.minPointOffset,d=r.pointRangePadding):c(b.series,function(a){var g=f?1:w?A(a.options.pointRange,m,0):b.axisPointRange||0;a=a.options.pointPlacement;\nk=Math.max(k,g);b.single||(q=Math.max(q,e(a)?0:g/2),d=Math.max(d,\"on\"===a?0:g))}),r=b.ordinalSlope&&m?b.ordinalSlope/m:1,b.minPointOffset=q*=r,b.pointRangePadding=d*=r,b.pointRange=Math.min(k,g),w&&(b.closestPointRange=m);a&&(b.oldTransA=n);b.translationSlope=b.transA=n=b.len/(g+d||1);b.transB=b.horiz?b.left:b.bottom;b.minPixelPadding=n*q},minFromRange:function(){return this.max-this.range},setTickInterval:function(b){var g=this,k=g.chart,e=g.options,q=g.isLog,d=g.log2lin,r=g.isDatetimeAxis,f=g.isXAxis,\nn=g.isLinked,w=e.maxPadding,t=e.minPadding,z=e.tickInterval,h=e.tickPixelInterval,K=g.categories,J=g.threshold,u=g.softThreshold,N,v,C,D;r||K||n||this.getTickAmount();C=A(g.userMin,e.min);D=A(g.userMax,e.max);n?(g.linkedParent=k[g.coll][e.linkedTo],k=g.linkedParent.getExtremes(),g.min=A(k.min,k.dataMin),g.max=A(k.max,k.dataMax),e.type!==g.linkedParent.options.type&&a.error(11,1)):(!u&&l(J)&&(g.dataMin>=J?(N=J,t=0):g.dataMax<=J&&(v=J,w=0)),g.min=A(C,N,g.dataMin),g.max=A(D,v,g.dataMax));q&&(!b&&0>=\nMath.min(g.min,A(g.dataMin,g.min))&&a.error(10,1),g.min=p(d(g.min),15),g.max=p(d(g.max),15));g.range&&l(g.max)&&(g.userMin=g.min=C=Math.max(g.min,g.minFromRange()),g.userMax=D=g.max,g.range=null);y(g,\"foundExtremes\");g.beforePadding&&g.beforePadding();g.adjustForMinRange();!(K||g.axisPointRange||g.usePercentage||n)&&l(g.min)&&l(g.max)&&(d=g.max-g.min)&&(!l(C)&&t&&(g.min-=d*t),!l(D)&&w&&(g.max+=d*w));F(e.floor)?g.min=Math.max(g.min,e.floor):F(e.softMin)&&(g.min=Math.min(g.min,e.softMin));F(e.ceiling)?\ng.max=Math.min(g.max,e.ceiling):F(e.softMax)&&(g.max=Math.max(g.max,e.softMax));u&&l(g.dataMin)&&(J=J||0,!l(C)&&g.min<J&&g.dataMin>=J?g.min=J:!l(D)&&g.max>J&&g.dataMax<=J&&(g.max=J));g.tickInterval=g.min===g.max||void 0===g.min||void 0===g.max?1:n&&!z&&h===g.linkedParent.options.tickPixelInterval?z=g.linkedParent.tickInterval:A(z,this.tickAmount?(g.max-g.min)/Math.max(this.tickAmount-1,1):void 0,K?1:(g.max-g.min)*h/Math.max(g.len,h));f&&!b&&c(g.series,function(a){a.processData(g.min!==g.oldMin||g.max!==\ng.oldMax)});g.setAxisTranslation(!0);g.beforeSetTickPositions&&g.beforeSetTickPositions();g.postProcessTickInterval&&(g.tickInterval=g.postProcessTickInterval(g.tickInterval));g.pointRange&&!z&&(g.tickInterval=Math.max(g.pointRange,g.tickInterval));b=A(e.minTickInterval,g.isDatetimeAxis&&g.closestPointRange);!z&&g.tickInterval<b&&(g.tickInterval=b);r||q||z||(g.tickInterval=x(g.tickInterval,null,m(g.tickInterval),A(e.allowDecimals,!(.5<g.tickInterval&&5>g.tickInterval&&1E3<g.max&&9999>g.max)),!!this.tickAmount));\nthis.tickAmount||(g.tickInterval=g.unsquish());this.setTickPositions()},setTickPositions:function(){var a=this.options,b,c=a.tickPositions,k=a.tickPositioner,e=a.startOnTick,m=a.endOnTick,q;this.tickmarkOffset=this.categories&&\"between\"===a.tickmarkPlacement&&1===this.tickInterval?.5:0;this.minorTickInterval=\"auto\"===a.minorTickInterval&&this.tickInterval?this.tickInterval/5:a.minorTickInterval;this.tickPositions=b=c&&c.slice();!b&&(b=this.isDatetimeAxis?this.getTimeTicks(this.normalizeTimeTickInterval(this.tickInterval,\na.units),this.min,this.max,a.startOfWeek,this.ordinalPositions,this.closestPointRange,!0):this.isLog?this.getLogTickPositions(this.tickInterval,this.min,this.max):this.getLinearTickPositions(this.tickInterval,this.min,this.max),b.length>this.len&&(b=[b[0],b.pop()]),this.tickPositions=b,k&&(k=k.apply(this,[this.min,this.max])))&&(this.tickPositions=b=k);this.isLinked||(this.trimTicks(b,e,m),this.min===this.max&&l(this.min)&&!this.tickAmount&&(q=!0,this.min-=.5,this.max+=.5),this.single=q,c||k||this.adjustTickAmount())},\ntrimTicks:function(a,b,c){var g=a[0],k=a[a.length-1],e=this.minPointOffset||0;if(b)this.min=g;else for(;this.min-e>a[0];)a.shift();if(c)this.max=k;else for(;this.max+e<a[a.length-1];)a.pop();0===a.length&&l(g)&&a.push((k+g)/2)},alignToOthers:function(){var a={},b,k=this.options;!1===this.chart.options.chart.alignTicks||!1===k.alignTicks||this.isLog||c(this.chart[this.coll],function(g){var c=g.options,c=[g.horiz?c.left:c.top,c.width,c.height,c.pane].join();g.series.length&&(a[c]?b=!0:a[c]=1)});return b},\ngetTickAmount:function(){var a=this.options,b=a.tickAmount,c=a.tickPixelInterval;!l(a.tickInterval)&&this.len<c&&!this.isRadial&&!this.isLog&&a.startOnTick&&a.endOnTick&&(b=2);!b&&this.alignToOthers()&&(b=Math.ceil(this.len/c)+1);4>b&&(this.finalTickAmt=b,b=5);this.tickAmount=b},adjustTickAmount:function(){var a=this.tickInterval,b=this.tickPositions,c=this.tickAmount,k=this.finalTickAmt,e=b&&b.length;if(e<c){for(;b.length<c;)b.push(p(b[b.length-1]+a));this.transA*=(e-1)/(c-1);this.max=b[b.length-\n1]}else e>c&&(this.tickInterval*=2,this.setTickPositions());if(l(k)){for(a=c=b.length;a--;)(3===k&&1===a%2||2>=k&&0<a&&a<c-1)&&b.splice(a,1);this.finalTickAmt=void 0}},setScale:function(){var a,b;this.oldMin=this.min;this.oldMax=this.max;this.oldAxisLength=this.len;this.setAxisSize();b=this.len!==this.oldAxisLength;c(this.series,function(b){if(b.isDirtyData||b.isDirty||b.xAxis.isDirty)a=!0});b||a||this.isLinked||this.forceRedraw||this.userMin!==this.oldUserMin||this.userMax!==this.oldUserMax||this.alignToOthers()?\n(this.resetStacks&&this.resetStacks(),this.forceRedraw=!1,this.getSeriesExtremes(),this.setTickInterval(),this.oldUserMin=this.userMin,this.oldUserMax=this.userMax,this.isDirty||(this.isDirty=b||this.min!==this.oldMin||this.max!==this.oldMax)):this.cleanStacks&&this.cleanStacks()},setExtremes:function(a,b,k,e,m){var g=this,q=g.chart;k=A(k,!0);c(g.series,function(a){delete a.kdTree});m=n(m,{min:a,max:b});y(g,\"setExtremes\",m,function(){g.userMin=a;g.userMax=b;g.eventArgs=m;k&&q.redraw(e)})},zoom:function(a,\nb){var g=this.dataMin,c=this.dataMax,k=this.options,e=Math.min(g,A(k.min,g)),k=Math.max(c,A(k.max,c));if(a!==this.min||b!==this.max)this.allowZoomOutside||(l(g)&&(a<e&&(a=e),a>k&&(a=k)),l(c)&&(b<e&&(b=e),b>k&&(b=k))),this.displayBtn=void 0!==a||void 0!==b,this.setExtremes(a,b,!1,void 0,{trigger:\"zoom\"});return!0},setAxisSize:function(){var a=this.chart,b=this.options,c=b.offsetLeft||0,k=this.horiz,e=A(b.width,a.plotWidth-c+(b.offsetRight||0)),m=A(b.height,a.plotHeight),q=A(b.top,a.plotTop),b=A(b.left,\na.plotLeft+c),c=/%$/;c.test(m)&&(m=Math.round(parseFloat(m)/100*a.plotHeight));c.test(q)&&(q=Math.round(parseFloat(q)/100*a.plotHeight+a.plotTop));this.left=b;this.top=q;this.width=e;this.height=m;this.bottom=a.chartHeight-m-q;this.right=a.chartWidth-e-b;this.len=Math.max(k?e:m,0);this.pos=k?b:q},getExtremes:function(){var a=this.isLog,b=this.lin2log;return{min:a?p(b(this.min)):this.min,max:a?p(b(this.max)):this.max,dataMin:this.dataMin,dataMax:this.dataMax,userMin:this.userMin,userMax:this.userMax}},\ngetThreshold:function(a){var b=this.isLog,g=this.lin2log,c=b?g(this.min):this.min,b=b?g(this.max):this.max;null===a?a=c:c>a?a=c:b<a&&(a=b);return this.translate(a,0,1,0,1)},autoLabelAlign:function(a){a=(A(a,0)-90*this.side+720)%360;return 15<a&&165>a?\"right\":195<a&&345>a?\"left\":\"center\"},tickSize:function(a){var b=this.options,g=b[a+\"Length\"],c=A(b[a+\"Width\"],\"tick\"===a&&this.isXAxis?1:0);if(c&&g)return\"inside\"===b[a+\"Position\"]&&(g=-g),[g,c]},labelMetrics:function(){return this.chart.renderer.fontMetrics(this.options.labels.style&&\nthis.options.labels.style.fontSize,this.ticks[0]&&this.ticks[0].label)},unsquish:function(){var a=this.options.labels,b=this.horiz,k=this.tickInterval,e=k,m=this.len/(((this.categories?1:0)+this.max-this.min)/k),q,d=a.rotation,r=this.labelMetrics(),f,n=Number.MAX_VALUE,w,t=function(a){a/=m||1;a=1<a?Math.ceil(a):1;return a*k};b?(w=!a.staggerLines&&!a.step&&(l(d)?[d]:m<A(a.autoRotationLimit,80)&&a.autoRotation))&&c(w,function(a){var b;if(a===d||a&&-90<=a&&90>=a)f=t(Math.abs(r.h/Math.sin(u*a))),b=f+\nMath.abs(a/360),b<n&&(n=b,q=a,e=f)}):a.step||(e=t(r.h));this.autoRotation=w;this.labelRotation=A(q,d);return e},getSlotWidth:function(){var a=this.chart,b=this.horiz,c=this.options.labels,k=Math.max(this.tickPositions.length-(this.categories?0:1),1),e=a.margin[3];return b&&2>(c.step||0)&&!c.rotation&&(this.staggerLines||1)*a.plotWidth/k||!b&&(e&&e-a.spacing[3]||.33*a.chartWidth)},renderUnsquish:function(){var a=this.chart,b=a.renderer,k=this.tickPositions,m=this.ticks,q=this.options.labels,d=this.horiz,\nf=this.getSlotWidth(),n=Math.max(1,Math.round(f-2*(q.padding||5))),w={},t=this.labelMetrics(),z=q.style&&q.style.textOverflow,h,l=0,x,F;e(q.rotation)||(w.rotation=q.rotation||0);c(k,function(a){(a=m[a])&&a.labelLength>l&&(l=a.labelLength)});this.maxLabelLength=l;if(this.autoRotation)l>n&&l>t.h?w.rotation=this.labelRotation:this.labelRotation=0;else if(f&&(h={width:n+\"px\"},!z))for(h.textOverflow=\"clip\",x=k.length;!d&&x--;)if(F=k[x],n=m[F].label)n.styles&&\"ellipsis\"===n.styles.textOverflow?n.css({textOverflow:\"clip\"}):\nm[F].labelLength>f&&n.css({width:f+\"px\"}),n.getBBox().height>this.len/k.length-(t.h-t.f)&&(n.specCss={textOverflow:\"ellipsis\"});w.rotation&&(h={width:(l>.5*a.chartHeight?.33*a.chartHeight:a.chartHeight)+\"px\"},z||(h.textOverflow=\"ellipsis\"));if(this.labelAlign=q.align||this.autoLabelAlign(this.labelRotation))w.align=this.labelAlign;c(k,function(a){var b=(a=m[a])&&a.label;b&&(b.attr(w),h&&b.css(r(h,b.specCss)),delete b.specCss,a.rotation=w.rotation)});this.tickRotCorr=b.rotCorr(t.b,this.labelRotation||\n0,0!==this.side)},hasData:function(){return this.hasVisibleSeries||l(this.min)&&l(this.max)&&!!this.tickPositions},addTitle:function(a){var b=this.chart.renderer,g=this.horiz,c=this.opposite,k=this.options.title,e;this.axisTitle||((e=k.textAlign)||(e=(g?{low:\"left\",middle:\"center\",high:\"right\"}:{low:c?\"right\":\"left\",middle:\"center\",high:c?\"left\":\"right\"})[k.align]),this.axisTitle=b.text(k.text,0,0,k.useHTML).attr({zIndex:7,rotation:k.rotation||0,align:e}).addClass(\"highcharts-axis-title\").css(k.style).add(this.axisGroup),\nthis.axisTitle.isNew=!0);this.axisTitle[a?\"show\":\"hide\"](!0)},getOffset:function(){var a=this,b=a.chart,k=b.renderer,e=a.options,m=a.tickPositions,q=a.ticks,d=a.horiz,r=a.side,n=b.inverted?[1,0,3,2][r]:r,w,f,t=0,z,h=0,x=e.title,F=e.labels,p=0,K=b.axisOffset,b=b.clipOffset,J=[-1,1,1,-1][r],u,y=e.className,v=a.axisParent,C=this.tickSize(\"tick\");w=a.hasData();a.showAxis=f=w||A(e.showEmpty,!0);a.staggerLines=a.horiz&&F.staggerLines;a.axisGroup||(a.gridGroup=k.g(\"grid\").attr({zIndex:e.gridZIndex||1}).addClass(\"highcharts-\"+\nthis.coll.toLowerCase()+\"-grid \"+(y||\"\")).add(v),a.axisGroup=k.g(\"axis\").attr({zIndex:e.zIndex||2}).addClass(\"highcharts-\"+this.coll.toLowerCase()+\" \"+(y||\"\")).add(v),a.labelGroup=k.g(\"axis-labels\").attr({zIndex:F.zIndex||7}).addClass(\"highcharts-\"+a.coll.toLowerCase()+\"-labels \"+(y||\"\")).add(v));if(w||a.isLinked)c(m,function(b){q[b]?q[b].addLabel():q[b]=new N(a,b)}),a.renderUnsquish(),!1===F.reserveSpace||0!==r&&2!==r&&{1:\"left\",3:\"right\"}[r]!==a.labelAlign&&\"center\"!==a.labelAlign||c(m,function(a){p=\nMath.max(q[a].getLabelSize(),p)}),a.staggerLines&&(p*=a.staggerLines,a.labelOffset=p*(a.opposite?-1:1));else for(u in q)q[u].destroy(),delete q[u];x&&x.text&&!1!==x.enabled&&(a.addTitle(f),f&&(t=a.axisTitle.getBBox()[d?\"height\":\"width\"],z=x.offset,h=l(z)?0:A(x.margin,d?5:10)));a.renderLine();a.offset=J*A(e.offset,K[r]);a.tickRotCorr=a.tickRotCorr||{x:0,y:0};k=0===r?-a.labelMetrics().h:2===r?a.tickRotCorr.y:0;h=Math.abs(p)+h;p&&(h=h-k+J*(d?A(F.y,a.tickRotCorr.y+8*J):F.x));a.axisTitleMargin=A(z,h);\nK[r]=Math.max(K[r],a.axisTitleMargin+t+J*a.offset,h,w&&m.length&&C?C[0]:0);e=e.offset?0:2*Math.floor(a.axisLine.strokeWidth()/2);b[n]=Math.max(b[n],e)},getLinePath:function(a){var b=this.chart,c=this.opposite,g=this.offset,k=this.horiz,e=this.left+(c?this.width:0)+g,g=b.chartHeight-this.bottom-(c?this.height:0)+g;c&&(a*=-1);return b.renderer.crispLine([\"M\",k?this.left:e,k?g:this.top,\"L\",k?b.chartWidth-this.right:e,k?g:b.chartHeight-this.bottom],a)},renderLine:function(){this.axisLine||(this.axisLine=\nthis.chart.renderer.path().addClass(\"highcharts-axis-line\").add(this.axisGroup),this.axisLine.attr({stroke:this.options.lineColor,\"stroke-width\":this.options.lineWidth,zIndex:7}))},getTitlePosition:function(){var a=this.horiz,b=this.left,c=this.top,k=this.len,e=this.options.title,m=a?b:c,q=this.opposite,d=this.offset,r=e.x||0,n=e.y||0,w=this.chart.renderer.fontMetrics(e.style&&e.style.fontSize,this.axisTitle).f,k={low:m+(a?0:k),middle:m+k/2,high:m+(a?k:0)}[e.align],b=(a?c+this.height:b)+(a?1:-1)*\n(q?-1:1)*this.axisTitleMargin+(2===this.side?w:0);return{x:a?k+r:b+(q?this.width:0)+d+r,y:a?b+n-(q?this.height:0)+d:k+n}},render:function(){var a=this,b=a.chart,e=b.renderer,m=a.options,q=a.isLog,d=a.lin2log,r=a.isLinked,n=a.tickPositions,w=a.axisTitle,f=a.ticks,t=a.minorTicks,z=a.alternateBands,h=m.stackLabels,l=m.alternateGridColor,x=a.tickmarkOffset,p=a.axisLine,A=b.hasRendered&&F(a.oldMin),K=a.showAxis,u=C(e.globalAnimation),y,v;a.labelEdge.length=0;a.overlap=!1;c([f,t,z],function(a){for(var b in a)a[b].isActive=\n!1});if(a.hasData()||r)a.minorTickInterval&&!a.categories&&c(a.getMinorTickPositions(),function(b){t[b]||(t[b]=new N(a,b,\"minor\"));A&&t[b].isNew&&t[b].render(null,!0);t[b].render(null,!1,1)}),n.length&&(c(n,function(b,c){if(!r||b>=a.min&&b<=a.max)f[b]||(f[b]=new N(a,b)),A&&f[b].isNew&&f[b].render(c,!0,.1),f[b].render(c)}),x&&(0===a.min||a.single)&&(f[-1]||(f[-1]=new N(a,-1,null,!0)),f[-1].render(-1))),l&&c(n,function(c,g){v=void 0!==n[g+1]?n[g+1]+x:a.max-x;0===g%2&&c<a.max&&v<=a.max+(b.polar?-x:x)&&\n(z[c]||(z[c]=new k(a)),y=c+x,z[c].options={from:q?d(y):y,to:q?d(v):v,color:l},z[c].render(),z[c].isActive=!0)}),a._addedPlotLB||(c((m.plotLines||[]).concat(m.plotBands||[]),function(b){a.addPlotBandOrLine(b)}),a._addedPlotLB=!0);c([f,t,z],function(a){var c,g,k=[],e=u.duration;for(c in a)a[c].isActive||(a[c].render(c,!1,0),a[c].isActive=!1,k.push(c));J(function(){for(g=k.length;g--;)a[k[g]]&&!a[k[g]].isActive&&(a[k[g]].destroy(),delete a[k[g]])},a!==z&&b.hasRendered&&e?e:0)});p&&(p[p.isPlaced?\"animate\":\n\"attr\"]({d:this.getLinePath(p.strokeWidth())}),p.isPlaced=!0,p[K?\"show\":\"hide\"](!0));w&&K&&(w[w.isNew?\"attr\":\"animate\"](a.getTitlePosition()),w.isNew=!1);h&&h.enabled&&a.renderStackTotals();a.isDirty=!1},redraw:function(){this.visible&&(this.render(),c(this.plotLinesAndBands,function(a){a.render()}));c(this.series,function(a){a.isDirty=!0})},keepProps:\"extKey hcEvents names series userMax userMin\".split(\" \"),destroy:function(a){var b=this,g=b.stacks,k,e=b.plotLinesAndBands,m;a||w(b);for(k in g)d(g[k]),\ng[k]=null;c([b.ticks,b.minorTicks,b.alternateBands],function(a){d(a)});if(e)for(a=e.length;a--;)e[a].destroy();c(\"stackTotalGroup axisLine axisTitle axisGroup gridGroup labelGroup cross\".split(\" \"),function(a){b[a]&&(b[a]=b[a].destroy())});for(m in b)b.hasOwnProperty(m)&&-1===q(m,b.keepProps)&&delete b[m]},drawCrosshair:function(a,b){var c,g=this.crosshair,k=A(g.snap,!0),e,m=this.cross;a||(a=this.cross&&this.cross.e);this.crosshair&&!1!==(l(b)||!k)?(k?l(b)&&(e=this.isXAxis?b.plotX:this.len-b.plotY):\ne=a&&(this.horiz?a.chartX-this.pos:this.len-a.chartY+this.pos),l(e)&&(c=this.getPlotLinePath(b&&(this.isXAxis?b.x:A(b.stackY,b.y)),null,null,null,e)||null),l(c)?(b=this.categories&&!this.isRadial,m||(this.cross=m=this.chart.renderer.path().addClass(\"highcharts-crosshair highcharts-crosshair-\"+(b?\"category \":\"thin \")+g.className).attr({zIndex:A(g.zIndex,2)}).add(),m.attr({stroke:g.color||(b?f(\"#ccd6eb\").setOpacity(.25).get():\"#cccccc\"),\"stroke-width\":A(g.width,1)}),g.dashStyle&&m.attr({dashstyle:g.dashStyle})),\nm.show().attr({d:c}),b&&!g.width&&m.attr({\"stroke-width\":this.transA}),this.cross.e=a):this.hideCrosshair()):this.hideCrosshair()},hideCrosshair:function(){this.cross&&this.cross.hide()}};n(a.Axis.prototype,h)})(L);(function(a){var D=a.Axis,C=a.Date,G=a.dateFormat,I=a.defaultOptions,h=a.defined,f=a.each,p=a.extend,v=a.getMagnitude,l=a.getTZOffset,u=a.normalizeTickInterval,d=a.pick,c=a.timeUnits;D.prototype.getTimeTicks=function(a,y,t,m){var b=[],q={},n=I.global.useUTC,F,e=new C(y-l(y)),r=C.hcMakeTime,\nx=a.unitRange,A=a.count,k;if(h(y)){e[C.hcSetMilliseconds](x>=c.second?0:A*Math.floor(e.getMilliseconds()/A));if(x>=c.second)e[C.hcSetSeconds](x>=c.minute?0:A*Math.floor(e.getSeconds()/A));if(x>=c.minute)e[C.hcSetMinutes](x>=c.hour?0:A*Math.floor(e[C.hcGetMinutes]()/A));if(x>=c.hour)e[C.hcSetHours](x>=c.day?0:A*Math.floor(e[C.hcGetHours]()/A));if(x>=c.day)e[C.hcSetDate](x>=c.month?1:A*Math.floor(e[C.hcGetDate]()/A));x>=c.month&&(e[C.hcSetMonth](x>=c.year?0:A*Math.floor(e[C.hcGetMonth]()/A)),F=e[C.hcGetFullYear]());\nif(x>=c.year)e[C.hcSetFullYear](F-F%A);if(x===c.week)e[C.hcSetDate](e[C.hcGetDate]()-e[C.hcGetDay]()+d(m,1));F=e[C.hcGetFullYear]();m=e[C.hcGetMonth]();var w=e[C.hcGetDate](),K=e[C.hcGetHours]();if(C.hcTimezoneOffset||C.hcGetTimezoneOffset)k=(!n||!!C.hcGetTimezoneOffset)&&(t-y>4*c.month||l(y)!==l(t)),e=e.getTime(),e=new C(e+l(e));n=e.getTime();for(y=1;n<t;)b.push(n),n=x===c.year?r(F+y*A,0):x===c.month?r(F,m+y*A):!k||x!==c.day&&x!==c.week?k&&x===c.hour?r(F,m,w,K+y*A):n+x*A:r(F,m,w+y*A*(x===c.day?1:\n7)),y++;b.push(n);x<=c.hour&&f(b,function(a){\"000000000\"===G(\"%H%M%S%L\",a)&&(q[a]=\"day\")})}b.info=p(a,{higherRanks:q,totalRange:x*A});return b};D.prototype.normalizeTimeTickInterval=function(a,d){var f=d||[[\"millisecond\",[1,2,5,10,20,25,50,100,200,500]],[\"second\",[1,2,5,10,15,30]],[\"minute\",[1,2,5,10,15,30]],[\"hour\",[1,2,3,4,6,8,12]],[\"day\",[1,2]],[\"week\",[1,2]],[\"month\",[1,2,3,4,6]],[\"year\",null]];d=f[f.length-1];var m=c[d[0]],b=d[1],q;for(q=0;q<f.length&&!(d=f[q],m=c[d[0]],b=d[1],f[q+1]&&a<=(m*\nb[b.length-1]+c[f[q+1][0]])/2);q++);m===c.year&&a<5*m&&(b=[1,2,5]);a=u(a/m,b,\"year\"===d[0]?Math.max(v(a/m),1):1);return{unitRange:m,count:a,unitName:d[0]}}})(L);(function(a){var D=a.Axis,C=a.getMagnitude,G=a.map,I=a.normalizeTickInterval,h=a.pick;D.prototype.getLogTickPositions=function(a,p,v,l){var f=this.options,d=this.len,c=this.lin2log,n=this.log2lin,y=[];l||(this._minorAutoInterval=null);if(.5<=a)a=Math.round(a),y=this.getLinearTickPositions(a,p,v);else if(.08<=a)for(var d=Math.floor(p),t,m,\nb,q,z,f=.3<a?[1,2,4]:.15<a?[1,2,4,6,8]:[1,2,3,4,5,6,7,8,9];d<v+1&&!z;d++)for(m=f.length,t=0;t<m&&!z;t++)b=n(c(d)*f[t]),b>p&&(!l||q<=v)&&void 0!==q&&y.push(q),q>v&&(z=!0),q=b;else p=c(p),v=c(v),a=f[l?\"minorTickInterval\":\"tickInterval\"],a=h(\"auto\"===a?null:a,this._minorAutoInterval,f.tickPixelInterval/(l?5:1)*(v-p)/((l?d/this.tickPositions.length:d)||1)),a=I(a,null,C(a)),y=G(this.getLinearTickPositions(a,p,v),n),l||(this._minorAutoInterval=a/5);l||(this.tickInterval=a);return y};D.prototype.log2lin=\nfunction(a){return Math.log(a)/Math.LN10};D.prototype.lin2log=function(a){return Math.pow(10,a)}})(L);(function(a){var D=a.dateFormat,C=a.each,G=a.extend,I=a.format,h=a.isNumber,f=a.map,p=a.merge,v=a.pick,l=a.splat,u=a.syncTimeout,d=a.timeUnits;a.Tooltip=function(){this.init.apply(this,arguments)};a.Tooltip.prototype={init:function(a,d){this.chart=a;this.options=d;this.crosshairs=[];this.now={x:0,y:0};this.isHidden=!0;this.split=d.split&&!a.inverted;this.shared=d.shared||this.split},cleanSplit:function(a){C(this.chart.series,\nfunction(c){var d=c&&c.tt;d&&(!d.isActive||a?c.tt=d.destroy():d.isActive=!1)})},getLabel:function(){var a=this.chart.renderer,d=this.options;this.label||(this.split?this.label=a.g(\"tooltip\"):(this.label=a.label(\"\",0,0,d.shape||\"callout\",null,null,d.useHTML,null,\"tooltip\").attr({padding:d.padding,r:d.borderRadius}),this.label.attr({fill:d.backgroundColor,\"stroke-width\":d.borderWidth}).css(d.style).shadow(d.shadow)),this.label.attr({zIndex:8}).add());return this.label},update:function(a){this.destroy();\nthis.init(this.chart,p(!0,this.options,a))},destroy:function(){this.label&&(this.label=this.label.destroy());this.split&&this.tt&&(this.cleanSplit(this.chart,!0),this.tt=this.tt.destroy());clearTimeout(this.hideTimer);clearTimeout(this.tooltipTimeout)},move:function(a,d,f,t){var c=this,b=c.now,q=!1!==c.options.animation&&!c.isHidden&&(1<Math.abs(a-b.x)||1<Math.abs(d-b.y)),n=c.followPointer||1<c.len;G(b,{x:q?(2*b.x+a)/3:a,y:q?(b.y+d)/2:d,anchorX:n?void 0:q?(2*b.anchorX+f)/3:f,anchorY:n?void 0:q?(b.anchorY+\nt)/2:t});c.getLabel().attr(b);q&&(clearTimeout(this.tooltipTimeout),this.tooltipTimeout=setTimeout(function(){c&&c.move(a,d,f,t)},32))},hide:function(a){var c=this;clearTimeout(this.hideTimer);a=v(a,this.options.hideDelay,500);this.isHidden||(this.hideTimer=u(function(){c.getLabel()[a?\"fadeOut\":\"hide\"]();c.isHidden=!0},a))},getAnchor:function(a,d){var c,n=this.chart,m=n.inverted,b=n.plotTop,q=n.plotLeft,z=0,h=0,e,r;a=l(a);c=a[0].tooltipPos;this.followPointer&&d&&(void 0===d.chartX&&(d=n.pointer.normalize(d)),\nc=[d.chartX-n.plotLeft,d.chartY-b]);c||(C(a,function(a){e=a.series.yAxis;r=a.series.xAxis;z+=a.plotX+(!m&&r?r.left-q:0);h+=(a.plotLow?(a.plotLow+a.plotHigh)/2:a.plotY)+(!m&&e?e.top-b:0)}),z/=a.length,h/=a.length,c=[m?n.plotWidth-h:z,this.shared&&!m&&1<a.length&&d?d.chartY-b:m?n.plotHeight-z:h]);return f(c,Math.round)},getPosition:function(a,d,f){var c=this.chart,m=this.distance,b={},q=f.h||0,n,h=[\"y\",c.chartHeight,d,f.plotY+c.plotTop,c.plotTop,c.plotTop+c.plotHeight],e=[\"x\",c.chartWidth,a,f.plotX+\nc.plotLeft,c.plotLeft,c.plotLeft+c.plotWidth],r=!this.followPointer&&v(f.ttBelow,!c.inverted===!!f.negative),l=function(a,c,k,g,e,d){var f=k<g-m,w=g+m+k<c,n=g-m-k;g+=m;if(r&&w)b[a]=g;else if(!r&&f)b[a]=n;else if(f)b[a]=Math.min(d-k,0>n-q?n:n-q);else if(w)b[a]=Math.max(e,g+q+k>c?g:g+q);else return!1},p=function(a,c,k,g){var e;g<m||g>c-m?e=!1:b[a]=g<k/2?1:g>c-k/2?c-k-2:g-k/2;return e},k=function(a){var b=h;h=e;e=b;n=a},w=function(){!1!==l.apply(0,h)?!1!==p.apply(0,e)||n||(k(!0),w()):n?b.x=b.y=0:(k(!0),\nw())};(c.inverted||1<this.len)&&k();w();return b},defaultFormatter:function(a){var c=this.points||l(this),d;d=[a.tooltipFooterHeaderFormatter(c[0])];d=d.concat(a.bodyFormatter(c));d.push(a.tooltipFooterHeaderFormatter(c[0],!0));return d},refresh:function(a,d){var c=this.chart,f,m=this.options,b,q,n={},h=[];f=m.formatter||this.defaultFormatter;var n=c.hoverPoints,e=this.shared;clearTimeout(this.hideTimer);this.followPointer=l(a)[0].series.tooltipOptions.followPointer;q=this.getAnchor(a,d);d=q[0];b=\nq[1];!e||a.series&&a.series.noSharedTooltip?n=a.getLabelConfig():(c.hoverPoints=a,n&&C(n,function(a){a.setState()}),C(a,function(a){a.setState(\"hover\");h.push(a.getLabelConfig())}),n={x:a[0].category,y:a[0].y},n.points=h,this.len=h.length,a=a[0]);n=f.call(n,this);e=a.series;this.distance=v(e.tooltipOptions.distance,16);!1===n?this.hide():(f=this.getLabel(),this.isHidden&&f.attr({opacity:1}).show(),this.split?this.renderSplit(n,c.hoverPoints):(f.attr({text:n&&n.join?n.join(\"\"):n}),f.removeClass(/highcharts-color-[\\d]+/g).addClass(\"highcharts-color-\"+\nv(a.colorIndex,e.colorIndex)),f.attr({stroke:m.borderColor||a.color||e.color||\"#666666\"}),this.updatePosition({plotX:d,plotY:b,negative:a.negative,ttBelow:a.ttBelow,h:q[2]||0})),this.isHidden=!1)},renderSplit:function(c,d){var f=this,n=[],m=this.chart,b=m.renderer,q=!0,h=this.options,l,e=this.getLabel();C(c.slice(0,c.length-1),function(a,c){c=d[c-1]||{isHeader:!0,plotX:d[0].plotX};var r=c.series||f,k=r.tt,w=c.series||{},t=\"highcharts-color-\"+v(c.colorIndex,w.colorIndex,\"none\");k||(r.tt=k=b.label(null,\nnull,null,\"callout\").addClass(\"highcharts-tooltip-box \"+t).attr({padding:h.padding,r:h.borderRadius,fill:h.backgroundColor,stroke:c.color||w.color||\"#333333\",\"stroke-width\":h.borderWidth}).add(e));k.isActive=!0;k.attr({text:a});k.css(h.style);a=k.getBBox();w=a.width+k.strokeWidth();c.isHeader?(l=a.height,w=Math.max(0,Math.min(c.plotX+m.plotLeft-w/2,m.chartWidth-w))):w=c.plotX+m.plotLeft-v(h.distance,16)-w;0>w&&(q=!1);a=(c.series&&c.series.yAxis&&c.series.yAxis.pos)+(c.plotY||0);a-=m.plotTop;n.push({target:c.isHeader?\nm.plotHeight+l:a,rank:c.isHeader?1:0,size:r.tt.getBBox().height+1,point:c,x:w,tt:k})});this.cleanSplit();a.distribute(n,m.plotHeight+l);C(n,function(a){var b=a.point,c=b.series;a.tt.attr({visibility:void 0===a.pos?\"hidden\":\"inherit\",x:q||b.isHeader?a.x:b.plotX+m.plotLeft+v(h.distance,16),y:a.pos+m.plotTop,anchorX:b.isHeader?b.plotX+m.plotLeft:b.plotX+c.xAxis.pos,anchorY:b.isHeader?a.pos+m.plotTop-15:b.plotY+c.yAxis.pos})})},updatePosition:function(a){var c=this.chart,d=this.getLabel(),d=(this.options.positioner||\nthis.getPosition).call(this,d.width,d.height,a);this.move(Math.round(d.x),Math.round(d.y||0),a.plotX+c.plotLeft,a.plotY+c.plotTop)},getXDateFormat:function(a,f,h){var c;f=f.dateTimeLabelFormats;var m=h&&h.closestPointRange,b,q={millisecond:15,second:12,minute:9,hour:6,day:3},n,l=\"millisecond\";if(m){n=D(\"%m-%d %H:%M:%S.%L\",a.x);for(b in d){if(m===d.week&&+D(\"%w\",a.x)===h.options.startOfWeek&&\"00:00:00.000\"===n.substr(6)){b=\"week\";break}if(d[b]>m){b=l;break}if(q[b]&&n.substr(q[b])!==\"01-01 00:00:00.000\".substr(q[b]))break;\n\"week\"!==b&&(l=b)}b&&(c=f[b])}else c=f.day;return c||f.year},tooltipFooterHeaderFormatter:function(a,d){var c=d?\"footer\":\"header\";d=a.series;var f=d.tooltipOptions,m=f.xDateFormat,b=d.xAxis,q=b&&\"datetime\"===b.options.type&&h(a.key),c=f[c+\"Format\"];q&&!m&&(m=this.getXDateFormat(a,f,b));q&&m&&(c=c.replace(\"{point.key}\",\"{point.key:\"+m+\"}\"));return I(c,{point:a,series:d})},bodyFormatter:function(a){return f(a,function(a){var c=a.series.tooltipOptions;return(c.pointFormatter||a.point.tooltipFormatter).call(a.point,\nc.pointFormat)})}}})(L);(function(a){var D=a.addEvent,C=a.attr,G=a.charts,I=a.color,h=a.css,f=a.defined,p=a.doc,v=a.each,l=a.extend,u=a.fireEvent,d=a.offset,c=a.pick,n=a.removeEvent,y=a.splat,t=a.Tooltip,m=a.win;a.Pointer=function(a,c){this.init(a,c)};a.Pointer.prototype={init:function(a,m){this.options=m;this.chart=a;this.runChartClick=m.chart.events&&!!m.chart.events.click;this.pinchDown=[];this.lastValidTouch={};t&&m.tooltip.enabled&&(a.tooltip=new t(a,m.tooltip),this.followTouchMove=c(m.tooltip.followTouchMove,\n!0));this.setDOMEvents()},zoomOption:function(a){var b=this.chart,m=b.options.chart,d=m.zoomType||\"\",b=b.inverted;/touch/.test(a.type)&&(d=c(m.pinchType,d));this.zoomX=a=/x/.test(d);this.zoomY=d=/y/.test(d);this.zoomHor=a&&!b||d&&b;this.zoomVert=d&&!b||a&&b;this.hasZoom=a||d},normalize:function(a,c){var b,q;a=a||m.event;a.target||(a.target=a.srcElement);q=a.touches?a.touches.length?a.touches.item(0):a.changedTouches[0]:a;c||(this.chartPosition=c=d(this.chart.container));void 0===q.pageX?(b=Math.max(a.x,\na.clientX-c.left),c=a.y):(b=q.pageX-c.left,c=q.pageY-c.top);return l(a,{chartX:Math.round(b),chartY:Math.round(c)})},getCoordinates:function(a){var b={xAxis:[],yAxis:[]};v(this.chart.axes,function(c){b[c.isXAxis?\"xAxis\":\"yAxis\"].push({axis:c,value:c.toValue(a[c.horiz?\"chartX\":\"chartY\"])})});return b},runPointActions:function(b){var m=this.chart,d=m.series,f=m.tooltip,e=f?f.shared:!1,r=!0,n=m.hoverPoint,h=m.hoverSeries,k,w,l,t=[],u;if(!e&&!h)for(k=0;k<d.length;k++)if(d[k].directTouch||!d[k].options.stickyTracking)d=\n[];h&&(e?h.noSharedTooltip:h.directTouch)&&n?t=[n]:(e||!h||h.options.stickyTracking||(d=[h]),v(d,function(a){w=a.noSharedTooltip&&e;l=!e&&a.directTouch;a.visible&&!w&&!l&&c(a.options.enableMouseTracking,!0)&&(u=a.searchPoint(b,!w&&1===a.kdDimensions))&&u.series&&t.push(u)}),t.sort(function(a,b){var c=a.distX-b.distX,g=a.dist-b.dist,k=b.series.group.zIndex-a.series.group.zIndex;return 0!==c&&e?c:0!==g?g:0!==k?k:a.series.index>b.series.index?-1:1}));if(e)for(k=t.length;k--;)(t[k].x!==t[0].x||t[k].series.noSharedTooltip)&&\nt.splice(k,1);if(t[0]&&(t[0]!==this.prevKDPoint||f&&f.isHidden)){if(e&&!t[0].series.noSharedTooltip){for(k=0;k<t.length;k++)t[k].onMouseOver(b,t[k]!==(h&&h.directTouch&&n||t[0]));t.length&&f&&f.refresh(t.sort(function(a,b){return a.series.index-b.series.index}),b)}else if(f&&f.refresh(t[0],b),!h||!h.directTouch)t[0].onMouseOver(b);this.prevKDPoint=t[0];r=!1}r&&(d=h&&h.tooltipOptions.followPointer,f&&d&&!f.isHidden&&(d=f.getAnchor([{}],b),f.updatePosition({plotX:d[0],plotY:d[1]})));this.unDocMouseMove||\n(this.unDocMouseMove=D(p,\"mousemove\",function(b){if(G[a.hoverChartIndex])G[a.hoverChartIndex].pointer.onDocumentMouseMove(b)}));v(e?t:[c(n,t[0])],function(a){v(m.axes,function(c){(!a||a.series&&a.series[c.coll]===c)&&c.drawCrosshair(b,a)})})},reset:function(a,c){var b=this.chart,m=b.hoverSeries,e=b.hoverPoint,d=b.hoverPoints,q=b.tooltip,f=q&&q.shared?d:e;a&&f&&v(y(f),function(b){b.series.isCartesian&&void 0===b.plotX&&(a=!1)});if(a)q&&f&&(q.refresh(f),e&&(e.setState(e.state,!0),v(b.axes,function(a){a.crosshair&&\na.drawCrosshair(null,e)})));else{if(e)e.onMouseOut();d&&v(d,function(a){a.setState()});if(m)m.onMouseOut();q&&q.hide(c);this.unDocMouseMove&&(this.unDocMouseMove=this.unDocMouseMove());v(b.axes,function(a){a.hideCrosshair()});this.hoverX=this.prevKDPoint=b.hoverPoints=b.hoverPoint=null}},scaleGroups:function(a,c){var b=this.chart,m;v(b.series,function(e){m=a||e.getPlotBox();e.xAxis&&e.xAxis.zoomEnabled&&e.group&&(e.group.attr(m),e.markerGroup&&(e.markerGroup.attr(m),e.markerGroup.clip(c?b.clipRect:\nnull)),e.dataLabelsGroup&&e.dataLabelsGroup.attr(m))});b.clipRect.attr(c||b.clipBox)},dragStart:function(a){var b=this.chart;b.mouseIsDown=a.type;b.cancelClick=!1;b.mouseDownX=this.mouseDownX=a.chartX;b.mouseDownY=this.mouseDownY=a.chartY},drag:function(a){var b=this.chart,c=b.options.chart,m=a.chartX,e=a.chartY,d=this.zoomHor,f=this.zoomVert,n=b.plotLeft,k=b.plotTop,w=b.plotWidth,h=b.plotHeight,l,t=this.selectionMarker,g=this.mouseDownX,p=this.mouseDownY,u=c.panKey&&a[c.panKey+\"Key\"];t&&t.touch||\n(m<n?m=n:m>n+w&&(m=n+w),e<k?e=k:e>k+h&&(e=k+h),this.hasDragged=Math.sqrt(Math.pow(g-m,2)+Math.pow(p-e,2)),10<this.hasDragged&&(l=b.isInsidePlot(g-n,p-k),b.hasCartesianSeries&&(this.zoomX||this.zoomY)&&l&&!u&&!t&&(this.selectionMarker=t=b.renderer.rect(n,k,d?1:w,f?1:h,0).attr({fill:c.selectionMarkerFill||I(\"#335cad\").setOpacity(.25).get(),\"class\":\"highcharts-selection-marker\",zIndex:7}).add()),t&&d&&(m-=g,t.attr({width:Math.abs(m),x:(0<m?0:m)+g})),t&&f&&(m=e-p,t.attr({height:Math.abs(m),y:(0<m?0:m)+\np})),l&&!t&&c.panning&&b.pan(a,c.panning)))},drop:function(a){var b=this,c=this.chart,m=this.hasPinched;if(this.selectionMarker){var e={originalEvent:a,xAxis:[],yAxis:[]},d=this.selectionMarker,n=d.attr?d.attr(\"x\"):d.x,t=d.attr?d.attr(\"y\"):d.y,k=d.attr?d.attr(\"width\"):d.width,w=d.attr?d.attr(\"height\"):d.height,p;if(this.hasDragged||m)v(c.axes,function(c){if(c.zoomEnabled&&f(c.min)&&(m||b[{xAxis:\"zoomX\",yAxis:\"zoomY\"}[c.coll]])){var d=c.horiz,g=\"touchend\"===a.type?c.minPixelPadding:0,q=c.toValue((d?\nn:t)+g),d=c.toValue((d?n+k:t+w)-g);e[c.coll].push({axis:c,min:Math.min(q,d),max:Math.max(q,d)});p=!0}}),p&&u(c,\"selection\",e,function(a){c.zoom(l(a,m?{animation:!1}:null))});this.selectionMarker=this.selectionMarker.destroy();m&&this.scaleGroups()}c&&(h(c.container,{cursor:c._cursor}),c.cancelClick=10<this.hasDragged,c.mouseIsDown=this.hasDragged=this.hasPinched=!1,this.pinchDown=[])},onContainerMouseDown:function(a){a=this.normalize(a);this.zoomOption(a);a.preventDefault&&a.preventDefault();this.dragStart(a)},\nonDocumentMouseUp:function(b){G[a.hoverChartIndex]&&G[a.hoverChartIndex].pointer.drop(b)},onDocumentMouseMove:function(a){var b=this.chart,c=this.chartPosition;a=this.normalize(a,c);!c||this.inClass(a.target,\"highcharts-tracker\")||b.isInsidePlot(a.chartX-b.plotLeft,a.chartY-b.plotTop)||this.reset()},onContainerMouseLeave:function(b){var c=G[a.hoverChartIndex];c&&(b.relatedTarget||b.toElement)&&(c.pointer.reset(),c.pointer.chartPosition=null)},onContainerMouseMove:function(b){var c=this.chart;f(a.hoverChartIndex)&&\nG[a.hoverChartIndex]&&G[a.hoverChartIndex].mouseIsDown||(a.hoverChartIndex=c.index);b=this.normalize(b);b.returnValue=!1;\"mousedown\"===c.mouseIsDown&&this.drag(b);!this.inClass(b.target,\"highcharts-tracker\")&&!c.isInsidePlot(b.chartX-c.plotLeft,b.chartY-c.plotTop)||c.openMenu||this.runPointActions(b)},inClass:function(a,c){for(var b;a;){if(b=C(a,\"class\")){if(-1!==b.indexOf(c))return!0;if(-1!==b.indexOf(\"highcharts-container\"))return!1}a=a.parentNode}},onTrackerMouseOut:function(a){var b=this.chart.hoverSeries;\na=a.relatedTarget||a.toElement;if(!(!b||!a||b.options.stickyTracking||this.inClass(a,\"highcharts-tooltip\")||this.inClass(a,\"highcharts-series-\"+b.index)&&this.inClass(a,\"highcharts-tracker\")))b.onMouseOut()},onContainerClick:function(a){var b=this.chart,c=b.hoverPoint,m=b.plotLeft,e=b.plotTop;a=this.normalize(a);b.cancelClick||(c&&this.inClass(a.target,\"highcharts-tracker\")?(u(c.series,\"click\",l(a,{point:c})),b.hoverPoint&&c.firePointEvent(\"click\",a)):(l(a,this.getCoordinates(a)),b.isInsidePlot(a.chartX-\nm,a.chartY-e)&&u(b,\"click\",a)))},setDOMEvents:function(){var b=this,c=b.chart.container;c.onmousedown=function(a){b.onContainerMouseDown(a)};c.onmousemove=function(a){b.onContainerMouseMove(a)};c.onclick=function(a){b.onContainerClick(a)};D(c,\"mouseleave\",b.onContainerMouseLeave);1===a.chartCount&&D(p,\"mouseup\",b.onDocumentMouseUp);a.hasTouch&&(c.ontouchstart=function(a){b.onContainerTouchStart(a)},c.ontouchmove=function(a){b.onContainerTouchMove(a)},1===a.chartCount&&D(p,\"touchend\",b.onDocumentTouchEnd))},\ndestroy:function(){var b;n(this.chart.container,\"mouseleave\",this.onContainerMouseLeave);a.chartCount||(n(p,\"mouseup\",this.onDocumentMouseUp),n(p,\"touchend\",this.onDocumentTouchEnd));clearInterval(this.tooltipTimeout);for(b in this)this[b]=null}}})(L);(function(a){var D=a.charts,C=a.each,G=a.extend,I=a.map,h=a.noop,f=a.pick;G(a.Pointer.prototype,{pinchTranslate:function(a,f,h,u,d,c){this.zoomHor&&this.pinchTranslateDirection(!0,a,f,h,u,d,c);this.zoomVert&&this.pinchTranslateDirection(!1,a,f,h,u,d,\nc)},pinchTranslateDirection:function(a,f,h,u,d,c,n,y){var t=this.chart,m=a?\"x\":\"y\",b=a?\"X\":\"Y\",q=\"chart\"+b,l=a?\"width\":\"height\",p=t[\"plot\"+(a?\"Left\":\"Top\")],e,r,x=y||1,A=t.inverted,k=t.bounds[a?\"h\":\"v\"],w=1===f.length,K=f[0][q],J=h[0][q],v=!w&&f[1][q],g=!w&&h[1][q],B;h=function(){!w&&20<Math.abs(K-v)&&(x=y||Math.abs(J-g)/Math.abs(K-v));r=(p-J)/x+K;e=t[\"plot\"+(a?\"Width\":\"Height\")]/x};h();f=r;f<k.min?(f=k.min,B=!0):f+e>k.max&&(f=k.max-e,B=!0);B?(J-=.8*(J-n[m][0]),w||(g-=.8*(g-n[m][1])),h()):n[m]=[J,\ng];A||(c[m]=r-p,c[l]=e);c=A?1/x:x;d[l]=e;d[m]=f;u[A?a?\"scaleY\":\"scaleX\":\"scale\"+b]=x;u[\"translate\"+b]=c*p+(J-c*K)},pinch:function(a){var p=this,l=p.chart,u=p.pinchDown,d=a.touches,c=d.length,n=p.lastValidTouch,y=p.hasZoom,t=p.selectionMarker,m={},b=1===c&&(p.inClass(a.target,\"highcharts-tracker\")&&l.runTrackerClick||p.runChartClick),q={};1<c&&(p.initiated=!0);y&&p.initiated&&!b&&a.preventDefault();I(d,function(a){return p.normalize(a)});\"touchstart\"===a.type?(C(d,function(a,b){u[b]={chartX:a.chartX,\nchartY:a.chartY}}),n.x=[u[0].chartX,u[1]&&u[1].chartX],n.y=[u[0].chartY,u[1]&&u[1].chartY],C(l.axes,function(a){if(a.zoomEnabled){var b=l.bounds[a.horiz?\"h\":\"v\"],c=a.minPixelPadding,m=a.toPixels(f(a.options.min,a.dataMin)),d=a.toPixels(f(a.options.max,a.dataMax)),q=Math.max(m,d);b.min=Math.min(a.pos,Math.min(m,d)-c);b.max=Math.max(a.pos+a.len,q+c)}}),p.res=!0):p.followTouchMove&&1===c?this.runPointActions(p.normalize(a)):u.length&&(t||(p.selectionMarker=t=G({destroy:h,touch:!0},l.plotBox)),p.pinchTranslate(u,\nd,m,t,q,n),p.hasPinched=y,p.scaleGroups(m,q),p.res&&(p.res=!1,this.reset(!1,0)))},touch:function(h,v){var l=this.chart,p,d;if(l.index!==a.hoverChartIndex)this.onContainerMouseLeave({relatedTarget:!0});a.hoverChartIndex=l.index;1===h.touches.length?(h=this.normalize(h),(d=l.isInsidePlot(h.chartX-l.plotLeft,h.chartY-l.plotTop))&&!l.openMenu?(v&&this.runPointActions(h),\"touchmove\"===h.type&&(v=this.pinchDown,p=v[0]?4<=Math.sqrt(Math.pow(v[0].chartX-h.chartX,2)+Math.pow(v[0].chartY-h.chartY,2)):!1),f(p,\n!0)&&this.pinch(h)):v&&this.reset()):2===h.touches.length&&this.pinch(h)},onContainerTouchStart:function(a){this.zoomOption(a);this.touch(a,!0)},onContainerTouchMove:function(a){this.touch(a)},onDocumentTouchEnd:function(f){D[a.hoverChartIndex]&&D[a.hoverChartIndex].pointer.drop(f)}})})(L);(function(a){var D=a.addEvent,C=a.charts,G=a.css,I=a.doc,h=a.extend,f=a.noop,p=a.Pointer,v=a.removeEvent,l=a.win,u=a.wrap;if(l.PointerEvent||l.MSPointerEvent){var d={},c=!!l.PointerEvent,n=function(){var a,c=[];\nc.item=function(a){return this[a]};for(a in d)d.hasOwnProperty(a)&&c.push({pageX:d[a].pageX,pageY:d[a].pageY,target:d[a].target});return c},y=function(c,m,b,d){\"touch\"!==c.pointerType&&c.pointerType!==c.MSPOINTER_TYPE_TOUCH||!C[a.hoverChartIndex]||(d(c),d=C[a.hoverChartIndex].pointer,d[m]({type:b,target:c.currentTarget,preventDefault:f,touches:n()}))};h(p.prototype,{onContainerPointerDown:function(a){y(a,\"onContainerTouchStart\",\"touchstart\",function(a){d[a.pointerId]={pageX:a.pageX,pageY:a.pageY,\ntarget:a.currentTarget}})},onContainerPointerMove:function(a){y(a,\"onContainerTouchMove\",\"touchmove\",function(a){d[a.pointerId]={pageX:a.pageX,pageY:a.pageY};d[a.pointerId].target||(d[a.pointerId].target=a.currentTarget)})},onDocumentPointerUp:function(a){y(a,\"onDocumentTouchEnd\",\"touchend\",function(a){delete d[a.pointerId]})},batchMSEvents:function(a){a(this.chart.container,c?\"pointerdown\":\"MSPointerDown\",this.onContainerPointerDown);a(this.chart.container,c?\"pointermove\":\"MSPointerMove\",this.onContainerPointerMove);\na(I,c?\"pointerup\":\"MSPointerUp\",this.onDocumentPointerUp)}});u(p.prototype,\"init\",function(a,c,b){a.call(this,c,b);this.hasZoom&&G(c.container,{\"-ms-touch-action\":\"none\",\"touch-action\":\"none\"})});u(p.prototype,\"setDOMEvents\",function(a){a.apply(this);(this.hasZoom||this.followTouchMove)&&this.batchMSEvents(D)});u(p.prototype,\"destroy\",function(a){this.batchMSEvents(v);a.call(this)})}})(L);(function(a){var D,C=a.addEvent,G=a.css,I=a.discardElement,h=a.defined,f=a.each,p=a.extend,v=a.isFirefox,l=a.marginNames,\nu=a.merge,d=a.pick,c=a.setAnimation,n=a.stableSort,y=a.win,t=a.wrap;D=a.Legend=function(a,b){this.init(a,b)};D.prototype={init:function(a,b){this.chart=a;this.setOptions(b);b.enabled&&(this.render(),C(this.chart,\"endResize\",function(){this.legend.positionCheckboxes()}))},setOptions:function(a){var b=d(a.padding,8);this.options=a;this.itemStyle=a.itemStyle;this.itemHiddenStyle=u(this.itemStyle,a.itemHiddenStyle);this.itemMarginTop=a.itemMarginTop||0;this.initialItemX=this.padding=b;this.initialItemY=\nb-5;this.itemHeight=this.maxItemWidth=0;this.symbolWidth=d(a.symbolWidth,16);this.pages=[]},update:function(a,b){var c=this.chart;this.setOptions(u(!0,this.options,a));this.destroy();c.isDirtyLegend=c.isDirtyBox=!0;d(b,!0)&&c.redraw()},colorizeItem:function(a,b){a.legendGroup[b?\"removeClass\":\"addClass\"](\"highcharts-legend-item-hidden\");var c=this.options,d=a.legendItem,m=a.legendLine,e=a.legendSymbol,f=this.itemHiddenStyle.color,c=b?c.itemStyle.color:f,h=b?a.color||f:f,n=a.options&&a.options.marker,\nk={fill:h},w;d&&d.css({fill:c,color:c});m&&m.attr({stroke:h});if(e){if(n&&e.isMarker&&(k=a.pointAttribs(),!b))for(w in k)k[w]=f;e.attr(k)}},positionItem:function(a){var b=this.options,c=b.symbolPadding,b=!b.rtl,d=a._legendItemPos,m=d[0],d=d[1],e=a.checkbox;(a=a.legendGroup)&&a.element&&a.translate(b?m:this.legendWidth-m-2*c-4,d);e&&(e.x=m,e.y=d)},destroyItem:function(a){var b=a.checkbox;f([\"legendItem\",\"legendLine\",\"legendSymbol\",\"legendGroup\"],function(b){a[b]&&(a[b]=a[b].destroy())});b&&I(a.checkbox)},\ndestroy:function(){function a(a){this[a]&&(this[a]=this[a].destroy())}f(this.getAllItems(),function(b){f([\"legendItem\",\"legendGroup\"],a,b)});f([\"box\",\"title\",\"group\"],a,this);this.display=null},positionCheckboxes:function(a){var b=this.group&&this.group.alignAttr,c,d=this.clipHeight||this.legendHeight,m=this.titleHeight;b&&(c=b.translateY,f(this.allItems,function(e){var f=e.checkbox,h;f&&(h=c+m+f.y+(a||0)+3,G(f,{left:b.translateX+e.checkboxOffset+f.x-20+\"px\",top:h+\"px\",display:h>c-6&&h<c+d-6?\"\":\"none\"}))}))},\nrenderTitle:function(){var a=this.padding,b=this.options.title,c=0;b.text&&(this.title||(this.title=this.chart.renderer.label(b.text,a-3,a-4,null,null,null,null,null,\"legend-title\").attr({zIndex:1}).css(b.style).add(this.group)),a=this.title.getBBox(),c=a.height,this.offsetWidth=a.width,this.contentGroup.attr({translateY:c}));this.titleHeight=c},setText:function(c){var b=this.options;c.legendItem.attr({text:b.labelFormat?a.format(b.labelFormat,c):b.labelFormatter.call(c)})},renderItem:function(a){var b=\nthis.chart,c=b.renderer,m=this.options,f=\"horizontal\"===m.layout,e=this.symbolWidth,h=m.symbolPadding,n=this.itemStyle,l=this.itemHiddenStyle,k=this.padding,w=f?d(m.itemDistance,20):0,t=!m.rtl,p=m.width,y=m.itemMarginBottom||0,g=this.itemMarginTop,B=this.initialItemX,v=a.legendItem,M=!a.series,C=!M&&a.series.drawLegendSymbol?a.series:a,E=C.options,E=this.createCheckboxForItem&&E&&E.showCheckbox,H=m.useHTML;v||(a.legendGroup=c.g(\"legend-item\").addClass(\"highcharts-\"+C.type+\"-series highcharts-color-\"+\na.colorIndex+(a.options.className?\" \"+a.options.className:\"\")+(M?\" highcharts-series-\"+a.index:\"\")).attr({zIndex:1}).add(this.scrollGroup),a.legendItem=v=c.text(\"\",t?e+h:-h,this.baseline||0,H).css(u(a.visible?n:l)).attr({align:t?\"left\":\"right\",zIndex:2}).add(a.legendGroup),this.baseline||(n=n.fontSize,this.fontMetrics=c.fontMetrics(n,v),this.baseline=this.fontMetrics.f+3+g,v.attr(\"y\",this.baseline)),C.drawLegendSymbol(this,a),this.setItemEvents&&this.setItemEvents(a,v,H),E&&this.createCheckboxForItem(a));\nthis.colorizeItem(a,a.visible);this.setText(a);c=v.getBBox();e=a.checkboxOffset=m.itemWidth||a.legendItemWidth||e+h+c.width+w+(E?20:0);this.itemHeight=h=Math.round(a.legendItemHeight||c.height);f&&this.itemX-B+e>(p||b.chartWidth-2*k-B-m.x)&&(this.itemX=B,this.itemY+=g+this.lastLineHeight+y,this.lastLineHeight=0);this.maxItemWidth=Math.max(this.maxItemWidth,e);this.lastItemY=g+this.itemY+y;this.lastLineHeight=Math.max(h,this.lastLineHeight);a._legendItemPos=[this.itemX,this.itemY];f?this.itemX+=e:\n(this.itemY+=g+h+y,this.lastLineHeight=h);this.offsetWidth=p||Math.max((f?this.itemX-B-w:e)+k,this.offsetWidth)},getAllItems:function(){var a=[];f(this.chart.series,function(b){var c=b&&b.options;b&&d(c.showInLegend,h(c.linkedTo)?!1:void 0,!0)&&(a=a.concat(b.legendItems||(\"point\"===c.legendType?b.data:b)))});return a},adjustMargins:function(a,b){var c=this.chart,m=this.options,n=m.align.charAt(0)+m.verticalAlign.charAt(0)+m.layout.charAt(0);m.floating||f([/(lth|ct|rth)/,/(rtv|rm|rbv)/,/(rbh|cb|lbh)/,\n/(lbv|lm|ltv)/],function(e,f){e.test(n)&&!h(a[f])&&(c[l[f]]=Math.max(c[l[f]],c.legend[(f+1)%2?\"legendHeight\":\"legendWidth\"]+[1,-1,-1,1][f]*m[f%2?\"x\":\"y\"]+d(m.margin,12)+b[f]))})},render:function(){var a=this,b=a.chart,c=b.renderer,d=a.group,h,e,r,l,t=a.box,k=a.options,w=a.padding;a.itemX=a.initialItemX;a.itemY=a.initialItemY;a.offsetWidth=0;a.lastItemY=0;d||(a.group=d=c.g(\"legend\").attr({zIndex:7}).add(),a.contentGroup=c.g().attr({zIndex:1}).add(d),a.scrollGroup=c.g().add(a.contentGroup));a.renderTitle();\nh=a.getAllItems();n(h,function(a,b){return(a.options&&a.options.legendIndex||0)-(b.options&&b.options.legendIndex||0)});k.reversed&&h.reverse();a.allItems=h;a.display=e=!!h.length;a.lastLineHeight=0;f(h,function(b){a.renderItem(b)});r=(k.width||a.offsetWidth)+w;l=a.lastItemY+a.lastLineHeight+a.titleHeight;l=a.handleOverflow(l);l+=w;t||(a.box=t=c.rect().addClass(\"highcharts-legend-box\").attr({r:k.borderRadius}).add(d),t.isNew=!0);t.attr({stroke:k.borderColor,\"stroke-width\":k.borderWidth||0,fill:k.backgroundColor||\n\"none\"}).shadow(k.shadow);0<r&&0<l&&(t[t.isNew?\"attr\":\"animate\"](t.crisp({x:0,y:0,width:r,height:l},t.strokeWidth())),t.isNew=!1);t[e?\"show\":\"hide\"]();a.legendWidth=r;a.legendHeight=l;f(h,function(b){a.positionItem(b)});e&&d.align(p({width:r,height:l},k),!0,\"spacingBox\");b.isResizing||this.positionCheckboxes()},handleOverflow:function(a){var b=this,c=this.chart,m=c.renderer,h=this.options,e=h.y,c=c.spacingBox.height+(\"top\"===h.verticalAlign?-e:e)-this.padding,e=h.maxHeight,n,l=this.clipRect,t=h.navigation,\nk=d(t.animation,!0),w=t.arrowSize||12,p=this.nav,u=this.pages,y=this.padding,g,B=this.allItems,v=function(a){a?l.attr({height:a}):l&&(b.clipRect=l.destroy(),b.contentGroup.clip());b.contentGroup.div&&(b.contentGroup.div.style.clip=a?\"rect(\"+y+\"px,9999px,\"+(y+a)+\"px,0)\":\"auto\")};\"horizontal\"!==h.layout||\"middle\"===h.verticalAlign||h.floating||(c/=2);e&&(c=Math.min(c,e));u.length=0;a>c&&!1!==t.enabled?(this.clipHeight=n=Math.max(c-20-this.titleHeight-y,0),this.currentPage=d(this.currentPage,1),this.fullHeight=\na,f(B,function(a,b){var c=a._legendItemPos[1];a=Math.round(a.legendItem.getBBox().height);var k=u.length;if(!k||c-u[k-1]>n&&(g||c)!==u[k-1])u.push(g||c),k++;b===B.length-1&&c+a-u[k-1]>n&&u.push(c);c!==g&&(g=c)}),l||(l=b.clipRect=m.clipRect(0,y,9999,0),b.contentGroup.clip(l)),v(n),p||(this.nav=p=m.g().attr({zIndex:1}).add(this.group),this.up=m.symbol(\"triangle\",0,0,w,w).on(\"click\",function(){b.scroll(-1,k)}).add(p),this.pager=m.text(\"\",15,10).addClass(\"highcharts-legend-navigation\").css(t.style).add(p),\nthis.down=m.symbol(\"triangle-down\",0,0,w,w).on(\"click\",function(){b.scroll(1,k)}).add(p)),b.scroll(0),a=c):p&&(v(),p.hide(),this.scrollGroup.attr({translateY:1}),this.clipHeight=0);return a},scroll:function(a,b){var d=this.pages,f=d.length;a=this.currentPage+a;var m=this.clipHeight,e=this.options.navigation,h=this.pager,n=this.padding;a>f&&(a=f);0<a&&(void 0!==b&&c(b,this.chart),this.nav.attr({translateX:n,translateY:m+this.padding+7+this.titleHeight,visibility:\"visible\"}),this.up.attr({\"class\":1===\na?\"highcharts-legend-nav-inactive\":\"highcharts-legend-nav-active\"}),h.attr({text:a+\"/\"+f}),this.down.attr({x:18+this.pager.getBBox().width,\"class\":a===f?\"highcharts-legend-nav-inactive\":\"highcharts-legend-nav-active\"}),this.up.attr({fill:1===a?e.inactiveColor:e.activeColor}).css({cursor:1===a?\"default\":\"pointer\"}),this.down.attr({fill:a===f?e.inactiveColor:e.activeColor}).css({cursor:a===f?\"default\":\"pointer\"}),b=-d[a-1]+this.initialItemY,this.scrollGroup.animate({translateY:b}),this.currentPage=\na,this.positionCheckboxes(b))}};a.LegendSymbolMixin={drawRectangle:function(a,b){var c=a.options,f=c.symbolHeight||a.fontMetrics.f,c=c.squareSymbol;b.legendSymbol=this.chart.renderer.rect(c?(a.symbolWidth-f)/2:0,a.baseline-f+1,c?f:a.symbolWidth,f,d(a.options.symbolRadius,f/2)).addClass(\"highcharts-point\").attr({zIndex:3}).add(b.legendGroup)},drawLineMarker:function(a){var b=this.options,c=b.marker,d=a.symbolWidth,f=this.chart.renderer,e=this.legendGroup;a=a.baseline-Math.round(.3*a.fontMetrics.b);\nvar m;m={\"stroke-width\":b.lineWidth||0};b.dashStyle&&(m.dashstyle=b.dashStyle);this.legendLine=f.path([\"M\",0,a,\"L\",d,a]).addClass(\"highcharts-graph\").attr(m).add(e);c&&!1!==c.enabled&&(b=0===this.symbol.indexOf(\"url\")?0:c.radius,this.legendSymbol=c=f.symbol(this.symbol,d/2-b,a-b,2*b,2*b,c).addClass(\"highcharts-point\").add(e),c.isMarker=!0)}};(/Trident\\/7\\.0/.test(y.navigator.userAgent)||v)&&t(D.prototype,\"positionItem\",function(a,b){var c=this,d=function(){b._legendItemPos&&a.call(c,b)};d();setTimeout(d)})})(L);\n(function(a){var D=a.addEvent,C=a.animate,G=a.animObject,I=a.attr,h=a.doc,f=a.Axis,p=a.createElement,v=a.defaultOptions,l=a.discardElement,u=a.charts,d=a.css,c=a.defined,n=a.each,y=a.extend,t=a.find,m=a.fireEvent,b=a.getStyle,q=a.grep,z=a.isNumber,F=a.isObject,e=a.isString,r=a.Legend,x=a.marginNames,A=a.merge,k=a.Pointer,w=a.pick,K=a.pInt,J=a.removeEvent,N=a.seriesTypes,g=a.splat,B=a.svg,S=a.syncTimeout,M=a.win,R=a.Renderer,E=a.Chart=function(){this.getArgs.apply(this,arguments)};a.chart=function(a,\nb,c){return new E(a,b,c)};E.prototype={callbacks:[],getArgs:function(){var a=[].slice.call(arguments);if(e(a[0])||a[0].nodeName)this.renderTo=a.shift();this.init(a[0],a[1])},init:function(b,c){var k,g=b.series;b.series=null;k=A(v,b);k.series=b.series=g;this.userOptions=b;this.respRules=[];b=k.chart;g=b.events;this.margin=[];this.spacing=[];this.bounds={h:{},v:{}};this.callback=c;this.isResizing=0;this.options=k;this.axes=[];this.series=[];this.hasCartesianSeries=b.showAxes;var e;this.index=u.length;\nu.push(this);a.chartCount++;if(g)for(e in g)D(this,e,g[e]);this.xAxis=[];this.yAxis=[];this.pointCount=this.colorCounter=this.symbolCounter=0;this.firstRender()},initSeries:function(b){var c=this.options.chart;(c=N[b.type||c.type||c.defaultSeriesType])||a.error(17,!0);c=new c;c.init(this,b);return c},isInsidePlot:function(a,b,c){var k=c?b:a;a=c?a:b;return 0<=k&&k<=this.plotWidth&&0<=a&&a<=this.plotHeight},redraw:function(b){var c=this.axes,k=this.series,g=this.pointer,e=this.legend,d=this.isDirtyLegend,\nf,h,w=this.hasCartesianSeries,r=this.isDirtyBox,l=k.length,q=l,t=this.renderer,p=t.isHidden(),H=[];a.setAnimation(b,this);p&&this.cloneRenderTo();for(this.layOutTitles();q--;)if(b=k[q],b.options.stacking&&(f=!0,b.isDirty)){h=!0;break}if(h)for(q=l;q--;)b=k[q],b.options.stacking&&(b.isDirty=!0);n(k,function(a){a.isDirty&&\"point\"===a.options.legendType&&(a.updateTotals&&a.updateTotals(),d=!0);a.isDirtyData&&m(a,\"updatedData\")});d&&e.options.enabled&&(e.render(),this.isDirtyLegend=!1);f&&this.getStacks();\nw&&n(c,function(a){a.updateNames();a.setScale()});this.getMargins();w&&(n(c,function(a){a.isDirty&&(r=!0)}),n(c,function(a){var b=a.min+\",\"+a.max;a.extKey!==b&&(a.extKey=b,H.push(function(){m(a,\"afterSetExtremes\",y(a.eventArgs,a.getExtremes()));delete a.eventArgs}));(r||f)&&a.redraw()}));r&&this.drawChartBox();n(k,function(a){(r||a.isDirty)&&a.visible&&a.redraw()});g&&g.reset(!0);t.draw();m(this,\"redraw\");p&&this.cloneRenderTo(!0);n(H,function(a){a.call()})},get:function(a){function b(b){return b.id===\na||b.options.id===a}var c,k=this.series,g;c=t(this.axes,b)||t(this.series,b);for(g=0;!c&&g<k.length;g++)c=t(k[g].points||[],b);return c},getAxes:function(){var a=this,b=this.options,c=b.xAxis=g(b.xAxis||{}),b=b.yAxis=g(b.yAxis||{});n(c,function(a,b){a.index=b;a.isX=!0});n(b,function(a,b){a.index=b});c=c.concat(b);n(c,function(b){new f(a,b)})},getSelectedPoints:function(){var a=[];n(this.series,function(b){a=a.concat(q(b.points||[],function(a){return a.selected}))});return a},getSelectedSeries:function(){return q(this.series,\nfunction(a){return a.selected})},setTitle:function(a,b,c){var k=this,g=k.options,e;e=g.title=A({style:{color:\"#333333\",fontSize:g.isStock?\"16px\":\"18px\"}},g.title,a);g=g.subtitle=A({style:{color:\"#666666\"}},g.subtitle,b);n([[\"title\",a,e],[\"subtitle\",b,g]],function(a,b){var c=a[0],g=k[c],e=a[1];a=a[2];g&&e&&(k[c]=g=g.destroy());a&&a.text&&!g&&(k[c]=k.renderer.text(a.text,0,0,a.useHTML).attr({align:a.align,\"class\":\"highcharts-\"+c,zIndex:a.zIndex||4}).add(),k[c].update=function(a){k.setTitle(!b&&a,b&&\na)},k[c].css(a.style))});k.layOutTitles(c)},layOutTitles:function(a){var b=0,c,k=this.renderer,g=this.spacingBox;n([\"title\",\"subtitle\"],function(a){var c=this[a],e=this.options[a],d;c&&(d=e.style.fontSize,d=k.fontMetrics(d,c).b,c.css({width:(e.width||g.width+e.widthAdjust)+\"px\"}).align(y({y:b+d+(\"title\"===a?-3:2)},e),!1,\"spacingBox\"),e.floating||e.verticalAlign||(b=Math.ceil(b+c.getBBox().height)))},this);c=this.titleOffset!==b;this.titleOffset=b;!this.isDirtyBox&&c&&(this.isDirtyBox=c,this.hasRendered&&\nw(a,!0)&&this.isDirtyBox&&this.redraw())},getChartSize:function(){var a=this.options.chart,k=a.width,a=a.height,g=this.renderToClone||this.renderTo;c(k)||(this.containerWidth=b(g,\"width\"));c(a)||(this.containerHeight=b(g,\"height\"));this.chartWidth=Math.max(0,k||this.containerWidth||600);this.chartHeight=Math.max(0,w(a,19<this.containerHeight?this.containerHeight:400))},cloneRenderTo:function(a){var b=this.renderToClone,c=this.container;if(a){if(b){for(;b.childNodes.length;)this.renderTo.appendChild(b.firstChild);\nl(b);delete this.renderToClone}}else c&&c.parentNode===this.renderTo&&this.renderTo.removeChild(c),this.renderToClone=b=this.renderTo.cloneNode(0),d(b,{position:\"absolute\",top:\"-9999px\",display:\"block\"}),b.style.setProperty&&b.style.setProperty(\"display\",\"block\",\"important\"),h.body.appendChild(b),c&&b.appendChild(c)},setClassName:function(a){this.container.className=\"highcharts-container \"+(a||\"\")},getContainer:function(){var b,c=this.options,k=c.chart,g,d;b=this.renderTo;var f=a.uniqueKey(),m;b||\n(this.renderTo=b=k.renderTo);e(b)&&(this.renderTo=b=h.getElementById(b));b||a.error(13,!0);g=K(I(b,\"data-highcharts-chart\"));z(g)&&u[g]&&u[g].hasRendered&&u[g].destroy();I(b,\"data-highcharts-chart\",this.index);b.innerHTML=\"\";k.skipClone||b.offsetWidth||this.cloneRenderTo();this.getChartSize();g=this.chartWidth;d=this.chartHeight;m=y({position:\"relative\",overflow:\"hidden\",width:g+\"px\",height:d+\"px\",textAlign:\"left\",lineHeight:\"normal\",zIndex:0,\"-webkit-tap-highlight-color\":\"rgba(0,0,0,0)\"},k.style);\nthis.container=b=p(\"div\",{id:f},m,this.renderToClone||b);this._cursor=b.style.cursor;this.renderer=new (a[k.renderer]||R)(b,g,d,null,k.forExport,c.exporting&&c.exporting.allowHTML);this.setClassName(k.className);this.renderer.setStyle(k.style);this.renderer.chartIndex=this.index},getMargins:function(a){var b=this.spacing,k=this.margin,g=this.titleOffset;this.resetMargins();g&&!c(k[0])&&(this.plotTop=Math.max(this.plotTop,g+this.options.title.margin+b[0]));this.legend.display&&this.legend.adjustMargins(k,\nb);this.extraBottomMargin&&(this.marginBottom+=this.extraBottomMargin);this.extraTopMargin&&(this.plotTop+=this.extraTopMargin);a||this.getAxisMargins()},getAxisMargins:function(){var a=this,b=a.axisOffset=[0,0,0,0],k=a.margin;a.hasCartesianSeries&&n(a.axes,function(a){a.visible&&a.getOffset()});n(x,function(g,e){c(k[e])||(a[g]+=b[e])});a.setChartSize()},reflow:function(a){var k=this,g=k.options.chart,e=k.renderTo,d=c(g.width),f=g.width||b(e,\"width\"),g=g.height||b(e,\"height\"),e=a?a.target:M;if(!d&&\n!k.isPrinting&&f&&g&&(e===M||e===h)){if(f!==k.containerWidth||g!==k.containerHeight)clearTimeout(k.reflowTimeout),k.reflowTimeout=S(function(){k.container&&k.setSize(void 0,void 0,!1)},a?100:0);k.containerWidth=f;k.containerHeight=g}},initReflow:function(){var a=this,b;b=D(M,\"resize\",function(b){a.reflow(b)});D(a,\"destroy\",b)},setSize:function(b,c,k){var g=this,e=g.renderer;g.isResizing+=1;a.setAnimation(k,g);g.oldChartHeight=g.chartHeight;g.oldChartWidth=g.chartWidth;void 0!==b&&(g.options.chart.width=\nb);void 0!==c&&(g.options.chart.height=c);g.getChartSize();b=e.globalAnimation;(b?C:d)(g.container,{width:g.chartWidth+\"px\",height:g.chartHeight+\"px\"},b);g.setChartSize(!0);e.setSize(g.chartWidth,g.chartHeight,k);n(g.axes,function(a){a.isDirty=!0;a.setScale()});g.isDirtyLegend=!0;g.isDirtyBox=!0;g.layOutTitles();g.getMargins();g.setResponsive&&g.setResponsive(!1);g.redraw(k);g.oldChartHeight=null;m(g,\"resize\");S(function(){g&&m(g,\"endResize\",null,function(){--g.isResizing})},G(b).duration)},setChartSize:function(a){var b=\nthis.inverted,c=this.renderer,g=this.chartWidth,k=this.chartHeight,e=this.options.chart,d=this.spacing,f=this.clipOffset,m,h,w,r;this.plotLeft=m=Math.round(this.plotLeft);this.plotTop=h=Math.round(this.plotTop);this.plotWidth=w=Math.max(0,Math.round(g-m-this.marginRight));this.plotHeight=r=Math.max(0,Math.round(k-h-this.marginBottom));this.plotSizeX=b?r:w;this.plotSizeY=b?w:r;this.plotBorderWidth=e.plotBorderWidth||0;this.spacingBox=c.spacingBox={x:d[3],y:d[0],width:g-d[3]-d[1],height:k-d[0]-d[2]};\nthis.plotBox=c.plotBox={x:m,y:h,width:w,height:r};g=2*Math.floor(this.plotBorderWidth/2);b=Math.ceil(Math.max(g,f[3])/2);c=Math.ceil(Math.max(g,f[0])/2);this.clipBox={x:b,y:c,width:Math.floor(this.plotSizeX-Math.max(g,f[1])/2-b),height:Math.max(0,Math.floor(this.plotSizeY-Math.max(g,f[2])/2-c))};a||n(this.axes,function(a){a.setAxisSize();a.setAxisTranslation()})},resetMargins:function(){var a=this,b=a.options.chart;n([\"margin\",\"spacing\"],function(c){var g=b[c],k=F(g)?g:[g,g,g,g];n([\"Top\",\"Right\",\n\"Bottom\",\"Left\"],function(g,e){a[c][e]=w(b[c+g],k[e])})});n(x,function(b,c){a[b]=w(a.margin[c],a.spacing[c])});a.axisOffset=[0,0,0,0];a.clipOffset=[0,0,0,0]},drawChartBox:function(){var a=this.options.chart,b=this.renderer,c=this.chartWidth,g=this.chartHeight,k=this.chartBackground,e=this.plotBackground,d=this.plotBorder,f,m=this.plotBGImage,h=a.backgroundColor,w=a.plotBackgroundColor,n=a.plotBackgroundImage,r,l=this.plotLeft,q=this.plotTop,t=this.plotWidth,p=this.plotHeight,x=this.plotBox,K=this.clipRect,\nu=this.clipBox,A=\"animate\";k||(this.chartBackground=k=b.rect().addClass(\"highcharts-background\").add(),A=\"attr\");f=a.borderWidth||0;r=f+(a.shadow?8:0);h={fill:h||\"none\"};if(f||k[\"stroke-width\"])h.stroke=a.borderColor,h[\"stroke-width\"]=f;k.attr(h).shadow(a.shadow);k[A]({x:r/2,y:r/2,width:c-r-f%2,height:g-r-f%2,r:a.borderRadius});A=\"animate\";e||(A=\"attr\",this.plotBackground=e=b.rect().addClass(\"highcharts-plot-background\").add());e[A](x);e.attr({fill:w||\"none\"}).shadow(a.plotShadow);n&&(m?m.animate(x):\nthis.plotBGImage=b.image(n,l,q,t,p).add());K?K.animate({width:u.width,height:u.height}):this.clipRect=b.clipRect(u);A=\"animate\";d||(A=\"attr\",this.plotBorder=d=b.rect().addClass(\"highcharts-plot-border\").attr({zIndex:1}).add());d.attr({stroke:a.plotBorderColor,\"stroke-width\":a.plotBorderWidth||0,fill:\"none\"});d[A](d.crisp({x:l,y:q,width:t,height:p},-d.strokeWidth()));this.isDirtyBox=!1},propFromSeries:function(){var a=this,b=a.options.chart,c,g=a.options.series,k,e;n([\"inverted\",\"angular\",\"polar\"],\nfunction(d){c=N[b.type||b.defaultSeriesType];e=b[d]||c&&c.prototype[d];for(k=g&&g.length;!e&&k--;)(c=N[g[k].type])&&c.prototype[d]&&(e=!0);a[d]=e})},linkSeries:function(){var a=this,b=a.series;n(b,function(a){a.linkedSeries.length=0});n(b,function(b){var c=b.options.linkedTo;e(c)&&(c=\":previous\"===c?a.series[b.index-1]:a.get(c))&&c.linkedParent!==b&&(c.linkedSeries.push(b),b.linkedParent=c,b.visible=w(b.options.visible,c.options.visible,b.visible))})},renderSeries:function(){n(this.series,function(a){a.translate();\na.render()})},renderLabels:function(){var a=this,b=a.options.labels;b.items&&n(b.items,function(c){var g=y(b.style,c.style),k=K(g.left)+a.plotLeft,e=K(g.top)+a.plotTop+12;delete g.left;delete g.top;a.renderer.text(c.html,k,e).attr({zIndex:2}).css(g).add()})},render:function(){var a=this.axes,b=this.renderer,c=this.options,g,k,e;this.setTitle();this.legend=new r(this,c.legend);this.getStacks&&this.getStacks();this.getMargins(!0);this.setChartSize();c=this.plotWidth;g=this.plotHeight-=21;n(a,function(a){a.setScale()});\nthis.getAxisMargins();k=1.1<c/this.plotWidth;e=1.05<g/this.plotHeight;if(k||e)n(a,function(a){(a.horiz&&k||!a.horiz&&e)&&a.setTickInterval(!0)}),this.getMargins();this.drawChartBox();this.hasCartesianSeries&&n(a,function(a){a.visible&&a.render()});this.seriesGroup||(this.seriesGroup=b.g(\"series-group\").attr({zIndex:3}).add());this.renderSeries();this.renderLabels();this.addCredits();this.setResponsive&&this.setResponsive();this.hasRendered=!0},addCredits:function(a){var b=this;a=A(!0,this.options.credits,\na);a.enabled&&!this.credits&&(this.credits=this.renderer.text(a.text+(this.mapCredits||\"\"),0,0).addClass(\"highcharts-credits\").on(\"click\",function(){a.href&&(M.location.href=a.href)}).attr({align:a.position.align,zIndex:8}).css(a.style).add().align(a.position),this.credits.update=function(a){b.credits=b.credits.destroy();b.addCredits(a)})},destroy:function(){var b=this,c=b.axes,g=b.series,k=b.container,e,d=k&&k.parentNode;m(b,\"destroy\");u[b.index]=void 0;a.chartCount--;b.renderTo.removeAttribute(\"data-highcharts-chart\");\nJ(b);for(e=c.length;e--;)c[e]=c[e].destroy();this.scroller&&this.scroller.destroy&&this.scroller.destroy();for(e=g.length;e--;)g[e]=g[e].destroy();n(\"title subtitle chartBackground plotBackground plotBGImage plotBorder seriesGroup clipRect credits pointer rangeSelector legend resetZoomButton tooltip renderer\".split(\" \"),function(a){var c=b[a];c&&c.destroy&&(b[a]=c.destroy())});k&&(k.innerHTML=\"\",J(k),d&&l(k));for(e in b)delete b[e]},isReadyToRender:function(){var a=this;return B||M!=M.top||\"complete\"===\nh.readyState?!0:(h.attachEvent(\"onreadystatechange\",function(){h.detachEvent(\"onreadystatechange\",a.firstRender);\"complete\"===h.readyState&&a.firstRender()}),!1)},firstRender:function(){var a=this,b=a.options;if(a.isReadyToRender()){a.getContainer();m(a,\"init\");a.resetMargins();a.setChartSize();a.propFromSeries();a.getAxes();n(b.series||[],function(b){a.initSeries(b)});a.linkSeries();m(a,\"beforeRender\");k&&(a.pointer=new k(a,b));a.render();a.renderer.draw();if(!a.renderer.imgCount&&a.onload)a.onload();\na.cloneRenderTo(!0)}},onload:function(){n([this.callback].concat(this.callbacks),function(a){a&&void 0!==this.index&&a.apply(this,[this])},this);m(this,\"load\");c(this.index)&&!1!==this.options.chart.reflow&&this.initReflow();this.onload=null}}})(L);(function(a){var D,C=a.each,G=a.extend,I=a.erase,h=a.fireEvent,f=a.format,p=a.isArray,v=a.isNumber,l=a.pick,u=a.removeEvent;D=a.Point=function(){};D.prototype={init:function(a,c,f){this.series=a;this.color=a.color;this.applyOptions(c,f);a.options.colorByPoint?\n(c=a.options.colors||a.chart.options.colors,this.color=this.color||c[a.colorCounter],c=c.length,f=a.colorCounter,a.colorCounter++,a.colorCounter===c&&(a.colorCounter=0)):f=a.colorIndex;this.colorIndex=l(this.colorIndex,f);a.chart.pointCount++;return this},applyOptions:function(a,c){var d=this.series,f=d.options.pointValKey||d.pointValKey;a=D.prototype.optionsToObject.call(this,a);G(this,a);this.options=this.options?G(this.options,a):a;a.group&&delete this.group;f&&(this.y=this[f]);this.isNull=l(this.isValid&&\n!this.isValid(),null===this.x||!v(this.y,!0));this.selected&&(this.state=\"select\");\"name\"in this&&void 0===c&&d.xAxis&&d.xAxis.hasNames&&(this.x=d.xAxis.nameToX(this));void 0===this.x&&d&&(this.x=void 0===c?d.autoIncrement(this):c);return this},optionsToObject:function(a){var c={},d=this.series,f=d.options.keys,h=f||d.pointArrayMap||[\"y\"],m=h.length,b=0,l=0;if(v(a)||null===a)c[h[0]]=a;else if(p(a))for(!f&&a.length>m&&(d=typeof a[0],\"string\"===d?c.name=a[0]:\"number\"===d&&(c.x=a[0]),b++);l<m;)f&&void 0===\na[b]||(c[h[l]]=a[b]),b++,l++;else\"object\"===typeof a&&(c=a,a.dataLabels&&(d._hasPointLabels=!0),a.marker&&(d._hasPointMarkers=!0));return c},getClassName:function(){return\"highcharts-point\"+(this.selected?\" highcharts-point-select\":\"\")+(this.negative?\" highcharts-negative\":\"\")+(this.isNull?\" highcharts-null-point\":\"\")+(void 0!==this.colorIndex?\" highcharts-color-\"+this.colorIndex:\"\")+(this.options.className?\" \"+this.options.className:\"\")+(this.zone&&this.zone.className?\" \"+this.zone.className:\"\")},\ngetZone:function(){var a=this.series,c=a.zones,a=a.zoneAxis||\"y\",f=0,h;for(h=c[f];this[a]>=h.value;)h=c[++f];h&&h.color&&!this.options.color&&(this.color=h.color);return h},destroy:function(){var a=this.series.chart,c=a.hoverPoints,f;a.pointCount--;c&&(this.setState(),I(c,this),c.length||(a.hoverPoints=null));if(this===a.hoverPoint)this.onMouseOut();if(this.graphic||this.dataLabel)u(this),this.destroyElements();this.legendItem&&a.legend.destroyItem(this);for(f in this)this[f]=null},destroyElements:function(){for(var a=\n[\"graphic\",\"dataLabel\",\"dataLabelUpper\",\"connector\",\"shadowGroup\"],c,f=6;f--;)c=a[f],this[c]&&(this[c]=this[c].destroy())},getLabelConfig:function(){return{x:this.category,y:this.y,color:this.color,key:this.name||this.category,series:this.series,point:this,percentage:this.percentage,total:this.total||this.stackTotal}},tooltipFormatter:function(a){var c=this.series,d=c.tooltipOptions,h=l(d.valueDecimals,\"\"),t=d.valuePrefix||\"\",m=d.valueSuffix||\"\";C(c.pointArrayMap||[\"y\"],function(b){b=\"{point.\"+b;\nif(t||m)a=a.replace(b+\"}\",t+b+\"}\"+m);a=a.replace(b+\"}\",b+\":,.\"+h+\"f}\")});return f(a,{point:this,series:this.series})},firePointEvent:function(a,c,f){var d=this,n=this.series.options;(n.point.events[a]||d.options&&d.options.events&&d.options.events[a])&&this.importEvents();\"click\"===a&&n.allowPointSelect&&(f=function(a){d.select&&d.select(null,a.ctrlKey||a.metaKey||a.shiftKey)});h(this,a,c,f)},visible:!0}})(L);(function(a){var D=a.addEvent,C=a.animObject,G=a.arrayMax,I=a.arrayMin,h=a.correctFloat,\nf=a.Date,p=a.defaultOptions,v=a.defaultPlotOptions,l=a.defined,u=a.each,d=a.erase,c=a.extend,n=a.fireEvent,y=a.grep,t=a.isArray,m=a.isNumber,b=a.isString,q=a.merge,z=a.pick,F=a.removeEvent,e=a.splat,r=a.SVGElement,x=a.syncTimeout,A=a.win;a.Series=a.seriesType(\"line\",null,{lineWidth:2,allowPointSelect:!1,showCheckbox:!1,animation:{duration:1E3},events:{},marker:{lineWidth:0,lineColor:\"#ffffff\",radius:4,states:{hover:{animation:{duration:50},enabled:!0,radiusPlus:2,lineWidthPlus:1},select:{fillColor:\"#cccccc\",\nlineColor:\"#000000\",lineWidth:2}}},point:{events:{}},dataLabels:{align:\"center\",formatter:function(){return null===this.y?\"\":a.numberFormat(this.y,-1)},style:{fontSize:\"11px\",fontWeight:\"bold\",color:\"contrast\",textOutline:\"1px contrast\"},verticalAlign:\"bottom\",x:0,y:0,padding:5},cropThreshold:300,pointRange:0,softThreshold:!0,states:{hover:{lineWidthPlus:1,marker:{},halo:{size:10,opacity:.25}},select:{marker:{}}},stickyTracking:!0,turboThreshold:1E3},{isCartesian:!0,pointClass:a.Point,sorted:!0,requireSorting:!0,\ndirectTouch:!1,axisTypes:[\"xAxis\",\"yAxis\"],colorCounter:0,parallelArrays:[\"x\",\"y\"],coll:\"series\",init:function(a,b){var k=this,e,d,g=a.series,f;k.chart=a;k.options=b=k.setOptions(b);k.linkedSeries=[];k.bindAxes();c(k,{name:b.name,state:\"\",visible:!1!==b.visible,selected:!0===b.selected});d=b.events;for(e in d)D(k,e,d[e]);if(d&&d.click||b.point&&b.point.events&&b.point.events.click||b.allowPointSelect)a.runTrackerClick=!0;k.getColor();k.getSymbol();u(k.parallelArrays,function(a){k[a+\"Data\"]=[]});k.setData(b.data,\n!1);k.isCartesian&&(a.hasCartesianSeries=!0);g.length&&(f=g[g.length-1]);k._i=z(f&&f._i,-1)+1;for(a=this.insert(g);a<g.length;a++)g[a].index=a,g[a].name=g[a].name||\"Series \"+(g[a].index+1)},insert:function(a){var b=this.options.index,c;if(m(b)){for(c=a.length;c--;)if(b>=z(a[c].options.index,a[c]._i)){a.splice(c+1,0,this);break}-1===c&&a.unshift(this);c+=1}else a.push(this);return z(c,a.length-1)},bindAxes:function(){var b=this,c=b.options,e=b.chart,d;u(b.axisTypes||[],function(k){u(e[k],function(a){d=\na.options;if(c[k]===d.index||void 0!==c[k]&&c[k]===d.id||void 0===c[k]&&0===d.index)b.insert(a.series),b[k]=a,a.isDirty=!0});b[k]||b.optionalAxis===k||a.error(18,!0)})},updateParallelArrays:function(a,b){var c=a.series,k=arguments,e=m(b)?function(g){var k=\"y\"===g&&c.toYData?c.toYData(a):a[g];c[g+\"Data\"][b]=k}:function(a){Array.prototype[b].apply(c[a+\"Data\"],Array.prototype.slice.call(k,2))};u(c.parallelArrays,e)},autoIncrement:function(){var a=this.options,b=this.xIncrement,c,e=a.pointIntervalUnit,\nb=z(b,a.pointStart,0);this.pointInterval=c=z(this.pointInterval,a.pointInterval,1);e&&(a=new f(b),\"day\"===e?a=+a[f.hcSetDate](a[f.hcGetDate]()+c):\"month\"===e?a=+a[f.hcSetMonth](a[f.hcGetMonth]()+c):\"year\"===e&&(a=+a[f.hcSetFullYear](a[f.hcGetFullYear]()+c)),c=a-b);this.xIncrement=b+c;return b},setOptions:function(a){var b=this.chart,c=b.options.plotOptions,b=b.userOptions||{},k=b.plotOptions||{},e=c[this.type];this.userOptions=a;c=q(e,c.series,a);this.tooltipOptions=q(p.tooltip,p.plotOptions[this.type].tooltip,\nb.tooltip,k.series&&k.series.tooltip,k[this.type]&&k[this.type].tooltip,a.tooltip);null===e.marker&&delete c.marker;this.zoneAxis=c.zoneAxis;a=this.zones=(c.zones||[]).slice();!c.negativeColor&&!c.negativeFillColor||c.zones||a.push({value:c[this.zoneAxis+\"Threshold\"]||c.threshold||0,className:\"highcharts-negative\",color:c.negativeColor,fillColor:c.negativeFillColor});a.length&&l(a[a.length-1].value)&&a.push({color:this.color,fillColor:this.fillColor});return c},getCyclic:function(a,b,c){var k,e=this.userOptions,\ng=a+\"Index\",d=a+\"Counter\",f=c?c.length:z(this.chart.options.chart[a+\"Count\"],this.chart[a+\"Count\"]);b||(k=z(e[g],e[\"_\"+g]),l(k)||(e[\"_\"+g]=k=this.chart[d]%f,this.chart[d]+=1),c&&(b=c[k]));void 0!==k&&(this[g]=k);this[a]=b},getColor:function(){this.options.colorByPoint?this.options.color=null:this.getCyclic(\"color\",this.options.color||v[this.type].color,this.chart.options.colors)},getSymbol:function(){this.getCyclic(\"symbol\",this.options.marker.symbol,this.chart.options.symbols)},drawLegendSymbol:a.LegendSymbolMixin.drawLineMarker,\nsetData:function(c,e,d,f){var k=this,g=k.points,h=g&&g.length||0,n,r=k.options,w=k.chart,l=null,q=k.xAxis,p=r.turboThreshold,x=this.xData,A=this.yData,F=(n=k.pointArrayMap)&&n.length;c=c||[];n=c.length;e=z(e,!0);if(!1!==f&&n&&h===n&&!k.cropped&&!k.hasGroupedData&&k.visible)u(c,function(a,b){g[b].update&&a!==r.data[b]&&g[b].update(a,!1,null,!1)});else{k.xIncrement=null;k.colorCounter=0;u(this.parallelArrays,function(a){k[a+\"Data\"].length=0});if(p&&n>p){for(d=0;null===l&&d<n;)l=c[d],d++;if(m(l))for(d=\n0;d<n;d++)x[d]=this.autoIncrement(),A[d]=c[d];else if(t(l))if(F)for(d=0;d<n;d++)l=c[d],x[d]=l[0],A[d]=l.slice(1,F+1);else for(d=0;d<n;d++)l=c[d],x[d]=l[0],A[d]=l[1];else a.error(12)}else for(d=0;d<n;d++)void 0!==c[d]&&(l={series:k},k.pointClass.prototype.applyOptions.apply(l,[c[d]]),k.updateParallelArrays(l,d));b(A[0])&&a.error(14,!0);k.data=[];k.options.data=k.userOptions.data=c;for(d=h;d--;)g[d]&&g[d].destroy&&g[d].destroy();q&&(q.minRange=q.userMinRange);k.isDirty=w.isDirtyBox=!0;k.isDirtyData=\n!!g;d=!1}\"point\"===r.legendType&&(this.processData(),this.generatePoints());e&&w.redraw(d)},processData:function(b){var c=this.xData,k=this.yData,e=c.length,d;d=0;var g,f,m=this.xAxis,h,n=this.options;h=n.cropThreshold;var l=this.getExtremesFromAll||n.getExtremesFromAll,r=this.isCartesian,n=m&&m.val2lin,q=m&&m.isLog,t,p;if(r&&!this.isDirty&&!m.isDirty&&!this.yAxis.isDirty&&!b)return!1;m&&(b=m.getExtremes(),t=b.min,p=b.max);if(r&&this.sorted&&!l&&(!h||e>h||this.forceCrop))if(c[e-1]<t||c[0]>p)c=[],\nk=[];else if(c[0]<t||c[e-1]>p)d=this.cropData(this.xData,this.yData,t,p),c=d.xData,k=d.yData,d=d.start,g=!0;for(h=c.length||1;--h;)e=q?n(c[h])-n(c[h-1]):c[h]-c[h-1],0<e&&(void 0===f||e<f)?f=e:0>e&&this.requireSorting&&a.error(15);this.cropped=g;this.cropStart=d;this.processedXData=c;this.processedYData=k;this.closestPointRange=f},cropData:function(a,b,c,e){var k=a.length,g=0,d=k,f=z(this.cropShoulder,1),h;for(h=0;h<k;h++)if(a[h]>=c){g=Math.max(0,h-f);break}for(c=h;c<k;c++)if(a[c]>e){d=c+f;break}return{xData:a.slice(g,\nd),yData:b.slice(g,d),start:g,end:d}},generatePoints:function(){var a=this.options.data,b=this.data,c,d=this.processedXData,f=this.processedYData,g=this.pointClass,h=d.length,m=this.cropStart||0,n,r=this.hasGroupedData,l,q=[],t;b||r||(b=[],b.length=a.length,b=this.data=b);for(t=0;t<h;t++)n=m+t,r?(l=(new g).init(this,[d[t]].concat(e(f[t]))),l.dataGroup=this.groupMap[t]):(l=b[n])||void 0===a[n]||(b[n]=l=(new g).init(this,a[n],d[t])),l.index=n,q[t]=l;if(b&&(h!==(c=b.length)||r))for(t=0;t<c;t++)t!==m||\nr||(t+=h),b[t]&&(b[t].destroyElements(),b[t].plotX=void 0);this.data=b;this.points=q},getExtremes:function(a){var b=this.yAxis,c=this.processedXData,e,k=[],g=0;e=this.xAxis.getExtremes();var d=e.min,f=e.max,h,n,l,r;a=a||this.stackedYData||this.processedYData||[];e=a.length;for(r=0;r<e;r++)if(n=c[r],l=a[r],h=(m(l,!0)||t(l))&&(!b.isLog||l.length||0<l),n=this.getExtremesFromAll||this.options.getExtremesFromAll||this.cropped||(c[r+1]||n)>=d&&(c[r-1]||n)<=f,h&&n)if(h=l.length)for(;h--;)null!==l[h]&&(k[g++]=\nl[h]);else k[g++]=l;this.dataMin=I(k);this.dataMax=G(k)},translate:function(){this.processedXData||this.processData();this.generatePoints();var a=this.options,b=a.stacking,c=this.xAxis,e=c.categories,d=this.yAxis,g=this.points,f=g.length,n=!!this.modifyValue,r=a.pointPlacement,t=\"between\"===r||m(r),q=a.threshold,p=a.startFromThreshold?q:0,x,u,A,F,v=Number.MAX_VALUE;\"between\"===r&&(r=.5);m(r)&&(r*=z(a.pointRange||c.pointRange));for(a=0;a<f;a++){var y=g[a],C=y.x,D=y.y;u=y.low;var G=b&&d.stacks[(this.negStacks&&\nD<(p?0:q)?\"-\":\"\")+this.stackKey],I;d.isLog&&null!==D&&0>=D&&(y.isNull=!0);y.plotX=x=h(Math.min(Math.max(-1E5,c.translate(C,0,0,0,1,r,\"flags\"===this.type)),1E5));b&&this.visible&&!y.isNull&&G&&G[C]&&(F=this.getStackIndicator(F,C,this.index),I=G[C],D=I.points[F.key],u=D[0],D=D[1],u===p&&F.key===G[C].base&&(u=z(q,d.min)),d.isLog&&0>=u&&(u=null),y.total=y.stackTotal=I.total,y.percentage=I.total&&y.y/I.total*100,y.stackY=D,I.setOffset(this.pointXOffset||0,this.barW||0));y.yBottom=l(u)?d.translate(u,0,\n1,0,1):null;n&&(D=this.modifyValue(D,y));y.plotY=u=\"number\"===typeof D&&Infinity!==D?Math.min(Math.max(-1E5,d.translate(D,0,1,0,1)),1E5):void 0;y.isInside=void 0!==u&&0<=u&&u<=d.len&&0<=x&&x<=c.len;y.clientX=t?h(c.translate(C,0,0,0,1,r)):x;y.negative=y.y<(q||0);y.category=e&&void 0!==e[y.x]?e[y.x]:y.x;y.isNull||(void 0!==A&&(v=Math.min(v,Math.abs(x-A))),A=x);y.zone=this.zones.length&&y.getZone()}this.closestPointRangePx=v},getValidPoints:function(a,b){var c=this.chart;return y(a||this.points||[],\nfunction(a){return b&&!c.isInsidePlot(a.plotX,a.plotY,c.inverted)?!1:!a.isNull})},setClip:function(a){var b=this.chart,c=this.options,e=b.renderer,k=b.inverted,g=this.clipBox,d=g||b.clipBox,f=this.sharedClipKey||[\"_sharedClip\",a&&a.duration,a&&a.easing,d.height,c.xAxis,c.yAxis].join(),h=b[f],m=b[f+\"m\"];h||(a&&(d.width=0,b[f+\"m\"]=m=e.clipRect(-99,k?-b.plotLeft:-b.plotTop,99,k?b.chartWidth:b.chartHeight)),b[f]=h=e.clipRect(d),h.count={length:0});a&&!h.count[this.index]&&(h.count[this.index]=!0,h.count.length+=\n1);!1!==c.clip&&(this.group.clip(a||g?h:b.clipRect),this.markerGroup.clip(m),this.sharedClipKey=f);a||(h.count[this.index]&&(delete h.count[this.index],--h.count.length),0===h.count.length&&f&&b[f]&&(g||(b[f]=b[f].destroy()),b[f+\"m\"]&&(b[f+\"m\"]=b[f+\"m\"].destroy())))},animate:function(a){var b=this.chart,c=C(this.options.animation),e;a?this.setClip(c):(e=this.sharedClipKey,(a=b[e])&&a.animate({width:b.plotSizeX},c),b[e+\"m\"]&&b[e+\"m\"].animate({width:b.plotSizeX+99},c),this.animate=null)},afterAnimate:function(){this.setClip();\nn(this,\"afterAnimate\")},drawPoints:function(){var a=this.points,b=this.chart,c,e,d,g,f=this.options.marker,h,n,r,l,t=this.markerGroup,q=z(f.enabled,this.xAxis.isRadial?!0:null,this.closestPointRangePx>2*f.radius);if(!1!==f.enabled||this._hasPointMarkers)for(e=a.length;e--;)d=a[e],c=d.plotY,g=d.graphic,h=d.marker||{},n=!!d.marker,r=q&&void 0===h.enabled||h.enabled,l=d.isInside,r&&m(c)&&null!==d.y?(c=z(h.symbol,this.symbol),d.hasImage=0===c.indexOf(\"url\"),r=this.markerAttribs(d,d.selected&&\"select\"),\ng?g[l?\"show\":\"hide\"](!0).animate(r):l&&(0<r.width||d.hasImage)&&(d.graphic=g=b.renderer.symbol(c,r.x,r.y,r.width,r.height,n?h:f).add(t)),g&&g.attr(this.pointAttribs(d,d.selected&&\"select\")),g&&g.addClass(d.getClassName(),!0)):g&&(d.graphic=g.destroy())},markerAttribs:function(a,b){var c=this.options.marker,e=a&&a.options,k=e&&e.marker||{},e=z(k.radius,c.radius);b&&(c=c.states[b],b=k.states&&k.states[b],e=z(b&&b.radius,c&&c.radius,e+(c&&c.radiusPlus||0)));a.hasImage&&(e=0);a={x:Math.floor(a.plotX)-\ne,y:a.plotY-e};e&&(a.width=a.height=2*e);return a},pointAttribs:function(a,b){var c=this.options.marker,e=a&&a.options,k=e&&e.marker||{},g=this.color,d=e&&e.color,f=a&&a.color,e=z(k.lineWidth,c.lineWidth);a=a&&a.zone&&a.zone.color;g=d||a||f||g;a=k.fillColor||c.fillColor||g;g=k.lineColor||c.lineColor||g;b&&(c=c.states[b],b=k.states&&k.states[b]||{},e=z(b.lineWidth,c.lineWidth,e+z(b.lineWidthPlus,c.lineWidthPlus,0)),a=b.fillColor||c.fillColor||a,g=b.lineColor||c.lineColor||g);return{stroke:g,\"stroke-width\":e,\nfill:a}},destroy:function(){var a=this,b=a.chart,c=/AppleWebKit\\/533/.test(A.navigator.userAgent),e,f=a.data||[],g,h,m;n(a,\"destroy\");F(a);u(a.axisTypes||[],function(b){(m=a[b])&&m.series&&(d(m.series,a),m.isDirty=m.forceRedraw=!0)});a.legendItem&&a.chart.legend.destroyItem(a);for(e=f.length;e--;)(g=f[e])&&g.destroy&&g.destroy();a.points=null;clearTimeout(a.animationTimeout);for(h in a)a[h]instanceof r&&!a[h].survive&&(e=c&&\"group\"===h?\"hide\":\"destroy\",a[h][e]());b.hoverSeries===a&&(b.hoverSeries=\nnull);d(b.series,a);for(h in a)delete a[h]},getGraphPath:function(a,b,c){var e=this,k=e.options,g=k.step,d,f=[],h=[],m;a=a||e.points;(d=a.reversed)&&a.reverse();(g={right:1,center:2}[g]||g&&3)&&d&&(g=4-g);!k.connectNulls||b||c||(a=this.getValidPoints(a));u(a,function(d,n){var r=d.plotX,t=d.plotY,q=a[n-1];(d.leftCliff||q&&q.rightCliff)&&!c&&(m=!0);d.isNull&&!l(b)&&0<n?m=!k.connectNulls:d.isNull&&!b?m=!0:(0===n||m?n=[\"M\",d.plotX,d.plotY]:e.getPointSpline?n=e.getPointSpline(a,d,n):g?(n=1===g?[\"L\",q.plotX,\nt]:2===g?[\"L\",(q.plotX+r)/2,q.plotY,\"L\",(q.plotX+r)/2,t]:[\"L\",r,q.plotY],n.push(\"L\",r,t)):n=[\"L\",r,t],h.push(d.x),g&&h.push(d.x),f.push.apply(f,n),m=!1)});f.xMap=h;return e.graphPath=f},drawGraph:function(){var a=this,b=this.options,c=(this.gappedPath||this.getGraphPath).call(this),e=[[\"graph\",\"highcharts-graph\",b.lineColor||this.color,b.dashStyle]];u(this.zones,function(c,g){e.push([\"zone-graph-\"+g,\"highcharts-graph highcharts-zone-graph-\"+g+\" \"+(c.className||\"\"),c.color||a.color,c.dashStyle||b.dashStyle])});\nu(e,function(e,g){var k=e[0],d=a[k];d?(d.endX=c.xMap,d.animate({d:c})):c.length&&(a[k]=a.chart.renderer.path(c).addClass(e[1]).attr({zIndex:1}).add(a.group),d={stroke:e[2],\"stroke-width\":b.lineWidth,fill:a.fillGraph&&a.color||\"none\"},e[3]?d.dashstyle=e[3]:\"square\"!==b.linecap&&(d[\"stroke-linecap\"]=d[\"stroke-linejoin\"]=\"round\"),d=a[k].attr(d).shadow(2>g&&b.shadow));d&&(d.startX=c.xMap,d.isArea=c.isArea)})},applyZones:function(){var a=this,b=this.chart,c=b.renderer,e=this.zones,d,g,f=this.clips||[],\nh,m=this.graph,n=this.area,r=Math.max(b.chartWidth,b.chartHeight),l=this[(this.zoneAxis||\"y\")+\"Axis\"],q,t,p=b.inverted,x,A,F,y,v=!1;e.length&&(m||n)&&l&&void 0!==l.min&&(t=l.reversed,x=l.horiz,m&&m.hide(),n&&n.hide(),q=l.getExtremes(),u(e,function(e,k){d=t?x?b.plotWidth:0:x?0:l.toPixels(q.min);d=Math.min(Math.max(z(g,d),0),r);g=Math.min(Math.max(Math.round(l.toPixels(z(e.value,q.max),!0)),0),r);v&&(d=g=l.toPixels(q.max));A=Math.abs(d-g);F=Math.min(d,g);y=Math.max(d,g);l.isXAxis?(h={x:p?y:F,y:0,width:A,\nheight:r},x||(h.x=b.plotHeight-h.x)):(h={x:0,y:p?y:F,width:r,height:A},x&&(h.y=b.plotWidth-h.y));p&&c.isVML&&(h=l.isXAxis?{x:0,y:t?F:y,height:h.width,width:b.chartWidth}:{x:h.y-b.plotLeft-b.spacingBox.x,y:0,width:h.height,height:b.chartHeight});f[k]?f[k].animate(h):(f[k]=c.clipRect(h),m&&a[\"zone-graph-\"+k].clip(f[k]),n&&a[\"zone-area-\"+k].clip(f[k]));v=e.value>q.max}),this.clips=f)},invertGroups:function(a){function b(){var b={width:c.yAxis.len,height:c.xAxis.len};u([\"group\",\"markerGroup\"],function(e){c[e]&&\nc[e].attr(b).invert(a)})}var c=this,e;c.xAxis&&(e=D(c.chart,\"resize\",b),D(c,\"destroy\",e),b(a),c.invertGroups=b)},plotGroup:function(a,b,c,e,d){var g=this[a],k=!g;k&&(this[a]=g=this.chart.renderer.g(b).attr({zIndex:e||.1}).add(d),g.addClass(\"highcharts-series-\"+this.index+\" highcharts-\"+this.type+\"-series highcharts-color-\"+this.colorIndex+\" \"+(this.options.className||\"\")));g.attr({visibility:c})[k?\"attr\":\"animate\"](this.getPlotBox());return g},getPlotBox:function(){var a=this.chart,b=this.xAxis,c=\nthis.yAxis;a.inverted&&(b=c,c=this.xAxis);return{translateX:b?b.left:a.plotLeft,translateY:c?c.top:a.plotTop,scaleX:1,scaleY:1}},render:function(){var a=this,b=a.chart,c,e=a.options,d=!!a.animate&&b.renderer.isSVG&&C(e.animation).duration,g=a.visible?\"inherit\":\"hidden\",f=e.zIndex,h=a.hasRendered,m=b.seriesGroup,n=b.inverted;c=a.plotGroup(\"group\",\"series\",g,f,m);a.markerGroup=a.plotGroup(\"markerGroup\",\"markers\",g,f,m);d&&a.animate(!0);c.inverted=a.isCartesian?n:!1;a.drawGraph&&(a.drawGraph(),a.applyZones());\na.drawDataLabels&&a.drawDataLabels();a.visible&&a.drawPoints();a.drawTracker&&!1!==a.options.enableMouseTracking&&a.drawTracker();a.invertGroups(n);!1===e.clip||a.sharedClipKey||h||c.clip(b.clipRect);d&&a.animate();h||(a.animationTimeout=x(function(){a.afterAnimate()},d));a.isDirty=a.isDirtyData=!1;a.hasRendered=!0},redraw:function(){var a=this.chart,b=this.isDirty||this.isDirtyData,c=this.group,e=this.xAxis,d=this.yAxis;c&&(a.inverted&&c.attr({width:a.plotWidth,height:a.plotHeight}),c.animate({translateX:z(e&&\ne.left,a.plotLeft),translateY:z(d&&d.top,a.plotTop)}));this.translate();this.render();b&&delete this.kdTree},kdDimensions:1,kdAxisArray:[\"clientX\",\"plotY\"],searchPoint:function(a,b){var c=this.xAxis,e=this.yAxis,d=this.chart.inverted;return this.searchKDTree({clientX:d?c.len-a.chartY+c.pos:a.chartX-c.pos,plotY:d?e.len-a.chartX+e.pos:a.chartY-e.pos},b)},buildKDTree:function(){function a(c,e,g){var d,k;if(k=c&&c.length)return d=b.kdAxisArray[e%g],c.sort(function(a,b){return a[d]-b[d]}),k=Math.floor(k/\n2),{point:c[k],left:a(c.slice(0,k),e+1,g),right:a(c.slice(k+1),e+1,g)}}var b=this,c=b.kdDimensions;delete b.kdTree;x(function(){b.kdTree=a(b.getValidPoints(null,!b.directTouch),c,c)},b.options.kdNow?0:1)},searchKDTree:function(a,b){function c(a,b,f,h){var m=b.point,n=e.kdAxisArray[f%h],r,q,t=m;q=l(a[d])&&l(m[d])?Math.pow(a[d]-m[d],2):null;r=l(a[g])&&l(m[g])?Math.pow(a[g]-m[g],2):null;r=(q||0)+(r||0);m.dist=l(r)?Math.sqrt(r):Number.MAX_VALUE;m.distX=l(q)?Math.sqrt(q):Number.MAX_VALUE;n=a[n]-m[n];r=\n0>n?\"left\":\"right\";q=0>n?\"right\":\"left\";b[r]&&(r=c(a,b[r],f+1,h),t=r[k]<t[k]?r:m);b[q]&&Math.sqrt(n*n)<t[k]&&(a=c(a,b[q],f+1,h),t=a[k]<t[k]?a:t);return t}var e=this,d=this.kdAxisArray[0],g=this.kdAxisArray[1],k=b?\"distX\":\"dist\";this.kdTree||this.buildKDTree();if(this.kdTree)return c(a,this.kdTree,this.kdDimensions,this.kdDimensions)}})})(L);(function(a){function D(a,d,c,f,h){var n=a.chart.inverted;this.axis=a;this.isNegative=c;this.options=d;this.x=f;this.total=null;this.points={};this.stack=h;this.rightCliff=\nthis.leftCliff=0;this.alignOptions={align:d.align||(n?c?\"left\":\"right\":\"center\"),verticalAlign:d.verticalAlign||(n?\"middle\":c?\"bottom\":\"top\"),y:l(d.y,n?4:c?14:-6),x:l(d.x,n?c?-6:6:0)};this.textAlign=d.textAlign||(n?c?\"right\":\"left\":\"center\")}var C=a.Axis,G=a.Chart,I=a.correctFloat,h=a.defined,f=a.destroyObjectProperties,p=a.each,v=a.format,l=a.pick;a=a.Series;D.prototype={destroy:function(){f(this,this.axis)},render:function(a){var d=this.options,c=d.format,c=c?v(c,this):d.formatter.call(this);this.label?\nthis.label.attr({text:c,visibility:\"hidden\"}):this.label=this.axis.chart.renderer.text(c,null,null,d.useHTML).css(d.style).attr({align:this.textAlign,rotation:d.rotation,visibility:\"hidden\"}).add(a)},setOffset:function(a,d){var c=this.axis,f=c.chart,h=f.inverted,l=c.reversed,l=this.isNegative&&!l||!this.isNegative&&l,m=c.translate(c.usePercentage?100:this.total,0,0,0,1),c=c.translate(0),c=Math.abs(m-c);a=f.xAxis[0].translate(this.x)+a;var b=f.plotHeight,h={x:h?l?m:m-c:a,y:h?b-a-d:l?b-m-c:b-m,width:h?\nc:d,height:h?d:c};if(d=this.label)d.align(this.alignOptions,null,h),h=d.alignAttr,d[!1===this.options.crop||f.isInsidePlot(h.x,h.y)?\"show\":\"hide\"](!0)}};G.prototype.getStacks=function(){var a=this;p(a.yAxis,function(a){a.stacks&&a.hasVisibleSeries&&(a.oldStacks=a.stacks)});p(a.series,function(d){!d.options.stacking||!0!==d.visible&&!1!==a.options.chart.ignoreHiddenSeries||(d.stackKey=d.type+l(d.options.stack,\"\"))})};C.prototype.buildStacks=function(){var a=this.series,d,c=l(this.options.reversedStacks,\n!0),f=a.length,h;if(!this.isXAxis){this.usePercentage=!1;for(h=f;h--;)a[c?h:f-h-1].setStackedPoints();for(h=f;h--;)d=a[c?h:f-h-1],d.setStackCliffs&&d.setStackCliffs();if(this.usePercentage)for(h=0;h<f;h++)a[h].setPercentStacks()}};C.prototype.renderStackTotals=function(){var a=this.chart,d=a.renderer,c=this.stacks,f,h,l=this.stackTotalGroup;l||(this.stackTotalGroup=l=d.g(\"stack-labels\").attr({visibility:\"visible\",zIndex:6}).add());l.translate(a.plotLeft,a.plotTop);for(f in c)for(h in a=c[f],a)a[h].render(l)};\nC.prototype.resetStacks=function(){var a=this.stacks,d,c;if(!this.isXAxis)for(d in a)for(c in a[d])a[d][c].touched<this.stacksTouched?(a[d][c].destroy(),delete a[d][c]):(a[d][c].total=null,a[d][c].cum=null)};C.prototype.cleanStacks=function(){var a,d,c;if(!this.isXAxis)for(d in this.oldStacks&&(a=this.stacks=this.oldStacks),a)for(c in a[d])a[d][c].cum=a[d][c].total};a.prototype.setStackedPoints=function(){if(this.options.stacking&&(!0===this.visible||!1===this.chart.options.chart.ignoreHiddenSeries)){var a=\nthis.processedXData,d=this.processedYData,c=[],f=d.length,p=this.options,t=p.threshold,m=p.startFromThreshold?t:0,b=p.stack,p=p.stacking,q=this.stackKey,v=\"-\"+q,F=this.negStacks,e=this.yAxis,r=e.stacks,x=e.oldStacks,A,k,w,C,J,G,g;e.stacksTouched+=1;for(J=0;J<f;J++)G=a[J],g=d[J],A=this.getStackIndicator(A,G,this.index),C=A.key,w=(k=F&&g<(m?0:t))?v:q,r[w]||(r[w]={}),r[w][G]||(x[w]&&x[w][G]?(r[w][G]=x[w][G],r[w][G].total=null):r[w][G]=new D(e,e.options.stackLabels,k,G,b)),w=r[w][G],null!==g&&(w.points[C]=\nw.points[this.index]=[l(w.cum,m)],h(w.cum)||(w.base=C),w.touched=e.stacksTouched,0<A.index&&!1===this.singleStacks&&(w.points[C][0]=w.points[this.index+\",\"+G+\",0\"][0])),\"percent\"===p?(k=k?q:v,F&&r[k]&&r[k][G]?(k=r[k][G],w.total=k.total=Math.max(k.total,w.total)+Math.abs(g)||0):w.total=I(w.total+(Math.abs(g)||0))):w.total=I(w.total+(g||0)),w.cum=l(w.cum,m)+(g||0),null!==g&&(w.points[C].push(w.cum),c[J]=w.cum);\"percent\"===p&&(e.usePercentage=!0);this.stackedYData=c;e.oldStacks={}}};a.prototype.setPercentStacks=\nfunction(){var a=this,d=a.stackKey,c=a.yAxis.stacks,f=a.processedXData,h;p([d,\"-\"+d],function(d){for(var m=f.length,b,n;m--;)if(b=f[m],h=a.getStackIndicator(h,b,a.index,d),b=(n=c[d]&&c[d][b])&&n.points[h.key])n=n.total?100/n.total:0,b[0]=I(b[0]*n),b[1]=I(b[1]*n),a.stackedYData[m]=b[1]})};a.prototype.getStackIndicator=function(a,d,c,f){!h(a)||a.x!==d||f&&a.key!==f?a={x:d,index:0,key:f}:a.index++;a.key=[c,d,a.index].join();return a}})(L);(function(a){var D=a.addEvent,C=a.animate,G=a.Axis,I=a.createElement,\nh=a.css,f=a.defined,p=a.each,v=a.erase,l=a.extend,u=a.fireEvent,d=a.inArray,c=a.isNumber,n=a.isObject,y=a.merge,t=a.pick,m=a.Point,b=a.Series,q=a.seriesTypes,z=a.setAnimation,F=a.splat;l(a.Chart.prototype,{addSeries:function(a,b,c){var e,d=this;a&&(b=t(b,!0),u(d,\"addSeries\",{options:a},function(){e=d.initSeries(a);d.isDirtyLegend=!0;d.linkSeries();b&&d.redraw(c)}));return e},addAxis:function(a,b,c,d){var e=b?\"xAxis\":\"yAxis\",f=this.options;a=y(a,{index:this[e].length,isX:b});new G(this,a);f[e]=F(f[e]||\n{});f[e].push(a);t(c,!0)&&this.redraw(d)},showLoading:function(a){var b=this,c=b.options,e=b.loadingDiv,d=c.loading,f=function(){e&&h(e,{left:b.plotLeft+\"px\",top:b.plotTop+\"px\",width:b.plotWidth+\"px\",height:b.plotHeight+\"px\"})};e||(b.loadingDiv=e=I(\"div\",{className:\"highcharts-loading highcharts-loading-hidden\"},null,b.container),b.loadingSpan=I(\"span\",{className:\"highcharts-loading-inner\"},null,e),D(b,\"redraw\",f));e.className=\"highcharts-loading\";b.loadingSpan.innerHTML=a||c.lang.loading;h(e,l(d.style,\n{zIndex:10}));h(b.loadingSpan,d.labelStyle);b.loadingShown||(h(e,{opacity:0,display:\"\"}),C(e,{opacity:d.style.opacity||.5},{duration:d.showDuration||0}));b.loadingShown=!0;f()},hideLoading:function(){var a=this.options,b=this.loadingDiv;b&&(b.className=\"highcharts-loading highcharts-loading-hidden\",C(b,{opacity:0},{duration:a.loading.hideDuration||100,complete:function(){h(b,{display:\"none\"})}}));this.loadingShown=!1},propsRequireDirtyBox:\"backgroundColor borderColor borderWidth margin marginTop marginRight marginBottom marginLeft spacing spacingTop spacingRight spacingBottom spacingLeft borderRadius plotBackgroundColor plotBackgroundImage plotBorderColor plotBorderWidth plotShadow shadow\".split(\" \"),\npropsRequireUpdateSeries:\"chart.inverted chart.polar chart.ignoreHiddenSeries chart.type colors plotOptions\".split(\" \"),update:function(a,b){var e,h={credits:\"addCredits\",title:\"setTitle\",subtitle:\"setSubtitle\"},k=a.chart,m,n;if(k){y(!0,this.options.chart,k);\"className\"in k&&this.setClassName(k.className);if(\"inverted\"in k||\"polar\"in k)this.propFromSeries(),m=!0;for(e in k)k.hasOwnProperty(e)&&(-1!==d(\"chart.\"+e,this.propsRequireUpdateSeries)&&(n=!0),-1!==d(e,this.propsRequireDirtyBox)&&(this.isDirtyBox=\n!0));\"style\"in k&&this.renderer.setStyle(k.style)}for(e in a){if(this[e]&&\"function\"===typeof this[e].update)this[e].update(a[e],!1);else if(\"function\"===typeof this[h[e]])this[h[e]](a[e]);\"chart\"!==e&&-1!==d(e,this.propsRequireUpdateSeries)&&(n=!0)}a.colors&&(this.options.colors=a.colors);a.plotOptions&&y(!0,this.options.plotOptions,a.plotOptions);p([\"xAxis\",\"yAxis\",\"series\"],function(b){a[b]&&p(F(a[b]),function(a){var c=f(a.id)&&this.get(a.id)||this[b][0];c&&c.coll===b&&c.update(a,!1)},this)},this);\nm&&p(this.axes,function(a){a.update({},!1)});n&&p(this.series,function(a){a.update({},!1)});a.loading&&y(!0,this.options.loading,a.loading);e=k&&k.width;k=k&&k.height;c(e)&&e!==this.chartWidth||c(k)&&k!==this.chartHeight?this.setSize(e,k):t(b,!0)&&this.redraw()},setSubtitle:function(a){this.setTitle(void 0,a)}});l(m.prototype,{update:function(a,b,c,d){function e(){f.applyOptions(a);null===f.y&&m&&(f.graphic=m.destroy());n(a,!0)&&(m&&m.element&&a&&a.marker&&a.marker.symbol&&(f.graphic=m.destroy()),\na&&a.dataLabels&&f.dataLabel&&(f.dataLabel=f.dataLabel.destroy()));l=f.index;h.updateParallelArrays(f,l);r.data[l]=n(r.data[l],!0)?f.options:a;h.isDirty=h.isDirtyData=!0;!h.fixedBox&&h.hasCartesianSeries&&(g.isDirtyBox=!0);\"point\"===r.legendType&&(g.isDirtyLegend=!0);b&&g.redraw(c)}var f=this,h=f.series,m=f.graphic,l,g=h.chart,r=h.options;b=t(b,!0);!1===d?e():f.firePointEvent(\"update\",{options:a},e)},remove:function(a,b){this.series.removePoint(d(this,this.series.data),a,b)}});l(b.prototype,{addPoint:function(a,\nb,c,d){var e=this.options,f=this.data,h=this.chart,m=this.xAxis&&this.xAxis.names,n=e.data,g,l,r=this.xData,q,p;b=t(b,!0);g={series:this};this.pointClass.prototype.applyOptions.apply(g,[a]);p=g.x;q=r.length;if(this.requireSorting&&p<r[q-1])for(l=!0;q&&r[q-1]>p;)q--;this.updateParallelArrays(g,\"splice\",q,0,0);this.updateParallelArrays(g,q);m&&g.name&&(m[p]=g.name);n.splice(q,0,a);l&&(this.data.splice(q,0,null),this.processData());\"point\"===e.legendType&&this.generatePoints();c&&(f[0]&&f[0].remove?\nf[0].remove(!1):(f.shift(),this.updateParallelArrays(g,\"shift\"),n.shift()));this.isDirtyData=this.isDirty=!0;b&&h.redraw(d)},removePoint:function(a,b,c){var e=this,d=e.data,f=d[a],h=e.points,m=e.chart,n=function(){h&&h.length===d.length&&h.splice(a,1);d.splice(a,1);e.options.data.splice(a,1);e.updateParallelArrays(f||{series:e},\"splice\",a,1);f&&f.destroy();e.isDirty=!0;e.isDirtyData=!0;b&&m.redraw()};z(c,m);b=t(b,!0);f?f.firePointEvent(\"remove\",null,n):n()},remove:function(a,b,c){function e(){d.destroy();\nf.isDirtyLegend=f.isDirtyBox=!0;f.linkSeries();t(a,!0)&&f.redraw(b)}var d=this,f=d.chart;!1!==c?u(d,\"remove\",null,e):e()},update:function(a,b){var c=this,e=this.chart,d=this.userOptions,f=this.type,h=a.type||d.type||e.options.chart.type,m=q[f].prototype,n=[\"group\",\"markerGroup\",\"dataLabelsGroup\"],g;if(h&&h!==f||void 0!==a.zIndex)n.length=0;p(n,function(a){n[a]=c[a];delete c[a]});a=y(d,{animation:!1,index:this.index,pointStart:this.xData[0]},{data:this.options.data},a);this.remove(!1,null,!1);for(g in m)this[g]=\nvoid 0;l(this,q[h||f].prototype);p(n,function(a){c[a]=n[a]});this.init(e,a);e.linkSeries();t(b,!0)&&e.redraw(!1)}});l(G.prototype,{update:function(a,b){var c=this.chart;a=c.options[this.coll][this.options.index]=y(this.userOptions,a);this.destroy(!0);this.init(c,l(a,{events:void 0}));c.isDirtyBox=!0;t(b,!0)&&c.redraw()},remove:function(a){for(var b=this.chart,c=this.coll,e=this.series,d=e.length;d--;)e[d]&&e[d].remove(!1);v(b.axes,this);v(b[c],this);b.options[c].splice(this.options.index,1);p(b[c],\nfunction(a,b){a.options.index=b});this.destroy();b.isDirtyBox=!0;t(a,!0)&&b.redraw()},setTitle:function(a,b){this.update({title:a},b)},setCategories:function(a,b){this.update({categories:a},b)}})})(L);(function(a){var D=a.color,C=a.each,G=a.map,I=a.pick,h=a.Series,f=a.seriesType;f(\"area\",\"line\",{softThreshold:!1,threshold:0},{singleStacks:!1,getStackPoints:function(){var a=[],f=[],h=this.xAxis,u=this.yAxis,d=u.stacks[this.stackKey],c={},n=this.points,y=this.index,t=u.series,m=t.length,b,q=I(u.options.reversedStacks,\n!0)?1:-1,z,F;if(this.options.stacking){for(z=0;z<n.length;z++)c[n[z].x]=n[z];for(F in d)null!==d[F].total&&f.push(F);f.sort(function(a,b){return a-b});b=G(t,function(){return this.visible});C(f,function(e,n){var l=0,r,k;if(c[e]&&!c[e].isNull)a.push(c[e]),C([-1,1],function(a){var h=1===a?\"rightNull\":\"leftNull\",l=0,t=d[f[n+a]];if(t)for(z=y;0<=z&&z<m;)r=t.points[z],r||(z===y?c[e][h]=!0:b[z]&&(k=d[e].points[z])&&(l-=k[1]-k[0])),z+=q;c[e][1===a?\"rightCliff\":\"leftCliff\"]=l});else{for(z=y;0<=z&&z<m;){if(r=\nd[e].points[z]){l=r[1];break}z+=q}l=u.toPixels(l,!0);a.push({isNull:!0,plotX:h.toPixels(e,!0),plotY:l,yBottom:l})}})}return a},getGraphPath:function(a){var f=h.prototype.getGraphPath,l=this.options,p=l.stacking,d=this.yAxis,c,n,y=[],t=[],m=this.index,b,q=d.stacks[this.stackKey],z=l.threshold,F=d.getThreshold(l.threshold),e,l=l.connectNulls||\"percent\"===p,r=function(c,e,f){var k=a[c];c=p&&q[k.x].points[m];var h=k[f+\"Null\"]||0;f=k[f+\"Cliff\"]||0;var n,l,k=!0;f||h?(n=(h?c[0]:c[1])+f,l=c[0]+f,k=!!h):!p&&\na[e]&&a[e].isNull&&(n=l=z);void 0!==n&&(t.push({plotX:b,plotY:null===n?F:d.getThreshold(n),isNull:k}),y.push({plotX:b,plotY:null===l?F:d.getThreshold(l),doCurve:!1}))};a=a||this.points;p&&(a=this.getStackPoints());for(c=0;c<a.length;c++)if(n=a[c].isNull,b=I(a[c].rectPlotX,a[c].plotX),e=I(a[c].yBottom,F),!n||l)l||r(c,c-1,\"left\"),n&&!p&&l||(t.push(a[c]),y.push({x:c,plotX:b,plotY:e})),l||r(c,c+1,\"right\");c=f.call(this,t,!0,!0);y.reversed=!0;n=f.call(this,y,!0,!0);n.length&&(n[0]=\"L\");n=c.concat(n);f=\nf.call(this,t,!1,l);n.xMap=c.xMap;this.areaPath=n;return f},drawGraph:function(){this.areaPath=[];h.prototype.drawGraph.apply(this);var a=this,f=this.areaPath,l=this.options,u=[[\"area\",\"highcharts-area\",this.color,l.fillColor]];C(this.zones,function(d,c){u.push([\"zone-area-\"+c,\"highcharts-area highcharts-zone-area-\"+c+\" \"+d.className,d.color||a.color,d.fillColor||l.fillColor])});C(u,function(d){var c=d[0],h=a[c];h?(h.endX=f.xMap,h.animate({d:f})):(h=a[c]=a.chart.renderer.path(f).addClass(d[1]).attr({fill:I(d[3],\nD(d[2]).setOpacity(I(l.fillOpacity,.75)).get()),zIndex:0}).add(a.group),h.isArea=!0);h.startX=f.xMap;h.shiftUnit=l.step?2:1})},drawLegendSymbol:a.LegendSymbolMixin.drawRectangle})})(L);(function(a){var D=a.pick;a=a.seriesType;a(\"spline\",\"line\",{},{getPointSpline:function(a,G,I){var h=G.plotX,f=G.plotY,p=a[I-1];I=a[I+1];var v,l,u,d;if(p&&!p.isNull&&!1!==p.doCurve&&I&&!I.isNull&&!1!==I.doCurve){a=p.plotY;u=I.plotX;I=I.plotY;var c=0;v=(1.5*h+p.plotX)/2.5;l=(1.5*f+a)/2.5;u=(1.5*h+u)/2.5;d=(1.5*f+I)/2.5;\nu!==v&&(c=(d-l)*(u-h)/(u-v)+f-d);l+=c;d+=c;l>a&&l>f?(l=Math.max(a,f),d=2*f-l):l<a&&l<f&&(l=Math.min(a,f),d=2*f-l);d>I&&d>f?(d=Math.max(I,f),l=2*f-d):d<I&&d<f&&(d=Math.min(I,f),l=2*f-d);G.rightContX=u;G.rightContY=d}G=[\"C\",D(p.rightContX,p.plotX),D(p.rightContY,p.plotY),D(v,h),D(l,f),h,f];p.rightContX=p.rightContY=null;return G}})})(L);(function(a){var D=a.seriesTypes.area.prototype,C=a.seriesType;C(\"areaspline\",\"spline\",a.defaultPlotOptions.area,{getStackPoints:D.getStackPoints,getGraphPath:D.getGraphPath,\nsetStackCliffs:D.setStackCliffs,drawGraph:D.drawGraph,drawLegendSymbol:a.LegendSymbolMixin.drawRectangle})})(L);(function(a){var D=a.animObject,C=a.color,G=a.each,I=a.extend,h=a.isNumber,f=a.merge,p=a.pick,v=a.Series,l=a.seriesType,u=a.svg;l(\"column\",\"line\",{borderRadius:0,groupPadding:.2,marker:null,pointPadding:.1,minPointLength:0,cropThreshold:50,pointRange:null,states:{hover:{halo:!1,brightness:.1,shadow:!1},select:{color:\"#cccccc\",borderColor:\"#000000\",shadow:!1}},dataLabels:{align:null,verticalAlign:null,\ny:null},softThreshold:!1,startFromThreshold:!0,stickyTracking:!1,tooltip:{distance:6},threshold:0,borderColor:\"#ffffff\"},{cropShoulder:0,directTouch:!0,trackerGroups:[\"group\",\"dataLabelsGroup\"],negStacks:!0,init:function(){v.prototype.init.apply(this,arguments);var a=this,c=a.chart;c.hasRendered&&G(c.series,function(c){c.type===a.type&&(c.isDirty=!0)})},getColumnMetrics:function(){var a=this,c=a.options,f=a.xAxis,h=a.yAxis,l=f.reversed,m,b={},q=0;!1===c.grouping?q=1:G(a.chart.series,function(c){var e=\nc.options,d=c.yAxis,f;c.type===a.type&&c.visible&&h.len===d.len&&h.pos===d.pos&&(e.stacking?(m=c.stackKey,void 0===b[m]&&(b[m]=q++),f=b[m]):!1!==e.grouping&&(f=q++),c.columnIndex=f)});var u=Math.min(Math.abs(f.transA)*(f.ordinalSlope||c.pointRange||f.closestPointRange||f.tickInterval||1),f.len),F=u*c.groupPadding,e=(u-2*F)/q,c=Math.min(c.maxPointWidth||f.len,p(c.pointWidth,e*(1-2*c.pointPadding)));a.columnMetrics={width:c,offset:(e-c)/2+(F+((a.columnIndex||0)+(l?1:0))*e-u/2)*(l?-1:1)};return a.columnMetrics},\ncrispCol:function(a,c,f,h){var d=this.chart,m=this.borderWidth,b=-(m%2?.5:0),m=m%2?.5:1;d.inverted&&d.renderer.isVML&&(m+=1);f=Math.round(a+f)+b;a=Math.round(a)+b;h=Math.round(c+h)+m;b=.5>=Math.abs(c)&&.5<h;c=Math.round(c)+m;h-=c;b&&h&&(--c,h+=1);return{x:a,y:c,width:f-a,height:h}},translate:function(){var a=this,c=a.chart,f=a.options,h=a.dense=2>a.closestPointRange*a.xAxis.transA,h=a.borderWidth=p(f.borderWidth,h?0:1),l=a.yAxis,m=a.translatedThreshold=l.getThreshold(f.threshold),b=p(f.minPointLength,\n5),q=a.getColumnMetrics(),u=q.width,F=a.barW=Math.max(u,1+2*h),e=a.pointXOffset=q.offset;c.inverted&&(m-=.5);f.pointPadding&&(F=Math.ceil(F));v.prototype.translate.apply(a);G(a.points,function(d){var f=p(d.yBottom,m),h=999+Math.abs(f),h=Math.min(Math.max(-h,d.plotY),l.len+h),k=d.plotX+e,n=F,q=Math.min(h,f),r,t=Math.max(h,f)-q;Math.abs(t)<b&&b&&(t=b,r=!l.reversed&&!d.negative||l.reversed&&d.negative,q=Math.abs(q-m)>b?f-b:m-(r?b:0));d.barX=k;d.pointWidth=u;d.tooltipPos=c.inverted?[l.len+l.pos-c.plotLeft-\nh,a.xAxis.len-k-n/2,t]:[k+n/2,h+l.pos-c.plotTop,t];d.shapeType=\"rect\";d.shapeArgs=a.crispCol.apply(a,d.isNull?[d.plotX,l.len/2,0,0]:[k,q,n,t])})},getSymbol:a.noop,drawLegendSymbol:a.LegendSymbolMixin.drawRectangle,drawGraph:function(){this.group[this.dense?\"addClass\":\"removeClass\"](\"highcharts-dense-data\")},pointAttribs:function(a,c){var d=this.options,f,h=this.pointAttrToOptions||{};f=h.stroke||\"borderColor\";var m=h[\"stroke-width\"]||\"borderWidth\",b=a&&a.color||this.color,l=a[f]||d[f]||this.color||\nb,p=a[m]||d[m]||this[m]||0,h=d.dashStyle;a&&this.zones.length&&(b=(b=a.getZone())&&b.color||a.options.color||this.color);c&&(a=d.states[c],c=a.brightness,b=a.color||void 0!==c&&C(b).brighten(a.brightness).get()||b,l=a[f]||l,p=a[m]||p,h=a.dashStyle||h);f={fill:b,stroke:l,\"stroke-width\":p};d.borderRadius&&(f.r=d.borderRadius);h&&(f.dashstyle=h);return f},drawPoints:function(){var a=this,c=this.chart,l=a.options,p=c.renderer,t=l.animationLimit||250,m;G(a.points,function(b){var d=b.graphic;if(h(b.plotY)&&\nnull!==b.y){m=b.shapeArgs;if(d)d[c.pointCount<t?\"animate\":\"attr\"](f(m));else b.graphic=d=p[b.shapeType](m).attr({\"class\":b.getClassName()}).add(b.group||a.group);d.attr(a.pointAttribs(b,b.selected&&\"select\")).shadow(l.shadow,null,l.stacking&&!l.borderRadius)}else d&&(b.graphic=d.destroy())})},animate:function(a){var c=this,d=this.yAxis,f=c.options,h=this.chart.inverted,m={};u&&(a?(m.scaleY=.001,a=Math.min(d.pos+d.len,Math.max(d.pos,d.toPixels(f.threshold))),h?m.translateX=a-d.len:m.translateY=a,c.group.attr(m)):\n(m[h?\"translateX\":\"translateY\"]=d.pos,c.group.animate(m,I(D(c.options.animation),{step:function(a,d){c.group.attr({scaleY:Math.max(.001,d.pos)})}})),c.animate=null))},remove:function(){var a=this,c=a.chart;c.hasRendered&&G(c.series,function(c){c.type===a.type&&(c.isDirty=!0)});v.prototype.remove.apply(a,arguments)}})})(L);(function(a){a=a.seriesType;a(\"bar\",\"column\",null,{inverted:!0})})(L);(function(a){var D=a.Series;a=a.seriesType;a(\"scatter\",\"line\",{lineWidth:0,marker:{enabled:!0},tooltip:{headerFormat:'\\x3cspan style\\x3d\"color:{point.color}\"\\x3e\\u25cf\\x3c/span\\x3e \\x3cspan style\\x3d\"font-size: 0.85em\"\\x3e {series.name}\\x3c/span\\x3e\\x3cbr/\\x3e',\npointFormat:\"x: \\x3cb\\x3e{point.x}\\x3c/b\\x3e\\x3cbr/\\x3ey: \\x3cb\\x3e{point.y}\\x3c/b\\x3e\\x3cbr/\\x3e\"}},{sorted:!1,requireSorting:!1,noSharedTooltip:!0,trackerGroups:[\"group\",\"markerGroup\",\"dataLabelsGroup\"],takeOrdinalPosition:!1,kdDimensions:2,drawGraph:function(){this.options.lineWidth&&D.prototype.drawGraph.call(this)}})})(L);(function(a){var D=a.pick,C=a.relativeLength;a.CenteredSeriesMixin={getCenter:function(){var a=this.options,I=this.chart,h=2*(a.slicedOffset||0),f=I.plotWidth-2*h,I=I.plotHeight-\n2*h,p=a.center,p=[D(p[0],\"50%\"),D(p[1],\"50%\"),a.size||\"100%\",a.innerSize||0],v=Math.min(f,I),l,u;for(l=0;4>l;++l)u=p[l],a=2>l||2===l&&/%$/.test(u),p[l]=C(u,[f,I,v,p[2]][l])+(a?h:0);p[3]>p[2]&&(p[3]=p[2]);return p}}})(L);(function(a){var D=a.addEvent,C=a.defined,G=a.each,I=a.extend,h=a.inArray,f=a.noop,p=a.pick,v=a.Point,l=a.Series,u=a.seriesType,d=a.setAnimation;u(\"pie\",\"line\",{center:[null,null],clip:!1,colorByPoint:!0,dataLabels:{distance:30,enabled:!0,formatter:function(){return null===this.y?\nvoid 0:this.point.name},x:0},ignoreHiddenPoint:!0,legendType:\"point\",marker:null,size:null,showInLegend:!1,slicedOffset:10,stickyTracking:!1,tooltip:{followPointer:!0},borderColor:\"#ffffff\",borderWidth:1,states:{hover:{brightness:.1,shadow:!1}}},{isCartesian:!1,requireSorting:!1,directTouch:!0,noSharedTooltip:!0,trackerGroups:[\"group\",\"dataLabelsGroup\"],axisTypes:[],pointAttribs:a.seriesTypes.column.prototype.pointAttribs,animate:function(a){var c=this,d=c.points,f=c.startAngleRad;a||(G(d,function(a){var b=\na.graphic,d=a.shapeArgs;b&&(b.attr({r:a.startR||c.center[3]/2,start:f,end:f}),b.animate({r:d.r,start:d.start,end:d.end},c.options.animation))}),c.animate=null)},updateTotals:function(){var a,d=0,f=this.points,h=f.length,m,b=this.options.ignoreHiddenPoint;for(a=0;a<h;a++)m=f[a],0>m.y&&(m.y=null),d+=b&&!m.visible?0:m.y;this.total=d;for(a=0;a<h;a++)m=f[a],m.percentage=0<d&&(m.visible||!b)?m.y/d*100:0,m.total=d},generatePoints:function(){l.prototype.generatePoints.call(this);this.updateTotals()},translate:function(a){this.generatePoints();\nvar c=0,d=this.options,f=d.slicedOffset,h=f+(d.borderWidth||0),b,l,u,F=d.startAngle||0,e=this.startAngleRad=Math.PI/180*(F-90),F=(this.endAngleRad=Math.PI/180*(p(d.endAngle,F+360)-90))-e,r=this.points,x=d.dataLabels.distance,d=d.ignoreHiddenPoint,A,k=r.length,w;a||(this.center=a=this.getCenter());this.getX=function(b,c){u=Math.asin(Math.min((b-a[1])/(a[2]/2+x),1));return a[0]+(c?-1:1)*Math.cos(u)*(a[2]/2+x)};for(A=0;A<k;A++){w=r[A];b=e+c*F;if(!d||w.visible)c+=w.percentage/100;l=e+c*F;w.shapeType=\n\"arc\";w.shapeArgs={x:a[0],y:a[1],r:a[2]/2,innerR:a[3]/2,start:Math.round(1E3*b)/1E3,end:Math.round(1E3*l)/1E3};u=(l+b)/2;u>1.5*Math.PI?u-=2*Math.PI:u<-Math.PI/2&&(u+=2*Math.PI);w.slicedTranslation={translateX:Math.round(Math.cos(u)*f),translateY:Math.round(Math.sin(u)*f)};b=Math.cos(u)*a[2]/2;l=Math.sin(u)*a[2]/2;w.tooltipPos=[a[0]+.7*b,a[1]+.7*l];w.half=u<-Math.PI/2||u>Math.PI/2?1:0;w.angle=u;h=Math.min(h,x/5);w.labelPos=[a[0]+b+Math.cos(u)*x,a[1]+l+Math.sin(u)*x,a[0]+b+Math.cos(u)*h,a[1]+l+Math.sin(u)*\nh,a[0]+b,a[1]+l,0>x?\"center\":w.half?\"right\":\"left\",u]}},drawGraph:null,drawPoints:function(){var a=this,d=a.chart.renderer,f,h,m,b,l=a.options.shadow;l&&!a.shadowGroup&&(a.shadowGroup=d.g(\"shadow\").add(a.group));G(a.points,function(c){if(null!==c.y){h=c.graphic;b=c.shapeArgs;f=c.sliced?c.slicedTranslation:{};var n=c.shadowGroup;l&&!n&&(n=c.shadowGroup=d.g(\"shadow\").add(a.shadowGroup));n&&n.attr(f);m=a.pointAttribs(c,c.selected&&\"select\");h?h.setRadialReference(a.center).attr(m).animate(I(b,f)):(c.graphic=\nh=d[c.shapeType](b).addClass(c.getClassName()).setRadialReference(a.center).attr(f).add(a.group),c.visible||h.attr({visibility:\"hidden\"}),h.attr(m).attr({\"stroke-linejoin\":\"round\"}).shadow(l,n))}})},searchPoint:f,sortByAngle:function(a,d){a.sort(function(a,c){return void 0!==a.angle&&(c.angle-a.angle)*d})},drawLegendSymbol:a.LegendSymbolMixin.drawRectangle,getCenter:a.CenteredSeriesMixin.getCenter,getSymbol:f},{init:function(){v.prototype.init.apply(this,arguments);var a=this,d;a.name=p(a.name,\"Slice\");\nd=function(c){a.slice(\"select\"===c.type)};D(a,\"select\",d);D(a,\"unselect\",d);return a},setVisible:function(a,d){var c=this,f=c.series,m=f.chart,b=f.options.ignoreHiddenPoint;d=p(d,b);a!==c.visible&&(c.visible=c.options.visible=a=void 0===a?!c.visible:a,f.options.data[h(c,f.data)]=c.options,G([\"graphic\",\"dataLabel\",\"connector\",\"shadowGroup\"],function(b){if(c[b])c[b][a?\"show\":\"hide\"](!0)}),c.legendItem&&m.legend.colorizeItem(c,a),a||\"hover\"!==c.state||c.setState(\"\"),b&&(f.isDirty=!0),d&&m.redraw())},\nslice:function(a,f,l){var c=this.series;d(l,c.chart);p(f,!0);this.sliced=this.options.sliced=a=C(a)?a:!this.sliced;c.options.data[h(this,c.data)]=this.options;a=a?this.slicedTranslation:{translateX:0,translateY:0};this.graphic.animate(a);this.shadowGroup&&this.shadowGroup.animate(a)},haloPath:function(a){var c=this.shapeArgs;return this.sliced||!this.visible?[]:this.series.chart.renderer.symbols.arc(c.x,c.y,c.r+a,c.r+a,{innerR:this.shapeArgs.r,start:c.start,end:c.end})}})})(L);(function(a){var D=\na.addEvent,C=a.arrayMax,G=a.defined,I=a.each,h=a.extend,f=a.format,p=a.map,v=a.merge,l=a.noop,u=a.pick,d=a.relativeLength,c=a.Series,n=a.seriesTypes,y=a.stableSort;a.distribute=function(a,c){function b(a,b){return a.target-b.target}var d,f=!0,h=a,e=[],m;m=0;for(d=a.length;d--;)m+=a[d].size;if(m>c){y(a,function(a,b){return(b.rank||0)-(a.rank||0)});for(m=d=0;m<=c;)m+=a[d].size,d++;e=a.splice(d-1,a.length)}y(a,b);for(a=p(a,function(a){return{size:a.size,targets:[a.target]}});f;){for(d=a.length;d--;)f=\na[d],m=(Math.min.apply(0,f.targets)+Math.max.apply(0,f.targets))/2,f.pos=Math.min(Math.max(0,m-f.size/2),c-f.size);d=a.length;for(f=!1;d--;)0<d&&a[d-1].pos+a[d-1].size>a[d].pos&&(a[d-1].size+=a[d].size,a[d-1].targets=a[d-1].targets.concat(a[d].targets),a[d-1].pos+a[d-1].size>c&&(a[d-1].pos=c-a[d-1].size),a.splice(d,1),f=!0)}d=0;I(a,function(a){var b=0;I(a.targets,function(){h[d].pos=a.pos+b;b+=h[d].size;d++})});h.push.apply(h,e);y(h,b)};c.prototype.drawDataLabels=function(){var a=this,c=a.options,\nb=c.dataLabels,d=a.points,l,n,e=a.hasRendered||0,r,p,A=u(b.defer,!0),k=a.chart.renderer;if(b.enabled||a._hasPointLabels)a.dlProcessOptions&&a.dlProcessOptions(b),p=a.plotGroup(\"dataLabelsGroup\",\"data-labels\",A&&!e?\"hidden\":\"visible\",b.zIndex||6),A&&(p.attr({opacity:+e}),e||D(a,\"afterAnimate\",function(){a.visible&&p.show(!0);p[c.animation?\"animate\":\"attr\"]({opacity:1},{duration:200})})),n=b,I(d,function(e){var d,m=e.dataLabel,q,g,t=e.connector,F=!0,x,A={};l=e.dlOptions||e.options&&e.options.dataLabels;\nd=u(l&&l.enabled,n.enabled)&&null!==e.y;if(m&&!d)e.dataLabel=m.destroy();else if(d){b=v(n,l);x=b.style;d=b.rotation;q=e.getLabelConfig();r=b.format?f(b.format,q):b.formatter.call(q,b);x.color=u(b.color,x.color,a.color,\"#000000\");if(m)G(r)?(m.attr({text:r}),F=!1):(e.dataLabel=m=m.destroy(),t&&(e.connector=t.destroy()));else if(G(r)){m={fill:b.backgroundColor,stroke:b.borderColor,\"stroke-width\":b.borderWidth,r:b.borderRadius||0,rotation:d,padding:b.padding,zIndex:1};\"contrast\"===x.color&&(A.color=b.inside||\n0>b.distance||c.stacking?k.getContrast(e.color||a.color):\"#000000\");c.cursor&&(A.cursor=c.cursor);for(g in m)void 0===m[g]&&delete m[g];m=e.dataLabel=k[d?\"text\":\"label\"](r,0,-9999,b.shape,null,null,b.useHTML,null,\"data-label\").attr(m);m.addClass(\"highcharts-data-label-color-\"+e.colorIndex+\" \"+(b.className||\"\")+(b.useHTML?\"highcharts-tracker\":\"\"));m.css(h(x,A));m.add(p);m.shadow(b.shadow)}m&&a.alignDataLabel(e,m,b,null,F)}})};c.prototype.alignDataLabel=function(a,c,b,d,f){var m=this.chart,e=m.inverted,\nl=u(a.plotX,-9999),n=u(a.plotY,-9999),p=c.getBBox(),k,q=b.rotation,t=b.align,v=this.visible&&(a.series.forceDL||m.isInsidePlot(l,Math.round(n),e)||d&&m.isInsidePlot(l,e?d.x+1:d.y+d.height-1,e)),z=\"justify\"===u(b.overflow,\"justify\");v&&(k=b.style.fontSize,k=m.renderer.fontMetrics(k,c).b,d=h({x:e?m.plotWidth-n:l,y:Math.round(e?m.plotHeight-l:n),width:0,height:0},d),h(b,{width:p.width,height:p.height}),q?(z=!1,e=m.renderer.rotCorr(k,q),e={x:d.x+b.x+d.width/2+e.x,y:d.y+b.y+{top:0,middle:.5,bottom:1}[b.verticalAlign]*\nd.height},c[f?\"attr\":\"animate\"](e).attr({align:t}),l=(q+720)%360,l=180<l&&360>l,\"left\"===t?e.y-=l?p.height:0:\"center\"===t?(e.x-=p.width/2,e.y-=p.height/2):\"right\"===t&&(e.x-=p.width,e.y-=l?0:p.height)):(c.align(b,null,d),e=c.alignAttr),z?this.justifyDataLabel(c,b,e,p,d,f):u(b.crop,!0)&&(v=m.isInsidePlot(e.x,e.y)&&m.isInsidePlot(e.x+p.width,e.y+p.height)),b.shape&&!q&&c.attr({anchorX:a.plotX,anchorY:a.plotY}));v||(c.attr({y:-9999}),c.placed=!1)};c.prototype.justifyDataLabel=function(a,c,b,d,f,h){var e=\nthis.chart,m=c.align,l=c.verticalAlign,n,k,p=a.box?0:a.padding||0;n=b.x+p;0>n&&(\"right\"===m?c.align=\"left\":c.x=-n,k=!0);n=b.x+d.width-p;n>e.plotWidth&&(\"left\"===m?c.align=\"right\":c.x=e.plotWidth-n,k=!0);n=b.y+p;0>n&&(\"bottom\"===l?c.verticalAlign=\"top\":c.y=-n,k=!0);n=b.y+d.height-p;n>e.plotHeight&&(\"top\"===l?c.verticalAlign=\"bottom\":c.y=e.plotHeight-n,k=!0);k&&(a.placed=!h,a.align(c,null,f))};n.pie&&(n.pie.prototype.drawDataLabels=function(){var d=this,f=d.data,b,h=d.chart,l=d.options.dataLabels,n=\nu(l.connectorPadding,10),e=u(l.connectorWidth,1),r=h.plotWidth,v=h.plotHeight,A,k=l.distance,w=d.center,y=w[2]/2,D=w[1],G=0<k,g,B,L,M,R=[[],[]],E,H,P,Q,O=[0,0,0,0];d.visible&&(l.enabled||d._hasPointLabels)&&(c.prototype.drawDataLabels.apply(d),I(f,function(a){a.dataLabel&&a.visible&&(R[a.half].push(a),a.dataLabel._pos=null)}),I(R,function(c,e){var f,m,q=c.length,t,u,F;if(q)for(d.sortByAngle(c,e-.5),0<k&&(f=Math.max(0,D-y-k),m=Math.min(D+y+k,h.plotHeight),t=p(c,function(a){if(a.dataLabel)return F=\na.dataLabel.getBBox().height||21,{target:a.labelPos[1]-f+F/2,size:F,rank:a.y}}),a.distribute(t,m+F-f)),Q=0;Q<q;Q++)b=c[Q],L=b.labelPos,g=b.dataLabel,P=!1===b.visible?\"hidden\":\"inherit\",u=L[1],t?void 0===t[Q].pos?P=\"hidden\":(M=t[Q].size,H=f+t[Q].pos):H=u,E=l.justify?w[0]+(e?-1:1)*(y+k):d.getX(H<f+2||H>m-2?u:H,e),g._attr={visibility:P,align:L[6]},g._pos={x:E+l.x+({left:n,right:-n}[L[6]]||0),y:H+l.y-10},L.x=E,L.y=H,null===d.options.size&&(B=g.width,E-B<n?O[3]=Math.max(Math.round(B-E+n),O[3]):E+B>r-n&&\n(O[1]=Math.max(Math.round(E+B-r+n),O[1])),0>H-M/2?O[0]=Math.max(Math.round(-H+M/2),O[0]):H+M/2>v&&(O[2]=Math.max(Math.round(H+M/2-v),O[2])))}),0===C(O)||this.verifyDataLabelOverflow(O))&&(this.placeDataLabels(),G&&e&&I(this.points,function(a){var b;A=a.connector;if((g=a.dataLabel)&&g._pos&&a.visible){P=g._attr.visibility;if(b=!A)a.connector=A=h.renderer.path().addClass(\"highcharts-data-label-connector highcharts-color-\"+a.colorIndex).add(d.dataLabelsGroup),A.attr({\"stroke-width\":e,stroke:l.connectorColor||\na.color||\"#666666\"});A[b?\"attr\":\"animate\"]({d:d.connectorPath(a.labelPos)});A.attr(\"visibility\",P)}else A&&(a.connector=A.destroy())}))},n.pie.prototype.connectorPath=function(a){var c=a.x,b=a.y;return u(this.options.dataLabels.softConnector,!0)?[\"M\",c+(\"left\"===a[6]?5:-5),b,\"C\",c,b,2*a[2]-a[4],2*a[3]-a[5],a[2],a[3],\"L\",a[4],a[5]]:[\"M\",c+(\"left\"===a[6]?5:-5),b,\"L\",a[2],a[3],\"L\",a[4],a[5]]},n.pie.prototype.placeDataLabels=function(){I(this.points,function(a){var c=a.dataLabel;c&&a.visible&&((a=c._pos)?\n(c.attr(c._attr),c[c.moved?\"animate\":\"attr\"](a),c.moved=!0):c&&c.attr({y:-9999}))})},n.pie.prototype.alignDataLabel=l,n.pie.prototype.verifyDataLabelOverflow=function(a){var c=this.center,b=this.options,f=b.center,h=b.minSize||80,l,e;null!==f[0]?l=Math.max(c[2]-Math.max(a[1],a[3]),h):(l=Math.max(c[2]-a[1]-a[3],h),c[0]+=(a[3]-a[1])/2);null!==f[1]?l=Math.max(Math.min(l,c[2]-Math.max(a[0],a[2])),h):(l=Math.max(Math.min(l,c[2]-a[0]-a[2]),h),c[1]+=(a[0]-a[2])/2);l<c[2]?(c[2]=l,c[3]=Math.min(d(b.innerSize||\n0,l),l),this.translate(c),this.drawDataLabels&&this.drawDataLabels()):e=!0;return e});n.column&&(n.column.prototype.alignDataLabel=function(a,d,b,f,h){var l=this.chart.inverted,e=a.series,m=a.dlBox||a.shapeArgs,n=u(a.below,a.plotY>u(this.translatedThreshold,e.yAxis.len)),p=u(b.inside,!!this.options.stacking);m&&(f=v(m),0>f.y&&(f.height+=f.y,f.y=0),m=f.y+f.height-e.yAxis.len,0<m&&(f.height-=m),l&&(f={x:e.yAxis.len-f.y-f.height,y:e.xAxis.len-f.x-f.width,width:f.height,height:f.width}),p||(l?(f.x+=n?\n0:f.width,f.width=0):(f.y+=n?f.height:0,f.height=0)));b.align=u(b.align,!l||p?\"center\":n?\"right\":\"left\");b.verticalAlign=u(b.verticalAlign,l||p?\"middle\":n?\"top\":\"bottom\");c.prototype.alignDataLabel.call(this,a,d,b,f,h)})})(L);(function(a){var D=a.Chart,C=a.each,G=a.pick,I=a.addEvent;D.prototype.callbacks.push(function(a){function f(){var f=[];C(a.series,function(a){var h=a.options.dataLabels,p=a.dataLabelCollections||[\"dataLabel\"];(h.enabled||a._hasPointLabels)&&!h.allowOverlap&&a.visible&&C(p,function(d){C(a.points,\nfunction(a){a[d]&&(a[d].labelrank=G(a.labelrank,a.shapeArgs&&a.shapeArgs.height),f.push(a[d]))})})});a.hideOverlappingLabels(f)}f();I(a,\"redraw\",f)});D.prototype.hideOverlappingLabels=function(a){var f=a.length,h,v,l,u,d,c,n,y,t,m=function(a,c,d,f,e,h,l,m){return!(e>a+d||e+l<a||h>c+f||h+m<c)};for(v=0;v<f;v++)if(h=a[v])h.oldOpacity=h.opacity,h.newOpacity=1;a.sort(function(a,c){return(c.labelrank||0)-(a.labelrank||0)});for(v=0;v<f;v++)for(l=a[v],h=v+1;h<f;++h)if(u=a[h],l&&u&&l.placed&&u.placed&&0!==\nl.newOpacity&&0!==u.newOpacity&&(d=l.alignAttr,c=u.alignAttr,n=l.parentGroup,y=u.parentGroup,t=2*(l.box?0:l.padding),d=m(d.x+n.translateX,d.y+n.translateY,l.width-t,l.height-t,c.x+y.translateX,c.y+y.translateY,u.width-t,u.height-t)))(l.labelrank<u.labelrank?l:u).newOpacity=0;C(a,function(a){var b,c;a&&(c=a.newOpacity,a.oldOpacity!==c&&a.placed&&(c?a.show(!0):b=function(){a.hide()},a.alignAttr.opacity=c,a[a.isOld?\"animate\":\"attr\"](a.alignAttr,null,b)),a.isOld=!0)})}})(L);(function(a){var D=a.addEvent,\nC=a.Chart,G=a.createElement,I=a.css,h=a.defaultOptions,f=a.defaultPlotOptions,p=a.each,v=a.extend,l=a.fireEvent,u=a.hasTouch,d=a.inArray,c=a.isObject,n=a.Legend,y=a.merge,t=a.pick,m=a.Point,b=a.Series,q=a.seriesTypes,z=a.svg;a=a.TrackerMixin={drawTrackerPoint:function(){var a=this,b=a.chart,c=b.pointer,d=function(a){for(var c=a.target,e;c&&!e;)e=c.point,c=c.parentNode;if(void 0!==e&&e!==b.hoverPoint)e.onMouseOver(a)};p(a.points,function(a){a.graphic&&(a.graphic.element.point=a);a.dataLabel&&(a.dataLabel.div?\na.dataLabel.div.point=a:a.dataLabel.element.point=a)});a._hasTracking||(p(a.trackerGroups,function(b){if(a[b]){a[b].addClass(\"highcharts-tracker\").on(\"mouseover\",d).on(\"mouseout\",function(a){c.onTrackerMouseOut(a)});if(u)a[b].on(\"touchstart\",d);a.options.cursor&&a[b].css(I).css({cursor:a.options.cursor})}}),a._hasTracking=!0)},drawTrackerGraph:function(){var a=this,b=a.options,c=b.trackByArea,d=[].concat(c?a.areaPath:a.graphPath),f=d.length,h=a.chart,l=h.pointer,m=h.renderer,n=h.options.tooltip.snap,\nq=a.tracker,g,t=function(){if(h.hoverSeries!==a)a.onMouseOver()},v=\"rgba(192,192,192,\"+(z?.0001:.002)+\")\";if(f&&!c)for(g=f+1;g--;)\"M\"===d[g]&&d.splice(g+1,0,d[g+1]-n,d[g+2],\"L\"),(g&&\"M\"===d[g]||g===f)&&d.splice(g,0,\"L\",d[g-2]+n,d[g-1]);q?q.attr({d:d}):a.graph&&(a.tracker=m.path(d).attr({\"stroke-linejoin\":\"round\",visibility:a.visible?\"visible\":\"hidden\",stroke:v,fill:c?v:\"none\",\"stroke-width\":a.graph.strokeWidth()+(c?0:2*n),zIndex:2}).add(a.group),p([a.tracker,a.markerGroup],function(a){a.addClass(\"highcharts-tracker\").on(\"mouseover\",\nt).on(\"mouseout\",function(a){l.onTrackerMouseOut(a)});b.cursor&&a.css({cursor:b.cursor});if(u)a.on(\"touchstart\",t)}))}};q.column&&(q.column.prototype.drawTracker=a.drawTrackerPoint);q.pie&&(q.pie.prototype.drawTracker=a.drawTrackerPoint);q.scatter&&(q.scatter.prototype.drawTracker=a.drawTrackerPoint);v(n.prototype,{setItemEvents:function(a,b,c){var e=this,d=e.chart,f=\"highcharts-legend-\"+(a.series?\"point\":\"series\")+\"-active\";(c?b:a.legendGroup).on(\"mouseover\",function(){a.setState(\"hover\");d.seriesGroup.addClass(f);\nb.css(e.options.itemHoverStyle)}).on(\"mouseout\",function(){b.css(a.visible?e.itemStyle:e.itemHiddenStyle);d.seriesGroup.removeClass(f);a.setState()}).on(\"click\",function(b){var c=function(){a.setVisible&&a.setVisible()};b={browserEvent:b};a.firePointEvent?a.firePointEvent(\"legendItemClick\",b,c):l(a,\"legendItemClick\",b,c)})},createCheckboxForItem:function(a){a.checkbox=G(\"input\",{type:\"checkbox\",checked:a.selected,defaultChecked:a.selected},this.options.itemCheckboxStyle,this.chart.container);D(a.checkbox,\n\"click\",function(b){l(a.series||a,\"checkboxClick\",{checked:b.target.checked,item:a},function(){a.select()})})}});h.legend.itemStyle.cursor=\"pointer\";v(C.prototype,{showResetZoom:function(){var a=this,b=h.lang,c=a.options.chart.resetZoomButton,d=c.theme,f=d.states,k=\"chart\"===c.relativeTo?null:\"plotBox\";this.resetZoomButton=a.renderer.button(b.resetZoom,null,null,function(){a.zoomOut()},d,f&&f.hover).attr({align:c.position.align,title:b.resetZoomTitle}).addClass(\"highcharts-reset-zoom\").add().align(c.position,\n!1,k)},zoomOut:function(){var a=this;l(a,\"selection\",{resetSelection:!0},function(){a.zoom()})},zoom:function(a){var b,d=this.pointer,f=!1,h;!a||a.resetSelection?p(this.axes,function(a){b=a.zoom()}):p(a.xAxis.concat(a.yAxis),function(a){var c=a.axis;d[c.isXAxis?\"zoomX\":\"zoomY\"]&&(b=c.zoom(a.min,a.max),c.displayBtn&&(f=!0))});h=this.resetZoomButton;f&&!h?this.showResetZoom():!f&&c(h)&&(this.resetZoomButton=h.destroy());b&&this.redraw(t(this.options.chart.animation,a&&a.animation,100>this.pointCount))},\npan:function(a,b){var c=this,e=c.hoverPoints,d;e&&p(e,function(a){a.setState()});p(\"xy\"===b?[1,0]:[1],function(b){b=c[b?\"xAxis\":\"yAxis\"][0];var e=b.horiz,f=a[e?\"chartX\":\"chartY\"],e=e?\"mouseDownX\":\"mouseDownY\",h=c[e],k=(b.pointRange||0)/2,g=b.getExtremes(),l=b.toValue(h-f,!0)+k,k=b.toValue(h+b.len-f,!0)-k,m=k<l,h=m?k:l,l=m?l:k,k=Math.min(g.dataMin,g.min)-h,g=l-Math.max(g.dataMax,g.max);b.series.length&&0>k&&0>g&&(b.setExtremes(h,l,!1,!1,{trigger:\"pan\"}),d=!0);c[e]=f});d&&c.redraw(!1);I(c.container,\n{cursor:\"move\"})}});v(m.prototype,{select:function(a,b){var c=this,e=c.series,f=e.chart;a=t(a,!c.selected);c.firePointEvent(a?\"select\":\"unselect\",{accumulate:b},function(){c.selected=c.options.selected=a;e.options.data[d(c,e.data)]=c.options;c.setState(a&&\"select\");b||p(f.getSelectedPoints(),function(a){a.selected&&a!==c&&(a.selected=a.options.selected=!1,e.options.data[d(a,e.data)]=a.options,a.setState(\"\"),a.firePointEvent(\"unselect\"))})})},onMouseOver:function(a,b){var c=this.series,e=c.chart,d=\ne.tooltip,f=e.hoverPoint;if(this.series){if(!b){if(f&&f!==this)f.onMouseOut();if(e.hoverSeries!==c)c.onMouseOver();e.hoverPoint=this}!d||d.shared&&!c.noSharedTooltip?d||this.setState(\"hover\"):(this.setState(\"hover\"),d.refresh(this,a));this.firePointEvent(\"mouseOver\")}},onMouseOut:function(){var a=this.series.chart,b=a.hoverPoints;this.firePointEvent(\"mouseOut\");b&&-1!==d(this,b)||(this.setState(),a.hoverPoint=null)},importEvents:function(){if(!this.hasImportedEvents){var a=y(this.series.options.point,\nthis.options).events,b;this.events=a;for(b in a)D(this,b,a[b]);this.hasImportedEvents=!0}},setState:function(a,b){var c=Math.floor(this.plotX),d=this.plotY,e=this.series,h=e.options.states[a]||{},l=f[e.type].marker&&e.options.marker,m=l&&!1===l.enabled,n=l&&l.states&&l.states[a]||{},p=!1===n.enabled,g=e.stateMarkerGraphic,q=this.marker||{},u=e.chart,y=e.halo,z,F=l&&e.markerAttribs;a=a||\"\";if(!(a===this.state&&!b||this.selected&&\"select\"!==a||!1===h.enabled||a&&(p||m&&!1===n.enabled)||a&&q.states&&\nq.states[a]&&!1===q.states[a].enabled)){F&&(z=e.markerAttribs(this,a));if(this.graphic)this.state&&this.graphic.removeClass(\"highcharts-point-\"+this.state),a&&this.graphic.addClass(\"highcharts-point-\"+a),this.graphic.attr(e.pointAttribs(this,a)),z&&this.graphic.animate(z,t(u.options.chart.animation,n.animation,l.animation)),g&&g.hide();else{if(a&&n){l=q.symbol||e.symbol;g&&g.currentSymbol!==l&&(g=g.destroy());if(g)g[b?\"animate\":\"attr\"]({x:z.x,y:z.y});else l&&(e.stateMarkerGraphic=g=u.renderer.symbol(l,\nz.x,z.y,z.width,z.height).add(e.markerGroup),g.currentSymbol=l);g&&g.attr(e.pointAttribs(this,a))}g&&(g[a&&u.isInsidePlot(c,d,u.inverted)?\"show\":\"hide\"](),g.element.point=this)}(c=h.halo)&&c.size?(y||(e.halo=y=u.renderer.path().add(F?e.markerGroup:e.group)),y[b?\"animate\":\"attr\"]({d:this.haloPath(c.size)}),y.attr({\"class\":\"highcharts-halo highcharts-color-\"+t(this.colorIndex,e.colorIndex)}),y.point=this,y.attr(v({fill:this.color||e.color,\"fill-opacity\":c.opacity,zIndex:-1},c.attributes))):y&&y.point&&\ny.point.haloPath&&y.animate({d:y.point.haloPath(0)});this.state=a}},haloPath:function(a){return this.series.chart.renderer.symbols.circle(Math.floor(this.plotX)-a,this.plotY-a,2*a,2*a)}});v(b.prototype,{onMouseOver:function(){var a=this.chart,b=a.hoverSeries;if(b&&b!==this)b.onMouseOut();this.options.events.mouseOver&&l(this,\"mouseOver\");this.setState(\"hover\");a.hoverSeries=this},onMouseOut:function(){var a=this.options,b=this.chart,c=b.tooltip,d=b.hoverPoint;b.hoverSeries=null;if(d)d.onMouseOut();\nthis&&a.events.mouseOut&&l(this,\"mouseOut\");!c||a.stickyTracking||c.shared&&!this.noSharedTooltip||c.hide();this.setState()},setState:function(a){var b=this,c=b.options,d=b.graph,f=c.states,h=c.lineWidth,c=0;a=a||\"\";if(b.state!==a&&(p([b.group,b.markerGroup],function(c){c&&(b.state&&c.removeClass(\"highcharts-series-\"+b.state),a&&c.addClass(\"highcharts-series-\"+a))}),b.state=a,!f[a]||!1!==f[a].enabled)&&(a&&(h=f[a].lineWidth||h+(f[a].lineWidthPlus||0)),d&&!d.dashstyle))for(f={\"stroke-width\":h},d.attr(f);b[\"zone-graph-\"+\nc];)b[\"zone-graph-\"+c].attr(f),c+=1},setVisible:function(a,b){var c=this,d=c.chart,e=c.legendItem,f,h=d.options.chart.ignoreHiddenSeries,m=c.visible;f=(c.visible=a=c.options.visible=c.userOptions.visible=void 0===a?!m:a)?\"show\":\"hide\";p([\"group\",\"dataLabelsGroup\",\"markerGroup\",\"tracker\",\"tt\"],function(a){if(c[a])c[a][f]()});if(d.hoverSeries===c||(d.hoverPoint&&d.hoverPoint.series)===c)c.onMouseOut();e&&d.legend.colorizeItem(c,a);c.isDirty=!0;c.options.stacking&&p(d.series,function(a){a.options.stacking&&\na.visible&&(a.isDirty=!0)});p(c.linkedSeries,function(b){b.setVisible(a,!1)});h&&(d.isDirtyBox=!0);!1!==b&&d.redraw();l(c,f)},show:function(){this.setVisible(!0)},hide:function(){this.setVisible(!1)},select:function(a){this.selected=a=void 0===a?!this.selected:a;this.checkbox&&(this.checkbox.checked=a);l(this,a?\"select\":\"unselect\")},drawTracker:a.drawTrackerGraph})})(L);(function(a){var D=a.Chart,C=a.each,G=a.inArray,I=a.isObject,h=a.pick,f=a.splat;D.prototype.setResponsive=function(a){var f=this.options.responsive;\nf&&f.rules&&C(f.rules,function(f){this.matchResponsiveRule(f,a)},this)};D.prototype.matchResponsiveRule=function(f,v){var l=this.respRules,p=f.condition,d;d=p.callback||function(){return this.chartWidth<=h(p.maxWidth,Number.MAX_VALUE)&&this.chartHeight<=h(p.maxHeight,Number.MAX_VALUE)&&this.chartWidth>=h(p.minWidth,0)&&this.chartHeight>=h(p.minHeight,0)};void 0===f._id&&(f._id=a.uniqueKey());d=d.call(this);!l[f._id]&&d?f.chartOptions&&(l[f._id]=this.currentOptions(f.chartOptions),this.update(f.chartOptions,\nv)):l[f._id]&&!d&&(this.update(l[f._id],v),delete l[f._id])};D.prototype.currentOptions=function(a){function h(a,d,c){var l,p;for(l in a)if(-1<G(l,[\"series\",\"xAxis\",\"yAxis\"]))for(a[l]=f(a[l]),c[l]=[],p=0;p<a[l].length;p++)c[l][p]={},h(a[l][p],d[l][p],c[l][p]);else I(a[l])?(c[l]={},h(a[l],d[l]||{},c[l])):c[l]=d[l]||null}var l={};h(a,this.options,l);return l}})(L);return L});\n"
  },
  {
    "path": "seleniumkeyword/sendlog/README.md",
    "content": "#流量回放模式(Linux)\n\n##通过回放Syslog流进行发送syslog(UDP支持源地址伪装)|sendingdata.py\n\n**usage:**</br>\nsendingdata.py [-h] [-sip SRCIP] [-dip DSTIP] [-p PROTOCOL] [-dport DPORT]</br> [-c COUNT] [-f FILE] [-t THREAD] [-s SPEED]\n\n**optional arguments:**</br>\n-h, --help    show this help message</br>\n-sip SRCIP    src ip addr</br>\n-dip DSTIP    dst ip addr</br>\n-p PROTOCOL   protocol udp or tcp</br>\n-dport DPORT  send port</br>\n-c COUNT      packets count</br>\n-f FILE       packets file</br>\n-t THREAD     thread number</br>\n-s SPEED      send speed (s)</br>\n\n#UDP Socket\n##通过UDP Socket发送syslog事件|udpsendingsyslog.py\n**Usge:**</br>\npython sendlog -f [filepath] -c [cycles] -t [sleep time]\n-d [Receiver Host] -p [Receiver port]\n\n**Details:**</br>\n-C\t[开启无限循环]</br>\n-f\t[指派日志文件路径]</br>\n-c\t[指定循环次数]</br>\n-t\t[指定日志发送间隔时间 单位:秒]</br>\n-d\t[指定日志接收IP地址]</br>\n-p\t[指定日志接收端口（整数）]</br>\n-v\t[查看工具版本]</br>\n-h\t[查看帮助]</br>\n\n#TCP Socket\n##通过TCP Socket发送syslog事件|tcpsendingsyslog.py\n**usage:**</br>\ntcpsendingsyslog.py [-h] [-host HOST] [-port DPORT] [-c COUNT]</br>\n\n**optional arguments:**</br>\n  -h, --help   show this help message and exit</br>\n  -host HOST   receive host ip</br>\n  -port DPORT  send port</br>\n  -c COUNT     count number</br>\n"
  },
  {
    "path": "seleniumkeyword/sendlog/__init__.py",
    "content": ""
  },
  {
    "path": "seleniumkeyword/sendlog/guitest.py",
    "content": "# -*- coding: utf-8 -*-\n__author__ = 'Ray'\n\n\"\"\"\nGUI 设计.\nmail：tsbc@vip.qq.com\n2016-05-05\nhttp://blog.csdn.net/jcodeer?viewmode=contents\n\"\"\"\n\nfrom Tkinter import *\nimport tkFileDialog\nfrom ttk import *\nimport syslogc\nimport time\nroot = Tk()\n\nroot.title(\"GUI-SendingTool-Ray\")\nroot.geometry('600x450')\nroot.resizable(width=False, height=True)\n#警告\nlabel = Label(root, foreground='red')\nlabel.grid(row=12, column=0, columnspan=12, sticky=W)\n\nradio_var = IntVar()\nradio_var.set(1)\ndef sel_radio():\n\t\"\"\"Radiobutton 实现协议选择\"\"\"\n\tv = radio_var.get()\n\tlabel.config(text='')\n\tif v == 1:\n\t\treturn v\n\telse:\n\t\tlabel.config(text = \"SNMP协议暂时不可用！\")\nLabel(root, text='协议：').grid(row=0, sticky=E)\nRadiobutton1 = Radiobutton(root, text='Syslog', variable=radio_var, value=1, command=sel_radio)\nRadiobutton1.grid(row=0, column=1, sticky=W)\nRadiobutton2 = Radiobutton(root, text='SNMP', variable=radio_var, value=2, command=sel_radio)\nRadiobutton2.grid(row=0, column=2, sticky=W)\n\n\n#使用sticky参数  默认的空间会在网格中居中显示。你可以使用sticky选项去指定对齐方式，可以选择的值有：N/S/E/W，分别代表上/下/左/右。\nvalue = True\ndef sendlog():\n\t\"\"\"按钮发送功能\"\"\"\n\tglobal value\n\tif sel_radio() == 1:\n\t\twhile True:\n\t\t\tif value:\n\t\t\t\ttime.sleep(1)\n\t\t\t\tsyslogc.test()\n\t\t\telse:\n\t\t\t\tprint 'stop'\n\t\t\t\treturn 0\n\telif sel_radio() == 2:\n\t\tprint \"暂不可用！\"\n\telse:\n\t\tprint \"GG!\"\n\ndef stopsend():\n\tglobal value\n\tvalue = False\nSendbtn = Button(root, text='发送', command= sendlog)\nSendbtn.grid(row=0, column=6, rowspan=1, sticky=W+E+S+N, padx=5, pady=5)\nSendbtn = Button(root, text='停止', command= stopsend)\nSendbtn.grid(row=0, column=8, rowspan=1, sticky=W+E+S+N, padx=5, pady=5)\n#分割线...\nLabel(root, text='__'*56, foreground='gray').grid(row=1, column=0, columnspan=12)\nLabel(root, text='消息设置：').grid(row=2, column=0, columnspan=1, sticky=E)\n\ndef sel_filetype(event):\n\t\"\"\"下拉框选择日志读取格式\"\"\"\n\tprint filetypeCombo.get()\nfiletype_index = 0\nfiletypeCombo = Combobox(root, state='readonly')\nfiletypeCombo['values'] = ['从文件选择', '从文本框选择']\nfiletypeCombo.grid(row=2, column=1, columnspan=4, sticky=W)\nfiletypeCombo.current(filetype_index)\nfiletypeCombo.bind('<<ComboboxSelected>>', sel_filetype)\n\n\ndef sel_logtype(event):\n\t\"\"\"下拉框选择日志类型样本\"\"\"\n\tprint logtypeCombo.get()\n\nLabel(root, text='选择日志样本：').grid(row=2, column=4, sticky=E)\nlogtype_index = 0\nlogtypeCombo = Combobox(root, state='readonly')\nlogtypeCombo['values'] = ['Jump漏动扫描', 'Jump信息审计', 'JumpIPS', 'Jump防火墙', 'Jump上网行为', 'Jump主机审计', 'Cisco路由器', 'H3C交换机']\nlogtypeCombo.grid(row=2, column=5, columnspan=10, sticky=W)\nlogtypeCombo.current(filetype_index)\nlogtypeCombo.bind('<<ComboboxSelected>>', sel_logtype)\nLabel(root, text=' ').grid(row=3, column=0, sticky=E)\ne = StringVar()\n\n#文件路径文本框\nfilepath = Entry(root, textvariable=e, width=65, foreground='gray', state='readonly')\ne.set('请选择日志文件')\nfilepath.grid(row=4, column=0, columnspan=8, sticky=W)\n\ndef checkfile():\n\t\"\"\"选择syslog样例文件\"\"\"\n\tfilename = tkFileDialog.askopenfilename()\n\te.set(filename)\n\tprint filename\n\treturn filename\ncheckbtn = Button(root, text='. . .', command=checkfile)\ncheckbtn.grid(row=4, column=8)\n\n#日样例文本域\nLabel(root, text='文本域：').grid(row=5,sticky=W)\nText(root, width=80, height=8).grid(row=6, column=0, columnspan=10, sticky=W)\n\n#接收地址配置\nLabel(root, text='目的端设置：').grid(row=7, column=0, sticky=W)\n\n\n# \"\"\"选中listbox中一行\"\"\"\n# def print_item(event):\n# \tprint lb.get(lb.curselection())\nlist = Treeview(height=\"4\", columns=(\"ID\",\"IP\",\"PORT\"), selectmode=\"extended\")\nlist.heading('#1', text='ID', anchor='center')\nlist.heading('#2', text='IP', anchor='center')\nlist.heading('#3', text='端口', anchor='center')\nlist.column('#1', stretch=NO, minwidth=0, width=100)\nlist.column('#2', stretch=NO, minwidth=0, width=200)\nlist.column('#3', stretch=NO, minwidth=0, width=140)\nlist.column('#0', stretch=NO, minwidth=0, width=0) #width 0 to not display it\nlist.grid(row=8, column=0, rowspan=3, columnspan=7, sticky='w')\n\ndef add_btn():\n\taddtl = Toplevel()\n\taddtl.title('添加接收地址')\n\taddtl.geometry('400x100')\n\taddtl.resizable(width=False, height=False)\n\tfirstline = Label(addtl, text='  ')\n\tfirstline.grid(row=0)\n\tiplabel = Label(addtl, text='IP地址：')\n\tiplabel.grid(row=1, column=0, sticky=W)\n\tipvalue = Entry(addtl)\n\tipvalue.grid(row=1, column=1)\n\tprotlabel = Label(addtl, text='端口：')\n\tprotlabel.grid(row=1, column=2, sticky=W)\n\tprotvalue = Entry(addtl)\n\tprotvalue.grid(row=1, column=3)\n\tok = Button(addtl, text='确定')\n\tok.grid(row=2, column=0, columnspan=2, sticky=E)\n\tcancel = Button(addtl, text='取消', command=addtl.destroy)\n\tcancel.grid(row=2, column=3, columnspan=4, sticky=W)\n\naddbtn = Button(root, text='添加', command=add_btn)\naddbtn.grid(row=8, column=8, rowspan=1, sticky=W+E+S+N, padx=5, pady=5)\naddbtn = Button(root, text='编辑')\naddbtn.grid(row=9, column=8, rowspan=1, sticky=W+E+S+N, padx=5, pady=5)\naddbtn = Button(root, text='删除')\naddbtn.grid(row=10, column=8, rowspan=1, sticky=W+E+S+N, padx=5, pady=5)\n\n# lb.bind('<buttonrelease-1>', print_item)\n# list_item = [1,2,3,4,5,6,7,8,9,0]x\n# for item in list_item:\n# \tlb.insert(end, item)\n# scrl = scrollbar(root)\n# scrl.pack(side=right, fill=y)\n# lb.configure(yscrollcommand = scrl.set)\n# lb.pack(side=left, fill=both)\n# scrl['command'] = lb.yview\n\nroot.mainloop()\n\n#选择目录\n# dirname=tkFileDialog.askdirectory()\n#选择文件\n# fname = tkFileDialog.askopenfilename()\n# print fname\n# print dirname\n"
  },
  {
    "path": "seleniumkeyword/sendlog/mysetup.py",
    "content": "# -*- coding: utf-8 -*-\n# mysetup.py \n\nfrom distutils.core import setup \nimport py2exe \n\n\n\"\"\"\nPy2exe打包程序\n执行：python mysetup.py py2exe \n\"\"\"\n\n\nsetup(console=[\"syslogc.py\"]) \n\n\n"
  },
  {
    "path": "seleniumkeyword/sendlog/randip.py",
    "content": "# -*- coding:utf-8 -*-\n\n\n__author__ = 'Ray'\n\nimport random\nimport struct\nfrom scapy.all import *\nfrom scapy.layers.inet import IP, UDP\n\nSOURCE = ['.'.join((str(random.randint(1, 254)) for _ in range(4))) for _ in range(100)]\n\nprint SOURCE[1]\ndata = struct.pack('=BHI', 0x12, 20, 1000)\npkt = IP(src=SOURCE[1], dst='192.168.110.178') / UDP(sport=12345, dport=514) / data\nsend(pkt, inter=1, count=5)\n"
  },
  {
    "path": "seleniumkeyword/sendlog/randomip.py",
    "content": "__author__ = 'ray'\n\nimport random\nimport socket\nimport struct\nfrom configparser import ConfigParser\n\n# cf = ConfigParser.ConfigParser()\n# cf.read('send.config')\n# ip = cf.get('ipnet', 'ip')\n#\n# RANDOM_IP_POOL=['10.0.1.10/24']\ndef get_random_ip(RANDOM_IP_POOL):\n    str_ip = RANDOM_IP_POOL[random.randint(0, len(RANDOM_IP_POOL) - 1)]\n    # print str_ip\n    str_ip_addr = str_ip.split('/')[0]\n    # print str_ip_addr\n    str_ip_mask = str_ip.split('/')[1]\n    # print str_ip_mask\n    ip_addr = struct.unpack('>I', socket.inet_aton(str_ip_addr))[0]\n    mask = 0x0\n    for i in range(31, 31 - int(str_ip_mask), -1):\n        mask = mask | ( 1 << i)\n    ip_addr_min = ip_addr & (mask & 0xffffffff)\n    ip_addr_max = ip_addr | (~mask & 0xffffffff)\n    # print socket.inet_ntoa(struct.pack('>I', random.randint(ip_addr_min, ip_addr_max)))\n    return socket.inet_ntoa(struct.pack('>I', random.randint(ip_addr_min, ip_addr_max)))\n\ndef get_random_mac():\n    maclist = []\n    for i in xrange(6):\n        randstr = \"\".join(random.sample('0123456789abcdef',2))\n        maclist.append(randstr)\n        randmac = \":\".join(maclist)\n    return randmac\nif __name__ == '__main__':\n    # __get_random_ip(RANDOM_IP_POOL)\n    get_random_mac()"
  },
  {
    "path": "seleniumkeyword/sendlog/send.config",
    "content": "[mesg]\nsip = 192.168.110.1/24\nsport = 1200,65535\ndip = 192.168.110.254/32\ndport = 21, 22, 23, 25, 80, 139, 443, 2000, 3306, 8080\nlevel = 5, 10, 15, 20, 50\n\n[receiver]\nhost = 192.168.110.118\nport = 514\n"
  },
  {
    "path": "seleniumkeyword/sendlog/sendingdata.py",
    "content": "# -*- coding: utf-8 -*-\n\"\"\"\n__author__ = 'Ray'\nmail:tsbc@vip.qq.com\n2017-02-27\n\"\"\"\n\nfrom scapy.all import *\nfrom scapy.layers.inet import IP,UDP,TCP\nimport threading\nimport argparse\n\nsrcip = '192.168.110.249'\ndstip = '192.168.110.234'\ndata = '''<188> 2017-02-27 17:29:30 SECURITY VUL host tsbc type 常规  mintype 轻蠕虫 id CN-CVE name 洪泛攻击 desc \"容易受到ARP攻击轻蠕虫 id CN-CVE name 洪泛攻击 desc \"容易受到ARP攻击轻蠕虫 id CN-CVE name 洪泛攻击 desc \"容易受到ARP攻击轻蠕虫 id CN-CVE name 洪泛攻击 desc \"容易受到ARP攻击轻蠕虫 id CN-CVE name 洪泛攻击 desc \"容易受到ARP攻击轻蠕虫 id CN-CVE name 洪泛攻击 desc \"容易受到ARP攻击轻蠕虫 id CN-CVE name 洪泛攻击 desc \"容易受到ARP攻击轻蠕虫 id CN-CVE name 洪泛攻击 desc \"容易受到ARP攻击轻蠕虫 id CN-CVE name 洪泛攻击 desc \"容易受到ARP攻击轻蠕虫 id CN-CVE name 洪泛攻击 desc \"容易受到ARP攻击轻蠕虫 id CN-CVE name 洪泛攻击 desc \"容易受到ARP攻击轻蠕虫 id CN-CVE name 洪泛攻击 desc \"容易受到ARP攻击轻蠕虫 id CN-CVE name 洪泛攻击 desc \"容易受到ARP攻击轻蠕虫 id CN-CVE name 洪泛攻击 desc \"容易受到ARP攻击轻蠕虫 id CN-CVE name 洪泛攻击 desc \"容易受到ARP攻击轻蠕虫 id CN-CVE name 洪泛攻击 desc \"容易受到ARP攻击\"'''\n# pkt = IP(src=srcip, dst=dstip)/UDP(sport=12345,dport=514)/data\n# send(pkt,count=80000)\nclass Controller(object):\n\tcount = 1\n\t@classmethod\n\tdef init(cls):\n\t\tcls.args = get_args()\n\t\tcls.thread_stop = False\n\ndef get_args():\n\t'''\n\t解析命令行参数\n\t:return: 命令行参数命名空间\n\t'''\n\tparser = argparse.ArgumentParser()\n\tparser.add_argument('-sip', action='store', dest='srcip', type=str, help='src ip addr')\n\tparser.add_argument('-dip', action='store', dest='dstip', type=str, help='dst ip addr')\n\tparser.add_argument('-p', action='store', dest='protocol', type=str, help='protocol udp or tcp')\n\tparser.add_argument('-dport', action='store', dest='dport', type=str, help='send port')\n\tparser.add_argument('-c', action='store', dest='count', type=str, help='packets count')\n\tparser.add_argument('-f', action='store', dest='file', type=str, help='packets file')\n\tparser.add_argument('-t', action='store', dest='thread', type=str, help='thread number')\n\tparser.add_argument('-s', action='store', dest='speed', type=str, help='send speed (s)')\n\trst = parser.parse_args()\n\treturn rst\n\ndef run(srcip, dstip,data,protocol,dport,count,speed):\n\n\tif protocol.upper() == 'UDP':\n\t\tpkt = IP(src=srcip, dst=dstip)/UDP(sport=12345,dport=dport)/data\n\t\tsend(pkt,inter=speed, count=count)\n\tif protocol.upper() == 'TCP':\n\t\tpkt = IP(src=srcip, dst=dstip)/TCP(sport=12345, dport=dport) / data\n\t\tsend(pkt, inter=speed, count=count)\n\ndef sendpkgdata():\n\tsrcip = Controller.args.srcip\n\tdstip = Controller.args.dstip\n\tdata = '''<188> 2017-02-27 17:29:30 SECURITY VUL host tsbc type 常规  mintype 轻蠕虫 id CN-CVE name 洪泛攻击 desc \"容易受到ARP攻击轻蠕虫 id CN-CVE name 洪泛攻击 desc \"容易受到ARP攻击轻蠕虫 id CN-CVE name 洪泛攻击 desc \"容易受到ARP攻击轻蠕虫 id CN-CVE name 洪泛攻击 desc \"容易受到ARP攻击轻蠕虫 id CN-CVE name 洪泛攻击 desc \"容易受到ARP攻击轻蠕虫 id CN-CVE name 洪泛攻击 desc \"容易受到ARP攻击轻蠕虫 id CN-CVE name 洪泛攻击 desc \"容易受到ARP攻击轻蠕虫 id CN-CVE name 洪泛攻击 desc \"容易受到ARP攻击轻蠕虫 id CN-CVE name 洪泛攻击 desc \"容易受到ARP攻击轻蠕虫 id CN-CVE name 洪泛攻击 desc \"容易受到ARP攻击轻蠕虫 id CN-CVE name 洪泛攻击 desc \"容易受到ARP攻击轻蠕虫 id CN-CVE name 洪泛攻击 desc \"容易受到ARP攻击轻蠕虫 id CN-CVE name 洪泛攻击 desc \"容易受到ARP攻击轻蠕虫 id CN-CVE name 洪泛攻击 desc \"容易受到ARP攻击轻蠕虫 id CN-CVE name 洪泛攻击 desc \"容易受到ARP攻击轻蠕虫 id CN-CVE name 洪泛攻击 desc \"容易受到ARP攻击\"'''\n\tif Controller.args.protocol is None:\n\t\tprotocol = 'udp'\n\telse:\n\t\tprotocol = Controller.args.protocol\n\tif Controller.args.dport is None:\n\t\tdport = 514\n\telse:\n\t\tdport = Controller.args.dport\n\tif Controller.args.count is None:\n\t\tcount = 1\n\telse:\n\t\tcount = int(Controller.args.count)\n\tif Controller.args.speed is None:\n\t\tspeed = 0\n\telse:\n\t\tspeed = float(Controller.args.speed)\n\trun(srcip, dstip, data, protocol, dport, count, speed)\n\n\n\nif \"__main__\" == __name__:\n\t# 初始化控制类对象：实例化浏览器实例\n\tController.init()\n\tif Controller.args.thread is None:\n\t\tthread = 1\n\telse:\n\t\tthread = int(Controller.args.thread)\n\ttlst = []\n\n\tfor i in xrange(thread):\n\t\tth = threading.Thread(sendpkgdata())\n\t\ttlst.append(th)\n\n\tfor i in tlst:\n\t\ti.start()"
  },
  {
    "path": "seleniumkeyword/sendlog/syslogc.py",
    "content": "# -*- coding: utf-8 -*-\n__author__ = 'Ray'\n\n\"\"\"\nPython syslog 发包工具.\nmail：tsbc@vip.qq.com\n2016-05-05\n\"\"\"\n\nimport socket\nimport threading\nfrom configparser import ConfigParser\nimport random\nimport randomip\nimport weighted_choice\nimport time\n\nclass send:\n\tdef __init__(self, message, host, port):\n\t\tself.message = message\n\t\tself.host = host\n\t\tself.port = port\n\t\tself.FACILITY = {\n\t\t\t'kern': 0, 'user': 1, 'mail': 2, 'daemon': 3,\n\t\t\t'auth': 4, 'syslog': 5, 'lpr': 6, 'news': 7,\n\t\t\t'uucp': 8, 'cron': 9, 'authpriv': 10, 'ftp': 11,\n\t\t\t'local0': 16, 'local1': 17, 'local2': 18, 'local3': 19,\n\t\t\t'local4': 20, 'local5': 21, 'local6': 22, 'local7': 23,\n\t\t}\n\n\t\tself.LEVEL = {\n\t\t\t'emerg': 0, 'alert':1, 'crit': 2, 'err': 3,\n\t\t\t'warning': 4, 'notice': 5, 'info': 6, 'debug': 7\n\t\t}\n\t\tweights = [0.03, 0.04, 0.05, 0.07, 0.1, 0.2, 0.5, 0.01] #随机产生日志级别的概率\n\n\t\tif 'success' in self.message:\n\t\t\tself.levl = self.LEVEL['info']\n\t\telif 'failed' in self.message:\n\t\t\tself.levl = self.LEVEL['warning']\n\t\telif 'permit' in self.message:\n\t\t\tself.levl = self.LEVEL['info']\n\t\telif 'deny' in self.message:\n\t\t\tself.levl = self.LEVEL['warning']\n\t\telse:\n\t\t\tself.levl = weighted_choice.weighted_choice_sub(weights)\n\t\t\t# self.levl = random.choice(self.LEVEL.keys())\n\tdef run(self):\n\n\t\t\"\"\"\n\t\tSend syslog UDP packet to given host and port.\n\t\t\"\"\"\n\t\tBUFSIZE = 4096\n\t\tADDR = (self.host,self.port)\n\t\t# sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)\n\t\tsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)\n\t\ttry:\n\t\t\tsock.connect(ADDR)\n\t\texcept Exception as e:\n\t\t\tprint(\"Connect Error\", e)\n\t\t\treturn False\n\n\t\tdata = '<%d>%s' % (self.levl + self.FACILITY['local7']*8, self.message)\n\t\tprint(data)\n\t\t# sock.sendto(data, (self.host, self.port))\n\t\twhile True:\n\t\t\ttry:\n\t\t\t\tsock.send(data)\n\t\t\t\tdata = sock.recv(BUFSIZE)\n\t\t\t\tif not data:\n\t\t\t\t\tbreak\n\t\t\t\tprint(\"Server:\",data)\n\t\t\texcept Exception as e:\n\t\t\t\tprint(\"Error\", e)\n\t\tsock.close()\n\nif __name__ == '__main__':\n\t# 从配置文件读取数据\n\tcf = ConfigParser.ConfigParser()\n\tcf.read('send.config')\n\thost = cf.get('receiver', 'host').split(',')  # 获取接收log服务主机\n\tport = int(cf.get('receiver', 'port'))\n\tsip = randomip.get_random_ip([cf.get('mesg', 'sip')])  # 随机生成源IP\n\tdip = randomip.get_random_ip([cf.get('mesg', 'dip')])  # 随机生成目的IP\n\tsportstr = tuple(cf.get('mesg', 'sport').split(','))  # 随机生成源端口\n\tsport = str(random.randint(int(sportstr[0]), int(sportstr[1])))\n\tdportstr = cf.get('mesg', 'dport').split(',')  # 随机生成目的端口\n\tdport = random.choice(dportstr)\n\n\t# 获取系统当前时间\n\tnow = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())\n\tnowstr = time.strftime('%b %d %H:%M:%S', time.localtime())\n\n\t'''H3C交换机'''\n\th3clog1 = nowstr + ' 2000 H3C %%10IFNET/3/LINK_UPDOWN(l): GigabitEthernet1/0/7 link status is UP.'\n\th3clog2 = nowstr + ' 2000 H3C %%10SHELL/4/LOGOUT(t):   Trap 1.3.6.1.4.1.25506.2.2.1.1.3.0.2<hh3cLogOut>: logout from VTY'\n\tthreadh3c1 = send(h3clog1, host[0], port)\n\tthreadh3c2 = send(h3clog2, host[0], port)\n\n\t'''Cisco路由器'''\n\t# 管理员操作\n\tcsicolog1 = '29: *' + nowstr + '.' + str(\n\t\trandom.randint(1, 999)) + ': %SYS-5-CONFIG_I: Configured from console by admin on vty0 (10.0.1.49)'\n\tprint(csicolog1)\n\tthreadcisco1 = send(csicolog1, host[0], port)\n\n\tthreadcisco1.run()"
  },
  {
    "path": "seleniumkeyword/sendlog/tcpsendingsyslog.py",
    "content": "# -*- coding: utf-8 -*-\n__author__ = 'Ray'\n\n\"\"\"\nsocket tcp send 发包工具.\nmail：tsbc@vip.qq.com\n2017-03-03\n\"\"\"\n\nimport sys\n\nimport socket\nimport threading\nimport argparse\n\nclass Controller(object):\n\tcount = 1\n\t@classmethod\n\tdef init(cls):\n\t\tcls.args = get_args()\n\t\tcls.thread_stop = False\n\ndef get_args():\n\t'''\n\t解析命令行参数\n\t:return: 命令行参数命名空间\n\t'''\n\tparser = argparse.ArgumentParser()\n\tparser.add_argument('-host', action='store', dest='host', type=str, help='receive host ip')\n\tparser.add_argument('-port', action='store', dest='dport', type=str, help='send port')\n\tparser.add_argument('-c', action='store', dest='count', type=str, help='count number')\n\t# parser.add_argument('-f', action='store', dest='file', type=str, help='packets file')\n\t# parser.add_argument('-t', action='store', dest='thread', type=str, help='thread number')\n\trst = parser.parse_args()\n\treturn rst\n\ndef run(host,port,data,count):\n\taddress = (host, port)\n\tfor i in range(count):\n\t\ts = socket.socket(socket.AF_INET, socket.SOCK_STREAM)\n\t\ts.connect(address)\n\t\ts.send(data)\n\t\t# source = s.recv(1024)\n\t\t# print 'the data received is', source\n\t\ts.close()\n\n\ndef senddata():\n\tdata = '''<188> 2017-02-27 17:29:30 %SYS-5-CONFIG_I: Configured from console by admin on vty0 (10.0.1.49)'''\n\tif Controller.args.host is None:\n\t\tprint(\"Receiver IP(host) is Null!\")\n\t\treturn False\n\telse:\n\t\thost = Controller.args.host\n\tif Controller.args.dport is None:\n\t\tport = 514\n\telse:\n\t\tport = int(Controller.args.dport)\n\tif Controller.args.count is None:\n\t\tcount = 1\n\telse:\n\t\tcount = int(Controller.args.count)\n\trun(host, port, data, count)\n\n\n\nif \"__main__\" == __name__:\n\t# 初始化控制类对象：实例化浏览器实例\n\tController.init()\n\tsenddata()\n\t# if Controller.args.thread is None:\n\t# \tthread = 1\n\t# else:\n\t# \tthread = int(Controller.args.thread)\n\t# tlst = []\n\t#\n\t# for i in xrange(thread):\n\t# \tth = threading.Thread(senddata())\n\t# \ttlst.append(th)\n\t#\n\t# for i in tlst:\n\t# \ti.start()"
  },
  {
    "path": "seleniumkeyword/sendlog/tcpsendtest.py",
    "content": "# -*- coding: utf-8 -*-\n__author__ = 'Ray'\n\n\"\"\"\nsocket tcp send 发包工具.\nmail：tsbc@vip.qq.com\n2017-04-01\n\"\"\"\n\nimport socket,time\n\naddress = ('192.168.110.158', 1470)\ndata = '''<188> 2017-02-27 17:29:30 SECURITY VUL host tsbc type desc \"jiangpeng.chen@acorn-net.com\" '''\nfor i in xrange(100):\n\ts = socket.socket(socket.AF_INET, socket.SOCK_STREAM)\n\ts.connect_ex(address)\n\tprint s.getsockname()\n\tprint s.getpeername()\n\ts.sendall(data+\"[\"+str(1)+\"]\")\n\t# print s.recv(1024)\n\ttime.sleep(1)\n\ts.close()\n"
  },
  {
    "path": "seleniumkeyword/sendlog/udpsendingsyslog.py",
    "content": "# -*- coding: utf-8 -*-\n__author__ = 'Ray'\n\n\"\"\"\nSending Tools\nmail：tsbc@vip.qq.com\n2016-06-13\n\"\"\"\nimport socket\nimport threading\nfrom configparser import ConfigParser\nimport random\nfrom sendlog import randomip\nfrom sendlog import weighted_choice\nimport sys, time, os, getopt\n\nclass sending(threading.Thread):\n\t\"\"\"send log\"\"\"\n\tdef __init__(self):\n\t\tthreading.Thread.__init__(self)\n\t\tself.thread_stop = False\n\t\ttry:\n\t\t\tself.opts, self.args = getopt.getopt(sys.argv[1:], \"hvCf:c:t:d:p:\")\n\t\texcept:\n\t\t\tprint(u\"命令语法错误，可使用 -h 查看帮助。\")\n\t\t\tsys.exit()\n\t\tcf = ConfigParser.ConfigParser()\n\t\tcf.read('send.config')\n\t\tself.host = cf.get('receiver', 'host').split(',')\n\t\tself.port = int(cf.get('receiver', 'port'))\n\t\tself.sip = randomip.get_random_ip([cf.get('mesg', 'sip')])#随机生成源IP\n\t\tself.dip = randomip.get_random_ip([cf.get('mesg', 'dip')])#随机生成目的IP\n\t\tself.sportstr = tuple(cf.get('mesg', 'sport').split(',')) #随机生成源端口\n\t\tself.sport = str(random.randint(int(self.sportstr[0]), int(self.sportstr[1])))\n\t\tself.dportstr = cf.get('mesg', 'dport').split(',')#随机生成目的端口\n\t\tself.dport = random.choice(self.dportstr)\n\n\t\t#获取系统当前时间\n\t\tnow = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())\n\t\tnowstr = time.strftime('%b %d %H:%M:%S', time.localtime())\n\n\t\t#syslog日志类型\n\t\tself.FACILITY = {\n\t\t\t'kern': 0, 'user': 1, 'mail': 2, 'daemon': 3,\n\t\t\t'auth': 4, 'syslog': 5, 'lpr': 6, 'news': 7,\n\t\t\t'uucp': 8, 'cron': 9, 'authpriv': 10, 'ftp': 11,\n\t\t\t'local0': 16, 'local1': 17, 'local2': 18, 'local3': 19,\n\t\t\t'local4': 20, 'local5': 21, 'local6': 22, 'local7': 23,\n\t\t}\n\n\t\t#syslog日志级别\n\t\tself.LEVEL = {\n\t\t\t'emerg': 0, 'alert':1, 'crit': 2, 'err': 3,\n\t\t\t'warning': 4, 'notice': 5, 'info': 6, 'debug': 7\n\t\t}\n\t\tweights = [0.03, 0.04, 0.05, 0.07, 0.1, 0.2, 0.5, 0.01] #随机产生日志级别的概率\n\t\tself.message = []\n\n\t\t'''漏扫'''\n\t\t#操作日志\n\t\tnvaslog1 = ' '+now + u' ADMIN CONFIG user admin ip 10.0.1.48 module 系统-云中心配置 cmd \"云中心配置。\" result '+random.choice(['success', 'failed'])\n\t\tself.message.append(nvaslog1)\n\t\t#管理员登录\n\t\tnvaslog2 = ' '+now + u' ADMIN LOGIN user tsbc ip 10.0.1.104 action login result '+random.choice(['success', 'failed'])\n\t\tself.message.append(nvaslog2)\n\t\t#漏洞发现\n\t\tnvaslog3 = ' '+now + u' SECURITY VUL host tsbc type 常规  mintype 轻蠕虫 id CN-CVE name 洪泛攻击 desc \"容易受到ARP攻击\"'\n\t\tself.message.append(nvaslog3)\n\n\t\t'''信息审计'''\n\t\t#内容审计\n\t\tbca1 = ' '+now + u' AUDIT CONTENT user admin usergroup 管理员组 access permit prot tcp sip ' + self.sip + ' sport ' + self.sport + ' dip ' + self.dip + u' dport 80 type HTTP url http://www.163.com filename \"找工作.txt\" keyword 找工作 cmd \"找工作\" subject 邮件主题 sender lietou@163.com receiver lietou@163.com'\n\t\tself.message.append(bca1)\n\t\tbca2 = ' '+now + u' AUDIT CONTENT user admin usergroup 管理员组 access deny prot tcp sip ' + self.sip + ' sport ' + self.sport + ' dip ' + self.dip + u' dport 80 type HTTP url http://mail.163.com filename \"找工作.txt\" keyword 找工作 cmd \"找工作\" subject 邮件主题 sender lietou@163.com receiver lietou@163.com'\n\t\tself.message.append(bca2)\n\t\t#应用行为审计\n\t\tbca3 = ' '+now + ' AUDIT APP user 10.0.1.48 usergroup NULL access permit prot \"UDP\" sip ' + self.sip + ' sport ' + self.sport + ' dip ' + self.dip + ' dport ' + self.dport + u' type \"IM通信\" behav \"飞秋\" desc \"内置特征\"'\n\t\tself.message.append(bca3)\n\n\t\t'''上网行为'''\n\t\t#IP访问事件  --事件入库了但是界面没有对应的类别查询不到\n\t\tnca1 = ' '+now + ' SECURITY POLICY access permit prot http smac 00:22:46:0D:91:7C dmac 00:22:46:0D:91:7C sip ' + self.sip + ' sport ' + self.sport + ' dip ' + self.dip + ' dport ' + self.dport + ' times 1'\n\t\tself.message.append(nca1)\n\t\t#应用行为审计\n\t\tnca2 = ' '+now + u' AUDIT APP user tsbc usergroup 管理员组 access deny prot 代理上网 sip ' + self.sip + ' sport ' + self.sport + ' dip ' + self.dip + ' dport ' + self.dport + u' type GAME behav 访问网络游戏 desc \"访问英雄联盟游戏\"'\n\t\tself.message.append(nca2)\n\t\t#用户认证事件\n\t\tnca3 = ' '+now + u' USER AUTH name tsbc group 管理员组 ip ' + self.sip + ' type local result '+random.choice(['success', 'failed'])\n\t\tself.message.append(nca3)\n\n\t\t'''IDS/IPS'''\n\t\t#设备流量日志\n\t\tidslog1 = ' '+now + ' SYSTEM TRAFFIC sendbps 10211 recvbps 10211 sendpps 19621 recvpps 18954'\n\t\tself.message.append(idslog1)\n\n\t\t'''Jump防火墙'''\n\t\t#安全监测/访问控制\n\t\tfwlog1 = ' '+now + ' SECURITY POLICY access permit prot TCP smac 00:22:46:1d:eb:b5 dmac 00:22:46:1f:aa:47 sip ' + self.sip + ' sport ' + self.sport + ' dip ' + self.dip + ' dport ' + self.dport + ' times 1'\n\t\tself.message.append(fwlog1)\n\t\t#攻击检测\n\t\tfwlog2 = ' '+now + ' SECURITY INSTRUCTION type ddos id '+str(random.randint(1000, 9999))+ u' name \"尝试攻击\" smac 00:22:46:0D:91:7d  dmac 00:22:46:0D:91:7C prot ICMP sip ' + self.sip + ' sport ' + self.sport + ' dip ' + self.dip + ' dport ' + self.dport + ' times 1'\n\t\tself.message.append(fwlog2)\n\t\t#病毒日志\n\t\tfwlog3 = ' '+now + u' SECURITY VIRUS type 木马病毒 name \"灰鸽子\" smac 00:22:46:0A:B1:BC  dmac 00:22:46:0D:91:7C prot tcp sip ' + self.sip + ' sport ' + self.sport + ' dip ' + self.dip + ' dport ' + self.dport + u' filename \"新建文本文档.exe\"'\n\t\tself.message.append(fwlog3)\n\t\t#隧道日志\n\t\tfwlog4 = ' '+now + ' IPSEC TUNNEL id 1 localip ' + self.sip + ' remote ' + self.dip + ' desc \"Error!!!\"'\n\t\tself.message.append(fwlog4)\n\n\t\t'''主机审计'''\n\t\t#移动介质审计\n\t\thostlog1 = ' '+now + u' AUDIT MEDIUM operator admin action 接入 medtype U 盘 medname 小明的U盘 access \"D:\\Menu\" times 50 result '+random.choice(['permit', 'deny'])\n\t\tself.message.append(hostlog1)\n\n\t\t'''用户/系统'''\n\t\t#网口状态变化\n\t\tsystemlog1 = ' '+now + ' SYSTEM INTERFACE eth '+str(random.randint(0, 10))+' type '+random.choice(['phy', 'link'])+' state '+random.choice(['up', 'down'])\n\t\tself.message.append(systemlog1)\n\t\t#用户登录\n\t\tsystemlog2 = ' '+now + u' USER LOGIN user tsbc group 运维管理员组 ip '+ self.dip +' action '+random.choice(['login', 'logout'])+' result '+random.choice(['success', 'failed'])\n\t\tself.message.append(systemlog2)\n\t\t#用户认证\n\t\tsystemlog3 = ' '+now + u' USER AUTH name tsbc group 运维管理员组 ip '+ self.dip +' type '+random.choice(['local', 'radius', 'tacacs', 'ldap', 'msad', 'pop3', 'cert', 'other'])+' result '+random.choice(['success', 'failed'])\n\t\tself.message.append(systemlog3)\n\t\t#用户访问资源\n\t\tsystemlog4 = ' '+now + u' USER ACCESS name tsbc group 安全管理员组 restype web resname \"信息审计系统\" sip '+ self.sip +' dip '+ self.dip +' prot tcp sport '+ self.sport +' dport '+ self.dport +' result '+random.choice(['permit', 'deny'])\n\t\tself.message.append(systemlog4)\n\t\t#性能日志\n\t\tsystemlog5 = ' '+now + ' SYSTEM PERFORMANCE cpu '+str(random.randint(80, 90))+' memory '+str(random.randint(75, 95))+' connections '+str(random.randint(80, 300))\n\t\tself.message.append(systemlog5)\n\t\t#系统关键进程\n\t\tsystemlog6 = ' '+now + ' SYSTEM PROCESS explorer.exe exit'\n\t\tself.message.append(systemlog6)\n\n\t\t'''H3C交换机'''\n\t\th3clog1 = nowstr + ' 2000 H3C %%10IFNET/3/LINK_UPDOWN(l): GigabitEthernet1/0/7 link status is UP.'\n\t\tself.message.append(h3clog1)\n\t\th3clog2 = nowstr + ' 2000 H3C %%10SHELL/4/LOGOUT(t):   Trap 1.3.6.1.4.1.25506.2.2.1.1.3.0.2<hh3cLogOut>: logout from VTY'\n\t\tself.message.append(h3clog2)\n\n\t\t'''Cisco路由器'''\n\t\t#管理员操作\n\t\tcsicolog1 = '29: *'+nowstr+'.'+ str(random.randint(1, 999)) +': %SYS-5-CONFIG_I: Configured from console by admin on vty0 (10.0.1.49)'\n\t\tself.message.append(csicolog1)\n\n\n\t\tif self.message is not os.path:\n\t\t\tif 'success' in self.message:\n\t\t\t\tself.levl = self.LEVEL['info']\n\t\t\telif 'failed' in self.message:\n\t\t\t\tself.levl = self.LEVEL['warning']\n\t\t\telif 'permit' in self.message:\n\t\t\t\tself.levl = self.LEVEL['info']\n\t\t\telif 'deny' in self.message:\n\t\t\t\tself.levl = self.LEVEL['warning']\n\t\t\telse:\n\t\t\t\tself.levl = weighted_choice.weighted_choice_sub(weights)\n\n\t\tself.input_file = ''\n\t\tself.count = 1\n\t\t#self.host = self.host\n\t\tself.port = 514\n\t\tself.n = .0\n\t\tself.x = False\n\t\tself.fx = True\n\t\tfor op, value in self.opts:\n\t\t\tif op == '-f':\n\t\t\t\tself.input_file = value\n\t\t\t\tself.fx = False\n\t\t\tif op == '-v':\n\t\t\t\tprint(\"SendingTools Version 1.0\")\n\t\t\t\tsys.exit()\n\t\t\telif op == \"-c\":\n\t\t\t\ttry:\n\t\t\t\t\tself.count = int(value)\n\t\t\t\texcept:\n\t\t\t\t\tprint(u'-c 参数值错误, 可使用 -h 查看帮助。')\n\t\t\t\t\tsys.exit()\n\t\t\telif op == \"-C\":\n\t\t\t\tself.x = True\n\t\t\telif op == \"-d\":\n\t\t\t\tself.host = []\n\t\t\t\tself.host.append(value)\n\t\t\telif op == \"-p\":\n\t\t\t\ttry:\n\t\t\t\t\tself.port = int(value)\n\t\t\t\texcept:\n\t\t\t\t\tprint(u'-p 参数值错误, 可使用 -h 查看帮助。')\n\t\t\t\t\tsys.exit()\n\t\t\telif op == \"-t\":\n\t\t\t\ttry:\n\t\t\t\t\tself.n = float(value)\n\t\t\t\texcept:\n\t\t\t\t\tprint(u'-t 参数值错误, 可使用 -h 查看帮助。')\n\t\t\t\t\tsys.exit()\n\t\t\telif op == \"-h\" or op ==\"-help\":\n\t\t\t\tself.usage()\n\t\t\t\tsys.exit()\n\tdef usage(self):\n\t\t\"\"\"帮助文档\"\"\"\n\t\tprint(u\"\"\"\t\t\tThis is a Sending log Tools:\n-------------------------------------------------------------------------------------------\n\tUsge:\n\t\tpython sendlog -f [filepath] -c [cycles] -t [sleep time]\n\t\t\t-d [Receiver Host] -p [Receiver port]\n\tDetails:\n\t-C\tCycle send log\t\t\t\t[开启无限循环]\n\t-f\tSpecify the path to log file \t\t[指派日志文件路径]\n\t-c\tSpecify number of cycles \t\t[指定循环次数]\n\t-t\tSpecify log sending time interval \t[指定日志发送间隔时间 单位:秒]\n\t-d\tSpecify Receive log IP Addr \t\t[指定日志接收IP地址]\n\t-p\tSpecify Receive log Dst Prot \t\t[指定日志接收端口（整数）]\n\t-v\tShow version \t\t\t\t[查看工具版本]\n\t-h\tShow help info \t\t\t\t[查看帮助]\"\"\")\n\n\tdef run(self):\n\t\t\"\"\"\n\t\tSend syslog UDP packet to given host and port.\n\t\t\"\"\"\n\n\t\tif self.fx:#fx为True 发送脚本样例\n\t\t\tif self.x: #传入 -C 参数进行无限循环\n\t\t\t\tsock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)\n\t\t\t\twhile True:\n\t\t\t\t\ttime.sleep(float(self.n))\n\t\t\t\t\tfor h in self.host:\n\t\t\t\t\t\tfor i in range(0, self.count):\n\t\t\t\t\t\t\tfor msg in self.message:\n\t\t\t\t\t\t\t\tdata = '<%d>%s' % (self.levl + self.FACILITY['local7']*8, msg)\n\t\t\t\t\t\t\t\ttime.sleep(self.n)\n\t\t\t\t\t\t\t\ttry:\n\t\t\t\t\t\t\t\t\tsock.sendto(data, (h, self.port))\n\t\t\t\t\t\t\t\t\tprint(data)\n\t\t\t\t\t\t\t\texcept:\n\t\t\t\t\t\t\t\t\tprint(u\"参数取值出现错误，使用 -h 查看帮助。\")\n\t\t\t\t\t\t\t\t\tsys.exit()\n\t\t\t\tsock.close()\n\t\t\telse:\n\t\t\t\tsock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)\n\t\t\t\tfor h in self.host:\n\t\t\t\t\t#print h\n\t\t\t\t\tfor i in range(0, self.count):\n\t\t\t\t\t\tfor msg in self.message:\n\t\t\t\t\t\t\tdata = '<%d>%s' % (self.levl + self.FACILITY['local7']*8, msg)\n\t\t\t\t\t\t\ttime.sleep(self.n)\n\t\t\t\t\t\t\t#print self.n\n\t\t\t\t\t\t\ttry:\n\t\t\t\t\t\t\t\tsock.sendto(data, (h, self.port))\n\t\t\t\t\t\t\t\tprint(data)\n\t\t\t\t\t\t\texcept:\n\t\t\t\t\t\t\t\tprint(u\"参数取值出现错误，使用 -h 查看帮助。\")\n\t\t\t\t\t\t\t\tsys.exit()\n\t\t\t\tsock.close()\n\t\telse:#-f 读取日志文件\n\t\t\tif self.x:\n\t\t\t\tsock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)\n\t\t\t\twhile True:\n\t\t\t\t\tfor i in range(0, self.count):\n\t\t\t\t\t\ttry:\n\t\t\t\t\t\t\tf = open(self.input_file, 'r')\n\t\t\t\t\t\t\tlines = f.readlines()\n\t\t\t\t\t\texcept IOError:\n\t\t\t\t\t\t\tprint(u'读取的日志文件不存在，请更正后再试。')\n\t\t\t\t\t\t\tsys.exit()\n\t\t\t\t\t\tfor line in lines:\n\t\t\t\t\t\t\ttime.sleep(self.n)\n\t\t\t\t\t\t\tfor h in self.host:\n\t\t\t\t\t\t\t\ttry:\n\t\t\t\t\t\t\t\t\tsock.sendto(line, (h, self.port))\n\t\t\t\t\t\t\t\t\tprint(line)\n\t\t\t\t\t\t\t\texcept:\n\t\t\t\t\t\t\t\t\tprint(u\"参数取值出现错误，使用 -h 查看帮助。\")\n\t\t\t\t\t\t\t\t\tsys.exit()\n\t\t\t\t\t\tf.close()\n\t\t\t\tsock.close()\n\t\t\telse:\n\t\t\t\tsock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)\n\t\t\t\tfor j in range(0, self.count):\n\t\t\t\t\ttry:\n\t\t\t\t\t\tf = open(self.input_file, 'r')\n\t\t\t\t\t\tlines = f.readlines()\n\t\t\t\t\texcept IOError:\n\t\t\t\t\t\tprint(u'-f 文件路径不存在，可使用 -h 查看帮助。')\n\t\t\t\t\t\tsys.exit()\n\t\t\t\t\tfor line in lines:\n\t\t\t\t\t\ttime.sleep(self.n)\n\t\t\t\t\t\tfor h in self.host:\n\t\t\t\t\t\t\ttry:\n\t\t\t\t\t\t\t\tsock.sendto(line, (h, self.port))\n\t\t\t\t\t\t\t\tprint(line)\n\t\t\t\t\t\t\texcept:\n\t\t\t\t\t\t\t\tprint(u\"参数取值出现错误，使用 -h 查看帮助。\")\n\t\t\t\t\t\t\t\tsys.exit()\n\t\t\t\t\tf.close()\n\t\t\t\tsock.close()\n\tdef stop(self):\n\t\tself.thread_stop = True\n\ndef sendfile():\n\tthread1 = sending()\n\tthread1.start()\n\tthread1.stop()\n\nif __name__ == '__main__':\n\tfor i in range(1):\n\t\t# print i\n\t\tsendfile()"
  },
  {
    "path": "seleniumkeyword/sendlog/weighted_choice.py",
    "content": "# -*- coding: utf-8 -*-\n__author__ = 'Ray'\n\n\"\"\"\n通过概率产生随机值\nmail：tsbc@vip.qq.com\n2016-05-05\n\"\"\"\n\nimport random\nfrom collections import Counter\n\ndef weighted_choice_sub(weights):\n\trnd = random.random() * sum(weights)\n\tfor i, w in enumerate(weights):\n\t\trnd -= w\n\t\tif rnd < 0:\n\t\t\t# print w\n\t\t\treturn i\n\nweights = [0.03, 0.04, 0.05, 0.07, 0.1, 0.2, 0.5, 0.01]\n\n# weighted_choice_sub(weights)\n\n# count =Counter()\n#\n# for x in xrange(10000):\n# \tindex = weighted_choice_sub(weights)\n# \tcount[index] += 1\n#\n# count_sum = sum(count.values())\n#\n# for key, value in count.iteritems():\n# \tprint float(value)/count_sum"
  },
  {
    "path": "seleniumkeyword/settings.py",
    "content": "# -*- coding: utf-8 -*-\n\"\"\"\n__author__ = 'Ray'\nmail:tsbc@vip.qq.com\n2020-01-14\nseleniumkeyword settings configure\n\"\"\"\n\nDB_HOST = '127.0.0.1'\nDB_PORT = 3306\nDB_NAME = 'automatic'\nDB_USER = 'root'\nDB_PASS = '123456'\n\nTESTRAIL_URL = 'http://172.17.3.70/testrail/'"
  },
  {
    "path": "seleniumkeyword/testrail.py",
    "content": "#\n# TestRail API binding for Python 2.x (API v2, available since \n# TestRail 3.0)\n#\n# Learn more:\n#\n# http://docs.gurock.com/testrail-api2/start\n# http://docs.gurock.com/testrail-api2/accessing\n#\n# Copyright Gurock Software GmbH. See license.md for details.\n#\n\nimport urllib2, json, base64\n\nclass APIClient:\n\tdef __init__(self, base_url):\n\t\tself.user = ''\n\t\tself.password = ''\n\t\tif not base_url.endswith('/'):\n\t\t\tbase_url += '/'\n\t\tself.__url = base_url + 'index.php?/api/v2/'\n\n\t#\n\t# Send Get\n\t#\n\t# Issues a GET request (read) against the API and returns the result\n\t# (as Python dict).\n\t#\n\t# Arguments:0\n\t#\n\t# uri                 The API method to call including parameters\n\t#                     (e.g. get_case/1)\n\t#\n\tdef send_get(self, uri):\n\t\treturn self.__send_request('GET', uri, None)\n\n\t#\n\t# Send POST\n\t#\n\t# Issues a POST request (write) against the API and returns the result\n\t# (as Python dict).\n\t#\n\t# Arguments:\n\t#\n\t# uri                 The API method to call including parameters\n\t#                     (e.g. add_case/1)\n\t# data                The data to submit as part of the request (as\n\t#                     Python dict, strings must be UTF-8 encoded)\n\t#\n\tdef send_post(self, uri, data):\n\t\treturn self.__send_request('POST', uri, data)\n\n\tdef __send_request(self, method, uri, data):\n\t\turl = self.__url + uri\n\t\trequest = urllib2.Request(url)\n\t\tif (method == 'POST'):\n\t\t\trequest.add_data(json.dumps(data))\n\t\tauth = base64.b64encode('%s:%s' % (self.user, self.password))\n\t\trequest.add_header('Authorization', 'Basic %s' % auth)\n\t\trequest.add_header('Content-Type', 'application/json')\n\n\t\te = None\n\t\ttry:\n\t\t\tresponse = urllib2.urlopen(request).read()\n\t\texcept urllib2.HTTPError as e:\n\t\t\tresponse = e.read()\n\n\t\tif response:\n\t\t\tresult = json.loads(response)\n\t\telse:\n\t\t\tresult = {}\n\n\t\tif e != None:\n\t\t\tif result and 'error' in result:\n\t\t\t\terror = '\"' + result['error'] + '\"'\n\t\t\telse:\n\t\t\t\terror = 'No additional error message received'\n\t\t\traise APIError('TestRail API returned HTTP %s (%s)' % \n\t\t\t\t(e.code, error))\n\n\t\treturn result\n\nclass APIError(Exception):\n\tpass\n"
  },
  {
    "path": "seleniumkeyword/testraildemo.py",
    "content": "# -*- coding:utf-8 -*-\nfrom pprint import pprint\n\n__author__ = 'ray'\n\nimport testrail\n\nclient = testrail.APIClient('http://172.17.3.70/testrail/')\nclient.user = 'jiangpeng.chen@acorn-net.com'\nclient.password = '123qwe'\n\n\"\"\"  更新Testrun 结果\n\nadd_result_for_case/[runid]/[caseid]\nstatus_id:\n{\n  1 : Passed\n  4 : Retest\n  5 : Failed\n}\n\n\"\"\"\nresult = client.send_post(\n\t'add_result_for_case/1047/1036925',\n\t{'status_id': 1, 'comment': 'AutoMagic Flag.' }\n)\n# pprint(result)\n\n\n\"\"\"  获取用例信息\n\nget_case/[caseid]\n\"\"\"\ncase = client.send_get('get_case/1036925')\n# pprint(case)\n\n\n\"\"\"  获取用例节点信息\n\n\"\"\"\nsection = client.send_get('get_section/45752')\n# pprint(section)\n\n\n\"\"\" 添加测试用例\nsend_post('add_case/[sectionid]',casedata)\n\"\"\"\ncasedata = {\n\t\"title\":\"AutoMagic 测试使用admin用户登录。\",\n\t\"template_id\":\"1\",\n\t\"type_id\":\"1\",\n\t\"priority_id\":\"4\",\n\t\"custom_caseversion_id\":\"8\",\n\t\"custom_automation_status\":\"2\",\n\t\"custom_steps\": \"Step1 跳转到登录页面：http://192.168.110.111\\n Step2 输入登录用户名 admin \\n Step3 输入登录密码 admin@123\\n Step4 点击登录按钮\"\n}\nadd_case = client.send_post('add_case/45752',casedata)\n# pprint(add_case)\n\n\nupdate_case = client.send_post('update_case/1107930',casedata)\npprint(update_case)"
  },
  {
    "path": "start.py",
    "content": "import pymysql\nimport os\nfrom automatic.settings.common import MYSQL_HOST, MYSQL_PORT, MYSQL_USERNAME, MYSQL_PASSWORD, MYSQL_DBNAME\n\nconn = pymysql.connect(host=MYSQL_HOST, port=int(MYSQL_PORT), user=MYSQL_USERNAME, passwd=MYSQL_PASSWORD)\ncur = conn.cursor()\n\nif not cur.execute(\"SELECT * FROM information_schema.SCHEMATA where SCHEMA_NAME='\" + MYSQL_DBNAME + \"'\"):\n    print(\"创建数据库 [\" + MYSQL_DBNAME + \"]...\")\n    sql_create_db = \"create database \" + MYSQL_DBNAME + \" DEFAULT CHARSET utf8 COLLATE utf8_general_ci\"\n    cur.execute(sql_create_db)\n    print(\"创建数据库完成.\")\n    os.system(\"bash ./init.sh\")\n    print(\"导入关键字数据\")\n    sql_list = []\n    with open('insertkeyword.sql', \"r\") as f:\n        lines = f.readlines()\n        for line in lines:\n            line = line.replace('\\n', '')\n            sql_list.append(line)\n    _con = pymysql.connect(host=MYSQL_HOST, port=int(MYSQL_PORT), user=MYSQL_USERNAME, passwd=MYSQL_PASSWORD,\n                           database=MYSQL_DBNAME, cursorclass=pymysql.cursors.DictCursor)\n    with _con:\n        with _con.cursor() as _cur:\n            for sql in sql_list:\n                try:\n                    _cur.execute(sql)\n                    print(sql)\n                except:\n                    _con.rollback()\n            _con.commit()\n        _cur.close()\n\ncur.close()\nprint(\"service start ...\")\nos.system(\"python3 manage.py runserver 0.0.0.0:8000\")\n"
  }
]