diff --git a/Makefile b/Makefile index 1ec613f..1ea986b 100644 --- a/Makefile +++ b/Makefile @@ -58,10 +58,10 @@ iso-installer: iso-prepare mkdir -p work pushd work && pungi --name=Qubes $(PUNGI_OPTS) -c $(INSTALLER_KICKSTART) && popd # Move result files to known-named directories - mkdir -p build/ISO/qubes-x86_64/iso build/work + mkdir -p build/ISO/qubes-x86_64/iso mv work/$(ISO_VERSION)/x86_64/iso/*-DVD*.iso build/ISO/qubes-x86_64/iso/ - rm -rf build/work/$(ISO_VERSION) - mv work/$(ISO_VERSION)/x86_64/os build/work/$(ISO_VERSION) + rm -rf build/work + mv work build/work chown --reference=Makefile -R build yum rm -rf work diff --git a/Makefile.builder b/Makefile.builder index a77c2e5..b72fb3c 100644 --- a/Makefile.builder +++ b/Makefile.builder @@ -4,7 +4,6 @@ RPM_SPEC_FILES.dom0 := \ lorax-templates-qubes/lorax-templates-qubes.spec \ pungi/pungi.spec \ anaconda/anaconda.spec \ - initial-setup-launcher/initial-setup-launcher.spec \ qubes-anaconda-addon/qubes-anaconda-addon.spec \ qubes-release/qubes-release.spec \ qubes-release/qubes-dom0-dist-upgrade.spec diff --git a/anaconda/.coveragerc b/anaconda/.coveragerc new file mode 100644 index 0000000..6c8d634 --- /dev/null +++ b/anaconda/.coveragerc @@ -0,0 +1,14 @@ +# http://nedbatchelder.com/code/coverage/config.html + +[run] +branch = True +parallel = True +source = .. + +# used by coverage combine +# when combining Jenkins and kickstart_tests data +# doesn't affect combination of pyanaconda tests data +[paths] +source = . + /usr/lib*/python*/site-packages/ + /usr/sbin/ diff --git a/anaconda/CONTRIBUTING b/anaconda/CONTRIBUTING new file mode 100644 index 0000000..81abe0e --- /dev/null +++ b/anaconda/CONTRIBUTING @@ -0,0 +1,161 @@ +How to Contribute to the Anaconda Installer (the short version) +---------------------------------------------------------------- + +a) I want to contribute to the upstream Anaconda Installer (used in Fedora): +- open a pull request for the ``-devel`` branch (f25-devel, etc.) +- check the *Commit Messages* section below for how to format your commit messages + +b) I want to contribute to the RHEL Anaconda installer: +- open a pull request for the ``-branch`` branch (rhel7-branch, etc.) +- check the *Commits for RHEL Branches* section below for how to format your commit messages + +If you want to contribute a change to both the upstream and RHEL Anaconda then follow both a) and b) separately. + +Anaconda Installer Branching Policy (the long version) +------------------------------------------------------- + +The basic premise is that there are the following branches: +- master +- unstable +- -release +- -devel + +``Master`` branch never waits for any release-related processes to take place. The spec file will remain there to track dependencies. ``Master`` branch is *not* associated with Fedora Rawhide builds anymore. Its purpose is to function purely as an upstream branch. + +The ``unstable`` branch is used for making periodic Anaconda releases for Rawhide (or possibly anyone else wanting to taste the cutting edge). + +Concerning current RHEL branches, they are too divergent to integrate into this scheme. Thus, commits are merged onto, and builds are done on the RHEL branches. +In this case, two pull requests will very likely be needed: +- one for the ``rhel-branch`` +- one for the ``master`` or ``-devel`` branch (if the change is not RHEL only) + +Releases +--------- + +For specific Fedora version, the release process is as follows: +- ``-devel`` is merged onto ``-release`` +- a release commit is made (which bumps version in spec file) & tagged + +Concerning Fedora Rawhide, the release process is (very) slightly different: +- master is merged onto the unstable branch +- a release commit is made (which bumps version in spec file) & tagged + +Concerning the ```` branches (which could also be called ``next stable release`` if we wanted to decouple our versioning from Fedora in the future): +- work which goes into the next Fedora goes to ``-devel``, which is periodically merged back to ``master`` +- this way we can easily see what was developed in which Fedora timeframe and possibly due to given Fedora testing phase feedback (bugfixes, etc.) +- stuff we *don't* want to go to the next Fedora (too cutting edge, etc.) goes only to ``master`` branch +- commits specific to a given Fedora release (temporary fixes, etc.) go only to the ``-release`` branch +- the ``-release`` branch also contains release commits + +Example for the F25 cycle +-------------------------- + +- master +- unstable +- f25-devel +- f25-release + +This would continue until F25 is released, after which we: +- drop the f25-devel branch +- keep f25-release as an inactive record of the f25 cycle +- branch f26-devel and f26-release from the master branch + +This will result in the following branches for the F26 cycle: +- master +- unstable +- f26-devel +- f26-release + +Guidelines for Commits +----------------------- + +Commit Messages +^^^^^^^^^^^^^^^^ + +The first line should be a succinct description of what the commit does. If your commit is fixing a bug in Red Hat's bugzilla instance, you should add `` (#123456)`` to the end of the first line of the commit message. The next line should be blank, followed (optionally) by a more in-depth description of your changes. Here's an example: + + Stop kickstart when space check fails + + Text mode kickstart behavior was inconsistent, it would allow an + installation to continue even though the space check failed. Every other + install method stops, letting the user add more space before continuing. + +Commits for RHEL Branches +^^^^^^^^^^^^^^^^^^^^^^^^^^ + +If you are submitting a patch for any rhel-branch, the last line of your commit must identify the bugzilla bug id it fixes, using the ``Resolves`` or ``Related`` keyword, e.g.: +``Resolves: rhbz#111111`` + +or + +``Related: rhbz#1234567`` + +Use ``Resolves`` if the patch fixes the core issue which caused the bug. +Use ``Related`` if the patch fixes an ancillary issue that is related to, but might not actually fix the bug. + +Pull Request Review +^^^^^^^^^^^^^^^^^^^^ + +Please note that there is a minimum review period of 24 hours for any patch. The purpose of this rule is to ensure that all interested parties have an opportunity to review every patch. When posting a patch before or after a holiday break it is important to extend this period as appropriate. + +All subsequent changes made to patches must be force-pushed to the PR branch before merging it into the main branch. + +Merging examples +---------------- + +Merging the Fedora ``devel`` branch back to the ``master`` branch +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +(Fedora 25 is used as an example, don't forget to use appropriate Fedora version.) + +Checkout and pull the master branch: + +``git checkout master`` +``git pull`` + +Merge the Fedora devel branch to the master branch: + +``git merge --no-ff f25-devel`` + +Push the merge to the remote: + +``git push origin master`` + +Merging a GitHub pull request +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +(Fedora 25 is used as an example, don't forget to use appropriate Fedora version.) + +Press the green *Merge pull request* button on the pull request page. + +If the pull request has been opened for: +- master +- f25-release +- rhel7-branch +Then you are done. + +If the pull request has been opened for the ``f25-devel`` branch, then you also need to merge the ``f25-devel`` +branch back to ``master`` once you merge your pull request (see "Merging the Fedora devel branch back to the master branch" above). + +Merging a topic branch manually +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +(Fedora 25 is used as an example, don't forget to use appropriate Fedora version.) + +Let's say that there is a topic branch called "fix_foo_with_bar" that should be merged to a given Anaconda non-topic branch. + +Checkout the given target branch, pull it and merge your topic branch into it: + +``git checkout `` +``git pull`` +``git merge --no-ff fix_foo_with_bar`` + +Then push the merge to the remote: + +``git push origin `` + +If the was one of: +- master +- f25-release +- rhel7-branch +Then you are done. + +If the pull request has been opened for the ``f25-devel`` branch, then you also need to merge the ``f25-devel`` +branch back to ``master`` once you merge your pull request (see "Merging the Fedora devel branch back to the master branch" above). diff --git a/anaconda/Makefile.am b/anaconda/Makefile.am index 3f417c5..b98801b 100644 --- a/anaconda/Makefile.am +++ b/anaconda/Makefile.am @@ -14,39 +14,58 @@ # # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . -# -# Author: David Cantrell ACLOCAL_AMFLAGS = -I m4 SUBDIRS = data docs dracut po pyanaconda scripts tests widgets utils -EXTRA_DIST = config.rpath COPYING +EXTRA_DIST = COPYING .coveragerc -# Files generated for gettext need to be included in the distribution -EXTRA_DIST += $(srcdir)/anaconda.po -$(srcdir)/anaconda.po: $(srcdir)/anaconda - @$(MAKE) -C $(top_builddir)/po $(abs_top_srcdir)/$(subdir)/$$(basename $@) +# Include the xgettext wrapper so pot-update can be run from the source distribution +# This is needed for make distcheck. +EXTRA_DIST += $(srcdir)/translation-canary/xgettext_werror.sh MAINTAINERCLEANFILES = Makefile.in config.guess config.h.in config.sub \ depcomp install-sh ltmain.sh missing ABOUT-NLS \ INSTALL aclocal.m4 configure *.pyc py-compile \ - m4/* config.rpath po/Makefile.in.in po/Rules-quot \ + m4/* po/Makefile.in.in po/Rules-quot \ test-driver CLEANFILES = *~ dist_noinst_DATA = $(PACKAGE_NAME).spec -dist_sbin_SCRIPTS = anaconda +dist_sbin_SCRIPTS = anaconda.py + +install-exec-hook: + cd $(DESTDIR)$(sbindir) && mv anaconda.py anaconda + +uninstall-hook: + -cd $(DESTDIR)$(sbindir) && rm -f anaconda ARCHIVE_TAG = $(PACKAGE_NAME)-$(PACKAGE_VERSION)-$(PACKAGE_RELEASE) ZANATA_PULL_ARGS = --transdir $(srcdir)/po/ -ZANATA_PUSH_ARGS = --srcdir $(srcdir)/po/ --push-type source --force +ZANATA_PUSH_ARGS = --srcfile $(srcdir)/po/anaconda.pot --push-type source --force RC_RELEASE ?= $(shell date -u +0.1.%Y%m%d%H%M%S) -MOCKCHROOT ?= fedora-rawhide-$(shell uname -m) +MOCKCHROOT ?= fedora-25-$(shell uname -m) + +COVERAGE ?= coverage3 +USER_SITE_BASE ?= $(abs_top_builddir)/python-site +USER_SITE_PACKAGES ?= $(shell PYTHONUSERBASE=$(USER_SITE_BASE) $(PYTHON) -m site --user-site) + +# If translations are present, run tests on the .po files before tarring them +# up. Use a weird looking loop because shell doesn't have a good way to test +# for a wildcard +dist-hook: + for p in $(distdir)/po/*.po ; do \ + if [ -e "$$p" ]; then \ + PYTHONPATH=$(srcdir)/translation-canary python3 -m translation_canary.translated \ + --release $(distdir)/po ; \ + fi ; \ + break ; \ + done tag: @git tag -s -a -m "Tag as $(ARCHIVE_TAG)" $(ARCHIVE_TAG) @@ -54,20 +73,16 @@ tag: po-pull: rpm -q zanata-python-client &>/dev/null || ( echo "need to run: dnf install zanata-python-client"; exit 1 ) - zanata pull $(ZANATA_PULL_ARGS) + ( cd $(srcdir) && zanata pull $(ZANATA_PULL_ARGS) ) -po-empty: - for lingua in $$(grep -v '^#' $(srcdir)/po/LINGUAS) ; do \ - [ -f $(srcdir)/po/$$lingua.po ] || \ - msginit -i $(srcdir)/po/$(PACKAGE_NAME).pot -o $(srcdir)/po/$$lingua.po --no-translator || \ - exit 1 ; \ - done +# Try to fetch translations, but if that fails just keep going +po-fallback: + -$(MAKE) po-pull -scratch: po-empty +scratch: $(MAKE) ARCHIVE_TAG=HEAD dist - git checkout -- $(srcdir)/po/$(PACKAGE_NAME).pot -scratch-bumpver: po-empty +scratch-bumpver: @opts="-S -n $(PACKAGE_NAME) -v $(PACKAGE_VERSION) -r $(PACKAGE_RELEASE) -b $(PACKAGE_BUGREPORT) --newrelease $(RC_RELEASE)" ; \ if [ ! -z "$(IGNORE)" ]; then \ opts="$${opts} -i $(IGNORE)" ; \ @@ -82,7 +97,7 @@ scratch-bumpver: po-empty $(MAKE) -C po $(PACKAGE_NAME).pot-update release: - $(MAKE) dist && $(MAKE) tag && git checkout -- $(srcdir)/po/$(PACKAGE_NAME).pot + $(MAKE) dist && $(MAKE) tag rc-release: scratch-bumpver scratch mock -r $(MOCKCHROOT) --scrub all || exit 1 @@ -105,6 +120,7 @@ bumpver: po-pull fi ; \ ( cd $(srcdir) && scripts/makebumpver $${opts} ) || exit 1 ; \ $(MAKE) -C po $(PACKAGE_NAME).pot-update && \ + rm $(srcdir)/po/{main,extra}.pot zanata push $(ZANATA_PUSH_ARGS) # Install all packages specified as BuildRequires in the Anaconda specfile @@ -117,7 +133,8 @@ install-buildrequires: if ! [[ $$(uname -m) =~ s390x? ]]; then \ pkglist=$$(echo "$$pkglist" | grep -v s390utils) ; \ fi ; \ - dnf install $$pkglist + extra_pkgs="gettext-devel libtool glibc-langpack-en python3-pocketlint" ; \ + dnf install $$pkglist $$extra_pkgs # Install all packages specified as Requires in the Anaconda specfile # -> installs packages needed to run Anaconda and the Anaconda unit tests @@ -127,6 +144,14 @@ install-requires: : $${srcdir:=.} && \ dnf install $$(grep ^Requires: $${srcdir}/anaconda.spec.in | grep -v %{name} | cut -d ' ' -f 2 | grep -v ^anaconda) +# Install all packages required for running the tests +install-test-requires: install-buildrequires install-requires + dnf install bzip2 cppcheck \ + lorax mock parallel rpm-ostree virt-install pykickstart spin-kickstarts \ + python3-rpmfluff python3-mock python3-pocketlint python3-nose-testconfig \ + python3-sphinx_rtd_theme libvirt-python3 python3-lxml python3-dogtail \ + qemu-img + # Generate an updates.img based on the changed files since the release # was tagged. Updates are copied to ./updates-img and then the image is # created. By default, the updates subdirectory is removed after the @@ -144,7 +169,6 @@ updates: runglade: ANACONDA_DATA=$(srcdir)/data \ ANACONDA_WIDGETS_OVERRIDES=$(srcdir)/widgets/python \ - ANACONDA_WIDGETS_DATA=$(srcdir)/widgets/data \ ANACONDA_INSTALL_CLASSES=$(srcdir)/pyanaconda/installclasses \ PYTHONPATH=$(srcdir):$(builddir)/pyanaconda/isys/.libs:$(srcdir)/widgets/python/:$(builddir)/widgets/src/.libs/ \ LD_LIBRARY_PATH=$(builddir)/widgets/src/.libs \ @@ -155,10 +179,43 @@ runglade: glade ${GLADE_FILE} ci: rc-release - $(MAKE) -C utils/dd - $(MAKE) TMPDIR=/var/tmp check - @sudo $(MAKE) TMPDIR=/var/tmp TESTS=nosetests_root.sh check + @rm -f tests/test-suite.log.* + @mkdir -p $(USER_SITE_PACKAGES) + @cp $(abs_builddir)/tests/usercustomize.py $(USER_SITE_PACKAGES) + $(MAKE) + $(MAKE) TMPDIR=/var/tmp COVERAGE_PROCESS_START=$(abs_builddir)/.coveragerc \ + TEST_SUITE_LOG=test-suite.log.$$$$ PYTHONUSERBASE=$(USER_SITE_BASE) check + @tail -n 1 tests/gettext_tests/*.log > tests/gettext_tests/gettext_tests.log + @sudo $(MAKE) TMPDIR=/var/tmp COVERAGE_PROCESS_START=$(abs_builddir)/.coveragerc \ + TEST_SUITE_LOG=test-suite.log.$$$$ TESTS=nosetests_root.sh \ + PYTHONUSERBASE=$(USER_SITE_BASE) check @mkdir -p repo @mv *rpm repo - @createrepo -p repo - @sudo $(MAKE) TMPDIR=/var/tmp TESTS=install/run_install_test.sh TEST_ANACONDA_REPO=file://$(abs_builddir)/repo/ check + @createrepo_c -p repo + @sudo $(MAKE) TMPDIR=/var/tmp COVERAGE_PROCESS_START=$(abs_builddir)/.coveragerc \ + TEST_SUITE_LOG=test-suite.log.$$$$ TESTS=install/run_install_test.sh \ + TEST_ANACONDA_REPO=file://$(abs_builddir)/repo/ PYTHONUSERBASE=$(USER_SITE_BASE) check + @cat tests/test-suite.log.* > tests/test-suite.log + @rm -f tests/test-suite.log.* + @rm -rf $(USER_SITE_BASE) + $(MAKE) coverage-report + +test-gui: + @rm -f tests/test-suite.log + @rm -rf tests/autogui-results-*/ + @mkdir -p $(USER_SITE_PACKAGES) + @cp $(abs_builddir)/tests/usercustomize.py $(USER_SITE_PACKAGES) + $(MAKE) -C pyanaconda/isys + sudo COVERAGE_PROCESS_START=$(abs_builddir)/.coveragerc \ + PYTHONPATH=$(builddir)/pyanaconda/isys/.libs \ + PYTHONUSERBASE=$(USER_SITE_BASE) \ + $(abs_builddir)/tests/run_gui_tests.sh >tests/test-suite.log 2>&1 + @rm -rf $(USER_SITE_BASE) + @cat tests/test-suite.log + @mv .coverage.* tests/ + $(MAKE) coverage-report + +coverage-report: + $(COVERAGE) combine tests/.coverage.* + $(COVERAGE) report --omit "tests/*" > tests/coverage-report.log + @cat tests/coverage-report.log diff --git a/anaconda/acinclude.m4 b/anaconda/acinclude.m4 index 61eb1a8..b445537 100644 --- a/anaconda/acinclude.m4 +++ b/anaconda/acinclude.m4 @@ -14,8 +14,6 @@ dnl GNU Lesser General Public License for more details. dnl dnl You should have received a copy of the GNU Lesser General Public License dnl along with this program. If not, see . -dnl -dnl Author: David Shea dnl ANACONDA_SOFT_FAILURE(MESSAGE) dnl diff --git a/anaconda/anaconda b/anaconda/anaconda.py similarity index 80% rename from anaconda/anaconda rename to anaconda/anaconda.py index aa4604b..25eba4b 100755 --- a/anaconda/anaconda +++ b/anaconda/anaconda.py @@ -18,34 +18,33 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . # -# Author(s): Brent Fox -# Mike Fulbright -# Jakub Jelinek -# Jeremy Katz -# Chris Lumens -# Paul Nasrat -# Erik Troan -# Matt Wilson -# # This toplevel file is a little messy at the moment... (2001-06-22) # ...still messy (2013-07-12) +import os +import site + coverage = None -# If we get a signal immediately after starting that would be pretty messed up -proc_cmdline = open("/proc/cmdline", "r").read() # pylint: disable=interruptible-system-call +proc_cmdline = open("/proc/cmdline", "r").read() proc_cmdline = proc_cmdline.split() -if ("debug=1" in proc_cmdline) or ("debug" in proc_cmdline): +if ("inst.debug=1" in proc_cmdline) or ("inst.debug" in proc_cmdline): import coverage + pyanaconda_dir = "pyanaconda" + for sitepkg in site.getsitepackages(): + possible_dir = os.path.join(sitepkg, "pyanaconda") + if os.path.isdir(possible_dir): + pyanaconda_dir = possible_dir + break cov = coverage.coverage(data_file="/mnt/sysimage/root/anaconda.coverage", branch=True, - source=["/usr/sbin/anaconda", "pyanaconda"] + source=["/usr/sbin/anaconda", pyanaconda_dir] ) cov.start() -import atexit, sys, os, time, signal +import atexit, sys, time, signal import pid def exitHandler(rebootData, storage): @@ -68,16 +67,6 @@ def exitHandler(rebootData, storage): while True: time.sleep(10000) - if image_count or flags.dirInstall: - anaconda.storage.umountFilesystems(swapoff=False) - devicetree = anaconda.storage.devicetree - devicetree.teardownAll() - for imageName in devicetree.diskImages: - dev = devicetree.getDeviceByName(imageName) - for loop in dev.parents: - loop.controllable = True - dev.deactivate(recursive=True) - if anaconda.dbus_inhibit_id: from pyanaconda.screensaver import uninhibit_screensaver uninhibit_screensaver(anaconda.dbus_session_connection, anaconda.dbus_inhibit_id) @@ -87,6 +76,16 @@ def exitHandler(rebootData, storage): if anaconda.payload: anaconda.payload.unsetup() + if image_count or flags.dirInstall: + anaconda.storage.umount_filesystems(swapoff=False) + devicetree = anaconda.storage.devicetree + devicetree.teardown_all() + for imageName in devicetree.disk_images: + dev = devicetree.get_device_by_name(imageName) + for loop in dev.parents: + loop.controllable = True + dev.deactivate(recursive=True) + # Clean up the PID file if pidfile: pidfile.close() @@ -94,23 +93,22 @@ def exitHandler(rebootData, storage): if not flags.imageInstall and not flags.livecdInstall \ and not flags.dirInstall: from pykickstart.constants import KS_SHUTDOWN, KS_WAIT - from pyanaconda.iutil import dracut_eject, get_mount_paths, execWithRedirect if flags.eject or rebootData.eject: - for cdrom in storage.devicetree.getDevicesByType("cdrom"): - if get_mount_paths(cdrom.path): - dracut_eject(cdrom.path) + for cdrom in (d for d in storage.devices if d.type == "cdrom"): + if iutil.get_mount_paths(cdrom.path): + iutil.dracut_eject(cdrom.path) if flags.kexec: - execWithRedirect("systemctl", ["--no-wall", "kexec"]) + iutil.execWithRedirect("systemctl", ["--no-wall", "kexec"]) while True: time.sleep(10000) elif rebootData.action == KS_SHUTDOWN: - execWithRedirect("systemctl", ["--no-wall", "poweroff"]) + iutil.execWithRedirect("systemctl", ["--no-wall", "poweroff"]) elif rebootData.action == KS_WAIT: - execWithRedirect("systemctl", ["--no-wall", "halt"]) + iutil.execWithRedirect("systemctl", ["--no-wall", "halt"]) else: # reboot action is KS_REBOOT or None - execWithRedirect("systemctl", ["--no-wall", "reboot"]) + iutil.execWithRedirect("systemctl", ["--no-wall", "reboot"]) def startSpiceVDAgent(): status = iutil.execWithRedirect("spice-vdagent", []) @@ -139,10 +137,11 @@ def doStartupX11Actions(): # fingers crossed. # Add XDG_DATA_DIRS to the environment to pull in our overridden schema # files. + datadir = os.environ.get('ANACONDA_DATADIR', '/usr/share/anaconda') if 'XDG_DATA_DIRS' in os.environ: - xdg_data_dirs = '/usr/share/anaconda/window-manager:' + os.environ['XDG_DATA_DIRS'] + xdg_data_dirs = datadir + '/window-manager:' + os.environ['XDG_DATA_DIRS'] else: - xdg_data_dirs = '/usr/share/anaconda/window-manager:/usr/share' + xdg_data_dirs = datadir + '/window-manager:/usr/share' childproc = iutil.startProgram(["metacity", "--display", ":1", "--sm-disable"], env_add={'XDG_DATA_DIRS': xdg_data_dirs}) @@ -164,12 +163,20 @@ def doExtraX11Actions(runres): set_x_resolution(runres) + # Load the system-wide Xresources + iutil.execWithRedirect("xrdb", + ["-nocpp", "-merge", "/etc/X11/Xresources"]) + startSpiceVDAgent() def setupPythonUpdates(): from distutils.sysconfig import get_python_lib import gi.overrides + if "ANACONDA_WIDGETS_OVERRIDES" in os.environ: + for p in os.environ["ANACONDA_WIDGETS_OVERRIDES"].split(":"): + gi.overrides.__path__.insert(0, os.path.abspath(p)) + # Temporary hack for F18 alpha to symlink updates and product directories # into tmpfs. To be removed after beta in order to directly use content # from /run/install/ -- JLK @@ -234,145 +241,8 @@ def getAnacondaVersionString(): def parseArguments(argv=None, boot_cmdline=None): - from pyanaconda.anaconda_argparse import AnacondaArgumentParser - from pyanaconda.anaconda_argparse import HelpTextParser - - datadir = os.environ.get("ANACONDA_DATADIR", "/usr/share/anaconda") - - # NOTE: for each long option (like '--repo'), AnacondaOptionParser - # checks the boot arguments for bootarg_prefix+option ('inst.repo'). - # If require_prefix is False, it also accepts the option without the - # bootarg_prefix ('repo'). - # See anaconda_optparse.py and BootArgs (in flags.py) for details. - ap = AnacondaArgumentParser(bootarg_prefix="inst.", require_prefix=False) - help_parser = HelpTextParser(os.path.join(datadir, "anaconda_options.txt")) - - # NOTE: store_false options will *not* get negated when the user does - # "option=0" on the boot commandline (store_true options do, though). - # Basically, don't use store_false unless the option starts with "no". - - # YET ANOTHER NOTE: If you change anything here: - # a) document its usage in docs/boot-options.txt - # b) be prepared to maintain it for a very long time - # If this seems like too much trouble, *don't add a new option*! - - # Version - ap.add_argument('--version', action='version', version="%(prog)s " + getAnacondaVersionString()) - - # Interface - ap.add_argument("-C", "--cmdline", dest="display_mode", action="store_const", const="c", - default="g", help=help_parser.help_text("cmdline")) - ap.add_argument("-G", "--graphical", dest="display_mode", action="store_const", const="g", - help=help_parser.help_text("graphical")) - ap.add_argument("-T", "--text", dest="display_mode", action="store_const", const="t", - help=help_parser.help_text("text")) - - # Network - ap.add_argument("--proxy", metavar='PROXY_URL', help=help_parser.help_text("proxy")) - - # Method of operation - ap.add_argument("-d", "--debug", dest="debug", action="store_true", - default=False, help=help_parser.help_text("debug")) - ap.add_argument("--ks", dest="ksfile", action="store_const", - metavar="KICKSTART_URL", const="/run/install/ks.cfg", - help=help_parser.help_text("ks")) - ap.add_argument("--kickstart", dest="ksfile", metavar="KICKSTART_PATH", - help=help_parser.help_text("kickstart")) - ap.add_argument("--rescue", dest="rescue", action="store_true", default=False, - help=help_parser.help_text("rescue")) - ap.add_argument("--armplatform", dest="armPlatform", type=str, metavar="PLATFORM_ID", - help=help_parser.help_text("armplatform")) - ap.add_argument("--multilib", dest="multiLib", action="store_true", default=False, - help=help_parser.help_text("multilib")) - - ap.add_argument("-m", "--method", dest="method", default=None, metavar="METHOD", - help=help_parser.help_text("method")) - ap.add_argument("--askmethod", dest="askmethod", action="store_true", default=False, - help=help_parser.help_text("askmethod")) - ap.add_argument("--repo", dest="method", default=None, metavar="REPO_URL", - help=help_parser.help_text("repo")) - ap.add_argument("--stage2", dest="stage2", default=None, metavar="STAGE2_URL", - help=help_parser.help_text("stage2")) - ap.add_argument("--noverifyssl", action="store_true", default=False, - help=help_parser.help_text("noverifyssl")) - ap.add_argument("--liveinst", action="store_true", default=False, - help=help_parser.help_text("liveinst")) - - # Display - ap.add_argument("--resolution", dest="runres", default=None, metavar="WIDTHxHEIGHT", - help=help_parser.help_text("resolution")) - ap.add_argument("--usefbx", dest="xdriver", action="store_const", const="fbdev", - help=help_parser.help_text("usefbx")) - ap.add_argument("--vnc", action="store_true", default=False, - help=help_parser.help_text("vnc")) - ap.add_argument("--vncconnect", metavar="HOST:PORT", help=help_parser.help_text("vncconnect")) - ap.add_argument("--vncpassword", default="", metavar="PASSWORD", - help=help_parser.help_text("vncpassword")) - ap.add_argument("--xdriver", dest="xdriver", action="store", type=str, - default=None, metavar="DRIVER", help=help_parser.help_text("xdriver")) - - # Language - ap.add_argument("--keymap", metavar="KEYMAP", help=help_parser.help_text("keymap")) - ap.add_argument("--lang", metavar="LANG", help=help_parser.help_text("lang")) - - # Obvious - ap.add_argument("--loglevel", metavar="LEVEL", help=help_parser.help_text("loglevel")) - ap.add_argument("--syslog", metavar="HOST[:PORT]", help=help_parser.help_text("syslog")) - ap.add_argument("--remotelog", metavar="HOST:PORT", help=help_parser.help_text("remotelog")) - - from pykickstart.constants import SELINUX_DISABLED, SELINUX_ENFORCING - from pyanaconda.constants import SELINUX_DEFAULT - ap.add_argument("--noselinux", dest="selinux", action="store_const", - const=SELINUX_DISABLED, default=SELINUX_DEFAULT, - help=help_parser.help_text("noselinux")) - ap.add_argument("--selinux", action="store_const", - const=SELINUX_ENFORCING, help=help_parser.help_text("selinux")) - - ap.add_argument("--nompath", dest="mpath", action="store_false", default=True, - help=help_parser.help_text("nompath")) - ap.add_argument("--mpath", action="store_true", help=help_parser.help_text("mpath")) - - ap.add_argument("--nodmraid", dest="dmraid", action="store_false", default=True, - help=help_parser.help_text("nodmraid")) - ap.add_argument("--dmraid", action="store_true", help=help_parser.help_text("dmraid")) - - ap.add_argument("--noibft", dest="ibft", action="store_false", default=True, - help=help_parser.help_text("noibft")) - ap.add_argument("--ibft", action="store_true", help=help_parser.help_text("ibft")) - - # Geolocation - ap.add_argument("--geoloc", metavar="PROVIDER_ID", help=help_parser.help_text("geoloc")) - - # Miscellaneous - ap.add_argument("--nomount", dest="rescue_nomount", action="store_true", default=False, - help=help_parser.help_text("nomount")) - ap.add_argument("--updates", dest="updateSrc", action="store", type=str, - metavar="UPDATES_URL", help=help_parser.help_text("updates")) - ap.add_argument("--image", action="append", dest="images", default=[], - metavar="IMAGE_SPEC", help=help_parser.help_text("image")) - ap.add_argument("--dirinstall", nargs="?", const=True, default=False, - help=help_parser.help_text("dirinstall")) - ap.add_argument("--memcheck", action="store_true", default=True, - help=help_parser.help_text("memcheck")) - ap.add_argument("--nomemcheck", action="store_false", dest="memcheck", - help=help_parser.help_text("nomemcheck")) - ap.add_argument("--leavebootorder", action="store_true", default=False, - help=help_parser.help_text("leavebootorder")) - ap.add_argument("--noeject", action="store_false", dest="eject", default=True, - help=help_parser.help_text("noeject")) - ap.add_argument("--extlinux", action="store_true", default=False, - help=help_parser.help_text("extlinux")) - ap.add_argument("--nombr", action="store_true", default=False, - help=help_parser.help_text("nombr")) - ap.add_argument("--mpathfriendlynames", action="store_true", default=True, - help=help_parser.help_text("mpathfriendlynames")) - ap.add_argument("--kexec", action="store_true", default=False, - help=help_parser.help_text("kexec")) - - # some defaults change based on cmdline flags - if boot_cmdline is not None: - if "console" in boot_cmdline: - ap.set_defaults(display_mode="t") + from pyanaconda.anaconda_argparse import getArgumentParser + ap = getArgumentParser(getAnacondaVersionString(), boot_cmdline) namespace = ap.parse_args(argv, boot_cmdline=boot_cmdline) return (namespace, ap.deprecated_bootargs) @@ -456,7 +326,6 @@ def gtk_warning(title, reason): # pylint: disable=redefined-outer-name def check_memory(anaconda, options, display_mode=None): from pyanaconda import isys - from pyanaconda.iutil import persistent_root_image reason_strict = _("%(product_name)s requires %(needed_ram)s MB of memory to " "install, but you only have %(total_ram)s MB on this machine.\n") @@ -464,7 +333,7 @@ def check_memory(anaconda, options, display_mode=None): "MB of memory, but you only have %(total_ram)s MB\n.") reboot_extra = _('\n' - 'Press to reboot your system.\n') + 'Press [Enter] to reboot your system.\n') livecd_title = _("Not enough RAM") livecd_extra = _(" Try the text mode installer by running:\n\n" "'/usr/bin/liveinst -T'\n\n from a root " @@ -478,12 +347,12 @@ def check_memory(anaconda, options, display_mode=None): display_mode = anaconda.displayMode reason = reason_strict - total_ram = int(isys.total_memory()) + total_ram = int(isys.total_memory() / 1024) needed_ram = int(isys.MIN_RAM) graphical_ram = int(isys.MIN_GUI_RAM) # count the squashfs.img in if it is kept in RAM - if not persistent_root_image(): + if not iutil.persistent_root_image(): needed_ram += isys.SQUASHFS_EXTRA_RAM graphical_ram += isys.SQUASHFS_EXTRA_RAM @@ -552,7 +421,7 @@ def setupDisplay(anaconda, options, addons=None): vncS.anaconda = anaconda anaconda.displayMode = options.display_mode - anaconda.isHeadless = arch.isS390() + anaconda.isHeadless = arch.is_s390() if options.vnc: flags.usevnc = True @@ -743,7 +612,7 @@ def prompt_for_ssh(): if connxinfo: stdoutLog.info(_("Please ssh install@%s to begin the install."), connxinfo) else: - stdoutLog.info(_("Please ssh install@ to continue installation.")) + stdoutLog.info(_("Please ssh install@HOSTNAME to continue installation.")) def cleanPStore(): """remove files stored in nonvolatile ram created by the pstore subsystem""" @@ -753,8 +622,7 @@ def cleanPStore(): # is sufficient free space on the flash part. On some machines this will # take effect immediately, which is the best case. Unfortunately on some, # an intervening reboot is needed.""" - from pyanaconda.iutil import dir_tree_map - dir_tree_map("/sys/fs/pstore", os.unlink, files=True, dirs=False) + iutil.dir_tree_map("/sys/fs/pstore", os.unlink, files=True, dirs=False) if __name__ == "__main__": # check if the CLI help is requested and return it at once, @@ -792,6 +660,7 @@ if __name__ == "__main__": from pyanaconda import constants from pyanaconda.addons import collect_addon_paths from pyanaconda import geoloc + from pyanaconda import iutil # do this early so we can set flags before initializing logging from pyanaconda.flags import flags, can_touch_runtime_system @@ -818,6 +687,16 @@ if __name__ == "__main__": stdoutLog.error("anaconda must be run as root.") sys.exit(1) + # check if input kickstart should be saved + if flags.nosave_input_ks: + log.warning("Input kickstart will not be saved to the installed system due to the nosave option.") + iutil.touch('/tmp/NOSAVE_INPUT_KS') + + # check if logs should be saved + if flags.nosave_logs: + log.warning("Installation logs will not be saved to the installed system due to the nosave option.") + iutil.touch('/tmp/NOSAVE_LOGS') + # see if we're on s390x and if we've got an ssh connection uname = os.uname() if uname[4] == 's390x': @@ -840,19 +719,19 @@ if __name__ == "__main__": from pyanaconda import isys - from pyanaconda import iutil - iutil.ipmi_report(constants.IPMI_STARTED) + if (opts.images or opts.dirinstall) and opts.liveinst: + stdoutLog.error("--liveinst cannot be used with --images or --dirinstall") + iutil.ipmi_report(constants.IPMI_ABORTED) + sys.exit(1) + if opts.images and opts.dirinstall: stdoutLog.error("--images and --dirinstall cannot be used at the same time") iutil.ipmi_report(constants.IPMI_ABORTED) sys.exit(1) elif opts.dirinstall: - if opts.dirinstall is True: - root_path = os.environ.get("ANACONDA_ROOT_PATH", "/mnt/sysimage") - else: - root_path = opts.dirinstall + root_path = opts.dirinstall iutil.setTargetPhysicalRoot(root_path) iutil.setSysroot(root_path) @@ -861,7 +740,6 @@ if __name__ == "__main__": from pyanaconda import ntp from pyanaconda import keyboard from pyanaconda.iutil import ProxyString, ProxyStringError - from pyanaconda.iutil import open # pylint: disable=redefined-builtin verdesc = "%s for %s %s" % (getAnacondaVersionString(), product.productName, product.productVersion) @@ -888,7 +766,7 @@ if __name__ == "__main__": if not opts.images and not opts.dirinstall: print(logs_note) # no fancy stuff like TTYs on a s390... - if not arch.isS390(): + if not arch.is_s390(): if "TMUX" in os.environ and os.environ.get("TERM") == "screen": print(shell_and_tmux_note) else: @@ -997,6 +875,7 @@ if __name__ == "__main__": flags.selinux = opts.selinux flags.eject = opts.eject flags.kexec = opts.kexec + flags.singlelang = opts.singlelang # Switch to tty1 on exception in case something goes wrong during X start. # This way if, for example, metacity doesn't start, we switch back to a @@ -1030,8 +909,6 @@ if __name__ == "__main__": log.info("anaconda called with cmdline = %s", sys.argv) log.info("Default encoding = %s ", sys.getdefaultencoding()) - iutil.execWithRedirect("udevadm", ["control", "--env=ANACONDA=1"]) - # Collect all addon paths addon_paths = collect_addon_paths(constants.ADDON_PATHS) @@ -1048,6 +925,12 @@ if __name__ == "__main__": flags.automatedInstall = True flags.eject = False ksFiles = [opts.ksfile] + elif os.path.exists("/run/install/ks.cfg") and not opts.liveinst: + # this is to handle such cases where a user has pre-loaded a + # ks.cfg onto an OEMDRV labeled device + flags.automatedInstall = True + flags.eject = False + ksFiles = ["/run/install/ks.cfg"] else: ksFiles = ["/tmp/updates/interactive-defaults.ks", "/usr/share/anaconda/interactive-defaults.ks"] @@ -1203,6 +1086,14 @@ if __name__ == "__main__": networkInitialize(ksdata) threadMgr.add(AnacondaThread(name=constants.THREAD_WAIT_FOR_CONNECTING_NM, target=wait_for_connecting_NM_thread, args=(ksdata,))) + # initialize the screen access manager before launching the UI + from pyanaconda import screen_access + screen_access.initSAM() + # try to open any existing config file + # (might be created by pre-anaconda helper tools, injected during image + # generation, etc.) + screen_access.sam.open_config_file() + # now start the interface setupDisplay(anaconda, opts, addon_paths) if anaconda.gui_startup_failed: @@ -1232,23 +1123,23 @@ if __name__ == "__main__": try: for (name, path) in name_path_pairs(opts.images): log.info("naming disk image '%s' '%s'", path, name) - anaconda.storage.config.diskImages[name] = path + anaconda.storage.config.disk_images[name] = path image_count += 1 flags.imageInstall = True except ValueError as e: stdoutLog.error("error specifying image file: %s", e) - iutil.ipmi_report(constants.IPMI_ABORTED) + iutil.ipmi_abort(scripts=ksdata.scripts) sys.exit(1) if image_count: - anaconda.storage.setupDiskImages() + anaconda.storage.setup_disk_images() - from blivet.osinstall import storageInitialize + from blivet.osinstall import storage_initialize from pyanaconda.packaging import payloadMgr from pyanaconda.timezone import time_initialize if not flags.dirInstall: - threadMgr.add(AnacondaThread(name=constants.THREAD_STORAGE, target=storageInitialize, + threadMgr.add(AnacondaThread(name=constants.THREAD_STORAGE, target=storage_initialize, args=(anaconda.storage, ksdata, anaconda.protected))) if can_touch_runtime_system("initialize time", touch_live=True): diff --git a/anaconda/anaconda.spec b/anaconda/anaconda.spec index 5632431..3a96327 100644 --- a/anaconda/anaconda.spec +++ b/anaconda/anaconda.spec @@ -2,7 +2,7 @@ Summary: Graphical system installer Name: anaconda -Version: 23.19.10 +Version: 25.20.9 Release: 4%{?dist} License: GPLv2+ and MIT Epoch: 1000 @@ -25,11 +25,10 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) # Versions of required components (done so we make sure the buildrequires # match the requires versions of things). -# Also update in AM_GNU_GETTEXT_VERSION in configure.ac -%define gettextver 0.18.3 -%define intltoolver 0.31.2-3 -%define pykickstartver 2.9 +%define gettextver 0.19.8 +%define pykickstartver 2.32-1 %define dnfver 0.6.4 +%define dnfmaxver 2.0.0 %define partedver 1.8.1 %define pypartedver 2.5-2 %define nmver 0.9.9.0-10.git20130906 @@ -50,13 +49,13 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) BuildRequires: audit-libs-devel BuildRequires: gettext >= %{gettextver} +BuildRequires: gettext-devel BuildRequires: gtk3-devel BuildRequires: gtk-doc BuildRequires: gtk3-devel-docs BuildRequires: glib2-doc BuildRequires: gobject-introspection-devel BuildRequires: glade-devel -BuildRequires: intltool >= %{intltoolver} BuildRequires: libgnomekbd-devel BuildRequires: libxklavier-devel >= %{libxklavierver} BuildRequires: pango-devel @@ -78,6 +77,10 @@ BuildRequires: s390utils-devel %endif BuildRequires: libtimezonemap-devel >= %{libtimezonemapver} +# Tools used by the widgets resource bundle generation +BuildRequires: gdk-pixbuf2-devel +BuildRequires: libxml2 + Requires: anaconda-core = %{epoch}:%{version}-%{release} Requires: anaconda-gui = %{epoch}:%{version}-%{release} Requires: anaconda-tui = %{epoch}:%{version}-%{release} @@ -87,8 +90,8 @@ The anaconda package is a metapackage for the Anaconda installer. %package core Summary: Core of the Anaconda installer -Requires: python3-dnf >= %{dnfver} -Requires: python3-blivet >= 1:1.12 +Requires: python3-dnf >= %{dnfver}, python3-dnf < %{dnfmaxver} +Requires: python3-blivet >= 1:2.1.6-3 Requires: python3-meh >= %{mehver} Requires: libreport-anaconda >= 2.0.21-1 Requires: libselinux-python3 @@ -105,6 +108,11 @@ Requires: authconfig Requires: util-linux >= %{utillinuxver} Requires: python3-dbus Requires: python3-pwquality + +# pwquality only "recommends" the dictionaries it needs to do anything useful, +# which is apparently great for containers but unhelpful for the rest of us +Requires: cracklib-dicts + Requires: python3-pytz Requires: realmd Requires: teamd @@ -130,13 +138,18 @@ Requires: hfsplus-tools %endif %endif Requires: python3-pid +Requires: python3-ordered-set >= 2.0.0 +Requires: python3-wrapt Requires: dmidecode -Requires: python3-coverage +Requires: python3-coverage >= 4.0-0.12.b3 # required because of the rescue mode and VNC question Requires: anaconda-tui = %{epoch}:%{version}-%{release} +# Make sure we get the en locale one way or another +Requires: glibc-langpack-en + Obsoletes: anaconda-images <= 10 Provides: anaconda-images = %{version}-%{release} Obsoletes: anaconda-runtime < %{version}-%{release} @@ -172,6 +185,7 @@ Requires: python3-gobject-base # Needed to compile the gsettings files BuildRequires: gsettings-desktop-schemas +BuildRequires: metacity %description gui This package contains graphical user interface for the Anaconda installer. @@ -230,13 +244,17 @@ runtime on NFS/HTTP/FTP servers or local disks. %{make_install} find %{buildroot} -type f -name "*.la" | xargs %{__rm} +# Create an empty directory for addons +mkdir %{buildroot}%{_datadir}/anaconda/addons + %ifarch %livearches desktop-file-install ---dir=%{buildroot}%{_datadir}/applications %{buildroot}%{_datadir}/applications/liveinst.desktop %endif # NOTE: If you see "error: Installed (but unpackaged) file(s) found" that include liveinst files, # check the IS_LIVEINST_ARCH in configure.ac to make sure your architecture is properly defined -%find_lang %{name} +# If no langs found, keep going +%find_lang %{name} || : %post widgets -p /sbin/ldconfig %postun widgets -p /sbin/ldconfig @@ -254,6 +272,9 @@ update-desktop-database &> /dev/null || : %files +# Allow the lang file to be empty +%define _empty_manifest_terminate_build 0 + %files core -f %{name}.lang %license COPYING %{_unitdir}/* @@ -277,13 +298,13 @@ update-desktop-database &> /dev/null || : %{_sbindir}/liveinst %config(noreplace) %{_sysconfdir}/pam.d/* %config(noreplace) %{_sysconfdir}/security/console.apps/* -%{_sysconfdir}/X11/xinit/xinitrc.d/* +%{_libexecdir}/liveinst-setup.sh %{_datadir}/applications/*.desktop +%{_sysconfdir}/xdg/autostart/*.desktop %endif %files gui %{python3_sitearch}/pyanaconda/ui/gui/* -%{_datadir}/anaconda/window-manager/glib-2.0/schemas/* %{_datadir}/themes/Anaconda/* %files tui @@ -308,94 +329,947 @@ update-desktop-database &> /dev/null || : %{_prefix}/libexec/anaconda/dd_* %changelog -* Thu Oct 22 2015 Samantha N. Bueno - 23.19.10-1 +* Wed Dec 14 2016 Martin Kolman - 25.20.9-1 +- rpmostreepayload: Rework binds to be recursive (walters) +- Merge pull request #876 from jkonecny12/f25-dev-fix-can-touch-runtime-call + (jkonecny) +- Fix calling of can_touch_runtime_system function (jkonecny) +- Merge pull request #864 from M4rtinK/f25-devel-no_uic_on_image_dir_install + (martin.kolman) +- Fix user interaction config handling in image & directory install modes + (#1379106) (mkolman) + +* Tue Nov 08 2016 Martin Kolman - 25.20.8-1 +- Merge pull request #863 from AdamWill/relax-blivet-dep (martin.kolman) +- Relax blivet dependency to >= 2.1.6-3 (awilliam) + +* Mon Nov 07 2016 Martin Kolman - 25.20.7-1 +- Merge pull request #857 from snbueno/1335046-f25 (martin.kolman) +- Bump required Blivet version (#1378156) (mkolman) +- Merge pull request #862 from jkonecny12/f25-dev-fix-iscsi-timeout (jkonecny) +- Merge pull request #850 from AdamWill/iscsi-node-auth (jkonecny) +- Fix bad exception handling from blivet in iscsi (#1378156) (jkonecny) +- iSCSI: adjust to change in blivet auth info (#1378156) (awilliam) +- Add some error checking when users don't provide input for DASD devices. + (sbueno+anaconda) +- Add some error checking when users don't provide input for zFCP devices. + (sbueno+anaconda) +- Merge pull request #846 from jkonecny12/f25-rel-fix-mock (jkonecny) +- Merge pull request #849 from AdamWill/iscsi-singleton (jkonecny) +- Merge pull request #848 from AdamWill/device-links (jkonecny) +- use blivet iSCSI singleton directly in storage spoke (awilliam) +- Correct deviceLinks to device_links (blivet renamed it) (awilliam) +- Change mock from Rawhide to Fedora 25 (jkonecny) + +* Fri Oct 28 2016 Samantha N. Bueno - 25.20.6-1 +- Merge pull request #847 from snbueno/1384532-v02 (snbueno) +- Merge pull request #845 from poncovka/f25-devel-tui_software_group_selection + (vponcova) +- tui: Add software group selection (vponcova) +- Merge pull request #844 from jkonecny12/f25-dev-fix-space_check_skip + (jkonecny) +- Merge pull request #839 from jkonecny12/f25-dev-improve-logging (jkonecny) +- Instantiate the zFCP object ourselves now. (#1384532) (sbueno+anaconda) +- Fix the way DASD list is determined. (#1384532) (sbueno+anaconda) +- Add tests for payload location picking (#1328151) (jkonecny) +- Fix picking mountpoint for package download (#1328151) (jkonecny) +- Merge pull request #842 from jkonecny12/f25-dev-rm-zanata-main-extra-pot + (jkonecny) +- Remove main and extra pot files before zanata push (jkonecny) +- Don't send intermediate pot files to zanata (gh#791) (awilliam) +- Merge pull request #831 from poncovka/f25-devel-show_password_option + (vponcova) +- Improve packaging logs without DEBUG logging (jkonecny) +- Add option to show password in password field (vponcova) + +* Thu Oct 13 2016 Samantha N. Bueno - 25.20.5-1 +- Merge pull request #824 from snbueno/1378338 (snbueno) +- Generate a list of DASDs in GUI storage spoke. (#1378338) (sbueno+anaconda) + +* Tue Oct 04 2016 Samantha N. Bueno - 25.20.4-1 +- Merge pull request #817 from rvykydal/f25-devel-installation-from-live-iso- + to-disk-usb (rvykydal) +- Merge pull request #813 from M4rtinK/f25-devel-no_mandatory_network_in_IS + (martin.kolman) +- Skip live image on usb when checking storage for mounted partitions + (#1369786) (rvykydal) +- Fix network spoke being incorrectly marked as mandatory (#1374864) (mkolman) +- Merge pull request #812 from dwlehman/udev-cruft-removal (dlehman) +- Merge pull request #811 from M4rtinK/f25-devel-improved_driver_disk_copying + (martin.kolman) +- Improved driver disk copying (#1269915) (mkolman) +- Merge pull request #810 from M4rtinK/f25-devel-fix_screenshot_taking + (martin.kolman) +- Don't deactivate all storage in anaconda-cleanup. (#1225184) (dlehman) +- Stop setting ANACONDA udev environment variable. (#1225184) (dlehman) +- Fix screenshot taking logic (#1327456) (mkolman) +- Merge pull request #807 from jkonecny12/master-add-mod-reload-dependencies + (jkonecny) +- Change blank lines to pep8 for Dracut DUD test (jkonecny) +- Tweak lambda use in Dracut test (jkonecny) +- Add Dracut test for reloading mod dependencies (jkonecny) + +* Wed Sep 21 2016 Samantha N. Bueno - 25.20.3-1 +- Merge pull request #806 from M4rtinK/f25-devel-fix_tui_ntp_server_listing + (martin.kolman) +- Fix NTP server list fetching when running in IS (#1374810) (mkolman) +- Merge pull request #804 from rvykydal/f25-devel-cgwalters-rpmostree-fix- + remote (rvykydal) +- rpmostreepayload: Clean up use of sysroot files a bit (walters) +- rpmostreepayload: Fix remote handling to use correct sysroot (walters) + +* Mon Sep 19 2016 Samantha N. Bueno - 25.20.2-1 +- Merge pull request #801 from rvykydal/f25-devel-rhbz-1309661 (rvykydal) +- Merge pull request #802 from rvykydal/f25-devel-rhbz-1234849 (rvykydal) +- Merge pull request #797 from jkonecny12/f25-dev-fix-text-repo-option-checker + (jkonecny) +- Merge pull request #796 from jkonecny12/f25-dev-fix-net-when-dud-unload + (jkonecny) +- Merge pull request #798 from rvykydal/f25-devel-rhbz-1371188 (rvykydal) +- network: set onboot correctly for vlan on bond device in ks (#1234849) + (rvykydal) +- network: don't show ibft configured devices in UI (#1309661) (rvykydal) +- Merge pull request #765 from rvykydal/f25-devel-port-rhel-1325134-1252879 + (rvykydal) +- iscsi: don't generate kickstart iscsi commands for offload devices (#1252879) + (rvykydal) +- iscsi: allow installing bootloader on offload iscsi disks (qla4xxx) + (#1325134) (rvykydal) +- network: adapt to changed NM ibft plugin enablement configuration (#1371188) + (rvykydal) +- Merge pull request #795 from rvykydal/f25-devel-rhbz-1268792 (rvykydal) +- Merge pull request #794 from rvykydal/f25-devel-rhbz-1321288 (rvykydal) +- Merge pull request #793 from rvykydal/f25-devel-rhbz-1358795 (rvykydal) +- network: don't activate bond/team devices regardless of --activate (#1358795) + (rvykydal) +- Merge pull request #771 from rvykydal/f25-devel-1277975-add-network-no- + activate-option (rvykydal) +- Fix traceback when payload have None as url (#1371494) (jkonecny) +- Add new Dracut test and fix another ones (#1101653) (jkonecny) +- Fix bug when we add set to list (#1101653) (jkonecny) +- Add new helper script files to build system (#1101653) (jkonecny) +- Document new helper scripts to the DriverDisk README (#1101653) (jkonecny) +- Fix driver unload is disabling network settings (#1101653) (jkonecny) +- dud: fix multiple inst.dd=http:// instances stalling in dracut (#1268792) + (rvykydal) +- network: fix ksdata generating for for non-active virtual devices (#1321288) + (rvykydal) +- network: update kickstart data also with bond bridge slaves (#1321288) + (rvykydal) +- network: add support for bridge bond slaves (#1321288) (rvykydal) +- Merge pull request #790 from cgwalters/sam-evaluation (martin.kolman) +- screen_access: Ensure we write config to real sysroot (walters) +- network: add support for --no-activate kickstart opton (#1277975) (rvykydal) + +* Thu Sep 08 2016 Samantha N. Bueno - 25.20.1-1 +- Update zanata.xml file for f25. (sbueno+anaconda) +- Fix a small typo in makebumpver script. (sbueno+anaconda) +- Merge pull request #778 from M4rtinK/f25-release-zanata_branch_hotfix + (martin.kolman) +- Fix the git branch name/Zanata branch name mismatch (mkolman) +- Merge pull request #769 from rvykydal/f25-devel-port-1370099 (rvykydal) +- Merge pull request #743 from M4rtinK/f25-devel-how_to_merge (martin.kolman) +- Add git merging examples to the contribution guidelines (mkolman) +- network: don't stumble upon new Device.Statistics NM dbus iface (#1370099) + (rvykydal) +- Merge pull request #760 from jkonecny12/f25-reaplly-dev-fix-dnf-change + (jkonecny) +- Current Anaconda is not compatible with DNF 2.0.0 (jkonecny) +- Fix replacement of deprecated DNF method (jkonecny) +- Replace deprecated method of DNF (jmracek) +- Merge pull request #751 from M4rtinK/f25-devel-fix_systemd_sysroot + (martin.kolman) +- Translate press-c-to-continue correctly in TUI (#1364539) (mkolman) +- Merge pull request #744 from jkonecny12/f25-dev-fix-bootloader-bootpart + (jkonecny) +- Fix bootDrive driveorder fallback (#1355795) (jkonecny) +- Fix bootloader when re-using existing /boot part (#1355795) (jkonecny) +- Add support for device specification variants (#1200833) (mkolman) +- Revert "Update zanata.xml for f25-devel branch." (sbueno+anaconda) +- Update zanata.xml for f25-devel branch. (sbueno+anaconda) +- Merge pull request #736 from jkonecny12/master-fix-net-reset-payload + (jkonecny) +- network: don't require gateway for static ipv4 config in TUI (#1365532) + (rvykydal) +- Merge pull request #732 from jkonecny12/master-fix-ana-pre-service (jkonecny) +- Improve connection network change detection (jkonecny) +- Revert "Revalidate source only if nm-con-ed change settings (#1270354)" + (jkonecny) +- Fix anaconda-pre.service wasn't properly installed (#1255659) (jkonecny) +- Merge pull request #704 from snbueno/contributing (snbueno) +- Rename function for better consistency (#1259284) (rvykydal) +- Update error message for consistency (#1259284) (rvykydal) +- Add more specific username check messages also to gui (#1360334) (rvykydal) +- fix style guide test false positive on username variable (#1350375) + (rvykydal) +- tui: use functions instead of fake REs for checking values (#1350375) + (rvykydal) +- tui: get proper index of entry we are handling in input (#1331054) (rvykydal) +- tui: fix user name validity checking (#1350375) (rvykydal) +- More descriptive message on invalid username (kvalek) +- Fix another pep8 name issue (jkonecny) +- iscsi: fix getting iscsi target iface of bound target (#1359739) (rvykydal) +- Fix needsNetwork testing only additional repositories (#1358788) (jkonecny) +- Fix restart payload only when repo needs network (#1358788) (jkonecny) +- Cleanup remaining runlevel references (mkolman) +- Clarify a nosave related log message (mkolman) +- Use Screen Access Manager (mkolman) +- Add screen entry/exit callbacks (mkolman) +- Add screen access manager (mkolman) +- A simple formatting fix (mkolman) +- Fix another blivet-2.0 pep8 error (jkonecny) +- Quickfix of failing test (japokorn) +- Some docstring refactoring & typo fixes for the TUI base classes (mkolman) +- Add a file about contributing. (sbueno+anaconda) +- Store logs before anaconda starts (#1255659) (japokorn) +- DD can now replace existing drivers (#1101653) (japokorn) +- Use the F25 timezone kickstart command version (mkolman) +- Use sshd-keygen.target instead of hardcoded sshd-keygen script (jjelen) +- Make it possible to disable sshd service from running. (#1262707) + (sbueno+anaconda) +- Change bootloader boot drive fallback (jkonecny) +- Merge pull request #702 from japokorn/master_quickfix (japokorn) +- Fix of Python3x uncompatible commands (japokorn) +- Add NTP server configuration to the TUI (#1269399) (mkolman) +- Move the NTP server checking constants to constants.py (mkolman) +- Use a constant for the NTP check thread name prefix (mkolman) +- Fix another victim of the python 2->3 conversion. (#1354020) (dshea) +- Attempt to unload modules updated by a driver disk (dshea) +- Fix the processing of device nodes as driver disks (dshea) + +* Fri Jul 08 2016 Brian C. Lane - 25.20-1 +- Allow kickstart users to ignore the free space error (dshea) +- Stop kickstart when space check fails (bcl) +- Service anaconda-nm-config is missing type oneshot (jkonecny) +- Fix dhcpclass to work both via kickstart and the boot cmdline. (clumens) +- network: handle also ifcfg files of not activated virtual devices (#1313173) + (rvykydal) +- network: check onboot value in ksdata, not NM connections (#1313173) + (rvykydal) +- network: do not activate device on kickstart --onboot="yes" (#1341636) + (rvykydal) + +* Fri Jun 24 2016 Brian C. Lane - 25.19-1 +- hostname: don't set installer env hostname to localhost.localdomain + (#1290858) (rvykydal) +- hostname: add tooltip to Apply button (#1290858) (rvykydal) +- hostname: fix accelerator collision (#1290858) (rvykydal) +- hostname: don't set hostname in initrafms of target system (#1290858) + (rvykydal) +- hostname: set current hostname from target system hostname on demand + (#1290858) (rvykydal) +- hostname: suggest current hostname for storage containers (#1290858) + (rvykydal) +- hostname: don't set target system static hostname to current hostname + (#1290858) (rvykydal) +- network tui: do not activate device when setting its onboot value (#1261864) + (rvykydal) +- network tui: edit persistent configuration, not active connection (#1261864) + (rvykydal) +- network: validate netmask in tui (#1331054) (rvykydal) +- Add wordwrap to text mode and use it by default (#1267881) (rvykydal) +- Fix adding new VG in Custom spoke can't be applied (#1263715) (jkonecny) +- Fix SimpleConfigFile file permissions (#1346364) (bcl) +- Re-configure proxy when updateBaseRepo is called (#1332472) (bcl) + +* Fri Jun 17 2016 Brian C. Lane - 25.18-1 +- Only use <> for markup (#1317297) (bcl) +- Update iscsi dialog for Blivet 2.0 API change (bcl) +- Use the signal handlers to set initial widget sensitivies (dshea) +- Fix bad sensitivity on boxes in source spoke (jkonecny) +- Fix install-buildrequires (bcl) +- Added optional [/prefix] as pattern (kvalek) +- Require network for network-based driver disks (dshea) +- Add missing pkgs to install-buildrequires (#612) (phil) +- Increase the required version of gettext (dshea) +- Fix the name sensitivity in the custom spoke. (dshea) + +* Fri Jun 10 2016 Brian C. Lane - 25.17-1 +- Revert "Temporarily disable translations" (bcl) +- Change where to look for the iscsi object (#1344131) (dshea) +- Fix old blivet identifiers (#1343907) (dshea) +- Fix a covscan warning about fetch-driver-net (#1269915) (bcl) +- Fix crash when NM get_setting* methods return None (#1273497) (jkonecny) +- Overwrite network files when using ks liveimg (#1342639) (bcl) +- Stop using undocumented DNF logging API (bcl) +- Use the LUKS device for encrypted swap on RAID (dshea) +- Keep the subdir in driver disk update paths (dshea) +- Warn about broken keyboard layout switching in VNC (#1274228) (jkonecny) +- Make the anaconda-generator exit early outside of the installation + environment (#1289179) (mkolman) + +* Fri Jun 03 2016 Brian C. Lane - 25.16-1 +- Add a button to refresh the disk list. (dlehman) +- Only try to restart payload in the Anaconda environment (mkolman) +- Make current runtime environment identifiers available via flags (mkolman) +- Display storage errors that cause no disks to be selected (#1340240) (bcl) +- Fix the SourceSwitchHandler pylint errors differently. (clumens) +- Fix pylint errors. (clumens) +- Update the disk summary on Ctrl-A (dshea) +- Revert "Refresh the view of on-disk storage state every 30 seconds." + (dlehman) +- Refresh the view of on-disk storage state every 30 seconds. (dlehman) +- Handle unsupported disklabels. (dlehman) +- Use a blivet method to remove everything from a device. (dlehman) +- Tighten up ResizeDialog._recursive_remove a bit. (dlehman) +- Only look for partitions on partitioned disks. (dlehman) +- NFS DDs installation now works correctly (#1269915) (japokorn) +- Remove unused on_proxy_ok_clicked from Source spoke (jkonecny) +- send all layouts to localed for keymap conversion (#1333998) (awilliam) +- Small cleanup (mkolman) + +* Fri May 27 2016 Brian C. Lane - 25.15-1 +- Resolve shortcut conflict between "Desired Capacity" and "Done" (yaneti) +- network: don't crash on devices with zero MAC address (#1334632) (rvykydal) +- Remove Authors lines from the tops of all files. (clumens) +- Related: rhbz#1298444 (rvykydal) +- New Anaconda documentation - 25.14 (bcl) +- Catch DNF MarkingError during group installation (#1337731) (bcl) +- Fix TUI ErrorDialog processing (#1337427) (bcl) +- Clean up yelp processes (#1282432) (dshea) + +* Fri May 20 2016 Brian C. Lane - 25.14-1 +- Temporarily disable translations (bcl) +- Don't crash when selecting the same hdd ISO again (#1275771) (mkolman) + +* Thu May 19 2016 Brian C. Lane - 25.13-1 +- Fix writeStorageLate for live installations (#1334019) (bcl) +- Remove the locale list from zanata.xml (dshea) +- Ditch autopoint. (dshea) +- Ditch intltool. (dshea) +- Rename fedora-welcome to fedora-welcome.js (dshea) +- Fix UEFI installation after EFIBase refactor (bcl) +- Fix error handling for s390 bootloader errors (sbueno+anaconda) +- Deselect all addons correctly (#1333505) (bcl) +- gui-testing needs isys to be compiled. (clumens) +- Add more to the selinux check in tests/gui/base.py. (clumens) + +* Fri May 13 2016 Brian C. Lane - 25.12-1 +- Add single language mode (#1235726) (mkolman) +- Move default X keyboard setting out of the Welcome spoke (mkolman) +- Rerun writeBootLoader on Live BTRFS installs (bcl) +- Check for mounted partitions as part of sanity_check (#1330820) (bcl) +- Merge pull request #620 from dashea/new-canary (dshea) +- Update the required pykickstart version. (dshea) +- Implement %%packages --excludeWeakdeps (#1331100) (james) +- Fix bad addon handling when addon import failed (jkonecny) +- Add retry when downloading .treeinfo (#1292613) (jkonecny) +- Return xprogressive delay back (jkonecny) +- Change where tests on translated strings are run. (dshea) +- Merge the latest from translation-canary (dshea) +- Squashed 'translation-canary/' changes from 5a45c19..3bc2ad6 (dshea) +- Add new Makefile target for gui tests (atodorov) +- Define missing srcdir in run_gui_tests.sh and enable coverage (atodorov) +- Split gui test running out into its own script. (clumens) +- Look higher for the combobox associated with an entry (#1333530) (dshea) +- Use createrepo_c in the ci target. (dshea) +- Compile glib schema overrides with --strict. (dshea) + +* Fri May 06 2016 Brian C. Lane - 25.11-1 +- Don't join two absolute paths (#1249598) (mkolman) +- Don't crash when taking a screenshot on the hub (#1327456) (mkolman) +- Fix pylint errors. (phil) +- Factor out common grub1/grub2 stuff into mixin, and other factoring (phil) +- Add GRUB1 (legacy) support back to Anaconda (phil) + +* Fri Apr 29 2016 Brian C. Lane - 25.10-1 +- Handle unmounting ostree when exiting (bcl) +- ostree: Use bind mounts to setup ostree root (bcl) +- ostree: Skip root= setup when using --dirinstall (bcl) +- disable_service: Specify string format args as logging params. (clumens) +- Ignore failure when disable services that do not exist (phil) +- Get rid of an unused variable in the network spoke. (clumens) +- Revalidate source only if nm-con-ed change settings (#1270354) (jkonecny) +- Merge solutions for test source when network change (#1270354) (jkonecny) +- Changes in network state revalidate sources rhbz#1270354 (riehecky) + +* Wed Apr 27 2016 Brian C. Lane - 25.9-1 +- Use the iutil functions for interacting with systemd services. (dshea) +- Add methods to enable and disable systemd services. (dshea) +- Do not add .service to the end of service names. (dshea) +- Remove detach-client from tmux.conf (dshea) +- Use Blivet 2.0 for set_default_fstype (#607) (sgallagh) +- Remove dnf from the list of required packages. (#605) (dshea) +- Add access to the payload from addons (#1288636) (jkonecny) +- Disable pylint warnings related to the log handler fixer. (dshea) +- Allow the metacity config dir to be overriden. (dshea) +- Do not include /usr/share/anaconda files in the gui package. (dshea) +- Work around logging's crummy lock behavior. (dshea) +- Use rm -r to remove the temporary python site directory. (dshea) +- Remove the subnet label for wired devices. (#1327615) (dshea) +- Fix how unusued network labels are hidden (#1327615) (dshea) +- Remove yum_logger (bcl) +- Remove the lock loglevel (bcl) +- Use a temporary user-site directory for the tests. (dshea) +- Build everything for make ci. (dshea) +- Ignore some E1101 no-member errors when running pylint (bcl) +- Sprinkle the code with pylint no-member disable statements (bcl) +- Catch GLib.GError instead of Exception (bcl) +- Update storage test for Blivet 2.0 API change. (bcl) +- Initialize missing private methods in BasePage class (bcl) +- Update kickstart.py for Blivet 2.0 API change. (bcl) +- Use namedtuple correctly in kexec.py (bcl) +- Add more requires to make password checking still work. (#1327411) (dshea) +- Rename isS390 to match the renames in blivet. (dshea) +- Suppress signal handling when setting zone from location (#1322648) (dshea) +- Refresh metadata when updates checkbox changes (#1211907) (bcl) + +* Fri Apr 15 2016 Brian C. Lane - 25.8-1 +- network: handle null wireless AP SSID object (#1262556) (awilliam) +- Change new_tmpfs to new_tmp_fs. (clumens) +- Add support for kickstart %%onerror scripts. (clumens) +- Show network spoke in the TUI reconfig mode (#1302165) (mkolman) +- network: copy static routes configured in installer to system (#1255801) + (rvykydal) +- network: fix vlan over bond in kickstart (#1234849) (rvykydal) +- network: use NAME to find ifcfg on s390 with net.ifnames=0 (#1249750) + (rvykydal) +- Get rid of the reimport of MultipathDevice. (clumens) +- Fix iSCSI kickstart options aren't generated (#1252879) (jkonecny) +- Fix adding offload iSCSI devices (vtrefny) +- Make the list-harddrives script mode robust (mkolman) + +* Fri Apr 08 2016 Brian C. Lane - 25.7-1 +- Blivet API change getDeviceBy* is now get_device_by_* (bcl) +- network: don't set 803-3-ethernet.name setting (#1323589) (rvykydal) +- Log non-critical user/group errors (#1308679) (bcl) +- Fix btrfs metadata raid level kwarg. (dlehman) +- docs: Add release building document (bcl) +- Minor improvements - README and test dependencies (atodorov) +- Add more matches for network connectivity (atodorov) + +* Mon Apr 04 2016 Brian C. Lane - 25.6-1 +- Remove an unused import from anaconda-cleanup. (clumens) +- Don't use booleans in Requires (#1323314) (dshea) +- Set CSS names on all of the anaconda classes. (#1322036) (dshea) +- Don't crash if no groups are specified (#1316816) (dshea) +- Fix only one address is shown in anaconda (#1264400) (jkonecny) +- Fix call to update optical media format. (#1322943) (dlehman) +- Reset invalid disk selection before proceeding. (dlehman) +- Multiple Dogtail tests improvements (atodorov) +- Do not allow liveinst with --image or --dirinstall (#1276349) (dshea) +- New Anaconda documentation - 25.5 (bcl) + +* Wed Mar 30 2016 Brian C. Lane - 25.5-1 +- Don't provide subclasses of the multipath or dmraid commands. (clumens) +- Add support for chunksize raid kickstart parameter. (vtrefny) +- Convert to blivet-2.0 API. (dlehman) + +* Thu Mar 24 2016 Brian C. Lane - 25.4-1 +- Require that the English locale data be available. (#1315494) (dshea) +- Revert "Change the default locale to C.UTF-8 (#1312607)" (#1315494) (dshea) +- Make windows in metacity closable (#1319590) (dshea) +- Fix the use of CSS psuedo-classes in the widgets. (dshea) +- Add reason when logging invalid repository (#1240379) (jkonecny) + +* Sat Mar 19 2016 Brian C. Lane - 25.3-1 +- Apply language attributes to all labels within anaconda. (dshea) +- Add a function to apply a PangoAttrLanguage to a label. (dshea) +- Add functions to watch changes to a container widget. (dshea) +- Switch to the adwaita icon theme. (dshea) +- Fix duplicate network settings in dracut (#1293539) (jkonecny) +- Fix create device with bad name when parsing KS (#1293539) (jkonecny) +- Use a lock for repoStore access (#1315414) (bcl) +- Add missing inst prefix to the nokill option in docs (mkolman) +- Merge pull request #551 from wgwoods/master-multiple-initrd-dd-fix (wwoods) +- fix multiple inst.dd= args (rhbz#1268792) (wwoods) + +* Fri Mar 11 2016 Brian C. Lane - 25.2-1 +- Load the system-wide Xresources (#1241724) (dshea) +- Use an icon that exists in Adwaita for the dasd confirmation (dshea) +- Make it possible to skip saving of kickstarts and logs (#1285519) (mkolman) +- Add a function for empty file creation (#1285519) (mkolman) +- Run actions for argparse arguments (#1285519) (mkolman) + +* Wed Mar 09 2016 Brian C. Lane - 25.1-1 +- don't install kernel-PAE on x86_64 (#1313957) (awilliam) +- except block in py3.5 undefines the variable (bcl) +- Remove some history from the liveinst setup. (dshea) +- Do not run the liveinst setup if not in a live environment. (dshea) +- Set GDK_BACKEND=x11 before running anaconda from liveinst. (dshea) +- Run zz-liveinst as an autostart application (dshea) +- Translate the help button. (dshea) +- Translate the required space labes in resize.py (dshea) + +* Fri Mar 04 2016 Brian C. Lane - 25.0-1 +- Add device id to dasdfmt screen. (#1269174) (sbueno+anaconda) +- Unify displayed columns in custom spoke dialogs. (#1289577) (sbueno+anaconda) +- Show some confirmation to users if adding a DASD was successful. (#1259016) + (sbueno+anaconda) +- Hotfix for missing storage in payload class (#1271657) (jkonecny) +- Check to see if DD repo is already in addOn list (#1268357) (bcl) +- Use the default levelbar offset values. (dshea) +- Do not change the GUI language to a missing locale. (#1312607) (dshea) +- Don't crash when setting an unavailable locale (#1312607) (dshea) +- Change the default locale to C.UTF-8 (#1312607) (dshea) +- Update the libtool version-info. (dshea) +- Use CSS to style the internal widgets. (dshea) +- Move the widgets pixmaps into resources. (dshea) +- Add a resource bundle to libAnacondaWidgets (dshea) +- Rename show_arrow and chosen_changed to show-arrow and chosen-changed (dshea) +- Remove an invalid transfer notation. (dshea) +- Stop using SGML in the docs. (dshea) +- Change the install test URL. (dshea) +- Fix nfs source crash when options change (#1264071) (bcl) +- makebumpver: Add a --dry-run option (bcl) +- NTP should have better behavior (#1309396) (jkonecny) +- Manually set clock shifts on UI idle (#1251044) (rmarshall) +- Don't remove selected shared part when Delete all (#1183880) (jkonecny) +- Don't delete shared/boot parts in deleteAll (#1183880) (jkonecny) + +* Fri Feb 19 2016 Brian C. Lane - 24.13-1 +- tests/gui enhancements (atodorov) +- Fix gui tests for anaconda move to anaconda.py (atodorov) +- Use a different ipmi command to log events. (clumens) +- Clarify that a string in list-screens is actually a regex. (clumens) +- Merge pull request #513 from wgwoods/update-dd-docs (wwoods) +- updated driver updates docs (wwoods) +- Add specification for the user interaction config file (mkolman) +- Update zanata webui URL in translation doc. (dlehman) +- Tweak partition removal in Custom spoke (jkonecny) +- Do not skip evaluation after removing partitions (jkonecny) +- Import iutil earlier so we can use ipmi_report from check_for_ssh. (clumens) +- Make disconnect_client_callbacks more resilient (#1307063). (clumens) +- Move the langpacks install into to a separate function. (dshea) +- Fix _find_by_title method in Accordion (jkonecny) + +* Fri Feb 12 2016 Brian C. Lane - 24.12-1 +- Use host storage for directory or image install dnf download (bcl) +- Log payloadError so we know why installation failed. (bcl) +- Add the addons directory to the rpm. (dshea) +- Use the packaged version of ordered-set (dshea) +- Remove an unused import (dshea) +- Add an uninstall hook for the renamed anaconda (dshea) +- Make langpack work in DNF (#1297823) (jsilhan) +- New Anaconda documentation - 24.11 (bcl) + +* Fri Feb 05 2016 Brian C. Lane - 24.11-1 +- Fix makeupdates for anaconda move to anaconda.py (bcl) +- Rename ./anaconda to ./anaconda.py to work around coverage.py #425 (atodorov) +- Remove special handling for interruptible system calls. (dshea) +- Handle PEP 3101 strings in the gettext context check (dshea) +- Improve RHS summary strings in multiselection (#1265620) (jkonecny) +- Increase GI version required of AnacondaWidgets (jkonecny) +- Increment version of g-introspection for widgets (jkonecny) +- Increment the AnacondaWidgets version (jkonecny) +- Switch to the new Initial Setup unit name (#1299210) (mkolman) +- Uncomment self.check_lang_locale_views in tests/gui/ (atodorov) +- Add dogtail to test requirements (atodorov) +- Add config for easier combining of kickstart and Jenkins coverage data + (atodorov) +- Apply the fallback style to anaconda selectors. (dshea) +- Redo the stylesheet for Gtk 3.19+ (dshea) +- Directly overwrite /usr/share/anaconda/anaconda-gtk.css (dshea) +- Merge pull request #463 from dashea/translation-tests (dshea) +- Display the name of the addon while executing it (bcl) +- Add page selection summary to the right side (#1265620) (jkonecny) +- Ask when removing new items in multiselection (#1265620) (jkonecny) +- Add multiselection with SHIFT key (#1265620) (jkonecny) +- Use show_arrow feature implemented in Selector (#1265620) (jkonecny) +- Add new property to show/hide arrow in Selector (#1265620) (jkonecny) +- Change selection logic when opening Page (#1265620) (jkonecny) +- Add new BasePage class (#1265620) (jkonecny) +- Add signal and methods to MountpointSelector (#1265620) (jkonecny) +- Fix errors with multiselection (#1265620) (jkonecny) +- Accordion class now process events for selectors (#1265620) (jkonecny) +- Change cammel case for accordion.py to new pep8 (jkonecny) +- Move selection logic from custom spoke to accordion (#1265620) (jkonecny) +- Modify ConfirmDeleteDialog now the checkbox is optional (#1265620) (jkonecny) +- Multiselection works in GUI with remove (#1265620) (jkonecny) +- Add multiselection to Accordion with control key (#1265620) (jkonecny) +- Remove bad translations from the source tarball. (dshea) +- Treat warnings from xgettext as errors. (dshea) +- Run translation-canary tests from make check. (dshea) +- Do not run pylint on translation-canary (dshea) +- Squashed 'translation-canary/' content from commit 5a45c19 (dshea) + +* Fri Jan 29 2016 Brian C. Lane - 24.10-1 +- Add a finished method to spokes (#1300499) (bcl) +- Handle DeviceConfiguration with con = None (#1300499) (bcl) +- Log detailed information about installed packages (bcl) +- s/KickstartValueError/KickstartParseError. (clumens) +- Move requiredDeviceSize to the main Payload class (#1297905) (dshea) + +* Fri Jan 08 2016 Brian C. Lane - 24.9-1 +- Handle unexpected DNF exit (bcl) +- Fix bad space needed messages (jkonecny) +- nosetests-3.5 is now the right version. (clumens) +- Ignore a pylint error about how we're using Popen (dshea) +- Mark an unused variable as unused (dshea) +- Ignore type-related errors for types pylint can't figure out (dshea) +- Import errors are just regular errors now (dshea) +- Replace the remaining log.warn calls with log.warning. (dshea) +- Fix an erroneously bare raise statement (dshea) +- Replace the deprecated assertEquals with assertEqual (dshea) +- Don't add a None to the list of things to unmount on ostree installs. + (clumens) + +* Wed Dec 02 2015 Brian C. Lane - 24.8-1 +- Fix pylint problems in the gui testing code. (clumens) +- Merge 9c5e02392d0401a3bd0adecedea03535595773ef into + 67b569253c724639c2490f5fab70f7111f699b3f (atodorov) +- Fix the replacement suggestion for "hostname" (dshea) +- Automatically generate sr (dshea) +- Fix PropertyNotFoundError PermHwAddress (#1269298) (jkonecny) +- Make sure python3.5 code can run in early initrd (bcl) +- Replace .delete() with .remove() in user.py (sujithpandel) +- Rename everything that still refers to LiveCD (atodorov) +- Updates to progress and storage tests (atodorov) +- Multiple changes to DogtailTestCase (atodorov) +- Move all Python files into the main gui/ directory (atodorov) +- Simplify tests by removing OutsideMixin and update Creator (atodorov) +- Modify existing tests to match latest anaconda behavior and environment + (atodorov) +- Temporary disable test code which doesn't work (atodorov) +- Make tests/gui/ execute ./anaconda from git (atodorov) +- Add window title (#1280077) (mkolman) +- Replace execReadlines with check_output in parse-kickstart_test.py (bcl) +- Fix a spelling error in the hardware error message (#1284165). (clumens) + +* Wed Nov 18 2015 Brian C. Lane - 24.7-1 +- Collect test-suite.log from all 'make check' invocations. Closes #452 + (atodorov) +- Fix parse-kickstart_test.py. (clumens) +- Remove mkdud.py. (clumens) +- Remove the kickstart_tests directory. (clumens) +- Always quote values in ifcfg- files (#1279131) (bcl) +- Include original kickstart in /root/original-ks.cfg (#1227939) (bcl) +- strip spaces from extlinux label and default (#1185624) (bcl) +- Report kernel failures during kickstart tests. (clumens) +- Make sure unicode in kickstart works. (dshea) +- Set the window icon (dshea) +- Only run space check in TUI if spokes are complete. (#1279413) + (sbueno+anaconda) +- Allow a user's primary group to be created in --groups (#1279041) (dshea) +- Remove uses of broad-except. (dshea) +- Add a test for all that container minimization stuff. (clumens) +- Use the partition command in one of the kickstart_tests. (clumens) +- Don't clear the _currentIsoFile if another iso was selected (bcl) +- makeupdates: Include utils/handle-sshpw (bcl) +- Add --sshkey to kickstart sshpw command (#1274104) (bcl) +- Split exception description from exception traceback (jkonecny) +- Show DNF exception instead of silent exit (jkonecny) +- Combine results from all gettext_tests into one log file (atodorov) +- Try to run make ci with real translations. (dshea) +- Untranslate undisplayed TreeView column headers. (dshea) +- Add a test for hidden translatable strings (dshea) +- Add the translated string to markup error messages. (dshea) +- Test glade translations by default (dshea) +- Change the way glade tests are run. (dshea) +- Remove the accelerator test. (dshea) +- Add the test lib directory to $PYTHONPATH in the commit hook (dshea) +- network: create ifcfg files in tui if needed (#1268155) (rvykydal) +- Do not limit ONBOOT default setting to url and nfs installation methods + (#1269264) (rvykydal) +- ibft: fix setting dracut boot args for static ibft nic configuration + (#1267526) (rvykydal) +- network: Don't set --device link default for hostname only network cmd + (#1272274) (rvykydal) +- network: assume --device=link as default also for ks on hd (#1085310) + (rvykydal) +- network: use ibftx interface for iSCSI from iBFT in dracut (#1077291) + (rvykydal) +- network: add s390 options to default ifcfg files (#1074570) (rvykydal) + +* Fri Nov 06 2015 Brian C. Lane - 24.6-1 +- Fix a pylint error in the previous commits. (clumens) +- Honor ANACONDA_WIDGETS_OVERRIDES (atodorov) +- Load anaconda-gtk.css from ANACONDA_DATA if specified (atodorov) +- Use the correct path for ui categories (atodorov) +- Typo fix, it's ANACONDA_WIDGETS_DATA not ANACONDA_WIDGETS_DATADIR (atodorov) +- Allow wired network properties more grid space. (dshea) +- Improve language selection at low resolutions. (dshea) +- Make reclaim work with small screens and big labels (dshea) +- allow repo with only a name if it's a pre-defined one (#1277638) (awilliam) +- Only raise thread exceptions once (#1276579) (bcl) +- Use py3.4 crypt and salt (bcl) +- Be more careful with incomplete device types (#1256582) (dshea) +- Fix an import error in rpmostreepayload.py. (clumens) +- Fix Testing docs inclusion in Sphinx (bcl) +- Ignore interfaces with invalid VLAN IDs. (dshea) +- Cleaner logging of .treeinfo return conditions in dependant function. + (riehecky) +- Update link to upstream kickstart docs (opensource) +- rpmostreepayload: Also unmount internal mounts during shutdown (walters) +- rpmostreepayload: Fix two issues with mounting (walters) +- Add a README for kickstart tests. (clumens) +- Make the documentation match the environment variable. (clumens) +- Check that cache PVs (if any) are in the VG the LV belongs to (#1263258) + (vpodzime) +- Fix the alignment of the "Label" label in custom (dshea) +- Use unsafe caching during kickstart tests. (clumens) + +* Wed Oct 28 2015 Brian C. Lane - 24.5-1 +- Improve install space required estimation (#1224048) (jkonecny) +- Update the on-disk snapshot of storage when adv. disks are added (#1267944) + (vpodzime) +- Check that ipv6 kickstart outputs the right ip= (dshea) +- Change a variable name for pylint. (dshea) - Do not run time_initialize for image and directory installations (#1274103) (bcl) -- Install input checks before modifying the user GUI (#1256065) (dshea) - -* Wed Oct 21 2015 Samantha N. Bueno - 23.19.9-1 +- Remove unused properties (dshea) +- Do not modify the kickstart user data until apply() (dshea) +- Make AdvancedUserDialog.run() more readable (dshea) +- Improve the behavior of the home directory input. (dshea) +- Stop setting inappropriate properties in ksdata. (dshea) +- Update the password strength bar during the password strength check. (dshea) +- Remove unnecessary grab_focus and set_sensitive calls (dshea) +- Use signal handlers in the user spoke more sensibly. (dshea) +- Fix potential issues with the username guesser. (dshea) +- Make kickstart tests growing LVs stricter (vpodzime) +- Point coverage.py to the full path of pyanaconda/ (atodorov) +- Don't set BOOTPROTO= when it isn't set (jbacik) - Pass strings to blockdev.dasd_format, not a DASDDevice object. (#1273553) (sbueno+anaconda) - -* Tue Oct 20 2015 Samantha N. Bueno - 23.19.8-1 +- Revert "Use yum to install the mock buildroot for now." (dshea) - decode package name for /etc/sysconfig/kernel (RHBZ #1261569) (awilliam) -- Warn user before using Delete all (jkonecny) - -* Thu Oct 15 2015 Samantha N. Bueno - 23.19.7-1 +- Add tests for the more complicated command line options (dshea) +- Store fewer kinds of things in the dirinstall option. (dshea) +- Fix the parsing of selinux=0 (#1258569) (dshea) +- Include a local $ANACONDA_DATADIR in the test environment. (dshea) +- Move the command line arguments to anaconda_argparse. (dshea) +- Don't crash while logging binary output. (dshea) +- Decode program output even if there is no output (#1273145) (dshea) +- Add a test for _run_program with binary output (dshea) +- Test execWithCapture when the command outputs nothing. (dshea) +- Fix a long line in kickstart_tests/functions.sh. (clumens) +- Merge pull request #414 from vpodzime/master-lvm_log (vpodzime) +- Save the lvm.log Blivet may produce (vpodzime) + +* Fri Oct 16 2015 Brian C. Lane - 24.4-1 +- Hide the places sidebar in the ISO chooser widget. (dshea) +- Use GtkResponseType values in the iso chooser dialog (dshea) +- Do not use deprecated getDevicesByInstance method (vtrefny) +- By default, skip those kickstart tests we know to be failing. (clumens) +- Fix pylint unused import (jkonecny) +- network: handle bridge device appearing before its connection (#1265593) + (rvykydal) +- Use $KSTEST_URL in tests that still had dl.fp.o hardcoded. (dshea) +- Support CONNECT in the test proxy server. (dshea) +- Extract the file used by liveimg as a prereq (dshea) +- Convert the proxy script to a prereq. (dshea) +- Add a prereqs function to kickstart tests. (dshea) - Fix traceback when trying to create list of unformatted DASDs. (#1268764) (sbueno+anaconda) - -* Thu Oct 08 2015 Samantha N. Bueno - 23.19.6-1 +- network: handle missing connections of a device configured in GUI better + (rvykydal) +- network: don't set NM_CONTROLLED=no for root on SAN. (rvykydal) +- Add support for other systemd units to kickstart service command (bcl) +- Merge pull request #388 from wgwoods/dd-in-initrd-fix (wwoods) +- Set the password checkbox for empty kickstart passwords. (dshea) +- Do not set the password input text with unencrypted passwords. (dshea) +- Install input checks before modifying the user GUI (#1256065) (dshea) +- Fix a lying error message in style_guide.py (dshea) +- Use "Enter" instead of "Return" for the keyboard key. (dshea) +- New Anaconda documentation - 24.3 (bcl) +- Include missing test files and scripts in Makefile.am/tarball (atodorov) +- dracut: accept inst.dd=[file:]/dd.iso (#1268792) (wwoods) - Do not override StorageChecker.errors in StorageSpoke (#1252596) (vtrefny) +- Lookup IPv6 address without brackets (#1267872) (bcl) - Mangle the boot device differently for systemd (#1241704) (dshea) - Fail the media check if the systemd service failed to start. (dshea) + +* Fri Oct 02 2015 Brian C. Lane - 24.3-1 +- Properly translate c-to-continue on the root selection screen (mkolman) +- Check minimal memory requirements properly (#1267673) (jstodola) +- Allow users to be created with an existing GID. (dshea) +- Add a test for creating a user with an existing GID. (dshea) +- Add tests for gids embmedded in the user groups list. (dshea) +- Allow the kickstart --groups list to specify GIDs. (dshea) +- Add a --groups argument to the user ks test. (dshea) +- Fix the locale pattern packages-instlangs-3 looks for. (dshea) - Raise an error if osimg cannot be found (#1248673) (bcl) - Use the bootloader raid levels for bootloader installation (#1266898) (bcl) - Use otps.display_mode during early startup (#1267140) (mkolman) -- Remove an unused import (mkolman) -- Ignore requests to create existing groups (#1261002) (dshea) +- Mount stage2 cdrom after running driver-updates (#1266478) (bcl) +- Get rid of an unused import in the user spoke. (clumens) +- Log crashes from the signal handler. (dshea) +- Save a core file when anaconda crashes. (dshea) - Keep environment selection when reentering the software spoke (#1261393) (mkolman) - Only show the user spoke if no users are specified in kickstart (#1253672) (mkolman) - -* Thu Sep 24 2015 Samantha N. Bueno - 23.19.5-1 +- Fix 'cat: /tmp/dd_disk: No such file or directory' (#1251394) (jkonecny) +- Do not display curl 404 errors that can be safely ignored (vtrefny) +- Catch blkid failure in driver-updates (#1262963) (bcl) +- Add kickstart tests for %%packages --instLangs (dshea) +- Do not display markup in showDetailedError. (dshea) +- Skip OEMDRV if interactive DD is requested (#1254270) (bcl) +- Drivers are simply under /run/install/DD-x/ (#1254270) (bcl) - Fix branding when iso is downloaded from nfs or hd (#1252756) (jkonecny) -- Fix unused import pylint error (jkonecny) +- Use yum to install the mock buildroot for now. (dshea) +- Rename the gettext tests (dshea) +- Bring back the KSTEST_HTTP_ADDON_REPO substitution in nfs-repo-and-addon.sh + (clumens) +- Run substitution checks on the right kickstart file. (clumens) +- Tell gettext that anaconda is not a GNU package. (dshea) +- Ignore environment modification warnings in docs/conf.py (dshea) +- Check for unsubstituted strings before running a test. (dshea) - Autopart use 90%% of disk capacity for required space compare (#1224048) (jkonecny) - Fix include packages install size when downloading on root (#1224048) (jkonecny) - -* Mon Sep 14 2015 Samantha N. Bueno - 23.19.4-1 -- Add missing python dependencies for requests. (#1259506) (dshea) +- Enable and improve the check for swap LV size in LVM cache kickstart tests + (vpodzime) +- make-sphinx-docs: Add modules needed to document tests (bcl) +- Add test documentation (atodorov) +- Fix how the reqpart test checks for /boot, again. (clumens) +- Add a way to get default settings when running the kickstart_tests. (clumens) +- Change how we ignore non-tests in kickstart_tests. (clumens) +- Various fixes to substitution strings in kickstart_tests. (clumens) +- Move kickstart_test .ks files to .ks.in. (clumens) + +* Fri Sep 11 2015 Brian C. Lane - 24.2-1 +- Handle driver rpms retrieved via network (#1257916) (bcl) - Fix the types passed to chown_dir_tree (#1260318) (dshea) -- Add a test for home directory reuse (#1260318) (dshea) - -* Thu Sep 10 2015 Samantha N. Bueno - 23.19.3-1 +- Add a test for home directory reuse (dshea) +- Use MDRaidArrayDevice.members instead of .devices (dshea) +- Make sure anaconda reads in ks file from OEMDRV device. (#1057271) + (sbueno+anaconda) +- Try to deal with expected errors from devicetree.populate (#1257648) + (vpodzime) +- Revert "Temporarily disable generating a coverage report." (clumens) +- Fix a DBus InvalidProperty handling (jkonecny) +- Fix another bash syntax problem in kickstart-genrules.sh (#1057271) + (sbueno+anaconda) +- Add a test for the rootpw kickstart command (dshea) +- Add tests for setRootPassword (dshea) +- Add a /boot partition to the reqpart test. (clumens) +- Fix up a statement that's not assigned to anything. (clumens) +- Temporarily disable generating a coverage report. (clumens) - Don't try to concatenate a list with a string (#1252444) (mkolman) +- Activate coverage for tests executed with sudo (atodorov) - set sysroot correctly when setting root password (#1260875) (awilliam) - -* Thu Sep 03 2015 Samantha N. Bueno - 23.19.2-1 +- Add a test for kickstarts that %%include a URL (dshea) +- Add missing python dependencies for requests. (#1259506) (dshea) +- Serve the http addon repos from the test tmpdir (dshea) +- Make make-addon-pkgs easier to use from within a test (dshea) +- Add a simple http server for use in kickstart tests. (dshea) +- Add a script to print an IP address for the host. (dshea) +- Add a cleanup hook that can be defined by kickstart tests (dshea) +- Move kickstart test support files into a separate directory. (dshea) +- Fix a python3 related error in the pre-commit hook (dshea) +- network: gui spoke TODO cleanup (rvykydal) +- libnm in spoke: add missing connection for eth device with Configure + (rvykydal) +- libnm in spoke: allow adding missing connection for eth device externally + (rvykydal) +- libnm in spoke: wait for valid state of added device before adding to list + (rvykydal) +- libnm in spoke: use libmn objects instead of names an uuids (device on/off) + (rvykydal) +- libnm in spoke: to check if device is activated just use its object + (rvykydal) +- libnm in spoke: use connnection objects instead of uuids (edit connection) + (rvykydal) +- libnm in spoke: refresh early when device is added (rvykydal) +- libnm in spoke: use connection object instead of uuid (DeviceConfiguration) + (rvykydal) +- libnm in spoke: share nm client in standalone and normal spoke (rvykydal) +- libnm in spoke: add enterprise wpa connection using libnm client (rvykydal) +- libnm in spoke: use AccessPoint object in place of ssid bytearray (rvykydal) +- libnm in spoke: delete connection using libnm client (rvykydal) +- libnm in spoke: replace python-dbus workaround calls for ap security flags + (rvykydal) +- libnm in spoke: call get_data() on ap.get_ssid() result to get ssid bytes + (rvykydal) +- libnm in spoke: showing ip configuration of a device (rvykydal) +- libnm in spoke: NMClient -> NM.Client (rvykydal) +- libnm in spoke: gi.NetworkManager -> gi.NM (rvykydal) +- libnm in spoke: Revert "Fix crash when new device appear in Welcome screen + (#1245960)" (rvykydal) +- libnm in spoke: Revert "Fix crash when connections are changing (#1245960)" + (rvykydal) +- Add an ignoredisk --drives= test. (clumens) +- Add a test for the reqpart command. (clumens) +- Grab anaconda.coverage on tests that reimplement validate(). (clumens) +- Install driver-updates (dshea) +- Fix a typo in service enablement in kickstart.py. (clumens) +- Get rid of the extraneous cats and greps in user.ks. (clumens) +- Add sshkey testing to the user kickstart_test. (clumens) +- Add a kickstart test in Arabic. (clumens) - Verify Initial Setup services are present before turning them ON/OFF (#1252444) (mkolman) - Don't crash if the Japanese PC-98 keyboard is selected (#1190589) (mkolman) -- Fix the single-spoke TUI message for Python 3. (dshea) +- Report on all local files and exclude what we don't need instead of + explicitly including paths we may not be aware of. (atodorov) +- Change "failed to download" messages from critical to warning. (clumens) +- getcode -> status_code in a live payload error message. (clumens) - Fix a bash error in kickstart-genrules.sh (#1057271) (sbueno+anaconda) +- specify if=virtio,cache=none for VM drives (atodorov) +- update the test b/c latest anaconda doesn't allow weak passwords (atodorov) +- Specify format=raw to avoid warning from qemu (atodorov) +- update for Python3 nose (atodorov) +- Add a services.sh file to match the existing services.ks. (clumens) +- Add types to all existing kickstart tests. (clumens) +- Add the ability to mark kickstart tests with a type. (clumens) - Run nm-connection-editor with the --keep-above flag (#1231856) (mkolman) + +* Mon Aug 31 2015 Brian C. Lane - 24.1-1 - Add a test for the user and group creation functions. (dshea) - Get rid of libuser. (#1255066) (dshea) +- s/$releasever/rawhide/ (clumens) +- LVM on RAID kickstart test (vpodzime) - unbuffered read in python3 only works for binary (bcl) - don't crash if no environment set in interactive (#1257036) (awilliam) +- network: compare with ssid bytes, not str (rvykydal) +- Add dependencies for running the tests/gui tests (atodorov) - Fix first run environment setup in software spoke (#1257036) (jkonecny) +- Stop pretending liveinst+rescue is supported (#1256061). (clumens) - Defer to Fedora distro-wide settings for password strength (#1250746) (dshea) +- New Anaconda documentation - 24.0 (bcl) +- Do a better job reporting failures from kickstart_tests. (clumens) +- Preserve coverage results from running the kickstart_tests. (clumens) + +* Mon Aug 24 2015 Brian C. Lane - 24.0-1 - Remove from the docs repo=hd installation with installable tree (jkonecny) - Fix a race between a window continuing and the next starting (#1004477) (dshea) - Start hubs with the buttons insensitive. (dshea) - Do not replace the standard streams if not necessary. (dshea) - Fix inst.repo=hd: is not working (#1252902) (jkonecny) +- Kickstart: Added SELinux test. (kvalek) +- Kickstart tests related to SELinux. (kvalek) +- Package install and debug message logging. (kvalek) - Don't crash if incorrect environment is set in kickstart (#1234890) (mkolman) - Fix I/O issues when anaconda is started without a locale. (dshea) - Move locale environment logic into localization.py (dshea) - -* Thu Aug 20 2015 Samantha N. Bueno - 23.19.1-1 +- network: fix configuring team in kickstart pre (#1254929) (rvykydal) +- Merge pull request #311 from atodorov/add_local_coverage (clumens) +- Merge pull request #308 from atodorov/rawhide_missing_deps (clumens) +- Enable test coverage in CI (atodorov) +- Fix the single-spoke TUI message for Python 3. (dshea) +- Merge pull request #291 from atodorov/update_coverage_switch (clumens) +- Add missing requirements (atodorov) +- Add basic kickstart tests for LVM Thin Provisioning (vpodzime) +- Use the default mirrorlist instead of fixed repo URL in kickstart tests + (vpodzime) - Destroy the keyboard layout dialog when finished (#1254150) (dshea) - Do not encode the geoloc timezone to bytes (#1240812) (dshea) +- use inst.debug as alternative option to start coverage (atodorov) + +* Mon Aug 17 2015 Brian C. Lane - 23.20-1 - Skip source url checks when network is off (#1251130) (bcl) - Don't set net.device to link if there is no ksdevice (#1085310) (bcl) - Reading carrier while link is down raises IOError (#1085310) (bcl) +- Don't write nfs repos to the target system (#1246212) (bcl) - Make sure username entered in TUI if create a user chosen. (#1249660) (sbueno+anaconda) - Write the empty dnf langpacks.conf to the right directory (#1253469) (dshea) - Add pyanaconda test for network.check_ip_address (jkonecny) - Replace IPy package by ipaddress (jkonecny) +- Correctly check return code when running rpm from makeupdates (mkolman) - Fix crash when new device appear in Welcome screen (#1245960) (jkonecny) - Fix crash when connections are changing (#1245960) (jkonecny) +- Make LVM cache kickstart tests more robust (vpodzime) - product.img buildstamp should override distribution buildstamp (#1240238) (bcl) - On incomplete ks, don't automatically proceed with install. (#1034282) (sbueno+anaconda) +- Update the translation doc with zanata branching incantations. + (sbueno+anaconda) +- Merge pull request #287 from kparal/patch-1 (clumens) +- boot-options.rst: add a note about nfsiso (kamil.paral) - Few fixes and amendments for the boot_options.rst file (vpodzime) - Prevent issues with encrypted LVs on renamed VGs (#1224045) (vpodzime) - Create and use snapshot of on-disk storage with no modifications (#1166598) @@ -403,7 +1277,10 @@ update-desktop-database &> /dev/null || : - Implement the class for storage snapshots (vpodzime) - Prevent any changes in the StorageSpoke if just going back (vpodzime) - Make StorageSpoke's on_back_clicked less complicated (vpodzime) -- Change zanata.xml to match new f23-branch name. (sbueno+anaconda) +- Add kickstart tests for the LVM cache kickstart support (vpodzime) +- Disable packages-multilib, for now. (clumens) +- Make sure the liveimg test shuts down when it finishes. (clumens) +- Change how success is checked for the basic-ostree test. (clumens) * Fri Aug 07 2015 Brian C. Lane - 23.19-1 - Add basic support for LVM cache creation in kickstart (vpodzime) @@ -1023,743 +1900,3 @@ update-desktop-database &> /dev/null || : - Use a simple ExtendAction for add_rpms option. (amulhern) - Fix log message formating (mkolman) - Don't clear nonexistent DNF package download location (#1193121) (mkolman) - -* Mon Feb 16 2015 Brian C. Lane - 22.20-1 -- Make range usage Python 3 compatible (#1014220) (mkolman) -- Make map() usage Python 3 compatible (#1014220) (mkolman) -- Make the iter*() dictionary methods Python 3 compatible (#1014220) (mkolman) -- Remove the autopart.py module from POTFILES.in (vpodzime) -- Adapt to autopart and installation-specific code move in blivet (#1192702) - (vpodzime) -- Revert "Move autopart functionality to anaconda" (vpodzime) - -* Fri Feb 13 2015 Brian C. Lane - 22.19-1 -- Make sure yum is included in the packageset for yumpayload (#1152753) (bcl) -- Tweak parallel args. (clumens) -- Remove the Encoding entry from the .desktop file (dshea) -- Add an option to startProgram to not reset the locale (dshea) -- Set $LIBUSER_CONF early (dshea) -- Do not set $TZ (dshea) -- Assume that a bunch of digits in a version number is a timestamp (dshea) -- Avoid setting $LANG and $LANGUAGE, except where we can't (dshea) -- Add a parameter to iutil.startProgram to extend the environment (dshea) -- Add a method to set environment variables for child processes (dshea) -- Set $DISPLAY before threads are started. (dshea) -- Add a pylint module to look for modifications to the environment (dshea) -- Remotely do kickstart tests as a kstest user instead of root. (clumens) -- Add some documentation. (clumens) -- Do all package/group checking in %%post to save a reboot. (clumens) -- Support kickstart test jobs out to multiple computers with parallel. - (clumens) -- Make it possible to ignore individual newly added dependencies (mkolman) -- Remove the old_tests directory (bcl) -- Use /usr/bin/python2 in scripts (bcl) -- Cleanup some pylint errors in analog (bcl) - -* Fri Feb 06 2015 Brian C. Lane - 22.18-1 -- dracut needs iscsi_firmware cmdline arg (#1185792) (bcl) -- Clear the default titlebar text (mkolman) -- Move the pygobject3 dependency to the core package (#1188850) (mkolman) -- Bump the livecd making timeout to 90 minutes. (clumens) -- If a VM isn't going to finish in 60 minutes, it likely isn't going to finish. - (clumens) -- Check that package globs install more than just the first package. (dshea) -- Remove some stray parenthesis (#1188618) (dshea) -- Replace urllib with python-requests for network access (#1014220) (mkolman) -- The repo has moved to github, so reflect that in the spec. (clumens) -- Fix pylint problems with the autopart commit. (clumens) -- network: adapt to NM fixing virtual device disconnection (#1084953) - (rvykydal) -- Replace xrange() with range() (vpodzime) -- Move autopart functionality to anaconda (vpodzime) - -* Fri Jan 30 2015 Brian C. Lane - 22.17-1 -- Fix pylint complaints about log lines (bcl) -- Add JENKINS_PROXY support to makebumpver (bcl) -- Copy the kickstart package tests for testing with yum (bcl) -- Pass multiple args to runone in run_kickstart_tests.sh (bcl) -- Ignore some accelerator collisions on the filter dialog. (clumens) -- Remove an unused variable. (clumens) -- network: fix a typo making creating virtual devices in %%pre fail (#1075195) - (rvykydal) -- network: support for bridge, require pykickstart with the support (#1075195) - (rvykydal) -- network: Catch exception from NM failing to create a bridge device (#1075195) - (rvykydal) -- network: add bridge support for kickstart %%pre phase (#1075195) (rvykydal) -- network: generate kickstart commands for bridge devices (#1075195) (rvykydal) -- network: add bridge support to kickstart (#1075195) (rvykydal) -- network: support for adding bridge devices (#1075195) (rvykydal) -- network: display bridge devices in status (#1075195) (rvykydal) -- Fix position of Refresh List button in filter spoke (#1065716) (rvykydal) -- Fix accelerator collision of Refresh button (#1065716) (rvykydal) -- gui: add Refresh button to network storage UI (#1065716) (rvykydal) -- iscsi: display portal (address:port) of node in node list (#1114820) - (rvykydal) -- iscsi: when logging into nodes consider ip:port of node (#1114820) (rvykydal) -- network: display only actual fqdn of ip we offer for vnc connection - (#1089429) (rvykydal) -- network: GUI: reactivate connection automatically after configuration - (#1033063) (rvykydal) -- Don't traceback if connection does not have read-only setting (#1158919) - (rvykydal) -- network: enable NM ibft plugin only for ip=ibft boot option (#804511) - (rvykydal) -- network: add support for vlan tag in iBFT (#804511) (rvykydal) -- network: pass team opts to dracut for netroot (#1075666) (rvykydal) -- Remove unused version macros from anaconda.spec.in (vpodzime) -- Don't process continue-clicked events for windows that aren't shown. - (clumens) -- Add back an empty %%files for the anaconda metapackage (dshea) -- Do not include dd_list and dd_extract in the anaconda-core package. (clumens) -- Replace long usage with int (#1014220) (mkolman) -- Do not use sys.exc_type (#1014220) (mkolman) -- Replace StandardError with Exception (#1014220) (mkolman) -- Make filter() usage Python 3 compatible (#1014220) (mkolman) -- network: add teamd package if team is used during installation (#1185670) - (rvykydal) -- network: add NetworkManager-team (#1182633) (rvykydal) -- Don't allow weak LUKS passwords either (bcl) -- Use %%license in anaconda.spec.in (bcl) -- Don't allow weak passwords (text mode). (sbueno+anaconda) -- Remove the press done twice to exit text (bcl) -- Don't allow weak user passwords (bcl) -- Don't allow weak root passwords (bcl) -- Increase minimum password length to 8 (bcl) -- Remove the unused re import from nm.py. (clumens) -- Remove IPy from nm.py for python 23 compatibility. (rvykydal) -- Show empty VGs in the custom spoke. (dlehman) -- Use the rpm database to find kernel package versions (#1074358) (dshea) -- Check whether a payload has an instclass (#1185588) (dshea) -- Remove the unused indexed_dict module (vpodzime) -- Use threadMgr to wait for exception handling to finish (vpodzime) -- Add a method for waiting for error handling to finish (vpodzime) -- Move HW errors processing to the code that runs in the main thread (vpodzime) -- Replace python-urlgrabber with python-requests (#1141242) (mkolman) - -* Fri Jan 23 2015 Brian C. Lane - 22.16-1 -- Add some tests for kickstart and package selection for dnf. (clumens) -- Double quote when printing error results from a kickstart test. (clumens) -- Restrict payload kernel versions to kernels in the payload (#1074358) (dshea) -- Actually add the new definition of an already-defined repo. (clumens) -- Move hdiso handling code to PackagePayload (#1180765) (dshea) -- Actually install the metacity theme data (dshea) -- Show the event box immediately when setting infobar messages. (dshea) -- Move environment group selection logic to PackagePayload (#1179362) (dshea) -- Add a parameter to environmentGroups for wheter to include optionlist. - (dshea) -- Remove unused methods for deselecting environments (dshea) - -* Fri Jan 16 2015 Brian C. Lane - 22.15-1 -- makebumpver needs to know about anaconda-1 transifex name (bcl) -- Switch to temporary transifex branch (bcl) -- Fix an issue in the previous pre-existing repo kickstart patch. (clumens) -- Require the livecd target to be larger now. (clumens) -- Hook up jenkins support into makebumpver. (clumens) -- Change default console font to eurlatgr (myllynen) -- Update help text for the nodnf option (mkolman) -- Run AnacondaExceptionHandler in cmdline mode (bcl) -- Install a metacity theme to remove the titlebar. (dshea) -- Move metacity gsettings overrides into anaconda (dshea) -- Maximize anaconda instead of running fullscreen (#1164457) (dshea) -- Use a formatter on remotelog lines (bcl) -- Include NetworkManager-glib in anaconda-core (bcl) -- Make colon optional while adding iSCSI Initiator Name (sujithpshankar) -- If using pre-existing, no size needs to be specified in ksdata (#1172172) - (amulhern) -- Add support for sending logs to a remote host with --remotelog (bcl) -- Implement askmethod in dnfpayload (dshea) -- Add an installclass property for the default package environment (#1175826) - (dshea) -- Fix the FIXME re: tui default software selection (dshea) -- Add missing translation contexts for TUI navigation keys (dshea) -- Translate 'c' in the tui software spoke (dshea) -- Expect addons to have categories for both GUI and TUI (vpodzime) -- Remove an unused import in pyanaconda/ui/__init__.py (vpodzime) - -* Fri Jan 09 2015 Brian C. Lane - 22.14-1 -- Add error checks to liveimg mount code (#1178703) (bcl) -- Switch kickstart tests to doing VNC instead of graphical. (clumens) -- Updates for new Size.convertTo() spec. (amulhern) -- Force a background in the main GtkBox in anaconda windows. (dshea) -- Animate the screen transitions. (dshea) -- Implement DNFPayload.environmentOptionIsDefault (#1179905) (dshea) -- Remove the directory dnf downloaded packages into. (clumens) -- Allow specifying pre-defined repos via kickstart with dnf backend (#1177988). - (clumens) -- Get rid of unnecessary python disable-msg in zfcp spoke. (sbueno+anaconda) -- Fix typo in commit 472be66b2af2af69e7eac15ec9c94ccc818e12b5. (dlehman) -- Fix some pylint errors in the zfcp panel. (sbueno+anaconda) -- Fix an accelerator collision found on the filter page. (sbueno+anaconda) -- Fix some issues pylint found. (sbueno+anaconda) -- Show disk paths on Other page in advstorage. (sbueno+anaconda) -- Don't treat the baserepo as special when gathering metadata (#1177502) - (dshea) -- Make dnf._base and dnf._base.comps always available. (dshea) -- Remove the checks for whether dnf and rpm were imported (dshea) -- Remove obsolete packaging code. (dshea) -- Do not bypass name setters in the custom spoke. (#1138370) (dlehman) -- Preserve kickstart url behavior for mirrorlist (#1109933) (bcl) -- Use a backslash to escape nfs spaces instead of x20 (#1109933) (bcl) -- Add missing translation context for Add ECKD DASD button in advstorage. - (sbueno+anaconda) -- Add translation contexts for z and zfcp panel in advstorage. - (sbueno+anaconda) -- Convert devices size to str for GUI for zFCP devices (amulhern) -- Fix string formatting of zFCP devices. (sbueno+anaconda) -- Fix the way zFCP devices are displayed in storage spoke. (#1024902) - (sbueno+anaconda) -- Show labels on Add zFCP dialog. (sbueno+anaconda) -- Fix failure to search by LUN in advanced storage spoke. (sbueno+anaconda) -- Get rid of the clear button in advanced storage spoke. (sbueno+anaconda) -- Fix up the z Panel in advanced storage. (sbueno+anaconda) -- Add support for adding zFCP devices in the GUI (sbueno+anaconda) -- Remove DirtyFSError related callbacks and entries. (amulhern) -- Remove allowDirty parameter from mountExistingSystem() call. (amulhern) -- Remove old workaround for missing EFI bits. (dmarlin) -- Wait for payload thread in TUI software spoke. (#1178214) (sbueno+anaconda) -- Start the network before the display (#1167103) (dshea) - -* Fri Dec 19 2014 Brian C. Lane - 22.13-1 -- Print the result to the log, not the variable name. (clumens) -- Ellipsize comboboxes (#1170275) (dshea) -- Allow the columns of the container combo box to flow (#1170275) (dshea) -- Allow specifying how much from kickstart_tests to keep. (clumens) -- Fix up two problems in run_kickstart_tests.sh. (clumens) -- Fix detecting errors in groups-and-envs-1.ks. (clumens) -- Add a network command to the various kickstart test ks files. (clumens) -- Reorganize run_kickstart_tests.sh a bit to use parallel. (clumens) -- Use the anaconda-user-help package for help content (mkolman) -- Fix which TUI field is being checked for which input (#1169533) (dshea) -- Fix pylint-reported issues in RPMOSTreePayload (vpodzime) -- rpmostreepayload: Rework remote add handling (walters) -- Remove Requires: python-nss (vpodzime) -- If there's no boot.iso, skip the kickstart tests. (clumens) -- Test that a kickstart file with both an environment and group installs both. - (clumens) -- Move the ostree test out of its own directory. (clumens) -- Add a general-purpose kickstart-driven testing setup. (clumens) -- Move the pykickstart version test into a different subdirectory. (clumens) -- Really hide and show passphrase warnings (#1162828) (dshea) -- Unsetup the payload on the way out of anaconda (#1164577) (dshea) -- Beware of 0 being the same bool value as None when setting time (vpodzime) -- Fix the last member of the struct_time struct (vpodzime) -- Use a flag to determine if the datetime spoke is shown (vpodzime) -- Put AM/PM label and buttons in a revealer and hide/unhide them (vpodzime) -- Fix issues with the date&time not being updated on timezone changes - (vpodzime) -- Fix the way we create the list of DASDs needing dasdfmt. (#1073982) - (sbueno+anaconda) -- Fix threading issues for dasdfmt in gui storage. (#1073982) (sbueno+anaconda) -- Add sshkey kickstart command (bcl) -- Skip setting up env and groups in software spoke for ks (#1173350) (bcl) -- Add missing dnf package selection support (#1169056) (bcl) -- Add variable substitution to DNF (#1164803) (bcl) -- Simplify and robustify handling of fstype combo box. (amulhern) -- Fix warnings about the default parameter that gdk deprecated (dshea) -- Remove the color override from MountpointSelector. (dshea) -- Move the layout indicator color to css and fix the colors (dshea) -- Don't crash in pre-commit if no files changed (dshea) -- Make the Selected Disks and Configure Mount Point dialogs wider (#1171834). - (clumens) -- Sync up the Selected Disks and Configure Mount Points dialogs (#1171838). - (clumens) -- Make sure /boot is not LVM LV if we're on s390x (#873135) (sbueno+anaconda) -- Only show the "SYSTEM" heading if there are data mount points under it. - (clumens) -- Remove an unused import in rpmostreepayload.py. (clumens) -- Use DNF by default (#1156483) (mkolman) -- Check system-release for whether to enable betanag or not (#1168829). - (clumens) -- rpmostreepayload: Avoid shutil.copytree in favor of cp -r to fix symlinks - (walters) -- Look for Requires: and BuildRequires: at the front of a line. (clumens) -- Don't attempt to install anaconda packages from the install-requires target. - (clumens) -- Remove _assureLogoImage (dshea) -- Add a stylesheet property to BaseInstallClass (dshea) -- Fix EOF error that occurs if user input required in x3270. (#1171135) - (jstodola) -- Print an error when the kickstart file is missing (bcl) -- Remove UserInterface.basepath and UserInterface.basemask definitions. - (amulhern) -- Remove pointless overrides identified by the pointless override checker. - (amulhern) -- Add a simple pointless-override checker to pylint checkers. (amulhern) - -* Thu Dec 04 2014 Brian C. Lane - 22.12-1 -- add code so that initramfs created for rescue kernel (#1170589) (gczarcinski) -- Start vncconfig for cutNpaste (hamzy) -- Handle unstaged changes in the pre-commit hook. (dshea) -- Use git status -z (dshea) -- Make Python's default encoding detection work on Live installations - (#1169019) (vpodzime) -- Force translation files download instead of skipping them (#1169023) - (vpodzime) -- Completely disable storage tests for the moment. (clumens) -- datetime_spoke: Fix warnings about removing nonexistent source (walters) -- Temporarily disable the BTRFSOnNonBTRFSComponent test. (clumens) -- Remove a slightly lighter grey background from the center of the hubs. - (clumens) -- Actually fix the message dropping commit. (clumens) -- Make sure storage info bar is displayed (#1166730) (bcl) -- Clear Update Settings when Done clicked (#1167014) (bcl) -- Fix PWQError issues. (sbueno+anaconda) -- network: Add some doc strings (walters) -- It's spoke.title, not spoke.name (#1167036). (clumens) - -* Fri Nov 21 2014 Brian C. Lane - 22.11-1 -- Skip tui askvnc reboot for dirinstall (#1164254) (bcl) -- If a message is for a spoke not on the current hub, throw it away. (clumens) -- Find storage test cases automatically. (clumens) -- Add new storage test cases that reuse results of earlier autopart runs. - (clumens) -- Support high contrast mode in fedora-welcome (#1160499) (dshea) -- How the GUI test suite disk is displayed has changed. (clumens) -- do not delete liveimg --url=file:/// file (gczarcinski) -- Add support for doing a liveimg kickstart with local file (#1140358) (bcl) -- Create missing parent directories for user's home directory (#1163775) (bcl) -- Related bug can have different fixed-in and state (bcl) -- Provide useful hints on TTY1 during the installation (mkolman) -- Decrease memory requirements on gui tests, and make that attr private. - (clumens) -- Don't use blivet in the gui tests. (clumens) -- Use MiB/GiB instead of MB/GB in GUI tests. (clumens) -- Make the No Space dialog look less terrible. (clumens) -- Add a test case where it's impossible to reclaim. (clumens) -- Use blivet's Size class instead of ints and such. (clumens) -- Get the gui tests running in parallel. (clumens) -- Add a basic test of the reclaim dialog. (clumens) -- Make images in raw format instead of qcow2. (clumens) -- Allow specifying which of the GUI tests you want to run. (clumens) -- Check if we read something when emptying stdin queue (vpodzime) -- Require min entropy for 'part --encrypted' devices (#1162695) (vpodzime) -- Don't rely on terminal attributes being configurable (#1162702) (vpodzime) -- Check for a GLib source ID of None in unwatchAllProcesses. (dshea) -- Disable payloads that failed to setup (#1162732) (dshea) -- Only enable non-interactive yum plugins (#1111535) (dshea) -- Add a placeholder for a product-specific logo (dshea) -- Load a stylesheet from product.img (dshea) -- Fix make distcheck (mkolman) -- Include help content in the Anaconda tarball (mkolman) -- Fix typo causing traceback when NTP is turned ON/OFF (vpodzime) -- Use /var/tmp for the temp directory when installing anaconda. (clumens) -- Prevent tb on s390x when de-selecting a DASD and doing custom part. - (sbueno+anaconda) -- Revert "Revert productName repo name change (#1128474)" (bcl) -- Remove a comment that is a blatant lie. (clumens) -- Fix an environment variable setting in the test environment. (clumens) -- Update the background image paths used in Fedora. (dshea) -- Add a pylint module to detect uses of interruptible system calls. (dshea) -- Wrap interruptible system calls in a loop (#1160041) (dshea) -- Unpack the callback data given to us by blivet (vpodzime) -- Add timeout to callbacks waiting for enough entropy (#1073679) (vpodzime) - -* Tue Nov 04 2014 Brian C. Lane - 22.10-1 -- Remove gui, install, and ostree tests from TESTS. (clumens) -- Update the ostree test for the new ostree+grub patches. (clumens) -- Add a timeout when the ostree test checks for proper booting. (clumens) -- bootloader: Bridge efi_dir configuration earlier for rpmostreepayload - (walters) -- rpmostreepayload: Handle grub2+EFI layout (walters) -- rpmostreepayload: Copy all subdirectories of /usr/lib/ostree-boot (walters) -- Handle the case of rpmostreepayload + GRUB2 (walters) -- Test adding, removing, and reordering keyboard layouts. (clumens) -- Test displaying the help viewer on every screen. (clumens) -- Add functions to UITestCase to grab the contents of a view. (clumens) -- Extend the keyboard GUI test to test adding layout switching. (clumens) -- Add checks for selected language/locale on the welcome screen. (clumens) -- Catch EOFError in raw_input (#1158841) (bcl) -- Ensure we are specifying sensible target sizes for resize. (#1120964) - (dlehman) -- Set the autopart fstype for boot too (#1112697) (bcl) -- Ensure we are specifying sensible target sizes for resize. (#1120964) - (dlehman) -- Rework the placement of items on hubs. (dshea) -- Lightly rearrange the nav_area (dshea) -- Do not install interactive exception handler in cmdline mode (#1155979) - (vpodzime) -- Remove dmidecode from Requires: (vpodzime) -- Wait until all spokes are setup before updating continue button (bcl) -- Allow adding prepboot to a blank disk in custom (#1155660) (bcl) -- Make anaconda more scrollable (#1135024) (dshea) -- Remove unused imports (vpodzime) -- Just preserve the %%addon header args if an addon is missing (#1155026) - (vpodzime) -- Add a test to verify the help dialog pops up. (clumens) -- Look up most widgets relative to the currently displayed screen. (clumens) -- Make a few more updates for labels that have changed in the GUI. (clumens) -- Warn users about liveinst usage of --updates (#1153550) (bcl) -- Fix handling of md fwraid names in kickstart bootloader command. (#1156354) - (dlehman) -- Use an empty string for no root password instead of None (#1155576) (dshea) -- Don't allow related bugs without acks (bcl) -- Fix switching environments when no environment is selected (#1018226) (dshea) -- Make size_from_input() and size_from_entry() methods handier. (amulhern) -- Changes around handling of size entries in custom spoke. (amulhern) -- network: handle dbus UnknownMethod exception on invalid objects (#1061796) - (rvykydal) - -* Wed Oct 22 2014 Brian C. Lane - 22.9-1 -- When I renamed the date & time spoke, I missed one string. (clumens) -- Fix two more problems with spoke selectors in GUI testing. (clumens) -- Fix the GRUB raid1 tests (dshea) -- Add syslinux to the packages in the gui_testing kickstart file, too. - (clumens) -- Update the gui_testing kickstart file for productization changes. (clumens) -- Update checkSizes to work in terms of Size objects (#1129629). (clumens) -- Install grub to all disks in a btrfs raid1 /boot (#989644) (dshea) -- Really fix issue with starting in cmdline mode on s390x. (sbueno+anaconda) -- The network spoke's title has changed. Reflect that in the test. (clumens) -- Grab memory.dat from running the GUI test. (clumens) -- Don't panic prematurely on a missing size (#1154190) (amulhern) -- Fix more messages the new pylint found. (clumens) -- dracut/save-initramfs.sh: don't save /tmp (wwoods) -- Get rid of some unnecessary text from dasdfmt dialog. (sbueno+anaconda) -- Quit if no device type name selected. (amulhern) -- Fix stray comment. (amulhern) -- If there's no attached ANACTEST device, don't attempt to mount and run it. - (clumens) -- Fix a spelling error (#1153672) (dshea) -- Log when using updates from /tmp/updates/ (bcl) -- Fix # handling in SimpleConfigFile (#1045687) (bcl) -- Unconditionally clear the process handle when nm-c-e exits (#1132645) (dshea) -- Remove the code that reads /tmp/vncshell.pid. (dshea) -- Rewrite _bound_size() to bound_size() in storage_utils.py (amulhern) -- Changes for scheduling size change on an existing device (#1076055) - (amulhern) -- Remove too strict condition for changing size (#1076055) (amulhern) -- Omit calculation and use of active_dev_type. (amulhern) -- Add a method that extracts device type name from combo box (amulhern) -- Don't pass use_dev around to internal methods. (amulhern) -- Check identity, not equality, for RaidLevel objects. (amulhern) -- Run restorecon on /etc/hostname (#1133368) (bcl) -- Add authconfig and firewalld packages when used in ks (#1147687) (bcl) -- Allow kickstart with no method (#972265) (bcl) -- Fix a typo from 73d3a8e5. (sbueno+anaconda) -- Respect both ways how to disable bootloader installation (vpodzime) -- Fix a bug unmounting /boot on efi+atomic installs. (clumens) -- Refactor handling of fsCombo considerations. (amulhern) -- Be more restrictive displaying btrfs device type. (amulhern) -- Get rid of unnecessary raid_level variable (amulhern) -- Use Size, not int, for size (#1076055) (amulhern) -- Remove an unused import (dshea) -- Don't automatically select environments for kickstart installs (#1018226) - (dshea) -- Initialize the GUI lock in a way that doesn't break the API (dshea) -- Don't check enabledPlugins if plugins are not yet enabled (#1142544) (dshea) -- Add transifex branch check to makebumpver (bcl) -- Get rid of an unused variable in the localization test. (clumens) -- Don't strip accents from the user-inputted keyboard string (dshea) -- Convert strings to unicode in have_word_match (#1146581) (dshea) -- Use translated versions of the AM/PM strings consistently (vpodzime) -- Import GUI-specific stuff only when running GUI in entropy handling - (vpodzime) -- Always store the information about display mode in ksdata (vpodzime) -- Connect signals to handlers for day/month/year changes (vpodzime) -- Switch to using the new help content path (#1072033) (mkolman) -- Remove unused variables in the datetime_spoke.py module (vpodzime) -- Add nombr to anaconda to suppress updating MBR (#886502) (gczarcinski) -- Make the date format locale-dependent in our GUI (#1044233) (vpodzime) -- A function for resolving date format and order (vpodzime) -- Make device/fs type comboboxes take less space (vpodzime) -- Skip running efibootmgr for noefi mode (#1047904) (bcl) -- Fix a race between checking for Gtk.main_level and running Gtk.main (dshea) -- Allow recursive lightbox calls (#1147337) (dshea) -- Disable the ntp service with --nontp (#1135768) (dshea) - -* Wed Oct 08 2014 Brian C. Lane - 22.8-1 -- Add a test case for if all anaconda's Requires exist. (clumens) -- Only allow one anaconda instance (#1146735) (dshea) -- Ignore partition start if there is a biosboot partition (#1044849) (bcl) -- Remove duplicates when adding new devices (#887526) (bcl) -- Trim changelog entries from spec file (bcl) -- We now need to specify an epoch for the python-blivet version requires. - (clumens) -- Remove the last references to tzmapdata (dshea) -- Add VNC to the ostree test arguments. (clumens) -- Fix autotools rules to properly include help placeholders (#1072033) - (mkolman) -- Ignore an accelerator conflict between two Modify labels. (clumens) -- s390x: show dialog if kernel cmdline in zipl.conf is too long. - (sbueno+anaconda) -- Convert process watching to use GLib before we start a main loop (dshea) -- Convert python signal handlers to GLib signal handlers (dshea) -- Reorganize the right side of the Custom spoke (#1094856) (vpodzime) -- Graphically handle errors arising from ostree repo pull problems. (clumens) -- Fix file name of the entropy dialog in POTFILES.in (vpodzime) -- Add support for thin pool profile specification in kickstart (vpodzime) -- Require minimum random data entropy when creating LUKS (#1073679) (vpodzime) -- Give blivet callbacks for reporting partitioning progress (vpodzime) -- Really exit when "Exit installer" in the error dialog is clicked (vpodzime) -- NM-wifi is missing on s390(x) (dan) - -* Tue Sep 30 2014 Brian C. Lane - 22.7-1 -- Fix Welcome spoke not showing up during kickstart installation (#1147943) - (mkolman) -- Don't allow /boot on lvm on s390x. (sbueno+anaconda) -- Handle failures to instantiate storage devices when parsing kickstart. - (dlehman) -- Add the new langsupport.py TUI spoke to POTFILES.in. (clumens) -- Remove the now-unused imports of storageInitialize. (clumens) -- Add support for language selection in text mode. (sbueno+anaconda) -- packaging: handle new NFS installation source with inst.stage2=nfs:... - (wwoods) -- Allow cdrom-swapping when doing "inst.ks=cdrom[:...]" (wwoods) -- anaconda-lib.sh: add tell_user() and dev_is_cdrom() (wwoods) -- Don't force a user to return to the storage spoke after dasdfmt - (sbueno+anaconda) -- Don't run storageInitialize after dasdfmt (sbueno+anaconda) -- Shut up, parallel (dshea) -- Really fix unexpected exits in execReadlines (dshea) -- Add a context manager for executing code while UI signals are blocked. - (clumens) -- Avoid the possibility of size variables being unset (#1146585) (dshea) -- s390x: Apply disk selection before dasdfmt to preserve data. - (sbueno+anaconda) -- Fix a bad use of WIFSIGNALED (dshea) -- Handle 0's returned by Gdk (dshea) -- Adapt to corrected interpetation of logvol --percent. (dlehman) -- Always use iutil to start processes. (dshea) -- Move the X startup logic to iutil (dshea) -- Move process watching to iutil. (dshea) -- Close file descriptors while daemonizing auditd (dshea) -- Add an option to only capture stdout with execWithCapture (dshea) -- Simplify iutil.execReadlines. (dshea) -- Add close_fds to the Popen call. (dshea) -- Add an option to startProgram to reset signal handlers. (dshea) -- Add a method startProgram to handle process starting (dshea) -- Lock program_log_lock closer to where the log is written. (dshea) -- Record early crashes to ipmi (dshea) -- Clear the list of watched PIDs before exiting. (dshea) -- Remove the exitCode parameter from exitHandler. (dshea) -- Warn about uses of the string module. (dshea) -- Import _ from the i18n module instead of hand-crafting a copy of it (dshea) -- Import gettext in iutil instead of passing the module reference to iutil - (dshea) -- Fix a typo in a comment (dshea) -- When running on HiDPI monitors, scale anaconda by a factor of 2 (dshea) -- Sort the contents of the file system type combo box. (clumens) -- Remove the border on the layout testing box. (clumens) -- Explain what the IPMI constants mean. (clumens) -- Don't attempt terminal size detection on the s390 (#1145065) (mkolman) -- Don't show the Add DASD button unless on s390x. (sbueno+anaconda) -- Don't show the Add DASD button unless on s390x. (sbueno+anaconda) -- Preserve network args on s390x. (sbueno+anaconda) - -* Fri Sep 19 2014 Brian C. Lane - 22.6-1 -- Don't call storage.write for dirinstall (#1120206) (bcl) -- Fix pylint warning from a recent commit. (dlehman) -- Fix the link to the help-button-clicked signal (dshea) -- Assign mnemonics to two checkboxes on the user spoke that didn't have them. - (clumens) -- Remove "MB" from the size string on the HDISO combo box. (clumens) -- Use _Cancel and _Continue mnemonics on these two screens. (clumens) -- Rename to be the TIME & DATE spoke. (clumens) -- Ok -> OK on the proxy dialog. (clumens) -- Handle cancellation of new container creation. (dlehman) -- Reflect previous custom/autopart selection in the storage spoke. (dlehman) -- Clear out custom storage ksdata after first attempt to apply it. (dlehman) -- Pass size as Size when adjusting container after device removal. (#1141707) - (dlehman) -- Set flags.rescue_mode not anaconda.rescue (#1143056) (amulhern) -- Split localed's converted layouts and variants (#1073825) (vpodzime) -- Rename variable to not with a built-in (mkolman) -- Create free space snapshot before doing custom->autopart (vpodzime) -- Deprecate RUNKS cmdline option. (sbueno+anaconda) -- Show help also when alt+F1 is pressed (mkolman) -- Support display of the custom mnemonics on the help button (mkolman) -- Activate the built-in help when F1 is pressed (mkolman) -- Specify help file names for hubs and spokes (mkolman) -- Add a help button to every Anaconda screen (mkolman) -- Don't call BusyCursor before Gdk is setup (#1078868) (bcl) -- Fix SELINUX_DEFAULT import (#1137049) (bcl) -- Catch and rethrow BTRFSValueError as KickstartException (#1019685) (amulhern) -- Bump version so BTRFSValueError is found (#1019685) (amulhern) -- Don't change langpacks config of installer environment (#1066017) (rvykydal) -- network: fix typo 'Private ksy pasword' (#1120374) (rvykydal) -- Fix up a string style issue found in the last network commits. (clumens) -- network: WPA Enterprise: don't ask twice for password (#1120374) (rvykydal) -- network: add support for WPA Enterprise (#1120374) (rvykydal) -- network: add s390 network ifcfg options also for bond slaves (#1090558) - (rvykydal) -- network: copy resolv.conf to chroot before installing packages (#1048520) - (rvykydal) -- network: don't crash, just log for unrecognized bond options (#1039006) - (rvykydal) -- network: don't traceback on invalid team options (#1114282) (rvykydal) -- network: don't write HWADDR in ifcfgs generated by kickstart (#1130042) - (rvykydal) -- Re-order the tz's in text mode to mirror the graphical order. - (sbueno+anaconda) -- Apply a better check for whether to fail if authconfig is missing. (clumens) -- driver-updates: fix backspace/delete in dd menus (#1080380) (wwoods) -- Fix an issue with bad NFS info specified in source spoke. (sbueno+anaconda) -- Fix the SIGSEGV handler (dshea) -- Remove argument handling from methods without arguments (dshea) -- Warn if software selection size exceeds available space. (sbueno+anaconda) -- X doesn't start when making the livecd on the GUI test either. (clumens) -- Handle spaces in inst.repo, kickstart nfs, and url commands (#1109933) (bcl) -- Fix that urllib2 problem more thoroughly. (clumens) -- Fix a problem where urllib2 is not getting pulled into the initrd. (clumens) -- Specify thin pool metadata/chunk size only if given by user (#1140635) - (vpodzime) -- Fix q for quit issue in text mode (#997405) (sbueno+anaconda) -- Additional message if kickstart was used but did not finish (#1117908) - (amulhern) -- Move some statically detectable kickstart errors out of anaconda (#1117908) - (amulhern) -- Use only the digits from productVersion (bcl) -- If a kickstart installation stops because it doesn't know something, log - that. (clumens) -- Don't care about crash args in bootloader (#1116323) (vpodzime) - -* Wed Sep 10 2014 Brian C. Lane - 22.5-1 -- Fix noselinux cmdline default (#1137049) (bcl) -- Revert productName repo name change (#1128474) (bcl) -- Remove the --disable-overwrite parameter for the Transifex client (mkolman) -- Do not try to disable no firstboot services (#1139621) (vpodzime) -- Snapshot free space after clearpart for swap suggestion (#1132436) (vpodzime) -- Really fix an enlightbox call. (dshea) -- Correct issues merged from rhel-7 (dshea) -- A couple updates to installclasses. (clumens) -- Clear the kickstart password if cleared by the user (#1133185) (dshea) -- Change the accelerator key for Add DASD label. (sbueno+anaconda) -- Add dialog box for adding DASDs. (sbueno+anaconda) -- Add a button for adding an ECKD DASD. (sbueno+anaconda) -- Let finding install classes be more flexible for Fedora (#1138820). (clumens) -- fix inst.virtiolog (#1074499) (wwoods) -- Display container sizes to just two places, as well. (clumens) -- Fix two minor things on the source spoke. (clumens) -- border_width=5 -> border_width=6 in dasdfmt.glade. (clumens) -- Use first part of Product for UEFI entry (#1128474) (bcl) -- We can't pass "text" in the ostree .ks file because lmc doesn't like that. - (clumens) -- Remove inactive languages from LINGUAS. (dshea) -- Do the ostree test in text mode for now. (clumens) -- Skip nvram update on ppc64 image/dir installations (#1136486) (bcl) -- Use first part of Product as repo name (#1128474) (bcl) -- makeupdates: Report git diff errors (bcl) -- For yum-based installs, move the progress bar while packages are installing. - (clumens) -- Remove the mnemonics from the custom part toolbar. (clumens) -- Remove references to ia64. (clumens) -- Change a confusing string in TUI NFS configuration screen. (#1057690) - (sbueno+anaconda) -- Fix two problems with the volume label and combo on custom partitioning. - (clumens) -- Disable the Modify SW link on livecd installs (#1133726). (clumens) -- Require dmidecode for ARM (#1134651, jdisnard). (clumens) -- Require a larger /boot (#1129629). (clumens) -- Use suggested-action on more buttons (#1131254) (dshea) -- CmdlineError should exit with a 1 (bcl) -- Let gtk determine the allocation for overlays. (dshea) - -* Wed Aug 27 2014 Brian C. Lane - 22.4-1 -- jwb would like us to be clear that bugs could be the system firmware... - (pjones) -- Fix installing from a second iso (#1040722) (bcl) -- Remove anaconda_make_pixbuf (dshea) -- Trick automake into taking our wildcards (dshea) -- Distribute the right docs files (vpodzime) -- Require anaconda-widgets from anaconda-widgets-devel (dshea) -- Run /sbin/ldconfig when installing or uninstalling anaconda-widgets (dshea) -- Remove the shebang from anaconda.py (dshea) -- Exclude the compiled text and rescue files from anaconda-core (dshea) -- Update our copy of the GPL (dshea) -- Remove unused methods from packaging.Payload (dshea) -- Rearrange the entry, example and tip on Advanced User dialog (vpodzime) -- Change our docs that are close to ReST to proper ReST (vpodzime) -- Remove old outdated docs nobody should read (vpodzime) -- Send run-hub and run-spoke into the great beyond (dshea) -- Use one thread for payload setup. (dshea) -- Remove logging to tty3 and tty5 (#1073336) (bcl) -- Make missing encryption key error message more helpful (#1074441) (amulhern) -- Fix problems with the hdiso method. (clumens) -- Update makebumpver to include flags on first request (bcl) - -* Fri Aug 15 2014 Brian C. Lane - 22.3-1 -- Add some tests for execReadlines (dshea) -- Remove iutil.fork_orphan (dshea) -- Move non-exec tests into a separate class. (dshea) -- Write storage after liveimg install (#1080396) (bcl) -- Add an option to makebumpver to skip all checks. (clumens) -- Write sslverify=0 for url kickstart method (#1116858) (bcl) -- Add noverifyssl and proxy support to dracut ks handling (#1116858) (bcl) -- Log installation successes and failures via ipmitool (#782019). (clumens) -- Default the OK button on the iscsi dialog to insensitive. (clumens) -- Add repo --install support to DNF (#1119867) (bcl) -- Install selected ks repos to target (#1119867) (bcl) -- Add check for the format of grub2 encrypted password (#1070327) (bcl) -- Add some sanity checking to live payload (vpodzime) -- Use blivet's getFreeSpace for limitting automatic swap size (vpodzime) -- Ask users for enough space right at the first time (#876916) (vpodzime) -- Use low level file i/o for rpm callback logging (#1035745) (bcl) -- In tui cmdline mode skip showError and log message (bcl) -- Modify nm to return defaults when no dbus is available (bcl) -- Skip networkInitialize for image and dir installations (bcl) -- Ignore safe_dbus errors in keyboard setup (bcl) -- Skip syslog for dirinstall (bcl) -- Clear out errors at the beginning of _save_right_side. (clumens) -- Filter empty comps groups from both specific and generic lists (dshea) -- Add a test for disadvised words. (dshea) -- Mountpoint encrypted checkbox reflects container state (#1000031) (bcl) -- Display a fatal error if unable to encrypt a password. (dshea) -- Change strings per stylistic advice from ECS (dshea) -- Untranslate the type column of the network device type combobox (dshea) -- Add more information to the custom part summary dialog (#975804). (clumens) -- Don't require user creation when root is locked (#1030626) (bcl) -- Import LUKSDeviceWithoutKeyError from the right place (vpodzime) -- Move _verifyLUKSDevicesHaveKey to Anaconda's codebase (vpodzime) -- Fix issues reported by pyflakes (vpodzime) - -* Thu Jul 31 2014 Brian C. Lane - 22.2-1 -- Return NULL on error in doSetSystemTime. (dshea) -- Remove the /usr/bin/liveinst symlink during uninstall (dshea) -- Highlight languages in langsupport that contain selected locales (dshea) -- Add a wrapper function for GtkTreeViewColumn.set_cell_data_func (dshea) -- Remove the STANDALONE #ifdef from auditd. (dshea) -- Mark zRAM devices as protected and ignore them (vpodzime) -- Make storage sanity check aware of base RAM requirements (#1123466) - (vpodzime) -- Move sanityCheck code to anaconda's codebase (vpodzime) -- Clean up stylesheet comments (dshea) -- Resurrect auditd (dshea) -- Fix the spacing on the non-verbose doc building messages (dshea) -- Switch to kinder, gentler autoconf errors (dshea) -- Clean up the handling of CFLAGS (dshea) -- Remove unused parts of the configure.ac files. (dshea) -- Add a couple of configure checks from autoscan (dshea) -- Include config.h in every C file. (dshea) -- Use the result from AC_FUNC_FORK at build time (dshea) -- Don't distribute the gnome desktop file with translations (dshea) -- Build documentation during build instead of dist (dshea) -- Do not multiply/divide RAM sizes by 1024 back and forth (vpodzime) -- Raise exception if reading lines from a killed process (vpodzime) -- Use zRAM swap up to 2 GB of RAM (vpodzime) -- RAM requirements depend on squashfs.img's origin (vpodzime) - -* Fri Jul 25 2014 Brian C. Lane - 22.1-1 -- Add platform specific group selection (#884385) (bcl) -- Use parallel instead of xargs (vpodzime) -- Solidify the row separator in the welcome spoke. (dshea) -- Don't skip cpfmtxa formatted dasds if zerombr specified in ks. (#1073982) - (sbueno+anaconda) -- Fix TUI error message regarding username creation. (#1058637) - (sbueno+anaconda) -- Determine the lang selected arrow direction at render time (dshea) -- Lessen the visible resize when entering the welcome and lang spokes (dshea) -- Reset the want_x flag after the memory check (vpodzime) -- Fix crash caused by passing kwargs to log functions (vpodzime) -- Check graphical RAM requirements if running graphical installation (vpodzime) -- Document the inst.zram boot option (vpodzime) -- Adapt the memory requirements to zRAM swap usage (vpodzime) -- Remove an unused MEM-related constant and use the other one (vpodzime) -- Add a script for showing stats about zRAM (vpodzime) -- Set widgets to be focused when entering a spoke. (#1121285) (dshea) -- Allow a wider variety of mountpoints (#1109143) (dshea) -- Restrict the selected and insensitive style rules to anaconda widgets (dshea) -- Log more details about collect failure (bcl) -- Prevent crashes due to accessing X server from multiple threads (vpodzime) -- Add vnc to the arguments to qemu for the GUI testing. (clumens) -- Remove a commented out import (mkolman) diff --git a/anaconda/anaconda.spec.orig b/anaconda/anaconda.spec.orig new file mode 100644 index 0000000..5632431 --- /dev/null +++ b/anaconda/anaconda.spec.orig @@ -0,0 +1,1765 @@ +%define livearches %{ix86} x86_64 ppc ppc64 ppc64le + +Summary: Graphical system installer +Name: anaconda +Version: 23.19.10 +Release: 4%{?dist} +License: GPLv2+ and MIT +Epoch: 1000 +Group: Applications/System +URL: http://fedoraproject.org/wiki/Anaconda + +# To generate Source0 do: +# git clone https://github.com/rhinstaller/anaconda +# git checkout -b archive-branch anaconda-%%{version}-%%{release} +# ./autogen.sh +# make dist +Source0: %{name}-%{version}.tar.bz2 + +%if 0%{?qubes_builder} +%define _builddir %(pwd)/anaconda +%endif + +BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) + +# Versions of required components (done so we make sure the buildrequires +# match the requires versions of things). + +# Also update in AM_GNU_GETTEXT_VERSION in configure.ac +%define gettextver 0.18.3 +%define intltoolver 0.31.2-3 +%define pykickstartver 2.9 +%define dnfver 0.6.4 +%define partedver 1.8.1 +%define pypartedver 2.5-2 +%define nmver 0.9.9.0-10.git20130906 +%define dbusver 1.2.3 +%define mehver 0.23-1 +%define firewalldver 0.3.5-1 +%define utillinuxver 2.15.1 +%define dracutver 034-7 +%define isomd5sum 1.0.10 +%define fcoeutilsver 1.0.12-3.20100323git +%define iscsiver 6.2.0.873-26 +%define rpmver 4.10.0 +%define libarchivever 3.0.4 +%define langtablever 0.0.34 +%define libxklavierver 5.4 +%define libtimezonemapver 0.4.1-2 +%define helpver 22.1-1 + +BuildRequires: audit-libs-devel +BuildRequires: gettext >= %{gettextver} +BuildRequires: gtk3-devel +BuildRequires: gtk-doc +BuildRequires: gtk3-devel-docs +BuildRequires: glib2-doc +BuildRequires: gobject-introspection-devel +BuildRequires: glade-devel +BuildRequires: intltool >= %{intltoolver} +BuildRequires: libgnomekbd-devel +BuildRequires: libxklavier-devel >= %{libxklavierver} +BuildRequires: pango-devel +BuildRequires: python3-kickstart >= %{pykickstartver} +%if ! 0%{?rhel} +BuildRequires: python3-bugzilla +%endif +BuildRequires: python3-devel +BuildRequires: python3-nose +BuildRequires: systemd +# rpm and libarchive are needed for driver disk handling +BuildRequires: rpm-devel >= %{rpmver} +BuildRequires: libarchive-devel >= %{libarchivever} +%ifarch %livearches +BuildRequires: desktop-file-utils +%endif +%ifarch s390 s390x +BuildRequires: s390utils-devel +%endif +BuildRequires: libtimezonemap-devel >= %{libtimezonemapver} + +Requires: anaconda-core = %{epoch}:%{version}-%{release} +Requires: anaconda-gui = %{epoch}:%{version}-%{release} +Requires: anaconda-tui = %{epoch}:%{version}-%{release} + +%description +The anaconda package is a metapackage for the Anaconda installer. + +%package core +Summary: Core of the Anaconda installer +Requires: python3-dnf >= %{dnfver} +Requires: python3-blivet >= 1:1.12 +Requires: python3-meh >= %{mehver} +Requires: libreport-anaconda >= 2.0.21-1 +Requires: libselinux-python3 +Requires: rpm-python3 >= %{rpmver} +Requires: parted >= %{partedver} +Requires: python3-pyparted >= %{pypartedver} +Requires: python3-requests +Requires: python3-requests-file +Requires: python3-requests-ftp +Requires: python3-kickstart >= %{pykickstartver} +Requires: langtable-data >= %{langtablever} +Requires: langtable-python3 >= %{langtablever} +Requires: authconfig +Requires: util-linux >= %{utillinuxver} +Requires: python3-dbus +Requires: python3-pwquality +Requires: python3-pytz +Requires: realmd +Requires: teamd +%ifarch %livearches +Requires: usermode +%endif +%ifarch s390 s390x +Requires: openssh +%endif +Requires: isomd5sum >= %{isomd5sum} +Requires: createrepo_c +Requires: NetworkManager >= %{nmver} +Requires: NetworkManager-glib >= %{nmver} +Requires: NetworkManager-team +Requires: dhclient +Requires: kbd +Requires: python3-ntplib +Requires: rsync +Requires: systemd +%ifarch %{ix86} x86_64 +%if ! 0%{?rhel} +Requires: hfsplus-tools +%endif +%endif +Requires: python3-pid +Requires: dmidecode + +Requires: python3-coverage + +# required because of the rescue mode and VNC question +Requires: anaconda-tui = %{epoch}:%{version}-%{release} + +Obsoletes: anaconda-images <= 10 +Provides: anaconda-images = %{version}-%{release} +Obsoletes: anaconda-runtime < %{version}-%{release} +Provides: anaconda-runtime = %{version}-%{release} +Obsoletes: booty <= 0.107-1 + +%description core +The anaconda-core package contains the program which was used to install your +system. + +%package gui +Summary: Graphical user interface for the Anaconda installer +Requires: anaconda-core = %{epoch}:%{version}-%{release} +Requires: anaconda-widgets = %{epoch}:%{version}-%{release} +Requires: python3-meh-gui >= %{mehver} +Requires: adwaita-icon-theme +Requires: system-logos +Requires: tigervnc-server-minimal +Requires: libxklavier >= %{libxklavierver} +Requires: libgnomekbd +Requires: libtimezonemap >= %{libtimezonemapver} +Requires: nm-connection-editor +%ifarch %livearches +Requires: zenity +%endif +Requires: keybinder3 +%ifnarch s390 s390x +Requires: NetworkManager-wifi +%endif +Requires: anaconda-user-help >= %{helpver} +Requires: yelp +Requires: python3-gobject-base + +# Needed to compile the gsettings files +BuildRequires: gsettings-desktop-schemas + +%description gui +This package contains graphical user interface for the Anaconda installer. + +%package tui +Summary: Textual user interface for the Anaconda installer +Requires: anaconda-core = %{epoch}:%{version}-%{release} + +%description tui +This package contains textual user interface for the Anaconda installer. + +%package widgets +Summary: A set of custom GTK+ widgets for use with anaconda +Group: System Environment/Libraries +Requires: python3 + +%description widgets +This package contains a set of custom GTK+ widgets used by the anaconda installer. + +%package widgets-devel +Summary: Development files for anaconda-widgets +Group: Development/Libraries +Requires: glade +Requires: %{name}-widgets%{?_isa} = %{epoch}:%{version}-%{release} + +%description widgets-devel +This package contains libraries and header files needed for writing the anaconda +installer. It also contains Python and Glade support files, as well as +documentation for working with this library. + +%package dracut +Summary: The anaconda dracut module +Requires: dracut >= %{dracutver} +Requires: dracut-network +Requires: dracut-live +Requires: xz +Requires: python3-kickstart + +%description dracut +The 'anaconda' dracut module handles installer-specific boot tasks and +options. This includes driver disks, kickstarts, and finding the anaconda +runtime on NFS/HTTP/FTP servers or local disks. + +%prep +%if ! 0%{?qubes_builder} +%setup -q +%endif + + +%build +./autogen.sh +%configure +%{__make} %{?_smp_mflags} + +%install +%{make_install} +find %{buildroot} -type f -name "*.la" | xargs %{__rm} + +%ifarch %livearches +desktop-file-install ---dir=%{buildroot}%{_datadir}/applications %{buildroot}%{_datadir}/applications/liveinst.desktop +%endif +# NOTE: If you see "error: Installed (but unpackaged) file(s) found" that include liveinst files, +# check the IS_LIVEINST_ARCH in configure.ac to make sure your architecture is properly defined + +%find_lang %{name} + +%post widgets -p /sbin/ldconfig +%postun widgets -p /sbin/ldconfig + + +%ifarch %livearches +%post +update-desktop-database &> /dev/null || : +%endif + +%ifarch %livearches +%postun +update-desktop-database &> /dev/null || : +%endif + +%files + +%files core -f %{name}.lang +%license COPYING +%{_unitdir}/* +%{_prefix}/lib/systemd/system-generators/* +%{_bindir}/instperf +%{_bindir}/anaconda-disable-nm-ibft-plugin +%{_sbindir}/anaconda +%{_sbindir}/handle-sshpw +%{_datadir}/anaconda +%{_prefix}/libexec/anaconda +%exclude %{_prefix}/libexec/anaconda/dd_* +%{python3_sitearch}/pyanaconda/* +%exclude %{python3_sitearch}/pyanaconda/rescue.py* +%exclude %{python3_sitearch}/pyanaconda/__pycache__/rescue.* +%exclude %{python3_sitearch}/pyanaconda/ui/gui/* +%exclude %{python3_sitearch}/pyanaconda/ui/tui/* +%{_bindir}/analog +%{_bindir}/anaconda-cleanup +%ifarch %livearches +%{_bindir}/liveinst +%{_sbindir}/liveinst +%config(noreplace) %{_sysconfdir}/pam.d/* +%config(noreplace) %{_sysconfdir}/security/console.apps/* +%{_sysconfdir}/X11/xinit/xinitrc.d/* +%{_datadir}/applications/*.desktop +%endif + +%files gui +%{python3_sitearch}/pyanaconda/ui/gui/* +%{_datadir}/anaconda/window-manager/glib-2.0/schemas/* +%{_datadir}/themes/Anaconda/* + +%files tui +%{python3_sitearch}/pyanaconda/rescue.py +%{python3_sitearch}/pyanaconda/__pycache__/rescue.* +%{python3_sitearch}/pyanaconda/ui/tui/* + +%files widgets +%{_libdir}/libAnacondaWidgets.so.* +%{_libdir}/girepository*/AnacondaWidgets*typelib +%{python3_sitearch}/gi/overrides/* + +%files widgets-devel +%{_libdir}/libAnacondaWidgets.so +%{_includedir}/* +%{_datadir}/glade/catalogs/AnacondaWidgets.xml +%{_datadir}/gtk-doc + +%files dracut +%dir %{_prefix}/lib/dracut/modules.d/80%{name} +%{_prefix}/lib/dracut/modules.d/80%{name}/* +%{_prefix}/libexec/anaconda/dd_* + +%changelog +* Thu Oct 22 2015 Samantha N. Bueno - 23.19.10-1 +- Do not run time_initialize for image and directory installations (#1274103) + (bcl) +- Install input checks before modifying the user GUI (#1256065) (dshea) + +* Wed Oct 21 2015 Samantha N. Bueno - 23.19.9-1 +- Pass strings to blockdev.dasd_format, not a DASDDevice object. (#1273553) + (sbueno+anaconda) + +* Tue Oct 20 2015 Samantha N. Bueno - 23.19.8-1 +- decode package name for /etc/sysconfig/kernel (RHBZ #1261569) (awilliam) +- Warn user before using Delete all (jkonecny) + +* Thu Oct 15 2015 Samantha N. Bueno - 23.19.7-1 +- Fix traceback when trying to create list of unformatted DASDs. (#1268764) + (sbueno+anaconda) + +* Thu Oct 08 2015 Samantha N. Bueno - 23.19.6-1 +- Do not override StorageChecker.errors in StorageSpoke (#1252596) (vtrefny) +- Mangle the boot device differently for systemd (#1241704) (dshea) +- Fail the media check if the systemd service failed to start. (dshea) +- Raise an error if osimg cannot be found (#1248673) (bcl) +- Use the bootloader raid levels for bootloader installation (#1266898) (bcl) +- Use otps.display_mode during early startup (#1267140) (mkolman) +- Remove an unused import (mkolman) +- Ignore requests to create existing groups (#1261002) (dshea) +- Keep environment selection when reentering the software spoke (#1261393) + (mkolman) +- Only show the user spoke if no users are specified in kickstart (#1253672) + (mkolman) + +* Thu Sep 24 2015 Samantha N. Bueno - 23.19.5-1 +- Fix branding when iso is downloaded from nfs or hd (#1252756) (jkonecny) +- Fix unused import pylint error (jkonecny) +- Autopart use 90%% of disk capacity for required space compare (#1224048) + (jkonecny) +- Fix include packages install size when downloading on root (#1224048) + (jkonecny) + +* Mon Sep 14 2015 Samantha N. Bueno - 23.19.4-1 +- Add missing python dependencies for requests. (#1259506) (dshea) +- Fix the types passed to chown_dir_tree (#1260318) (dshea) +- Add a test for home directory reuse (#1260318) (dshea) + +* Thu Sep 10 2015 Samantha N. Bueno - 23.19.3-1 +- Don't try to concatenate a list with a string (#1252444) (mkolman) +- set sysroot correctly when setting root password (#1260875) (awilliam) + +* Thu Sep 03 2015 Samantha N. Bueno - 23.19.2-1 +- Verify Initial Setup services are present before turning them ON/OFF + (#1252444) (mkolman) +- Don't crash if the Japanese PC-98 keyboard is selected (#1190589) (mkolman) +- Fix the single-spoke TUI message for Python 3. (dshea) +- Fix a bash error in kickstart-genrules.sh (#1057271) (sbueno+anaconda) +- Run nm-connection-editor with the --keep-above flag (#1231856) (mkolman) +- Add a test for the user and group creation functions. (dshea) +- Get rid of libuser. (#1255066) (dshea) +- unbuffered read in python3 only works for binary (bcl) +- don't crash if no environment set in interactive (#1257036) (awilliam) +- Fix first run environment setup in software spoke (#1257036) (jkonecny) +- Defer to Fedora distro-wide settings for password strength (#1250746) (dshea) +- Remove from the docs repo=hd installation with installable tree (jkonecny) +- Fix a race between a window continuing and the next starting (#1004477) + (dshea) +- Start hubs with the buttons insensitive. (dshea) +- Do not replace the standard streams if not necessary. (dshea) +- Fix inst.repo=hd: is not working (#1252902) (jkonecny) +- Don't crash if incorrect environment is set in kickstart (#1234890) (mkolman) +- Fix I/O issues when anaconda is started without a locale. (dshea) +- Move locale environment logic into localization.py (dshea) + +* Thu Aug 20 2015 Samantha N. Bueno - 23.19.1-1 +- Destroy the keyboard layout dialog when finished (#1254150) (dshea) +- Do not encode the geoloc timezone to bytes (#1240812) (dshea) +- Skip source url checks when network is off (#1251130) (bcl) +- Don't set net.device to link if there is no ksdevice (#1085310) (bcl) +- Reading carrier while link is down raises IOError (#1085310) (bcl) +- Make sure username entered in TUI if create a user chosen. (#1249660) + (sbueno+anaconda) +- Write the empty dnf langpacks.conf to the right directory (#1253469) (dshea) +- Add pyanaconda test for network.check_ip_address (jkonecny) +- Replace IPy package by ipaddress (jkonecny) +- Fix crash when new device appear in Welcome screen (#1245960) (jkonecny) +- Fix crash when connections are changing (#1245960) (jkonecny) +- product.img buildstamp should override distribution buildstamp (#1240238) + (bcl) +- On incomplete ks, don't automatically proceed with install. (#1034282) + (sbueno+anaconda) +- Few fixes and amendments for the boot_options.rst file (vpodzime) +- Prevent issues with encrypted LVs on renamed VGs (#1224045) (vpodzime) +- Create and use snapshot of on-disk storage with no modifications (#1166598) + (vpodzime) +- Implement the class for storage snapshots (vpodzime) +- Prevent any changes in the StorageSpoke if just going back (vpodzime) +- Make StorageSpoke's on_back_clicked less complicated (vpodzime) +- Change zanata.xml to match new f23-branch name. (sbueno+anaconda) + +* Fri Aug 07 2015 Brian C. Lane - 23.19-1 +- Add basic support for LVM cache creation in kickstart (vpodzime) +- Use labels for the rest of the non-autopart test results. (dshea) +- Use a disk label to find the filesystem for escrow results (dshea) +- Use someone else's code for PID file management. (dshea) +- Prevent incomplete translations from making the TUI unusable (#1235617) + (mkolman) +- Apply the environment substitutions more liberally in nfs-repo-and-addon + (dshea) +- Use stage2=hd: instead of stage2=live: (dshea) +- Add test for liveimg kickstart command (bcl) +- Fix pre-install script execution (bcl) +- test pre-install kickstart section (bcl) +- Use sys.exit() instead of the exit() created by site.py. (dshea) +- Call ipmi_report before sys.exit (dshea) +- Add a test for proxy authentication (dshea) +- Add optional authentication to the proxy server (dshea) +- Add more tests to proxy-kickstart (dshea) +- Show an alternative prompt if a hub contains only a single spoke (#1199234) + (mkolman) +- Add few docs and improvement in check_ip_address (jkonecny) +- Check whether files actually contain translatable strings. (dshea) +- Add specific error string to TUI user dialog (#1248421) (bcl) +- Make EditTUIDialog error generic (#1248421) (bcl) +- Fix and expand nfs-repo-and-addon.ks (dshea) +- Added a script to make the packages used by nfs-repo-and-addon (dshea) +- Implement the rest of the repo options in dnfpayload. (dshea) +- Fix kickstart test for bond interface creation (jkonecny) + +* Fri Jul 31 2015 Brian C. Lane - 23.18-1 +- Move the proxy server script into a common file. (dshea) +- Use python3 for the proxy server and remove python2 compatibility (dshea) +- makePickle now needs to return bytes (bcl) +- gi.require_version raises ValueError (bcl) +- Remove duplicate signal setup block (bcl) +- Fix three bugs discovered by driverdisk-disk.ks (clumens) +- Fix error with OEMDRV ks auto-load check. (#1057271) (sbueno+anaconda) +- Make sure TUI is readable for non-latin languages (#1182562) (mkolman) +- Equalize capacity & mount point entries (#1212615) (dshea) +- Disable GRUB os_prober on POWER (#1193281) (rmarshall) +- Cancel Container Edit Sensitizes Update (#1168656) (rmarshall) +- Fix SoftwareSpoke._kickstarted. (dshea) +- Disable a Pylint false-positive (#1234896) (mkolman) +- Add support for autostep and --autoscreenshot (#1234896) (mkolman) +- Escape \'s in doc strings (dshea) +- Ellipsize the file system type combo box (#1212615) (dshea) +- Add graphviz to make-sphinx-doc script (jkonecny) +- Remove many of a documentation compilation errors (jkonecny) +- Add class diagrams to existing spokes and hubs (jkonecny) +- Add class diagram settings to documentation (jkonecny) +- Fix the UnusuableConfigurationError dialog (#1246915) (dshea) +- Chase pygobject's stupid moving target (dshea) +- Add missing translation contexts (dshea) +- Actually translate the container type labels (dshea) +- Check whether a translated string requires a context or comment. (dshea) +- Clean up the temporary pools virt-install makes. (clumens) +- Return the same object for repeated calls to __get__ (#1245423) (dshea) +- Use sys.exit instead of os._exit. (clumens) +- Add parentheses around the IPV6 regex fragment. (dshea) +- Add tests for IPv6 literals in URLs (dshea) +- Modify Installation Source Proxy Label (#11688554) (rmarshall) + +* Fri Jul 24 2015 Brian C. Lane - 23.17-1 +- Fix Initial PPC PReP Boot Selector Name (#1172755) (rmarshall) +- Require a newer version of pykickstart (vpodzime) +- Use dictionaries is thread-safe manner. (dshea) +- Merge pull request #234 from wgwoods/master (wwoods) +- Auto-load ks.cfg if OEMDRV volume available. (#1057271) (sbueno+anaconda) +- Check the encrypt checkbox when encrypted specified in KS (vtrefny) +- Do not raise KickstartValueError for missing passphrase (vtrefny) +- Ask for encryption passphrase when not specified in ks (#1213096) (vtrefny) +- dracut: minor cleanup (wwoods) +- dracut: fix missing messages for inst.ks=cdrom (wwoods) +- Wait forever for kickstarts on CDROM (#1168902) (wwoods) +- Use abs_builddir instead of builddir so paths will look more reasonable. + (clumens) +- Add a new makefile target that does everything needed for jenkins. (clumens) +- Merge pull request #228 from AdamWill/logind (dshea) +- Fix crash when mirrorlist checkbox is checked (jkonecny) +- Fix crash when user start typing proxy credentials (jkonecny) +- Check repository URL before leaving Source Spoke (jkonecny) +- Add IDs to identify addon repositories (jkonecny) +- Repositories can be checked without a selection (jkonecny) +- Consolidate the language environment variables. (dshea) +- Change the generated API indices slightly (dshea) +- Ignore "mountpoint" used a format specifier (dshea) +- filesystems -> file systems, per the style guide (dshea) +- Properly parameterize a translated string (dshea) +- Fix pylint errors in rescue.py. (dshea) +- Remove unused imports (dshea) +- Remove text.py from spec file (#965985) (sbueno+anaconda) +- Merge pull request #220 from AdamWill/1243962 (dshea) +- Fix adding 'boot=' option in FIPS mode (vtrefny) +- anaconda.target: Wants systemd-logind.service (#1222413) (awilliam) +- Remove the last usage of newt and get rid of it as a dependency (#965985) + (sbueno+anaconda) +- Enable anaconda to use the new rescue mode. (#965985) (sbueno+anaconda) +- Get rid of unnecessary constants in constants_text. (#965985) + (sbueno+anaconda) +- Get rid of some unnecessary files. (#965985) (sbueno+anaconda) +- Display verbose packaging errors to the user (bcl) +- Show source errors from refresh method (bcl) +- Fix the validate functions in the btrfs kickstart_tests. (clumens) +- Connect kickstart lang data to dnf-langpacks (#1051816) (dshea) +- Add simple_replace config file function (bcl) +- Remove some vestiges of the old packaging module (dshea) +- Remove window boot block detection functions. (dshea) +- Remove iutil.xprogressive_delay. (dshea) +- Simplify iutil.mkdirChain. (dshea) +- Decode wifi SSIDs into strings. (#1240398) (dshea) +- Actually use the temp directory so test files get cleaned up (dshea) +- Disable the output from rpmbuild (dshea) +- Remove stray references to python2. (dshea) +- Fix possible to start installation without network (#1221109) (jkonecny) +- Fix 'q' (to quit) do not work in TUI hub (jkonecny) +- act on the right objects when stripping URL protocols (#1243962) (awilliam) +- Fix 'App' object has no attribute 'queue' (#1243316) (jkonecny) + +* Thu Jul 16 2015 Brian C. Lane - 23.16-1 +- fix storage writing for live and ostree installs (#1236937) (awilliam) +- Add O_CREAT to the open flags when extracting rpm files. (dshea) +- Move ostree gobject version check next to the import (#1243543) (bcl) +- Remove rpmfluff from the buildrequires. (dshea) +- Only import readline if readline is necessary. (dshea) +- use the right baseurl in run_install_test.sh. (clumens) +- Don't copy the environment when starting metacity. (dshea) +- Fix the use of a temporary file in SimpleConfig.write (dshea) +- Add a test for SimpleConfig.write(use_tmp=True). (dshea) +- Remove an unnecessary chmod when creating chrony.conf (dshea) +- Fix some bad uses of chmod. (dshea) +- Add a function to open a file with specific permission bits (dshea) +- Don't ask to start vnc if user specifies text mode. (#1202277) + (sbueno+anaconda) +- New Anaconda documentation - 23.15 (bcl) +- Add a helper for building Sphinx docs using mock. (bcl) +- Update Sphinx configuration for python3 (bcl) +- Running without a GUI can also raise ValueError in errors.py (bcl) +- parse-kickstart_test.py: fix driverdisk_test() (wwoods) +- Fix the spelling of "version" (dshea) + +* Mon Jul 13 2015 Brian C. Lane - 23.15-1 +- Some dracut modules anaconda needs have been split into their own package. + (clumens) +- User operation kickstart tests. (kvalek) +- Kickstart tests for UTC and LOCAL hwclock. (kvalek) +- Kickstart firewall tests. (kvalek) +- Fix Repository New_Repository has no mirror or baseurl (#1215963) (jkonecny) + +* Fri Jul 10 2015 Brian C. Lane - 23.14-1 +- Catch blivet formatDevice ValueError in custom (#1240226) (bcl) +- There's now a python3-rpmfluff, so revert this. (clumens) +- Fix a couple other pylint problems in the driver disk tests. (clumens) +- Merge pull request #194 from wgwoods/master (wwoods) +- dracut: fix boot failure waiting for finished/dd.sh (wwoods) +- Use builddir instead of srcdir to find the dd utils (dshea) +- Fix the dd_test for python3. (dshea) +- Fix %%files to deal with compiled python3 modules (dshea) +- Add a bunch of gi.require_version calls (dshea) +- Temporarily disable the error about not importing rpmfluff. (clumens) +- Don't try to iterate over threads directly in wait_all. (clumens) +- Update the btrfs kickstart tests to use functions.sh. (clumens) +- Merge pull request #182 from wgwoods/dd-refactor (wwoods) +- driver_updates: fixes from patch review (wwoods) +- Don't be too picky about what name is --device=link (dshea) +- Ignore stderr output from parse-kickstart. (dshea) +- Add an option to execReadlines to filter out stderr. (dshea) +- Ignore interruptible system calls in the dd test (dshea) +- Fix an undefined variable in writeStorageLate (dshea) +- Connect zfcp entries to the discovery buttons (dshea) +- Connect iscsi activations to buttons (dshea) +- Connect the dasd number entry to the discovery buttons. (dshea) +- Add keyboard layouts on the row-activated signal. (dshea) +- Connect dialog inputs to default actions. (dshea) +- Remove unnecessary GtkNotebooks. (dshea) +- Re-save some dialog glade files. (dshea) +- Merge pull request #181 from wgwoods/master (wwoods) +- dd-refactor: dracut + build bits (wwoods) +- Add kickstart test for RAID1 (bcl) +- pass PYTHONPATH to the kickstart test framework (bcl) +- Write servers to chronyd.conf even if it's off (#1197575) (wwoods) +- Refresh advanced disks after disk summary dialog (#1226354) (bcl) +- parse-kickstart: just emit 'inst.dd=XXX' for driverdisk (wwoods) +- parse-kickstart: pylint fixes (wwoods) +- dd-refactor: new driver_updates.py + tests (wwoods) +- payload: fix driverdisk repos (wwoods) +- dracut: fix boot with inst.ks and no inst.{repo,stage2} (#1238987) (wwoods) +- Use the most recent versions of the btrfs, logvol, part, and raid commands. + (clumens) +- Allow /boot partition on iscsi with ibft (#1164195) (jkonecny) +- Add kickstart tests to test btrfs installation (vtrefny) +- Fix broken test by infiniband patch (#1177032) (jkonecny) + +* Thu Jul 02 2015 Brian C. Lane - 23.13-1 +- Add a switch for the Airplane Mode label (dshea) +- Connect labels with keyboard accelerators to a widget (dshea) +- Add a test for dangling keyboard accelerators. (dshea) +- Use pocketlint for translation and markup checking (dshea) +- Flatten the glade test directory. (dshea) +- Add support for specifying arbitrary mkfs options. (clumens) +- Fix kickstart install with infiniband (#1177032) (jkonecny) +- anaconda-dracut: Fix sysroot mount for netroot (#1232411) (bcl) +- Add RAID swaps to /etc/fstab (#1234469) (bcl) +- network: catch another race when calling dbus methods on invalid devices + (rvykydal) +- network: GUI, add connection even when virtual device activation failed + (#1179276) (rvykydal) +- Fix IP / hostname mismatches when showing VNC server address (#1186726) + (rvykydal) +- Check also ipv6 default routes when looking for onboot=yes device (#1185280) + (rvykydal) +- Merge pull request #157 from wgwoods/master_dd_fixes (wwoods) +- Do not check dependencies on invalid payloads (dshea) +- network: don't set onboot=False for default autoconnections (#1212009) + (rvykydal) +- Fix the types used to write anaconda-tb-all.log (dshea) +- dd: drop unnecessary archive_read_data_skip (wwoods) +- dd_extract: -l should not extract modules+firmware (wwoods) +- dd: fix permissions on extracted files (#1222056) (wwoods) +- tests: add dd_tests (wwoods) + +* Fri Jun 26 2015 Brian C. Lane - 23.12-1 +- Revert "Add an optional conditional to progress_report." (bcl) +- Fix inconsistencies in the payload messages. (dshea) +- Fix install-requires and install-buildrequires (dshea) +- anaconda-dracut: Mount /dev/mapper/live-rw (#1232411) (bcl) +- Eliminate some false test results when running glade tests. (atodorov) +- Move the knowledge about network packages into ksdata.network. (clumens) +- Add an optional conditional to progress_report. (clumens) +- Move the big block of late storage writing out of install.py. (clumens) +- The attribute is named ostreesetup.nogpg. (clumens) +- Use the index in grubenv (#1209678) (bcl) +- Do not raise an exception on EINTR from os.close or os.dup2 (dshea) +- Merge pull request #154 from mulkieran/master-959701 (mulkieran) +- Improve focus behavior in the advanced user dialog (dshea) +- Re-save advanced_user.glade (dshea) +- Depsolve kickstarted packages on the summary hub (#961280) (dshea) +- Add a kickstart test for %%packages --ignoremissing (dshea) +- Remove descriptions for RAID levels (#959701) (amulhern) +- No kexec-tools on aarch64 (bcl) + +* Fri Jun 19 2015 Brian C. Lane - 23.11-1 +- Do not import iutil from flags (dshea) +- Ignore EINTR errors in files unlikely to encounter them (dshea) +- Reimplement the open override for the dracut scripts (dshea) +- Wrap the only non-open call found by the new pocketlint checks (dshea) +- Redefine open to retry on EINTR (dshea) +- Remove __future__ imports (dshea) +- Use python 3's OSError subclasses instead of checking errno (dshea) +- Allow kwargs in eintr_retry_call (dshea) +- Remove explicit uses of /dev/null (dshea) +- Do not retry calls to close or dup2 (dshea) +- Remove another function from isys (dshea) +- Make dialogs behave better with timed input validation (dshea) +- Fix the password/confirm checks to work with delayed validation (dshea) +- Move the URL protocol removal out of the input check (dshea) +- Remove the vestigal capslock label from the password spoke (dshea) +- Re-saved a few glade files (dshea) +- Run set_status unconditionally from update_check_status (dshea) +- Do not run input checks for every keystroke of input (#1206307) (dshea) +- Add a method to execute timed actions early (dshea) +- Use comps.environments instead of comps.environments_iter (#1221736) (dshea) +- Merge pull request #83 from mulkieran/master-requires (mulkieran) +- Only show supported autopart choices in choices combo. (amulhern) +- Strip out device types that blivet is not able to support. (amulhern) +- Update blivet required version. (amulhern) +- Fix nfs4 stage2 and repo handling (#1230329) (bcl) +- Update upd-kernel so that it actually works (#1166535) (bcl) +- Fix passing ,nfsvers=3 to dracut (#1161820) (bcl) +- Require the python3 version of iscsi-initiator-utils (dshea) +- Fix the pylint pre-commit hook for python3 and pocketlint (dshea) +- Fix a type check to work with python 3. (dshea) +- Do not log Xorg output to tty5 (dshea) + +* Wed Jun 10 2015 Brian C. Lane - 23.10-1 +- Deal with encrypted partitions not being readable by virt-cat. (clumens) +- Make use of the restore_signals Popen argument (dshea) +- Don't allow /boot on iSCSI. (#1164195) (sbueno+anaconda) +- Merge pull request #127 from mulkieran/master-kickstart (mulkieran) +- Actually distribute the clickable message test, too (dshea) +- Fix disk argument passing to virt-cat in the ostree test. (clumens) +- Relabel all password and group files in %%post (#1228489) (dshea) +- Deal with the order of ifcfg files not being guaranteed. (clumens) +- Add a __init__.py to fix up an error when running iutil_test.py. (clumens) +- Actually run the clickable message test (dshea) +- Add a false positive to pylint checking for S390Error. (clumens) +- Let the excludedocs test pass if there are only directories left. (clumens) +- Allow successful kstest results to provide more details. (clumens) +- The escrow_cert test cannot use autopart. (clumens) +- Don't warn on PyInit__isys being unused. (clumens) +- Test that root LV is encrypted. (amulhern) +- Deal with subprocess returning bytes in tests/lib/filelist.py, too. (clumens) +- Make anaconda+python3+pocketlint work. (clumens) +- Start using our new shared pylint framework in anaconda. (clumens) +- Remove our extra pylint checkers. (clumens) +- Remove a duplicate libselinux-python3 requires. (clumens) +- Run makeupdates with Python 2 for now (mkolman) +- Don't use the _safechars private property (#1014220) (mkolman) +- Make sure directory size is returned as int (#1014220) (mkolman) +- Only warn about missing yum-utils (#1014220) (mkolman) +- Make sure set_system_time() gets an integer (#1014220) (mkolman) +- Make sure the column number in TUI is an integer (#1141242) (mkolman) +- Python 3 compatible sorting fixes (#1014220) (mkolman) +- Make version comparison Python 3 compatible (#1014220) (mkolman) +- Don't apply numeric comparison on None (#1141242) (mkolman) +- Avoid comparing None to an integer (#1141242) (mkolman) +- Handle urllib split (#1014220) (mkolman) +- Don't try to decode strings (#1014220) (mkolman) +- Rename function attributes (#1014220) (mkolman) +- Replace raw_input() with input() (#1014220) (mkolman) +- Make iterators and their usage Python 3 compatible (#1014220) (mkolman) +- Convert Python 2 metaclass magic to Python 3 metaclass magic (#1014220) + (mkolman) +- Make the raise syntax Python 3 compatible (#1014220) (mkolman) +- Python 3 no longer does tuple parameter unpacking (#1014220) (mkolman) +- Make isys Python 3 compatible (#1014220) (mkolman) +- Set a correct mode for the tempfile (#1014220) (mkolman) +- Python 3 temp files no longer reflect external changes (#1014220) (mkolman) +- Make print usage Python 3 compatible (#1014220) (mkolman) +- Rename the warnings spoke to warnings_spoke (#1014220) (mkolman) +- Replace list comprehension with for at class level (mkolman) +- Make gettext usage Python 3 compatible (#1014220) (mkolman) +- Do not open tty5 for writing in the "a" mode (#1014220) (vpodzime) +- Do not use pykickstart's RepoData as a key in a dict (#1014220) (vpodzime) +- Do not run repo attrs' checks if they are not set up yet (#1014220) + (vpodzime) +- Don't depend on side effects of map() (#1141242) (mkolman) +- Don't use exceptions' message attribute (#1014220) (vpodzime) +- Addapt to string type changes (#1014220) (mkolman) +- Handle modules returning bytes in Python 3 (#1014220) (mkolman) +- Add and use function that makes sure we work with strings (#1014220) + (vpodzime) +- Handle modules requiring different string types in Python 3 (#1014220) + (mkolman) +- Remove sitecustomize (#1014220) (mkolman) +- Make ASCII conversions Python compatible (#1014220) (mkolman) +- Remove "is Unicode" tests (#1014220) (mkolman) +- Fix ASCII conversion tests (#1014220) (mkolman) +- Return a string when calling a program (#1014220) (mkolman) +- Handle subprocess returning bytes (#1014220) (mkolman) +- Handle latin-1 strings in locale -a output (#1014220) (mkolman) +- Open the VNC password file for binary writing (#1014220) (mkolman) +- Update parse-kickstart for python3 (#1014220) (bcl) +- Update driver-updates for python3 (#1014220) (bcl) +- Update python-deps for python3 (#1014220) (bcl) +- Add a test for parse-kickstart (#1014220) (bcl) +- Make the import Python 3 compatible (#1014220) (mkolman) +- Change configparser and queue imports (#1014220) (mkolman) +- Remove imports from the __future__ (#1014220) (mkolman) +- Use the imp module directly (#1014220) (mkolman) +- Use Python 3 versions of Python dependencies (#1014220) (mkolman) +- Use /usr/bin/python3 in scripts (#1014220) (mkolman) +- Use Python 3 versions of nose and Pylint (#1014220) (mkolman) +- Build the Anaconda widgets for Python 3 (#1014220) (mkolman) +- Update makebumpver for python3 (#1014220) (bcl) +- Fix Kickstart installation without default gateway errors out (jkonecny) +- Fix results checking in a couple ks tests. (clumens) + +* Wed Jun 03 2015 Brian C. Lane - 23.9-1 +- Fix a usage typo in run_once_ks script. (sbueno+anaconda) +- Add kickstart tests for keyboard settings. (sbueno+anaconda) +- Add a kickstart test for lang settings. (sbueno+anaconda) +- Fix a %% call inside _(). (clumens) +- Convert ntp-pools.* to using the new kstest functions and autopart. (clumens) +- Fix up the expected output in parse-kickstart_test.py. (clumens) +- Fix a couple more pylint problems in the s390 code. (clumens) +- Use the adapted Timezone class for kickstart data (vpodzime) +- Add a kickstart test for processing NTP servers/pools configuration + (vpodzime) +- Show error on invalid username attempts in TUI. (#1171778) (sbueno+anaconda) +- Fix dracut reads ksdevice from missing os enviromnent (jkonecny) +- Run kickstart tests through an LMC-like program, not LMC itself. (clumens) +- Move common kickstart_test code out into its own functions.sh file. (clumens) +- Switch to using autopart in the kickstart tests. (clumens) +- Fix a couple pylint errors. (sbueno+anaconda) +- Make anaconda changes necessary for libblockdev s390 plugin. + (sbueno+anaconda) +- Add a kickstart test for lvm with percentage-based sizes. (dlehman) +- Add kickstart test for basic fixed-size lvm layout. (dlehman) +- Add a kickstart test to validate the default fstype. (dlehman) +- Add kickstart test to test bond interface creation (jkonecny) +- Add kickstart test to test vlan creation (jkonecny) +- Fix --device=link and --device not specified (#1085310) (rvykydal) +- Add kickstart test to test hostname (jkonecny) +- Add a /boot to tmpfs-fixed_size.ks. (clumens) +- Fix bad warning message when user set illegal IP (jkonecny) +- Fix bad check of illegal ip address (jkonecny) +- Add a simple tmpfs kickstart test (mkolman) +- Add a kickstart test for escrow packets and backup passphrases (dshea) +- Fix a typo that caused us to discard corrected target sizes. (#1211746) + (dlehman) +- Don't pass anything to ./configure. (dshea) +- Fix a pylint problem in parse-kickstart_test.py. (clumens) +- Fix 0 choice in Language and Storage in TUI mode (jkonecny) +- Update html documentation for new boot-options section (bcl) +- Convert boot-options to ReST and include it in the Sphinx documents. (bcl) + +* Fri May 15 2015 Brian C. Lane - 23.8-1 +- Clean up after processKickstart in parse-kickstart_test.py. (clumens) +- Add support to dnfpayload.py for addon NFS repos. (clumens) +- Fix IndexError: list index out of range (#1219004) (jkonecny) +- Fix a typo in proxy-kickstart.sh that was causing a test time out. (clumens) +- iSCSI Name Validation using regexes (sujith_pandel) +- Add kickstart tests for proxy usage. (dshea) +- In dracut, do not display a warning for network lines with just a hostname. + (clumens) +- Add transport adapters to support ftp and file fetching (dshea) +- Fix for "Kickstart installation fails..." (#1197960) (jkonecny) +- Allow passing kickstart tests to be run on the command line. (clumens) +- Automatically collect environment variables to be passed to ks tests. + (clumens) +- Use isinstance instead of type for doing type checks. (clumens) +- Remove yumpayload.py, its support files, and most references to yum. + (clumens) +- Fix the packages-and-group wildcard exclusion test (dshea) +- Set the GUI-selected environment in the ksdata (#1192100) (dshea) +- Don't crash if the disk model is None (#1215251) (dshea) +- Correct an error message in packages-and-groups-1.ks. (clumens) +- Switch from testing for emacs* to kacst*. (clumens) +- Tests that end in a traceback are failures, not successes. (clumens) +- Don't run run_report.sh from within run_kickstart_tests.sh. (clumens) +- If a kickstart test failed due to a traceback, display that. (clumens) +- Wrap device labels earlier (#1212586) (dshea) +- Remove the angle property from the device label (dshea) +- Get rid of the find button in the filter spoke. (dshea) +- Rearrange filter.glade (dshea) +- Fix errors in the vendor column renderers. (dshea) +- Fix some minor inconsistencies in filter.glade (dshea) +- Fix issues with advanced storage searching. (dshea) +- Remove duplicate entries from search combo boxes (dshea) +- Use named IDs for the filter type combo boxes. (dshea) +- Rearrange filter.glade the way glade wants it now (dshea) +- Add a reporting support script to kickstart tests. (clumens) +- Return a specific error code when a test times out. (clumens) +- Fix indentation in run_one_ks.sh. (clumens) +- Also remove all the fonts in the packages-and-groups-1 test. (clumens) +- Enable the basic-ftp and basic-ftp-yum kickstart tests. (clumens) +- Fix a typo in groups-and-envs-2.ks (clumens) +- Get NTP pools and servers from ksdata for the runtime config (vpodzime) +- Adapt to the new argument list for save_servers_to_config. (clumens) +- Remove the restriction that /boot be below 2TB for grub (#1082331) (dshea) +- Distinguish between NTP pools and servers in GUI (vpodzime) +- Add support for chrony pool directive (mlichvar) +- Add a readme pointing to the documentation (bcl) +- Sphinx docs - use source order (bcl) +- Add html documentation for Anaconda v23.7 (bcl) +- Place html docs under ./docs/html/ (bcl) +- Configure proxy settings for dnf payload (#1211122) (bcl) +- Change online action to change (bcl) +- Check for images/install.img first for netboot (bcl) +- Ignore addon and anaconda sections in handle-sshpw (bcl) +- Ignore %%anaconda section in parse-kickstart (bcl) +- Change of label in iscsi storage spoke (jkonecny) + +* Wed Apr 22 2015 Brian C. Lane - 23.7-1 +- Fix doReqPartition import from autopart (bcl) +- Add support for reboot --kexec kickstart command (bcl) +- Add inst.kexec and --kexec support to reboot with kexec (bcl) +- Add setup_kexec method to prepare the system for a reboot with kexec (bcl) +- Add kickstart %%pre-install section support (bcl) +- Remove the custom help button from the toolbar (bcl) +- Use multiple streams for zRAM instead of multiple devices (vpodzime) +- iscsi: pass rd.* options of devices to be mouted in dracut (#1192398) + (rvykydal) +- Remove the unused productName import from custom_storage_helpers.py. + (clumens) +- Remove the old custom partitioning help dialog (mkolman) +- Implement the new reqpart command. (clumens) +- Sort disks by name when checking disk selection (vpodzime) +- Set both .format's and .originalFormat's passphrase on unlock (vpodzime) +- Make the Encrypt checkbox insensitive for encrypted non-BTRFS devices + (#1210254) (vpodzime) +- Check for Gtk before importing escape_markup (bcl) +- If the network is disabled, also disable the network part of the source + spoke. (#1192104) (clumens) +- Add handling for unusable storage configurations. (dlehman) +- Allow markup in the label/message of DetailedErrorDialog. (dlehman) +- Allow passing an optional button list to showDetailedError. (dlehman) +- Allow kwargs with gtk_action_wait, gtk_action_nowait decorators. (dlehman) +- Fix makeupdates handling of Release: (bcl) +- Make sure we unmount the path we mounted (bcl) +- Fix up one more back_clicked reference that got missed. (clumens) +- Don't unconditionally set ksdata.lang.seen to True (#1209927) (mkolman) +- Reset the back_clicked flag if we stay on the Storage spoke (#1210003) + (vpodzime) +- Mark the back_clicked attribute of the Storage spoke as private (vpodzime) +- TUI pwpolicy setup was supposed to be in __init__ not refresh (#1208607) + (bcl) +- Preserve the order of boot args added by kickstart. (clumens) +- Revert "allow /boot on btrfs subvol or filesystem" (bcl) +- Connect scroll adjustments in the right class (#1206472) (dshea) + +* Thu Apr 02 2015 Brian C. Lane - 23.6-1 +- Enforce sane disk selections. (dlehman) +- Add a test for parse-kickstart (bcl) +- Add --tmpdir to parse-kickstart for testing (bcl) +- Use the correct format for IPMI messages. (clumens) +- Do not use min_luks_entropy with pre-existing devices (#1206101) (dshea) +- Remove the dnf cache directory when resetting the repo (dshea) +- Do not add separators to the addon list when not needed (dshea) +- Only use the instclass environment if it actually exists. (dshea) + +* Fri Mar 27 2015 Brian C. Lane - 23.5-1 +- Mock external module dependencies for readthedocs (bcl) +- Generate the pyanaconda module documentation (bcl) +- Reformat kickstart.rst using better ReST markup (bcl) +- Add some deprecation-related false positives. (clumens) +- Add Sphinx documentation support (bcl) +- Add documentation on %%anaconda kickstart command (bcl) +- Prevent Storage spoke Done button method from multiple launch (jkonecny) +- Prevent spokes from being exited more times. (jkonecny) +- Only depend on pygobject3-base in anaconda-core (#1204469) (mkolman) +- Use proxy when configured for the base repo (#1196953) (sjenning) +- Assume UTC if setting the system time without a timezone (#1200444) (dshea) +- Add boolean as return to ThreadManager.wait (jkonecny) +- Make sure LANG is always set to something (#1201896) (dshea) +- Fix pylint/translation issues from the pwpolicy patches. (clumens) + +* Fri Mar 20 2015 Brian C. Lane - 23.4-1 +- Clean out the mock chroot before attempting to run the rest of the test. + (clumens) +- Implement %%anaconda kickstart section for pwpolicy (bcl) +- Add pwpolicy support to TUI interface (bcl) +- Add pwpolicy for the LUKS passphrase dialog. (bcl) +- Add pwpolicy for the user spoke. (bcl) +- Use pwpolicy for the root password spoke. (bcl) +- Add the text for weak passwords to constants (bcl) +- Add tests with an FTP instrepo (dshea) +- Add kickstart tests for an NFS instrepo and addon repos. (dshea) +- Handle /boot on btrfs for live (#1200539) (bcl) +- rpmostreepayload: write storage config after shared var is mounted (#1203234) + (rvykydal) +- Tweak tmux configuration file (jkonecny) +- Remove --device= from the new kickstart tests. (clumens) +- Add more kickstart-based packaging tests. (clumens) +- Fix enlightbox call in ZFCPDialog. (#1151144) (sbueno+anaconda) +- fix crash with bare 'inst.virtiolog' in boot args (wwoods) +- Do not attempt to set None as a warning (dshea) +- fix inst.ks.sendmac for static ip=XXX (#826657) (wwoods) + +* Fri Mar 13 2015 Brian C. Lane - 23.3-1 +- Only insert strings into the environment (#1201411) (dshea) +- Fix the rescue kernel version list in writeBootLoader (#1201429) (dshea) +- Missing local variable check (omerusta) +- Fix the handling of nfs:// URLs. (dshea) +- Add glob support for the -a/--add option in makeupdates (mkolman) +- White Space fixes (omerusta) +- Put all mock results into the top-level source dir. (clumens) +- Merge pull request #31 from dcantrell/master (david.l.cantrell) +- Require newt-python in anaconda-core (dshea) +- Make merge-pr executable (dshea) +- Display an error for exceptions during GUI setup (dshea) +- Remove unused invisible char properties (dshea) +- Add a check for invisible_char validity (dshea) +- Connect viewport adjustments to child focus adjustments (#1192155) (dshea) +- Support '%%packages --multilib' in dnfpayload.py (#1192628) (dcantrell) + +* Fri Mar 06 2015 Brian C. Lane - 23.2-1 +- Add rc-release target (bcl) +- Change --skip-tx to --skip-zanata in scratch-bumpver (bcl) +- Add --newrelease to makebumpver (bcl) +- Improve the addon repo name collision code (#1125322) (bcl) +- Fix the import of mountExistingSystem (vpodzime) +- Fix import error in anaconda-cleanup. (sbueno+anaconda) +- Use the new static method to get possible PE sizes (vpodzime) +- Try using the global LUKS passphrase if none is given for LV/part (#1196112) + (vpodzime) +- Fix the help button mnemonic display on spokes (dshea) +- Only set the hub message if the message has changed (dshea) +- Wrap the info bar in a GtkRevealer (dshea) +- Add links to clickable warning and error messages. (dshea) +- Add a test to look for clickable messages that aren't clickable enough. + (dshea) +- Increment the widgets version number (dshea) +- Allow markup and links in the info bar. (dshea) +- Add more links to gtk-doc comments (dshea) +- Handle New_Repository name collision source spoke (#1125322) (bcl) +- Fix a bad usage of execWithRedirect (#1197290) (dshea) +- Have to be root to delete /var/tmp/kstest-* on the remote machines. (clumens) +- Use the LUKS device for swap in fstab (#1196200) (vpodzime) +- Clear TUI source spoke errors that may have been leftover from a prior + attempt. (#1192259) (sbueno+anaconda) + +* Fri Feb 27 2015 Brian C. Lane - 23.1-1 +- Make sure python2 dnf is required (bcl) +- Fix pykickstart requirement. (clumens) +- Extract xattrs from tar payload (#1195462) (bcl) +- Add a script to rebase and merge pull requests (dshea) +- Update translation documentation for Zanata (bcl) +- Switch translation support to fedora.zanata.org (bcl) +- install.py: fix the 'is team device' check (awilliam) +- Explain why Anaconda requires rpm-devel and libarchive-devel during build + (mkolman) +- Revert "Switch to temporary transifex branch" (bcl) +- Revert "makebumpver needs to know about anaconda-1 transifex name" (bcl) +- Commit 23.0 anaconda.pot file (bcl) +- Rename queue.py to queuefactory.py. (clumens) +- Remove references to old_tests, which no longer exists. (clumens) +- Fix package and group removing with the dnf payload. (clumens) +- Don't try to run new-kernel-pkg if it doesn't exist. (clumens) + +* Fri Feb 20 2015 Brian C. Lane - 23.0-1 +- Remove unused imports (dshea) +- Check for unused imports in __init__ files (dshea) +- Remove timestamp-based version support. (dshea) +- Add test lib methods to check regexes (dshea) +- Cleanup BuildRequires (mkolman) +- Remove obsolete imports. (amulhern) +- Make print statement print output w/out surrounding parentheses. (amulhern) +- Remove an unused import (dshea) +- rpmostreepayload: Honor noverifyssl (walters) +- typo: packaging: Don't vary name of "verified" (walters) +- Disable the metacity mouse-button-modifier setting (dshea) +- Fix completion setting in TUI language spoke. (#1192230) (sbueno+anaconda) +- Remove the pylint false positives for the GLib module (dshea) +- Use ExtendAction for --ignore flag (amulhern) +- Use a simple ExtendAction for add_rpms option. (amulhern) +- Fix log message formating (mkolman) +- Don't clear nonexistent DNF package download location (#1193121) (mkolman) + +* Mon Feb 16 2015 Brian C. Lane - 22.20-1 +- Make range usage Python 3 compatible (#1014220) (mkolman) +- Make map() usage Python 3 compatible (#1014220) (mkolman) +- Make the iter*() dictionary methods Python 3 compatible (#1014220) (mkolman) +- Remove the autopart.py module from POTFILES.in (vpodzime) +- Adapt to autopart and installation-specific code move in blivet (#1192702) + (vpodzime) +- Revert "Move autopart functionality to anaconda" (vpodzime) + +* Fri Feb 13 2015 Brian C. Lane - 22.19-1 +- Make sure yum is included in the packageset for yumpayload (#1152753) (bcl) +- Tweak parallel args. (clumens) +- Remove the Encoding entry from the .desktop file (dshea) +- Add an option to startProgram to not reset the locale (dshea) +- Set $LIBUSER_CONF early (dshea) +- Do not set $TZ (dshea) +- Assume that a bunch of digits in a version number is a timestamp (dshea) +- Avoid setting $LANG and $LANGUAGE, except where we can't (dshea) +- Add a parameter to iutil.startProgram to extend the environment (dshea) +- Add a method to set environment variables for child processes (dshea) +- Set $DISPLAY before threads are started. (dshea) +- Add a pylint module to look for modifications to the environment (dshea) +- Remotely do kickstart tests as a kstest user instead of root. (clumens) +- Add some documentation. (clumens) +- Do all package/group checking in %%post to save a reboot. (clumens) +- Support kickstart test jobs out to multiple computers with parallel. + (clumens) +- Make it possible to ignore individual newly added dependencies (mkolman) +- Remove the old_tests directory (bcl) +- Use /usr/bin/python2 in scripts (bcl) +- Cleanup some pylint errors in analog (bcl) + +* Fri Feb 06 2015 Brian C. Lane - 22.18-1 +- dracut needs iscsi_firmware cmdline arg (#1185792) (bcl) +- Clear the default titlebar text (mkolman) +- Move the pygobject3 dependency to the core package (#1188850) (mkolman) +- Bump the livecd making timeout to 90 minutes. (clumens) +- If a VM isn't going to finish in 60 minutes, it likely isn't going to finish. + (clumens) +- Check that package globs install more than just the first package. (dshea) +- Remove some stray parenthesis (#1188618) (dshea) +- Replace urllib with python-requests for network access (#1014220) (mkolman) +- The repo has moved to github, so reflect that in the spec. (clumens) +- Fix pylint problems with the autopart commit. (clumens) +- network: adapt to NM fixing virtual device disconnection (#1084953) + (rvykydal) +- Replace xrange() with range() (vpodzime) +- Move autopart functionality to anaconda (vpodzime) + +* Fri Jan 30 2015 Brian C. Lane - 22.17-1 +- Fix pylint complaints about log lines (bcl) +- Add JENKINS_PROXY support to makebumpver (bcl) +- Copy the kickstart package tests for testing with yum (bcl) +- Pass multiple args to runone in run_kickstart_tests.sh (bcl) +- Ignore some accelerator collisions on the filter dialog. (clumens) +- Remove an unused variable. (clumens) +- network: fix a typo making creating virtual devices in %%pre fail (#1075195) + (rvykydal) +- network: support for bridge, require pykickstart with the support (#1075195) + (rvykydal) +- network: Catch exception from NM failing to create a bridge device (#1075195) + (rvykydal) +- network: add bridge support for kickstart %%pre phase (#1075195) (rvykydal) +- network: generate kickstart commands for bridge devices (#1075195) (rvykydal) +- network: add bridge support to kickstart (#1075195) (rvykydal) +- network: support for adding bridge devices (#1075195) (rvykydal) +- network: display bridge devices in status (#1075195) (rvykydal) +- Fix position of Refresh List button in filter spoke (#1065716) (rvykydal) +- Fix accelerator collision of Refresh button (#1065716) (rvykydal) +- gui: add Refresh button to network storage UI (#1065716) (rvykydal) +- iscsi: display portal (address:port) of node in node list (#1114820) + (rvykydal) +- iscsi: when logging into nodes consider ip:port of node (#1114820) (rvykydal) +- network: display only actual fqdn of ip we offer for vnc connection + (#1089429) (rvykydal) +- network: GUI: reactivate connection automatically after configuration + (#1033063) (rvykydal) +- Don't traceback if connection does not have read-only setting (#1158919) + (rvykydal) +- network: enable NM ibft plugin only for ip=ibft boot option (#804511) + (rvykydal) +- network: add support for vlan tag in iBFT (#804511) (rvykydal) +- network: pass team opts to dracut for netroot (#1075666) (rvykydal) +- Remove unused version macros from anaconda.spec.in (vpodzime) +- Don't process continue-clicked events for windows that aren't shown. + (clumens) +- Add back an empty %%files for the anaconda metapackage (dshea) +- Do not include dd_list and dd_extract in the anaconda-core package. (clumens) +- Replace long usage with int (#1014220) (mkolman) +- Do not use sys.exc_type (#1014220) (mkolman) +- Replace StandardError with Exception (#1014220) (mkolman) +- Make filter() usage Python 3 compatible (#1014220) (mkolman) +- network: add teamd package if team is used during installation (#1185670) + (rvykydal) +- network: add NetworkManager-team (#1182633) (rvykydal) +- Don't allow weak LUKS passwords either (bcl) +- Use %%license in anaconda.spec.in (bcl) +- Don't allow weak passwords (text mode). (sbueno+anaconda) +- Remove the press done twice to exit text (bcl) +- Don't allow weak user passwords (bcl) +- Don't allow weak root passwords (bcl) +- Increase minimum password length to 8 (bcl) +- Remove the unused re import from nm.py. (clumens) +- Remove IPy from nm.py for python 23 compatibility. (rvykydal) +- Show empty VGs in the custom spoke. (dlehman) +- Use the rpm database to find kernel package versions (#1074358) (dshea) +- Check whether a payload has an instclass (#1185588) (dshea) +- Remove the unused indexed_dict module (vpodzime) +- Use threadMgr to wait for exception handling to finish (vpodzime) +- Add a method for waiting for error handling to finish (vpodzime) +- Move HW errors processing to the code that runs in the main thread (vpodzime) +- Replace python-urlgrabber with python-requests (#1141242) (mkolman) + +* Fri Jan 23 2015 Brian C. Lane - 22.16-1 +- Add some tests for kickstart and package selection for dnf. (clumens) +- Double quote when printing error results from a kickstart test. (clumens) +- Restrict payload kernel versions to kernels in the payload (#1074358) (dshea) +- Actually add the new definition of an already-defined repo. (clumens) +- Move hdiso handling code to PackagePayload (#1180765) (dshea) +- Actually install the metacity theme data (dshea) +- Show the event box immediately when setting infobar messages. (dshea) +- Move environment group selection logic to PackagePayload (#1179362) (dshea) +- Add a parameter to environmentGroups for wheter to include optionlist. + (dshea) +- Remove unused methods for deselecting environments (dshea) + +* Fri Jan 16 2015 Brian C. Lane - 22.15-1 +- makebumpver needs to know about anaconda-1 transifex name (bcl) +- Switch to temporary transifex branch (bcl) +- Fix an issue in the previous pre-existing repo kickstart patch. (clumens) +- Require the livecd target to be larger now. (clumens) +- Hook up jenkins support into makebumpver. (clumens) +- Change default console font to eurlatgr (myllynen) +- Update help text for the nodnf option (mkolman) +- Run AnacondaExceptionHandler in cmdline mode (bcl) +- Install a metacity theme to remove the titlebar. (dshea) +- Move metacity gsettings overrides into anaconda (dshea) +- Maximize anaconda instead of running fullscreen (#1164457) (dshea) +- Use a formatter on remotelog lines (bcl) +- Include NetworkManager-glib in anaconda-core (bcl) +- Make colon optional while adding iSCSI Initiator Name (sujithpshankar) +- If using pre-existing, no size needs to be specified in ksdata (#1172172) + (amulhern) +- Add support for sending logs to a remote host with --remotelog (bcl) +- Implement askmethod in dnfpayload (dshea) +- Add an installclass property for the default package environment (#1175826) + (dshea) +- Fix the FIXME re: tui default software selection (dshea) +- Add missing translation contexts for TUI navigation keys (dshea) +- Translate 'c' in the tui software spoke (dshea) +- Expect addons to have categories for both GUI and TUI (vpodzime) +- Remove an unused import in pyanaconda/ui/__init__.py (vpodzime) + +* Fri Jan 09 2015 Brian C. Lane - 22.14-1 +- Add error checks to liveimg mount code (#1178703) (bcl) +- Switch kickstart tests to doing VNC instead of graphical. (clumens) +- Updates for new Size.convertTo() spec. (amulhern) +- Force a background in the main GtkBox in anaconda windows. (dshea) +- Animate the screen transitions. (dshea) +- Implement DNFPayload.environmentOptionIsDefault (#1179905) (dshea) +- Remove the directory dnf downloaded packages into. (clumens) +- Allow specifying pre-defined repos via kickstart with dnf backend (#1177988). + (clumens) +- Get rid of unnecessary python disable-msg in zfcp spoke. (sbueno+anaconda) +- Fix typo in commit 472be66b2af2af69e7eac15ec9c94ccc818e12b5. (dlehman) +- Fix some pylint errors in the zfcp panel. (sbueno+anaconda) +- Fix an accelerator collision found on the filter page. (sbueno+anaconda) +- Fix some issues pylint found. (sbueno+anaconda) +- Show disk paths on Other page in advstorage. (sbueno+anaconda) +- Don't treat the baserepo as special when gathering metadata (#1177502) + (dshea) +- Make dnf._base and dnf._base.comps always available. (dshea) +- Remove the checks for whether dnf and rpm were imported (dshea) +- Remove obsolete packaging code. (dshea) +- Do not bypass name setters in the custom spoke. (#1138370) (dlehman) +- Preserve kickstart url behavior for mirrorlist (#1109933) (bcl) +- Use a backslash to escape nfs spaces instead of x20 (#1109933) (bcl) +- Add missing translation context for Add ECKD DASD button in advstorage. + (sbueno+anaconda) +- Add translation contexts for z and zfcp panel in advstorage. + (sbueno+anaconda) +- Convert devices size to str for GUI for zFCP devices (amulhern) +- Fix string formatting of zFCP devices. (sbueno+anaconda) +- Fix the way zFCP devices are displayed in storage spoke. (#1024902) + (sbueno+anaconda) +- Show labels on Add zFCP dialog. (sbueno+anaconda) +- Fix failure to search by LUN in advanced storage spoke. (sbueno+anaconda) +- Get rid of the clear button in advanced storage spoke. (sbueno+anaconda) +- Fix up the z Panel in advanced storage. (sbueno+anaconda) +- Add support for adding zFCP devices in the GUI (sbueno+anaconda) +- Remove DirtyFSError related callbacks and entries. (amulhern) +- Remove allowDirty parameter from mountExistingSystem() call. (amulhern) +- Remove old workaround for missing EFI bits. (dmarlin) +- Wait for payload thread in TUI software spoke. (#1178214) (sbueno+anaconda) +- Start the network before the display (#1167103) (dshea) + +* Fri Dec 19 2014 Brian C. Lane - 22.13-1 +- Print the result to the log, not the variable name. (clumens) +- Ellipsize comboboxes (#1170275) (dshea) +- Allow the columns of the container combo box to flow (#1170275) (dshea) +- Allow specifying how much from kickstart_tests to keep. (clumens) +- Fix up two problems in run_kickstart_tests.sh. (clumens) +- Fix detecting errors in groups-and-envs-1.ks. (clumens) +- Add a network command to the various kickstart test ks files. (clumens) +- Reorganize run_kickstart_tests.sh a bit to use parallel. (clumens) +- Use the anaconda-user-help package for help content (mkolman) +- Fix which TUI field is being checked for which input (#1169533) (dshea) +- Fix pylint-reported issues in RPMOSTreePayload (vpodzime) +- rpmostreepayload: Rework remote add handling (walters) +- Remove Requires: python-nss (vpodzime) +- If there's no boot.iso, skip the kickstart tests. (clumens) +- Test that a kickstart file with both an environment and group installs both. + (clumens) +- Move the ostree test out of its own directory. (clumens) +- Add a general-purpose kickstart-driven testing setup. (clumens) +- Move the pykickstart version test into a different subdirectory. (clumens) +- Really hide and show passphrase warnings (#1162828) (dshea) +- Unsetup the payload on the way out of anaconda (#1164577) (dshea) +- Beware of 0 being the same bool value as None when setting time (vpodzime) +- Fix the last member of the struct_time struct (vpodzime) +- Use a flag to determine if the datetime spoke is shown (vpodzime) +- Put AM/PM label and buttons in a revealer and hide/unhide them (vpodzime) +- Fix issues with the date&time not being updated on timezone changes + (vpodzime) +- Fix the way we create the list of DASDs needing dasdfmt. (#1073982) + (sbueno+anaconda) +- Fix threading issues for dasdfmt in gui storage. (#1073982) (sbueno+anaconda) +- Add sshkey kickstart command (bcl) +- Skip setting up env and groups in software spoke for ks (#1173350) (bcl) +- Add missing dnf package selection support (#1169056) (bcl) +- Add variable substitution to DNF (#1164803) (bcl) +- Simplify and robustify handling of fstype combo box. (amulhern) +- Fix warnings about the default parameter that gdk deprecated (dshea) +- Remove the color override from MountpointSelector. (dshea) +- Move the layout indicator color to css and fix the colors (dshea) +- Don't crash in pre-commit if no files changed (dshea) +- Make the Selected Disks and Configure Mount Point dialogs wider (#1171834). + (clumens) +- Sync up the Selected Disks and Configure Mount Points dialogs (#1171838). + (clumens) +- Make sure /boot is not LVM LV if we're on s390x (#873135) (sbueno+anaconda) +- Only show the "SYSTEM" heading if there are data mount points under it. + (clumens) +- Remove an unused import in rpmostreepayload.py. (clumens) +- Use DNF by default (#1156483) (mkolman) +- Check system-release for whether to enable betanag or not (#1168829). + (clumens) +- rpmostreepayload: Avoid shutil.copytree in favor of cp -r to fix symlinks + (walters) +- Look for Requires: and BuildRequires: at the front of a line. (clumens) +- Don't attempt to install anaconda packages from the install-requires target. + (clumens) +- Remove _assureLogoImage (dshea) +- Add a stylesheet property to BaseInstallClass (dshea) +- Fix EOF error that occurs if user input required in x3270. (#1171135) + (jstodola) +- Print an error when the kickstart file is missing (bcl) +- Remove UserInterface.basepath and UserInterface.basemask definitions. + (amulhern) +- Remove pointless overrides identified by the pointless override checker. + (amulhern) +- Add a simple pointless-override checker to pylint checkers. (amulhern) + +* Thu Dec 04 2014 Brian C. Lane - 22.12-1 +- add code so that initramfs created for rescue kernel (#1170589) (gczarcinski) +- Start vncconfig for cutNpaste (hamzy) +- Handle unstaged changes in the pre-commit hook. (dshea) +- Use git status -z (dshea) +- Make Python's default encoding detection work on Live installations + (#1169019) (vpodzime) +- Force translation files download instead of skipping them (#1169023) + (vpodzime) +- Completely disable storage tests for the moment. (clumens) +- datetime_spoke: Fix warnings about removing nonexistent source (walters) +- Temporarily disable the BTRFSOnNonBTRFSComponent test. (clumens) +- Remove a slightly lighter grey background from the center of the hubs. + (clumens) +- Actually fix the message dropping commit. (clumens) +- Make sure storage info bar is displayed (#1166730) (bcl) +- Clear Update Settings when Done clicked (#1167014) (bcl) +- Fix PWQError issues. (sbueno+anaconda) +- network: Add some doc strings (walters) +- It's spoke.title, not spoke.name (#1167036). (clumens) + +* Fri Nov 21 2014 Brian C. Lane - 22.11-1 +- Skip tui askvnc reboot for dirinstall (#1164254) (bcl) +- If a message is for a spoke not on the current hub, throw it away. (clumens) +- Find storage test cases automatically. (clumens) +- Add new storage test cases that reuse results of earlier autopart runs. + (clumens) +- Support high contrast mode in fedora-welcome (#1160499) (dshea) +- How the GUI test suite disk is displayed has changed. (clumens) +- do not delete liveimg --url=file:/// file (gczarcinski) +- Add support for doing a liveimg kickstart with local file (#1140358) (bcl) +- Create missing parent directories for user's home directory (#1163775) (bcl) +- Related bug can have different fixed-in and state (bcl) +- Provide useful hints on TTY1 during the installation (mkolman) +- Decrease memory requirements on gui tests, and make that attr private. + (clumens) +- Don't use blivet in the gui tests. (clumens) +- Use MiB/GiB instead of MB/GB in GUI tests. (clumens) +- Make the No Space dialog look less terrible. (clumens) +- Add a test case where it's impossible to reclaim. (clumens) +- Use blivet's Size class instead of ints and such. (clumens) +- Get the gui tests running in parallel. (clumens) +- Add a basic test of the reclaim dialog. (clumens) +- Make images in raw format instead of qcow2. (clumens) +- Allow specifying which of the GUI tests you want to run. (clumens) +- Check if we read something when emptying stdin queue (vpodzime) +- Require min entropy for 'part --encrypted' devices (#1162695) (vpodzime) +- Don't rely on terminal attributes being configurable (#1162702) (vpodzime) +- Check for a GLib source ID of None in unwatchAllProcesses. (dshea) +- Disable payloads that failed to setup (#1162732) (dshea) +- Only enable non-interactive yum plugins (#1111535) (dshea) +- Add a placeholder for a product-specific logo (dshea) +- Load a stylesheet from product.img (dshea) +- Fix make distcheck (mkolman) +- Include help content in the Anaconda tarball (mkolman) +- Fix typo causing traceback when NTP is turned ON/OFF (vpodzime) +- Use /var/tmp for the temp directory when installing anaconda. (clumens) +- Prevent tb on s390x when de-selecting a DASD and doing custom part. + (sbueno+anaconda) +- Revert "Revert productName repo name change (#1128474)" (bcl) +- Remove a comment that is a blatant lie. (clumens) +- Fix an environment variable setting in the test environment. (clumens) +- Update the background image paths used in Fedora. (dshea) +- Add a pylint module to detect uses of interruptible system calls. (dshea) +- Wrap interruptible system calls in a loop (#1160041) (dshea) +- Unpack the callback data given to us by blivet (vpodzime) +- Add timeout to callbacks waiting for enough entropy (#1073679) (vpodzime) + +* Tue Nov 04 2014 Brian C. Lane - 22.10-1 +- Remove gui, install, and ostree tests from TESTS. (clumens) +- Update the ostree test for the new ostree+grub patches. (clumens) +- Add a timeout when the ostree test checks for proper booting. (clumens) +- bootloader: Bridge efi_dir configuration earlier for rpmostreepayload + (walters) +- rpmostreepayload: Handle grub2+EFI layout (walters) +- rpmostreepayload: Copy all subdirectories of /usr/lib/ostree-boot (walters) +- Handle the case of rpmostreepayload + GRUB2 (walters) +- Test adding, removing, and reordering keyboard layouts. (clumens) +- Test displaying the help viewer on every screen. (clumens) +- Add functions to UITestCase to grab the contents of a view. (clumens) +- Extend the keyboard GUI test to test adding layout switching. (clumens) +- Add checks for selected language/locale on the welcome screen. (clumens) +- Catch EOFError in raw_input (#1158841) (bcl) +- Ensure we are specifying sensible target sizes for resize. (#1120964) + (dlehman) +- Set the autopart fstype for boot too (#1112697) (bcl) +- Ensure we are specifying sensible target sizes for resize. (#1120964) + (dlehman) +- Rework the placement of items on hubs. (dshea) +- Lightly rearrange the nav_area (dshea) +- Do not install interactive exception handler in cmdline mode (#1155979) + (vpodzime) +- Remove dmidecode from Requires: (vpodzime) +- Wait until all spokes are setup before updating continue button (bcl) +- Allow adding prepboot to a blank disk in custom (#1155660) (bcl) +- Make anaconda more scrollable (#1135024) (dshea) +- Remove unused imports (vpodzime) +- Just preserve the %%addon header args if an addon is missing (#1155026) + (vpodzime) +- Add a test to verify the help dialog pops up. (clumens) +- Look up most widgets relative to the currently displayed screen. (clumens) +- Make a few more updates for labels that have changed in the GUI. (clumens) +- Warn users about liveinst usage of --updates (#1153550) (bcl) +- Fix handling of md fwraid names in kickstart bootloader command. (#1156354) + (dlehman) +- Use an empty string for no root password instead of None (#1155576) (dshea) +- Don't allow related bugs without acks (bcl) +- Fix switching environments when no environment is selected (#1018226) (dshea) +- Make size_from_input() and size_from_entry() methods handier. (amulhern) +- Changes around handling of size entries in custom spoke. (amulhern) +- network: handle dbus UnknownMethod exception on invalid objects (#1061796) + (rvykydal) + +* Wed Oct 22 2014 Brian C. Lane - 22.9-1 +- When I renamed the date & time spoke, I missed one string. (clumens) +- Fix two more problems with spoke selectors in GUI testing. (clumens) +- Fix the GRUB raid1 tests (dshea) +- Add syslinux to the packages in the gui_testing kickstart file, too. + (clumens) +- Update the gui_testing kickstart file for productization changes. (clumens) +- Update checkSizes to work in terms of Size objects (#1129629). (clumens) +- Install grub to all disks in a btrfs raid1 /boot (#989644) (dshea) +- Really fix issue with starting in cmdline mode on s390x. (sbueno+anaconda) +- The network spoke's title has changed. Reflect that in the test. (clumens) +- Grab memory.dat from running the GUI test. (clumens) +- Don't panic prematurely on a missing size (#1154190) (amulhern) +- Fix more messages the new pylint found. (clumens) +- dracut/save-initramfs.sh: don't save /tmp (wwoods) +- Get rid of some unnecessary text from dasdfmt dialog. (sbueno+anaconda) +- Quit if no device type name selected. (amulhern) +- Fix stray comment. (amulhern) +- If there's no attached ANACTEST device, don't attempt to mount and run it. + (clumens) +- Fix a spelling error (#1153672) (dshea) +- Log when using updates from /tmp/updates/ (bcl) +- Fix # handling in SimpleConfigFile (#1045687) (bcl) +- Unconditionally clear the process handle when nm-c-e exits (#1132645) (dshea) +- Remove the code that reads /tmp/vncshell.pid. (dshea) +- Rewrite _bound_size() to bound_size() in storage_utils.py (amulhern) +- Changes for scheduling size change on an existing device (#1076055) + (amulhern) +- Remove too strict condition for changing size (#1076055) (amulhern) +- Omit calculation and use of active_dev_type. (amulhern) +- Add a method that extracts device type name from combo box (amulhern) +- Don't pass use_dev around to internal methods. (amulhern) +- Check identity, not equality, for RaidLevel objects. (amulhern) +- Run restorecon on /etc/hostname (#1133368) (bcl) +- Add authconfig and firewalld packages when used in ks (#1147687) (bcl) +- Allow kickstart with no method (#972265) (bcl) +- Fix a typo from 73d3a8e5. (sbueno+anaconda) +- Respect both ways how to disable bootloader installation (vpodzime) +- Fix a bug unmounting /boot on efi+atomic installs. (clumens) +- Refactor handling of fsCombo considerations. (amulhern) +- Be more restrictive displaying btrfs device type. (amulhern) +- Get rid of unnecessary raid_level variable (amulhern) +- Use Size, not int, for size (#1076055) (amulhern) +- Remove an unused import (dshea) +- Don't automatically select environments for kickstart installs (#1018226) + (dshea) +- Initialize the GUI lock in a way that doesn't break the API (dshea) +- Don't check enabledPlugins if plugins are not yet enabled (#1142544) (dshea) +- Add transifex branch check to makebumpver (bcl) +- Get rid of an unused variable in the localization test. (clumens) +- Don't strip accents from the user-inputted keyboard string (dshea) +- Convert strings to unicode in have_word_match (#1146581) (dshea) +- Use translated versions of the AM/PM strings consistently (vpodzime) +- Import GUI-specific stuff only when running GUI in entropy handling + (vpodzime) +- Always store the information about display mode in ksdata (vpodzime) +- Connect signals to handlers for day/month/year changes (vpodzime) +- Switch to using the new help content path (#1072033) (mkolman) +- Remove unused variables in the datetime_spoke.py module (vpodzime) +- Add nombr to anaconda to suppress updating MBR (#886502) (gczarcinski) +- Make the date format locale-dependent in our GUI (#1044233) (vpodzime) +- A function for resolving date format and order (vpodzime) +- Make device/fs type comboboxes take less space (vpodzime) +- Skip running efibootmgr for noefi mode (#1047904) (bcl) +- Fix a race between checking for Gtk.main_level and running Gtk.main (dshea) +- Allow recursive lightbox calls (#1147337) (dshea) +- Disable the ntp service with --nontp (#1135768) (dshea) + +* Wed Oct 08 2014 Brian C. Lane - 22.8-1 +- Add a test case for if all anaconda's Requires exist. (clumens) +- Only allow one anaconda instance (#1146735) (dshea) +- Ignore partition start if there is a biosboot partition (#1044849) (bcl) +- Remove duplicates when adding new devices (#887526) (bcl) +- Trim changelog entries from spec file (bcl) +- We now need to specify an epoch for the python-blivet version requires. + (clumens) +- Remove the last references to tzmapdata (dshea) +- Add VNC to the ostree test arguments. (clumens) +- Fix autotools rules to properly include help placeholders (#1072033) + (mkolman) +- Ignore an accelerator conflict between two Modify labels. (clumens) +- s390x: show dialog if kernel cmdline in zipl.conf is too long. + (sbueno+anaconda) +- Convert process watching to use GLib before we start a main loop (dshea) +- Convert python signal handlers to GLib signal handlers (dshea) +- Reorganize the right side of the Custom spoke (#1094856) (vpodzime) +- Graphically handle errors arising from ostree repo pull problems. (clumens) +- Fix file name of the entropy dialog in POTFILES.in (vpodzime) +- Add support for thin pool profile specification in kickstart (vpodzime) +- Require minimum random data entropy when creating LUKS (#1073679) (vpodzime) +- Give blivet callbacks for reporting partitioning progress (vpodzime) +- Really exit when "Exit installer" in the error dialog is clicked (vpodzime) +- NM-wifi is missing on s390(x) (dan) + +* Tue Sep 30 2014 Brian C. Lane - 22.7-1 +- Fix Welcome spoke not showing up during kickstart installation (#1147943) + (mkolman) +- Don't allow /boot on lvm on s390x. (sbueno+anaconda) +- Handle failures to instantiate storage devices when parsing kickstart. + (dlehman) +- Add the new langsupport.py TUI spoke to POTFILES.in. (clumens) +- Remove the now-unused imports of storageInitialize. (clumens) +- Add support for language selection in text mode. (sbueno+anaconda) +- packaging: handle new NFS installation source with inst.stage2=nfs:... + (wwoods) +- Allow cdrom-swapping when doing "inst.ks=cdrom[:...]" (wwoods) +- anaconda-lib.sh: add tell_user() and dev_is_cdrom() (wwoods) +- Don't force a user to return to the storage spoke after dasdfmt + (sbueno+anaconda) +- Don't run storageInitialize after dasdfmt (sbueno+anaconda) +- Shut up, parallel (dshea) +- Really fix unexpected exits in execReadlines (dshea) +- Add a context manager for executing code while UI signals are blocked. + (clumens) +- Avoid the possibility of size variables being unset (#1146585) (dshea) +- s390x: Apply disk selection before dasdfmt to preserve data. + (sbueno+anaconda) +- Fix a bad use of WIFSIGNALED (dshea) +- Handle 0's returned by Gdk (dshea) +- Adapt to corrected interpetation of logvol --percent. (dlehman) +- Always use iutil to start processes. (dshea) +- Move the X startup logic to iutil (dshea) +- Move process watching to iutil. (dshea) +- Close file descriptors while daemonizing auditd (dshea) +- Add an option to only capture stdout with execWithCapture (dshea) +- Simplify iutil.execReadlines. (dshea) +- Add close_fds to the Popen call. (dshea) +- Add an option to startProgram to reset signal handlers. (dshea) +- Add a method startProgram to handle process starting (dshea) +- Lock program_log_lock closer to where the log is written. (dshea) +- Record early crashes to ipmi (dshea) +- Clear the list of watched PIDs before exiting. (dshea) +- Remove the exitCode parameter from exitHandler. (dshea) +- Warn about uses of the string module. (dshea) +- Import _ from the i18n module instead of hand-crafting a copy of it (dshea) +- Import gettext in iutil instead of passing the module reference to iutil + (dshea) +- Fix a typo in a comment (dshea) +- When running on HiDPI monitors, scale anaconda by a factor of 2 (dshea) +- Sort the contents of the file system type combo box. (clumens) +- Remove the border on the layout testing box. (clumens) +- Explain what the IPMI constants mean. (clumens) +- Don't attempt terminal size detection on the s390 (#1145065) (mkolman) +- Don't show the Add DASD button unless on s390x. (sbueno+anaconda) +- Don't show the Add DASD button unless on s390x. (sbueno+anaconda) +- Preserve network args on s390x. (sbueno+anaconda) + +* Fri Sep 19 2014 Brian C. Lane - 22.6-1 +- Don't call storage.write for dirinstall (#1120206) (bcl) +- Fix pylint warning from a recent commit. (dlehman) +- Fix the link to the help-button-clicked signal (dshea) +- Assign mnemonics to two checkboxes on the user spoke that didn't have them. + (clumens) +- Remove "MB" from the size string on the HDISO combo box. (clumens) +- Use _Cancel and _Continue mnemonics on these two screens. (clumens) +- Rename to be the TIME & DATE spoke. (clumens) +- Ok -> OK on the proxy dialog. (clumens) +- Handle cancellation of new container creation. (dlehman) +- Reflect previous custom/autopart selection in the storage spoke. (dlehman) +- Clear out custom storage ksdata after first attempt to apply it. (dlehman) +- Pass size as Size when adjusting container after device removal. (#1141707) + (dlehman) +- Set flags.rescue_mode not anaconda.rescue (#1143056) (amulhern) +- Split localed's converted layouts and variants (#1073825) (vpodzime) +- Rename variable to not with a built-in (mkolman) +- Create free space snapshot before doing custom->autopart (vpodzime) +- Deprecate RUNKS cmdline option. (sbueno+anaconda) +- Show help also when alt+F1 is pressed (mkolman) +- Support display of the custom mnemonics on the help button (mkolman) +- Activate the built-in help when F1 is pressed (mkolman) +- Specify help file names for hubs and spokes (mkolman) +- Add a help button to every Anaconda screen (mkolman) +- Don't call BusyCursor before Gdk is setup (#1078868) (bcl) +- Fix SELINUX_DEFAULT import (#1137049) (bcl) +- Catch and rethrow BTRFSValueError as KickstartException (#1019685) (amulhern) +- Bump version so BTRFSValueError is found (#1019685) (amulhern) +- Don't change langpacks config of installer environment (#1066017) (rvykydal) +- network: fix typo 'Private ksy pasword' (#1120374) (rvykydal) +- Fix up a string style issue found in the last network commits. (clumens) +- network: WPA Enterprise: don't ask twice for password (#1120374) (rvykydal) +- network: add support for WPA Enterprise (#1120374) (rvykydal) +- network: add s390 network ifcfg options also for bond slaves (#1090558) + (rvykydal) +- network: copy resolv.conf to chroot before installing packages (#1048520) + (rvykydal) +- network: don't crash, just log for unrecognized bond options (#1039006) + (rvykydal) +- network: don't traceback on invalid team options (#1114282) (rvykydal) +- network: don't write HWADDR in ifcfgs generated by kickstart (#1130042) + (rvykydal) +- Re-order the tz's in text mode to mirror the graphical order. + (sbueno+anaconda) +- Apply a better check for whether to fail if authconfig is missing. (clumens) +- driver-updates: fix backspace/delete in dd menus (#1080380) (wwoods) +- Fix an issue with bad NFS info specified in source spoke. (sbueno+anaconda) +- Fix the SIGSEGV handler (dshea) +- Remove argument handling from methods without arguments (dshea) +- Warn if software selection size exceeds available space. (sbueno+anaconda) +- X doesn't start when making the livecd on the GUI test either. (clumens) +- Handle spaces in inst.repo, kickstart nfs, and url commands (#1109933) (bcl) +- Fix that urllib2 problem more thoroughly. (clumens) +- Fix a problem where urllib2 is not getting pulled into the initrd. (clumens) +- Specify thin pool metadata/chunk size only if given by user (#1140635) + (vpodzime) +- Fix q for quit issue in text mode (#997405) (sbueno+anaconda) +- Additional message if kickstart was used but did not finish (#1117908) + (amulhern) +- Move some statically detectable kickstart errors out of anaconda (#1117908) + (amulhern) +- Use only the digits from productVersion (bcl) +- If a kickstart installation stops because it doesn't know something, log + that. (clumens) +- Don't care about crash args in bootloader (#1116323) (vpodzime) + +* Wed Sep 10 2014 Brian C. Lane - 22.5-1 +- Fix noselinux cmdline default (#1137049) (bcl) +- Revert productName repo name change (#1128474) (bcl) +- Remove the --disable-overwrite parameter for the Transifex client (mkolman) +- Do not try to disable no firstboot services (#1139621) (vpodzime) +- Snapshot free space after clearpart for swap suggestion (#1132436) (vpodzime) +- Really fix an enlightbox call. (dshea) +- Correct issues merged from rhel-7 (dshea) +- A couple updates to installclasses. (clumens) +- Clear the kickstart password if cleared by the user (#1133185) (dshea) +- Change the accelerator key for Add DASD label. (sbueno+anaconda) +- Add dialog box for adding DASDs. (sbueno+anaconda) +- Add a button for adding an ECKD DASD. (sbueno+anaconda) +- Let finding install classes be more flexible for Fedora (#1138820). (clumens) +- fix inst.virtiolog (#1074499) (wwoods) +- Display container sizes to just two places, as well. (clumens) +- Fix two minor things on the source spoke. (clumens) +- border_width=5 -> border_width=6 in dasdfmt.glade. (clumens) +- Use first part of Product for UEFI entry (#1128474) (bcl) +- We can't pass "text" in the ostree .ks file because lmc doesn't like that. + (clumens) +- Remove inactive languages from LINGUAS. (dshea) +- Do the ostree test in text mode for now. (clumens) +- Skip nvram update on ppc64 image/dir installations (#1136486) (bcl) +- Use first part of Product as repo name (#1128474) (bcl) +- makeupdates: Report git diff errors (bcl) +- For yum-based installs, move the progress bar while packages are installing. + (clumens) +- Remove the mnemonics from the custom part toolbar. (clumens) +- Remove references to ia64. (clumens) +- Change a confusing string in TUI NFS configuration screen. (#1057690) + (sbueno+anaconda) +- Fix two problems with the volume label and combo on custom partitioning. + (clumens) +- Disable the Modify SW link on livecd installs (#1133726). (clumens) +- Require dmidecode for ARM (#1134651, jdisnard). (clumens) +- Require a larger /boot (#1129629). (clumens) +- Use suggested-action on more buttons (#1131254) (dshea) +- CmdlineError should exit with a 1 (bcl) +- Let gtk determine the allocation for overlays. (dshea) + +* Wed Aug 27 2014 Brian C. Lane - 22.4-1 +- jwb would like us to be clear that bugs could be the system firmware... + (pjones) +- Fix installing from a second iso (#1040722) (bcl) +- Remove anaconda_make_pixbuf (dshea) +- Trick automake into taking our wildcards (dshea) +- Distribute the right docs files (vpodzime) +- Require anaconda-widgets from anaconda-widgets-devel (dshea) +- Run /sbin/ldconfig when installing or uninstalling anaconda-widgets (dshea) +- Remove the shebang from anaconda.py (dshea) +- Exclude the compiled text and rescue files from anaconda-core (dshea) +- Update our copy of the GPL (dshea) +- Remove unused methods from packaging.Payload (dshea) +- Rearrange the entry, example and tip on Advanced User dialog (vpodzime) +- Change our docs that are close to ReST to proper ReST (vpodzime) +- Remove old outdated docs nobody should read (vpodzime) +- Send run-hub and run-spoke into the great beyond (dshea) +- Use one thread for payload setup. (dshea) +- Remove logging to tty3 and tty5 (#1073336) (bcl) +- Make missing encryption key error message more helpful (#1074441) (amulhern) +- Fix problems with the hdiso method. (clumens) +- Update makebumpver to include flags on first request (bcl) + +* Fri Aug 15 2014 Brian C. Lane - 22.3-1 +- Add some tests for execReadlines (dshea) +- Remove iutil.fork_orphan (dshea) +- Move non-exec tests into a separate class. (dshea) +- Write storage after liveimg install (#1080396) (bcl) +- Add an option to makebumpver to skip all checks. (clumens) +- Write sslverify=0 for url kickstart method (#1116858) (bcl) +- Add noverifyssl and proxy support to dracut ks handling (#1116858) (bcl) +- Log installation successes and failures via ipmitool (#782019). (clumens) +- Default the OK button on the iscsi dialog to insensitive. (clumens) +- Add repo --install support to DNF (#1119867) (bcl) +- Install selected ks repos to target (#1119867) (bcl) +- Add check for the format of grub2 encrypted password (#1070327) (bcl) +- Add some sanity checking to live payload (vpodzime) +- Use blivet's getFreeSpace for limitting automatic swap size (vpodzime) +- Ask users for enough space right at the first time (#876916) (vpodzime) +- Use low level file i/o for rpm callback logging (#1035745) (bcl) +- In tui cmdline mode skip showError and log message (bcl) +- Modify nm to return defaults when no dbus is available (bcl) +- Skip networkInitialize for image and dir installations (bcl) +- Ignore safe_dbus errors in keyboard setup (bcl) +- Skip syslog for dirinstall (bcl) +- Clear out errors at the beginning of _save_right_side. (clumens) +- Filter empty comps groups from both specific and generic lists (dshea) +- Add a test for disadvised words. (dshea) +- Mountpoint encrypted checkbox reflects container state (#1000031) (bcl) +- Display a fatal error if unable to encrypt a password. (dshea) +- Change strings per stylistic advice from ECS (dshea) +- Untranslate the type column of the network device type combobox (dshea) +- Add more information to the custom part summary dialog (#975804). (clumens) +- Don't require user creation when root is locked (#1030626) (bcl) +- Import LUKSDeviceWithoutKeyError from the right place (vpodzime) +- Move _verifyLUKSDevicesHaveKey to Anaconda's codebase (vpodzime) +- Fix issues reported by pyflakes (vpodzime) + +* Thu Jul 31 2014 Brian C. Lane - 22.2-1 +- Return NULL on error in doSetSystemTime. (dshea) +- Remove the /usr/bin/liveinst symlink during uninstall (dshea) +- Highlight languages in langsupport that contain selected locales (dshea) +- Add a wrapper function for GtkTreeViewColumn.set_cell_data_func (dshea) +- Remove the STANDALONE #ifdef from auditd. (dshea) +- Mark zRAM devices as protected and ignore them (vpodzime) +- Make storage sanity check aware of base RAM requirements (#1123466) + (vpodzime) +- Move sanityCheck code to anaconda's codebase (vpodzime) +- Clean up stylesheet comments (dshea) +- Resurrect auditd (dshea) +- Fix the spacing on the non-verbose doc building messages (dshea) +- Switch to kinder, gentler autoconf errors (dshea) +- Clean up the handling of CFLAGS (dshea) +- Remove unused parts of the configure.ac files. (dshea) +- Add a couple of configure checks from autoscan (dshea) +- Include config.h in every C file. (dshea) +- Use the result from AC_FUNC_FORK at build time (dshea) +- Don't distribute the gnome desktop file with translations (dshea) +- Build documentation during build instead of dist (dshea) +- Do not multiply/divide RAM sizes by 1024 back and forth (vpodzime) +- Raise exception if reading lines from a killed process (vpodzime) +- Use zRAM swap up to 2 GB of RAM (vpodzime) +- RAM requirements depend on squashfs.img's origin (vpodzime) + +* Fri Jul 25 2014 Brian C. Lane - 22.1-1 +- Add platform specific group selection (#884385) (bcl) +- Use parallel instead of xargs (vpodzime) +- Solidify the row separator in the welcome spoke. (dshea) +- Don't skip cpfmtxa formatted dasds if zerombr specified in ks. (#1073982) + (sbueno+anaconda) +- Fix TUI error message regarding username creation. (#1058637) + (sbueno+anaconda) +- Determine the lang selected arrow direction at render time (dshea) +- Lessen the visible resize when entering the welcome and lang spokes (dshea) +- Reset the want_x flag after the memory check (vpodzime) +- Fix crash caused by passing kwargs to log functions (vpodzime) +- Check graphical RAM requirements if running graphical installation (vpodzime) +- Document the inst.zram boot option (vpodzime) +- Adapt the memory requirements to zRAM swap usage (vpodzime) +- Remove an unused MEM-related constant and use the other one (vpodzime) +- Add a script for showing stats about zRAM (vpodzime) +- Set widgets to be focused when entering a spoke. (#1121285) (dshea) +- Allow a wider variety of mountpoints (#1109143) (dshea) +- Restrict the selected and insensitive style rules to anaconda widgets (dshea) +- Log more details about collect failure (bcl) +- Prevent crashes due to accessing X server from multiple threads (vpodzime) +- Add vnc to the arguments to qemu for the GUI testing. (clumens) +- Remove a commented out import (mkolman) diff --git a/anaconda/autogen.sh b/anaconda/autogen.sh index 5911b56..1fc3525 100755 --- a/anaconda/autogen.sh +++ b/anaconda/autogen.sh @@ -1,6 +1,5 @@ #!/bin/bash -e [ -d m4 ] || mkdir m4 -autopoint --force libtoolize --copy --force aclocal -I m4 autoconf diff --git a/anaconda/configure.ac b/anaconda/configure.ac index 69d0ec0..05e4abc 100644 --- a/anaconda/configure.ac +++ b/anaconda/configure.ac @@ -14,13 +14,11 @@ # # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . -# -# Author: David Cantrell m4_define(python_required_version, 3.4) AC_PREREQ([2.63]) -AC_INIT([anaconda], [23.19.10], [anaconda-devel-list@redhat.com]) +AC_INIT([anaconda], [25.20.9], [anaconda-devel-list@redhat.com]) # Disable building static libraries. # This needs to be set before initializing automake @@ -43,34 +41,13 @@ AC_PROG_LN_S AC_PROG_LIBTOOL AC_PROG_MKDIR_P -# Check for the intltool programs -# These checks and subsitutions are adapted IT_PROG_INTLTOOL provided in -# intltool.m4, but without the parts where it breaks gettext. -AC_PATH_PROG([INTLTOOL_EXTRACT], [intltool-extract]) -AC_PATH_PROG([INTLTOOL_MERGE], [intltool-merge]) -AS_IF([test -z "$INTLTOOL_EXTRACT" -o -z "$INTLTOOL_MERGE"], - [ANACONDA_SOFT_FAILURE([intltool not found])]) - -# Add the bits for Makefile rules -INTLTOOL_V_MERGE='$(INTLTOOL__v_MERGE_$(V))' -INTLTOOL__v_MERGE_='$(INTLTOOL__v_MERGE_$(AM_DEFAULT_VERBOSITY))' -INTLTOOL__v_MERGE_0='@echo " ITMRG " $@;' -INTLTOOL_V_MERGE_OPTIONS='$(intltool__v_merge_options_$(V))' -intltool__v_merge_options_='$(intltool__v_merge_options_$(AM_DEFAULT_VERBOSITY))' -intltool__v_merge_options_0='-q' -AC_SUBST(INTLTOOL_V_MERGE) -AC_SUBST(INTLTOOL__v_MERGE_) -AC_SUBST(INTLTOOL__v_MERGE_0) -AC_SUBST(INTLTOOL_V_MERGE_OPTIONS) -AC_SUBST(intltool__v_merge_options_) -AC_SUBST(intltool__v_merge_options_0) - -INTLTOOL_DESKTOP_RULE='%.desktop: %.desktop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' -AC_SUBST(INTLTOOL_DESKTOP_RULE) - -AM_GNU_GETTEXT([external]) -# Also update in gettextver in anaconda.spec.in -AM_GNU_GETTEXT_VERSION([0.18.3]) +# Check for the gettext programs +AC_PATH_PROG([XGETTEXT], [xgettext]) +AC_PATH_PROG([MSGFMT], [msgfmt]) +AC_PATH_PROG([MSGMERGE], [msgmerge]) +AC_PATH_PROG([MSGCAT], [msgcat]) +AS_IF([test -z "$XGETTEXT" -o -z "$MSGFMT" -o -z "$MSGMERGE" -o -z "$MSGCAT"], + [ANACONDA_SOFT_FAILURE([gettext not found])]) # Checks for header files. AC_CHECK_HEADERS([fcntl.h stdlib.h string.h sys/time.h unistd.h], @@ -147,7 +124,7 @@ AC_CONFIG_FILES([Makefile data/window-manager/Makefile data/window-manager/config/Makefile data/window-manager/theme/Makefile - po/Makefile.in + po/Makefile scripts/Makefile pyanaconda/Makefile pyanaconda/version.py @@ -166,6 +143,7 @@ AC_CONFIG_FILES([Makefile pyanaconda/ui/tui/spokes/Makefile pyanaconda/ui/tui/Makefile data/post-scripts/Makefile + data/pixmaps/Makefile tests/Makefile utils/Makefile utils/dd/Makefile]) diff --git a/anaconda/data/Makefile.am b/anaconda/data/Makefile.am index 557016d..15a0767 100644 --- a/anaconda/data/Makefile.am +++ b/anaconda/data/Makefile.am @@ -14,10 +14,8 @@ # # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . -# -# Author: Martin Sivak -SUBDIRS = command-stubs liveinst systemd post-scripts window-manager +SUBDIRS = command-stubs liveinst systemd post-scripts pixmaps window-manager CLEANFILES = *~ diff --git a/anaconda/data/anaconda-gtk.css b/anaconda/data/anaconda-gtk.css index e96a0ba..07f1b2d 100644 --- a/anaconda/data/anaconda-gtk.css +++ b/anaconda/data/anaconda-gtk.css @@ -8,59 +8,26 @@ * default, but it defines them for level bars using a continuous value between * 0 and 1, so our discrete level bars are effectively always at the "high" * level. - * - * Fun surprises that might change in future versions: - * - * - Defining properties for a level will set properties on both the filled - * portion and the empty portion of the level bar. So if all of the display - * properties are set, which we do, the level bar effectively becomes 100% - * filled with whatever properties are set. Copying the .empty-fill-block - * properties from the theme so that they apply at the application level - * works around this. - * - * - There's a bug in the handling of the maximum offset in that it only - * applies when value == max-value, rather than when it's between - * max-value and the next lower offset. For example, consider a - * discrete-mode level bar with a max-value of 4 and offsets defined as - * "low": 2.0, "medium": 3.0 and "high": 4.0. Value 1 will be low, - * value 2 will be medium, value 3 will be in an undefined no-man's land, - * and value 4 will be high. To get around this we re-define the default - * fill-block values as the same as fill-block.level-high. - * - * - The GNOME Adwaita theme applies a gradient to the progress bar when the - * window is focused. It does this by redefining the colors in a - * background-image property, so unless we reset background-image our colors - * will only apply when the window is out of focus, which uses the :backdrop - * selector. */ @define-color anaconda_level_bar_low red; @define-color anaconda_level_bar_medium orange; @define-color anaconda_level_bar_high green; -.level-bar.fill-block.level-low { +levelbar.discrete trough block.filled.low { border-color: darker(@anaconda_level_bar_low); - background-color: @anaconda_level_bar_low; - background-image: none; + background: @anaconda_level_bar_low; } -.level-bar.fill-block.level-medium { +levelbar.discrete trough block.filled.medium { border-color: darker(@anaconda_level_bar_medium); - background-color: @anaconda_level_bar_medium; - background-image: none; + background: @anaconda_level_bar_medium; } -.level-bar.fill-block, -.level-bar.fill-block.level-high { +levelbar.discrete trough block.filled.full, +levelbar.discrete trough block.filled.high { border-color: darker(@anaconda_level_bar_high); - background-color: @anaconda_level_bar_high; - background-image: none; -} - -.level-bar.fill-block.empty-fill-block { - background-color: transparent; - background-image: none; - border-color: alpha(#000000, 0.1); + background: @anaconda_level_bar_high; } /* As of gnome-themes-standard 3.9.90, the Adwaita theme uses the same color @@ -158,44 +125,12 @@ AnacondaSpokeWindow #nav-box { background-color: @fedora; } -/* These rules were removed when the Adwaita theme moved from - * gnome-themes-standard to gtk. The selectors had been wildcards, but after - * the move they were replaced with more specific selectors. We need to apply - * the old style to anconda's custom widgets in order for the selection - * highlight and insensitive shading to appear. - */ -@define-color anaconda_selected_bg_color #4a90d9; -@define-color anaconda_selected_fg_color #ffffff; - -AnacondaMountpointSelector:selected, -AnacondaDiskOverview:selected, -AnacondaSpokeSelector:selected, -AnacondaMountpointSelector:selected:focus, -AnacondaDiskOverview:selected:focus, -AnacondaSpokeSelector:selected:focus { - background-color: @anaconda_selected_bg_color; - color: @anaconda_selected_fg_color; -} - -@define-color anaconda_insensitive_bg_color #f4f4f2; -@define-color anaconda_insensitive_fg_color #a7aba7; -@define-color anaconda_internal_element_color #888a85; -@define-color anaconda_insensitive_borders shade(@anaconda_internal_element_color, 1.37); - -AnacondaMountpointSelector:insensitive, -AnacondaDiskOverview:insensitive, -AnacondaSpokeSelector:insensitive { - background-color: @anaconda_insensitive_bg_color; - color: @anaconda_insensitive_fg_color; - border-color: @anaconda_insensitive_borders; -} - /* When multi-column GtkTreeViews set a row separator, the horizontal-separator * style property is still applied to the row separator, breaking the row * separator up for each column. It looks kind of dumb. Provide a way to not do * that. */ -GtkTreeView.solid-separator { +treeview.solid-separator { -GtkTreeView-horizontal-separator: 0; } diff --git a/anaconda/data/anaconda_options.txt b/anaconda/data/anaconda_options.txt index de13323..5df7928 100644 --- a/anaconda/data/anaconda_options.txt +++ b/anaconda/data/anaconda_options.txt @@ -30,10 +30,11 @@ syntax see the Anaconda options wiki page: http://fedoraproject.org/wiki/Anacond kickstart Gives the local file path to use for kickstart. Normally only used when running anaconda -from the cmdline. +from the cmdline. This option is not supported for live installations. rescue -Start the rescue environment instead of installation. +Start the rescue environment instead of installation. This option is not supported for +live installations. armplatform Can be used to specify the ARM platform for the installation by passing the appropriate PLATFORM_ID. @@ -109,6 +110,9 @@ lang Language to use for the installation. LANG should be a language code which is valid to be used with the lang kickstart command. +singlelang +Install in single language mode - no interactive options for language configuration will be available. + loglevel Set the minimum level required for messages to be logged on a terminal (log files always contain messages of all levels). Values for LEVEL are "debug", "info", "warning", "error", @@ -234,3 +238,14 @@ be retried if there is no listener (ie. won't block the installation). kexec Reboot the system using kexec with the new kernel and initrd. This will result in a faster reboot by skipping the BIOS/Firmware and bootloader steps. + +nosave +This option controls what installation results should not be saved to the installed system, +valid values are: "input_ks", "output_ks", "all_ks", "logs" and "all". +The "input_ks" value disables saving of the input kickstart (if any), "output_ks" disables saving of the output +kickstart generated by Anaconda, "all_ks" disables saving of both input and output kickstarts, "logs" disables saving +of all installation logs and "all" disables saving of all kickstarts and all logs. Multiple values can be combined +as a comma separated list, for example: "all_ks,logs" + +legacygrub +Enable legacygrub (for installing older OSes). You probably do not want this. diff --git a/anaconda/data/command-stubs/Makefile.am b/anaconda/data/command-stubs/Makefile.am index 2ad8511..b201be0 100644 --- a/anaconda/data/command-stubs/Makefile.am +++ b/anaconda/data/command-stubs/Makefile.am @@ -14,8 +14,6 @@ # # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . -# -# Author: David Cantrell commandstubsdir = $(datadir)/$(PACKAGE_NAME) dist_commandstubs_SCRIPTS = $(srcdir)/*-stub diff --git a/anaconda/data/command-stubs/list-harddrives-stub b/anaconda/data/command-stubs/list-harddrives-stub index 2a763ac..3beb344 100755 --- a/anaconda/data/command-stubs/list-harddrives-stub +++ b/anaconda/data/command-stubs/list-harddrives-stub @@ -2,7 +2,7 @@ # # scan system for harddrives and output device name/size # -# Copyright (C) 2007, 2009 Red Hat, Inc. All rights reserved. +# Copyright (C) 2007-2016 Red Hat, Inc. All rights reserved. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -19,12 +19,42 @@ # import sys +import os +import stat import parted +# The list-harddrives script is primarily meant for use in the +# kickstart %post scriptlets for listing all individual harddrives +# on the system. +# +# For more information check the docs/list-harddrives.rsh file +# in the Anaconda source code. + +def check_device(device): + if stat.S_ISBLK(os.stat(device.path).st_mode): + # exclude device mapper devices + if device.type == parted.DEVICE_DM: + return False + # exclude block devices for CD/DVD disks + elif device.path.startswith("/dev/sr"): + return False + # exclude zram block devices + elif device.path.startswith("/dev/zram"): + return False + # exclude software raid block devices + elif device.path.startswith("/dev/md"): + return False + # the remaining block devices should be fine + else: + return True + else: + # ignore everything that is not a block device + return False + def main(argv): lst = set() - for dev in filter(lambda d: d.type != parted.DEVICE_DM and not d.path.startswith("/dev/sr"), parted.getAllDevices()): + for dev in filter(check_device, parted.getAllDevices()): if dev.path.startswith("/dev/"): path = dev.path[5:] else: diff --git a/anaconda/data/liveinst/Makefile.am b/anaconda/data/liveinst/Makefile.am index c4becd0..65f2a4e 100644 --- a/anaconda/data/liveinst/Makefile.am +++ b/anaconda/data/liveinst/Makefile.am @@ -14,8 +14,6 @@ # # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . -# -# Author: David Cantrell SUBDIRS = console.apps gnome pam.d @@ -23,28 +21,33 @@ if IS_LIVEINST_ARCH dist_sbin_SCRIPTS = liveinst desktopdir = $(datadir)/applications -desktop_DATA = liveinst.desktop +dist_desktop_DATA = liveinst.desktop + +dist_libexec_SCRIPTS = liveinst-setup.sh -xinitdir = $(sysconfdir)/X11/xinit/xinitrc.d -dist_xinit_SCRIPTS = zz-liveinst.sh +autostartdir = $(sysconfdir)/xdg/autostart +dist_autostart_DATA = liveinst-setup.desktop install-exec-local: $(MKDIR_P) $(DESTDIR)$(bindir) $(LN_S) consolehelper $(DESTDIR)$(bindir)/liveinst +# Merge translations into the desktop file +# Use the merged translations in $(builddir). If no merged translations exist, +# just exit. +install-data-hook: + for p in $(top_builddir)/po/*.mpo ; do \ + [ -e $$p ] || exit 0 ; \ + $(MSGFMT) --desktop --template=$(DESTDIR)$(desktopdir)/liveinst.desktop \ + --locale=$$(basename $$p .mpo) \ + -o $(DESTDIR)$(desktopdir)/liveinst.desktop.new $$p || exit 1 ; \ + mv $(DESTDIR)$(desktopdir)/liveinst.desktop.new $(DESTDIR)$(desktopdir)/liveinst.desktop || exit 1 ; \ + done + uninstall-local: rm -f $(DESTDIR)$(bindir)/liveinst endif -EXTRA_DIST = README liveinst.desktop.in - -CLEANFILES = liveinst.desktop *.h +EXTRA_DIST = README MAINTAINERCLEANFILES = Makefile.in - -@INTLTOOL_DESKTOP_RULE@ - -# Files generated for gettext need to be included in the distribution -EXTRA_DIST += $(srcdir)/liveinst.desktop.in.h -$(srcdir)/liveinst.desktop.in.h: $(srcdir)/liveinst.desktop.in - @$(MAKE) -C $(top_builddir)/po $(abs_top_srcdir)/$(subdir)/$$(basename $@) diff --git a/anaconda/data/liveinst/console.apps/Makefile.am b/anaconda/data/liveinst/console.apps/Makefile.am index 9f15979..609d564 100644 --- a/anaconda/data/liveinst/console.apps/Makefile.am +++ b/anaconda/data/liveinst/console.apps/Makefile.am @@ -14,18 +14,11 @@ # # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . -# -# Author: David Cantrell if IS_LIVEINST_ARCH consoledir = $(sysconfdir)/security/console.apps dist_console_DATA = liveinst endif -# -# Files generated for gettext need to be included in the distribution -EXTRA_DIST = $(srcdir)/liveinst.h -$(srcdir)/liveinst.h: $(srcdir)/liveinst - @$(MAKE) -C $(top_builddir)/po $(abs_top_srcdir)/$(subdir)/$$(basename $@) CLEANFILES = *.h MAINTAINERCLEANFILES = Makefile.in diff --git a/anaconda/data/liveinst/gnome/Makefile.am b/anaconda/data/liveinst/gnome/Makefile.am index 861f5b1..949b891 100644 --- a/anaconda/data/liveinst/gnome/Makefile.am +++ b/anaconda/data/liveinst/gnome/Makefile.am @@ -14,24 +14,26 @@ # # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . -# -# Author: Kalev Lember welcomedir = $(datadir)/$(PACKAGE_NAME)/gnome -dist_welcome_DATA = install-button.png -dist_welcome_SCRIPTS = fedora-welcome -welcome_DATA = fedora-welcome.desktop - -EXTRA_DIST = fedora-welcome.desktop.in - -CLEANFILES = fedora-welcome.desktop +dist_welcome_DATA = install-button.png fedora-welcome.desktop +dist_welcome_SCRIPTS = fedora-welcome.js MAINTAINERCLEANFILES = Makefile.in -@INTLTOOL_DESKTOP_RULE@ +# Merge the translations into the desktop file +# Use the merged translations in $(builddir). If no merged translations exist, +# just exit. +# Rename fedora-welcome.js to just fedora-welcome +install-data-hook: + for p in $(top_builddir)/po/*.mpo ; do \ + [ -e $$p ] || exit 0 ; \ + $(MSGFMT) --desktop --template=$(DESTDIR)$(welcomedir)/fedora-welcome.desktop \ + --locale=$$(basename $$p .mpo) \ + -o $(DESTDIR)$(welcomedir)/fedora-welcome.desktop.new $$p || exit 1 ; \ + mv $(DESTDIR)$(welcomedir)/fedora-welcome.desktop.new $(DESTDIR)$(welcomedir)/fedora-welcome.desktop || exit 1 ; \ + done + cd $(DESTDIR)$(welcomedir) && mv fedora-welcome.js fedora-welcome -# Files generated for gettext need to be included in the distribution -EXTRA_DIST += $(srcdir)/fedora-welcome.po $(srcdir)/fedora-welcome.desktop.in.h -$(srcdir)/fedora-welcome.po $(srcdir)/fedora-welcome.desktop.in.h: \ - $(srcdir)/fedora-welcome $(srcdir)/fedora-welcome.desktop.in - @$(MAKE) -C $(top_builddir)/po $(abs_top_srcdir)/$(subdir)/$$(basename $@) +uninstall-hook: + -cd $(DESTDIR)$(welcomedir) && rm -f fedora-welcome diff --git a/anaconda/data/liveinst/gnome/fedora-welcome.desktop.in b/anaconda/data/liveinst/gnome/fedora-welcome.desktop.in deleted file mode 100644 index aebaf50..0000000 --- a/anaconda/data/liveinst/gnome/fedora-welcome.desktop.in +++ /dev/null @@ -1,8 +0,0 @@ -[Desktop Entry] -_Name=Welcome to Fedora -Exec=/usr/share/anaconda/gnome/fedora-welcome -Terminal=false -Type=Application -StartupNotify=true -NoDisplay=true -X-GNOME-Autostart-enabled=true diff --git a/anaconda/data/liveinst/gnome/fedora-welcome b/anaconda/data/liveinst/gnome/fedora-welcome.js similarity index 99% rename from anaconda/data/liveinst/gnome/fedora-welcome rename to anaconda/data/liveinst/gnome/fedora-welcome.js index c4834e7..42670c4 100755 --- a/anaconda/data/liveinst/gnome/fedora-welcome +++ b/anaconda/data/liveinst/gnome/fedora-welcome.js @@ -16,9 +16,6 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * Authors: Cosimo Cecchi - * */ const Gdk = imports.gi.Gdk; diff --git a/anaconda/data/liveinst/liveinst b/anaconda/data/liveinst/liveinst index b5b776b..c2207a1 100755 --- a/anaconda/data/liveinst/liveinst +++ b/anaconda/data/liveinst/liveinst @@ -20,10 +20,6 @@ LIVE_INSTALL=0 IMAGE_INSTALL=0 -RESCUE=0 -if [[ "$LIVECMD $*" =~ "--rescue" ]]; then - RESCUE=1 -fi if [ -z "$LIVECMD" ]; then LIVE_INSTALL=1 @@ -134,6 +130,17 @@ for opt in `cat /proc/cmdline` $*; do echo "$text" >&2 fi ;; + rescue|--rescue) + title="Configuration not supported" + text="Rescue mode is not supported on live media. Please use the normal system tools to recover your system." + if which zenity &> /dev/null; then + zenity --warning --title="$title" --text="$text" + else + echo "$title" >&2 + echo "$text" >&2 + fi + exit 1 + ;; esac done @@ -179,6 +186,9 @@ if [ -z $LC_ALL ]; then export LC_ALL=$LANG fi +# Force the X11 backend since sudo and wayland do not mix +export GDK_BACKEND=x11 + if [ -x /usr/bin/udisks ]; then /usr/bin/udisks --inhibit -- $ANACONDA $* else @@ -189,7 +199,7 @@ if [ -e /tmp/updates ]; then rm -r /tmp/updates; fi if [ -e /tmp/updates.img ]; then rm /tmp/updates.img; fi # try to teardown the filesystems if this was an image install -if [ $IMAGE_INSTALL = 1 -a $RESCUE = 0 ]; then +if [ $IMAGE_INSTALL = 1 ]; then anaconda-cleanup fi diff --git a/anaconda/data/liveinst/liveinst-setup.desktop b/anaconda/data/liveinst/liveinst-setup.desktop new file mode 100644 index 0000000..90a5a0b --- /dev/null +++ b/anaconda/data/liveinst/liveinst-setup.desktop @@ -0,0 +1,9 @@ +[Desktop Entry] +Type=Application +Name=Liveinst Setup +TryExec=/usr/sbin/liveinst +Exec=/usr/libexec/liveinst-setup.sh +NoDisplay=true +X-GNOME-AutoRestart=false +X-GNOME-Autostart-Phase=Initialization +X-GNOME-Autostart-Notify=false diff --git a/anaconda/data/liveinst/liveinst-setup.sh b/anaconda/data/liveinst/liveinst-setup.sh new file mode 100755 index 0000000..104799f --- /dev/null +++ b/anaconda/data/liveinst/liveinst-setup.sh @@ -0,0 +1,14 @@ +#!/bin/bash +# Set up a launcher on the desktop for the live installer if we're on +# a live CD + +if [ ! \( -b /dev/mapper/live-base -o -b /dev/mapper/live-osimg-min \) ]; then + exit 0 +fi + +# Prevents breakage if the hostname is changed before or during the install +# Also lets us run (with the X11 backend) on Wayland +[ -x /usr/bin/xhost ] && xhost +si:localuser:root > /dev/null 2>&1 + +test -f ${XDG_CONFIG_HOME:-~/.config}/user-dirs.dirs && source ${XDG_CONFIG_HOME:-~/.config}/user-dirs.dirs +cp /usr/share/applications/liveinst.desktop "${XDG_DESKTOP_DIR:-$HOME/Desktop}" diff --git a/anaconda/data/liveinst/liveinst.desktop.in b/anaconda/data/liveinst/liveinst.desktop similarity index 54% rename from anaconda/data/liveinst/liveinst.desktop.in rename to anaconda/data/liveinst/liveinst.desktop index 0a30444..0ead8a7 100644 --- a/anaconda/data/liveinst/liveinst.desktop.in +++ b/anaconda/data/liveinst/liveinst.desktop @@ -1,11 +1,12 @@ [Desktop Entry] -_Name=Install to Hard Drive -_GenericName=Install -_Comment=Install the live CD to your hard disk +Name=Install to Hard Drive +GenericName=Install +Comment=Install the live CD to your hard disk Categories=System;Utility;X-Red-Hat-Base;X-Fedora;GNOME;GTK; Exec=/usr/bin/liveinst Terminal=false Type=Application +# TRANSLATORS: Icon name, probably should not be translated Icon=anaconda StartupNotify=true NoDisplay=true diff --git a/anaconda/data/liveinst/pam.d/Makefile.am b/anaconda/data/liveinst/pam.d/Makefile.am index cd1ad8c..a30f231 100644 --- a/anaconda/data/liveinst/pam.d/Makefile.am +++ b/anaconda/data/liveinst/pam.d/Makefile.am @@ -14,8 +14,6 @@ # # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . -# -# Author: David Cantrell if IS_LIVEINST_ARCH pamdir = $(sysconfdir)/pam.d diff --git a/anaconda/data/liveinst/zz-liveinst.sh b/anaconda/data/liveinst/zz-liveinst.sh deleted file mode 100755 index 137a754..0000000 --- a/anaconda/data/liveinst/zz-liveinst.sh +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/bash -# Set up a launcher on the desktop for the live installer if we're on -# a live CD - -# Prevents breakage if the hostname is changed before or during the install -[ -x /usr/bin/xhost ] && xhost +si:localuser:root > /dev/null 2>&1 - -# don't run on geode (olpc) -if [ `grep -c Geode /proc/cpuinfo` -eq 0 ]; then - if [ -b /dev/mapper/live-osimg-min ]; then - test -f ${XDG_CONFIG_HOME:-~/.config}/user-dirs.dirs && source ${XDG_CONFIG_HOME:-~/.config}/user-dirs.dirs - cp /usr/share/applications/liveinst.desktop "${XDG_DESKTOP_DIR:-$HOME/Desktop}" - elif [ -f /.livecd-configured ]; then # FIXME: old way... this should go away - test -f ${XDG_CONFIG_HOME:-~/.config}/user-dirs.dirs && source ${XDG_CONFIG_HOME:-~/.config}/user-dirs.dirs - cp /usr/share/applications/liveinst.desktop "${XDG_DESKTOP_DIR:-$HOME/Desktop}" - fi -fi diff --git a/anaconda/widgets/data/pixmaps/Makefile.am b/anaconda/data/pixmaps/Makefile.am similarity index 77% rename from anaconda/widgets/data/pixmaps/Makefile.am rename to anaconda/data/pixmaps/Makefile.am index fb9ee01..03c526e 100644 --- a/anaconda/widgets/data/pixmaps/Makefile.am +++ b/anaconda/data/pixmaps/Makefile.am @@ -1,6 +1,6 @@ # pixmaps/Makefile.am for anaconda # -# Copyright (C) 2009 Red Hat, Inc. +# Copyright (C) 2016 Red Hat, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published @@ -15,9 +15,9 @@ # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . # -# Author: David Cantrell - -pixmapsdir = $(datadir)/anaconda/pixmaps -dist_pixmaps_DATA = $(srcdir)/*.png $(srcdir)/*.svg +# Author(s): Vendula Poncova +# +pixmapsdir = $(datadir)/$(PACKAGE_NAME)/pixmaps +dist_pixmaps_DATA = anaconda-password-show-off.svg anaconda-password-show-on.svg MAINTAINERCLEANFILES = Makefile.in diff --git a/anaconda/data/pixmaps/anaconda-password-show-off.svg b/anaconda/data/pixmaps/anaconda-password-show-off.svg new file mode 100644 index 0000000..97c8220 --- /dev/null +++ b/anaconda/data/pixmaps/anaconda-password-show-off.svg @@ -0,0 +1,13 @@ + + + + + + diff --git a/anaconda/data/pixmaps/anaconda-password-show-on.svg b/anaconda/data/pixmaps/anaconda-password-show-on.svg new file mode 100644 index 0000000..85f33ee --- /dev/null +++ b/anaconda/data/pixmaps/anaconda-password-show-on.svg @@ -0,0 +1,21 @@ + + + + + + + + + + diff --git a/anaconda/data/post-scripts/99-copy-logs.ks b/anaconda/data/post-scripts/99-copy-logs.ks index ab8e9cb..b1fb895 100644 --- a/anaconda/data/post-scripts/99-copy-logs.ks +++ b/anaconda/data/post-scripts/99-copy-logs.ks @@ -1,12 +1,27 @@ # Note, this script log will not be copied to the installed system. %post --nochroot -mkdir -p $ANA_INSTALL_PATH/var/log/anaconda -for log in anaconda.log syslog X.log program.log packaging.log storage.log ifcfg.log yum.log dnf.log dnf.rpm.log; do - [ -e /tmp/$log ] && cp /tmp/$log $ANA_INSTALL_PATH/var/log/anaconda/ -done -cp /tmp/ks-script*.log $ANA_INSTALL_PATH/var/log/anaconda/ -journalctl -b > $ANA_INSTALL_PATH/var/log/anaconda/journal.log -chmod 0600 $ANA_INSTALL_PATH/var/log/anaconda/* +NOSAVE_INPUT_KS_FILE=/tmp/NOSAVE_INPUT_KS +NOSAVE_LOGS_FILE=/tmp/NOSAVE_LOGS +PRE_ANA_LOGS=/tmp/pre-anaconda-logs + +if [ -e ${NOSAVE_LOGS_FILE} ]; then + rm -f ${NOSAVE_LOGS_FILE} +else + mkdir -p $ANA_INSTALL_PATH/var/log/anaconda + for log in anaconda.log syslog X.log program.log packaging.log storage.log ifcfg.log lvm.log dnf.librepo.log hawkey.log; do + [ -e /tmp/$log ] && cp /tmp/$log $ANA_INSTALL_PATH/var/log/anaconda/ + done + [ -e /tmp/pre-anaconda-logs ] && cp -r $PRE_ANA_LOGS $ANA_INSTALL_PATH/var/log/anaconda + cp /tmp/ks-script*.log $ANA_INSTALL_PATH/var/log/anaconda/ + journalctl -b > $ANA_INSTALL_PATH/var/log/anaconda/journal.log + chmod 0600 $ANA_INSTALL_PATH/var/log/anaconda/* +fi + +if [ -e ${NOSAVE_INPUT_KS_FILE} ]; then + rm -f ${NOSAVE_INPUT_KS_FILE} +else + [ -e /run/install/ks.cfg ] && cp /run/install/ks.cfg $ANA_INSTALL_PATH/root/original-ks.cfg +fi %end diff --git a/anaconda/data/post-scripts/Makefile.am b/anaconda/data/post-scripts/Makefile.am index 8b0c946..ad2f649 100644 --- a/anaconda/data/post-scripts/Makefile.am +++ b/anaconda/data/post-scripts/Makefile.am @@ -14,8 +14,6 @@ # # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . -# -# Author: Chris Lumens postscriptsdir = $(datadir)/$(PACKAGE_NAME)/post-scripts dist_postscripts_DATA = 40-qubes-alt-kernels.ks 50-qubes.ks 60-systemd-preset.ks 80-setfilecons.ks 90-copy-screenshots.ks 99-copy-logs.ks diff --git a/anaconda/data/systemd/Makefile.am b/anaconda/data/systemd/Makefile.am index 2607986..2f8edc7 100644 --- a/anaconda/data/systemd/Makefile.am +++ b/anaconda/data/systemd/Makefile.am @@ -1,6 +1,6 @@ # systemd/Makefile.am for anaconda # -# Copyright (C) 2011 Red Hat, Inc. +# Copyright (C) 2011, 2016 Red Hat, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published @@ -14,22 +14,21 @@ # # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . -# -# Author: Chris Lumens systemddir = $(prefix)/lib/systemd/system generatordir = $(prefix)/lib/systemd/system-generators dist_systemd_DATA = anaconda.service \ - anaconda-noshell.service \ - anaconda-direct.service \ - anaconda.target \ - anaconda-tmux@.service \ - anaconda-shell@.service \ - instperf.service \ - anaconda-sshd.service \ - anaconda-nm-config.service \ - zram.service + anaconda-noshell.service \ + anaconda-direct.service \ + anaconda.target \ + anaconda-tmux@.service \ + anaconda-shell@.service \ + instperf.service \ + anaconda-sshd.service \ + anaconda-nm-config.service \ + anaconda-pre.service \ + zram.service dist_generator_SCRIPTS = anaconda-generator diff --git a/anaconda/data/systemd/anaconda-generator b/anaconda/data/systemd/anaconda-generator index fc4c47c..cda8748 100755 --- a/anaconda/data/systemd/anaconda-generator +++ b/anaconda/data/systemd/anaconda-generator @@ -1,6 +1,14 @@ #!/bin/bash # anaconda-generator: generate services needed for anaconda operation +# only run in the Anaconda installation environment +ANACONDA_TARGET="/lib/systemd/system/anaconda.target" +CURRENT_DEFAULT_TARGET=$(readlink /etc/systemd/system/default.target) + +if [ "$ANACONDA_TARGET" != "$CURRENT_DEFAULT_TARGET" ]; then + exit 0 +fi + # set up dirs systemd_dir=/lib/systemd/system target_dir=$systemd_dir/anaconda.target.wants @@ -33,3 +41,4 @@ for tty in hvc0 hvc1 xvc0 hvsi0 hvsi1 hvsi2; do done ln -sf $systemd_dir/anaconda-nm-config.service $target_dir/anaconda-nm-config.service +ln -sf $systemd_dir/anaconda-pre.service $target_dir/anaconda-pre.service diff --git a/anaconda/data/systemd/anaconda-nm-config.service b/anaconda/data/systemd/anaconda-nm-config.service index e7442cc..339b9cd 100644 --- a/anaconda/data/systemd/anaconda-nm-config.service +++ b/anaconda/data/systemd/anaconda-nm-config.service @@ -4,4 +4,5 @@ Description=Anaconda NetworkManager configuration Before=NetworkManager.service [Service] +Type=oneshot ExecStart=/usr/bin/anaconda-disable-nm-ibft-plugin diff --git a/anaconda/data/systemd/anaconda-pre.service b/anaconda/data/systemd/anaconda-pre.service new file mode 100644 index 0000000..03e4417 --- /dev/null +++ b/anaconda/data/systemd/anaconda-pre.service @@ -0,0 +1,21 @@ +[Unit] +# This service is to be run before anaconda starts and log data before anaconda changes them +Description=pre-anaconda logging service +Requires=basic.target +After=basic.target +Before=anaconda.target +Wants=instperf.service +Wants=rsyslog.service +Wants=systemd-udev-settle.service +Wants=NetworkManager.service +Wants=plymouth-quit.service plymouth-quit-wait.service +Wants=zram.service +Wants=systemd-logind.service + +[Service] +Type=oneshot +ExecStart=/usr/libexec/anaconda/anaconda-pre-log-gen +StardardInput=tty +StandardOutput=journal+console +StandardError=journal+console +TimeoutSec=0 diff --git a/anaconda/data/systemd/anaconda-sshd.service b/anaconda/data/systemd/anaconda-sshd.service index 5209200..b3d787b 100644 --- a/anaconda/data/systemd/anaconda-sshd.service +++ b/anaconda/data/systemd/anaconda-sshd.service @@ -1,15 +1,17 @@ [Unit] Description=OpenSSH server daemon Before=anaconda.target -After=syslog.target network.target +After=syslog.target network.target sshd-keygen.target +Wants=sshd-keygen.target ConditionKernelCommandLine=|sshd ConditionKernelCommandLine=|inst.sshd +ConditionKernelCommandLine=!inst.sshd=0 +ConditionKernelCommandLine=!sshd=0 # TODO: use ConditionArchitecture in systemd v210 or later ConditionPathIsDirectory=|/sys/hypervisor/s390 [Service] EnvironmentFile=/etc/sysconfig/sshd -ExecStartPre=/usr/sbin/sshd-keygen ExecStartPre=/usr/sbin/handle-sshpw ExecStart=/usr/sbin/sshd -D $OPTIONS -f /etc/ssh/sshd_config.anaconda ExecReload=/bin/kill -HUP $MAINPID diff --git a/anaconda/data/systemd/anaconda.target b/anaconda/data/systemd/anaconda.target index a8e4be5..b7d15f8 100644 --- a/anaconda/data/systemd/anaconda.target +++ b/anaconda/data/systemd/anaconda.target @@ -10,5 +10,6 @@ Wants=NetworkManager.service Wants=plymouth-quit.service plymouth-quit-wait.service Wants=anaconda-direct.service anaconda.service Wants=anaconda-sshd.service +Wants=anaconda-pre.service Wants=zram.service Wants=systemd-logind.service diff --git a/anaconda/data/tmux.conf b/anaconda/data/tmux.conf index 89f788b..bbe25a1 100644 --- a/anaconda/data/tmux.conf +++ b/anaconda/data/tmux.conf @@ -17,4 +17,8 @@ new-window -d -n log "tail -F /tmp/anaconda.log" new-window -d -n storage-log "tail -F /tmp/storage.log" new-window -d -n program-log "tail -F /tmp/program.log" -detach-client -s anaconda +# The idea here is to detach the client started here via anaconda.service, and +# then re-attach to it in the tmux service run on the console tty. However, +# the detach-client directive is now giving us "no current client" for some +# reason. +# detach-client -s anaconda diff --git a/anaconda/data/window-manager/Makefile.am b/anaconda/data/window-manager/Makefile.am index 7b6d3b8..3503d4a 100644 --- a/anaconda/data/window-manager/Makefile.am +++ b/anaconda/data/window-manager/Makefile.am @@ -14,7 +14,5 @@ # # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . -# -# Author: David Shea SUBDIRS = config theme diff --git a/anaconda/data/window-manager/config/Makefile.am b/anaconda/data/window-manager/config/Makefile.am index 6602e4b..6d78347 100644 --- a/anaconda/data/window-manager/config/Makefile.am +++ b/anaconda/data/window-manager/config/Makefile.am @@ -14,15 +14,14 @@ # # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . -# -# Author: David Shea schemadir = $(pkgdatadir)/window-manager/glib-2.0/schemas # These files need to be compiled by glib-compile-schemas. This is handled # in the spec file scriptlets. dist_schema_DATA = org.gnome.desktop.wm.keybindings.gschema.override \ - org.gnome.desktop.wm.preferences.gschema.override + org.gnome.desktop.wm.preferences.gschema.override \ + org.gnome.metacity.gschema.override # GSettings insists on the override files being in the same directory as the # schemas they modify, so pretend that this is the case with symlinks and @@ -31,8 +30,9 @@ install-data-hook: $(MKDIR_P) $(DESTDIR)$(schemadir) $(LN_S) -f /usr/share/glib-2.0/schemas/org.gnome.desktop.wm.keybindings.gschema.xml $(DESTDIR)$(schemadir) $(LN_S) -f /usr/share/glib-2.0/schemas/org.gnome.desktop.wm.preferences.gschema.xml $(DESTDIR)$(schemadir) + $(LN_S) -f /usr/share/glib-2.0/schemas/org.gnome.metacity.gschema.xml $(DESTDIR)$(schemadir) $(LN_S) -f /usr/share/glib-2.0/schemas/org.gnome.desktop.enums.xml $(DESTDIR)$(schemadir) - glib-compile-schemas $(DESTDIR)$(schemadir) + glib-compile-schemas --strict $(DESTDIR)$(schemadir) uninstall-local: rm -f $(DESTDIR)$(schemadir)/*.xml diff --git a/anaconda/data/window-manager/config/org.gnome.desktop.wm.preferences.gschema.override b/anaconda/data/window-manager/config/org.gnome.desktop.wm.preferences.gschema.override index 9d8d9a7..c32b295 100644 --- a/anaconda/data/window-manager/config/org.gnome.desktop.wm.preferences.gschema.override +++ b/anaconda/data/window-manager/config/org.gnome.desktop.wm.preferences.gschema.override @@ -1,6 +1,7 @@ [org.gnome.desktop.wm.preferences] - button-layout=':' + button-layout=':close' action-right-click-titlebar='none' + action-double-click-titlebar='none' num-workspaces=1 theme='Anaconda' mouse-button-modifier='' diff --git a/anaconda/data/window-manager/config/org.gnome.metacity.gschema.override b/anaconda/data/window-manager/config/org.gnome.metacity.gschema.override new file mode 100644 index 0000000..94f9b00 --- /dev/null +++ b/anaconda/data/window-manager/config/org.gnome.metacity.gschema.override @@ -0,0 +1,2 @@ +[org.gnome.metacity] + edge-tiling=false diff --git a/anaconda/data/window-manager/theme/Makefile.am b/anaconda/data/window-manager/theme/Makefile.am index b8ce478..9fe672b 100644 --- a/anaconda/data/window-manager/theme/Makefile.am +++ b/anaconda/data/window-manager/theme/Makefile.am @@ -14,8 +14,6 @@ # # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . -# -# Author: David Shea themedir = $(datadir)/themes/Anaconda/metacity-1 diff --git a/anaconda/docs/Makefile.am b/anaconda/docs/Makefile.am index 67b85a3..45235ff 100644 --- a/anaconda/docs/Makefile.am +++ b/anaconda/docs/Makefile.am @@ -14,8 +14,6 @@ # # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . -# -# Author: David Cantrell EXTRA_DIST = $(srcdir)/*.rst $(srcdir)/*.txt $(srcdir)/conf.py @@ -73,6 +71,8 @@ apidoc: if [ -f /usr/bin/$(SPHINXAPIDOC) ]; then \ rm $(addprefix ./, $(MODULE_NAMES)) ; \ $(SPHINXAPIDOC) -o . $(SOURCEDIR) ; \ + rm $(addprefix ./, tests/*.rst) ; \ + $(SPHINXAPIDOC) -o ./tests ../tests ../tests/storage/run_storage_tests.py ; \ fi html: apidoc diff --git a/anaconda/docs/boot-options.rst b/anaconda/docs/boot-options.rst index ee54a9e..d439fdf 100644 --- a/anaconda/docs/boot-options.rst +++ b/anaconda/docs/boot-options.rst @@ -75,6 +75,11 @@ different ways: You can specify what version of the NFS protocol to use by adding ``nfsvers=X`` to the `options`. + + This accepts not just an installable tree directory in the ```` element, + but you can also specify an ``.iso`` file. That ISO file is then mounted and + used as the installation tree. This is often used for simulating a standard + DVD installation using a remote ``DVD.iso`` image. .. _diskdev: @@ -269,6 +274,14 @@ ifname Assign the given interface name to the network device with the given MAC. May be used multiple times. +.. NOTE:: + + Dracut applies ifname option (which might involve renaming the device with + given MAC) in initramfs only if the device is activated in initramfs stage + (based on ip= option). If it is not the case, installer still binds the + current device name to the MAC by adding HWADDR setting to the ifcfg file of + the device. + .. inst.dhcpclass: inst.dhcpclass @@ -303,6 +316,21 @@ inst.lang Set the language to be used during installation. The language specified must be valid for the ``lang`` kickstart command. + +.. inst.singlelang: + +inst.singlelang +^^^^^^^^^^^^^^^ + +Install in single language mode - no interactive options for installation language +and language support configuration will be available. +If a language has been specified via the `inst.lang`_ boot option +or the `lang` kickstart command it will be used. +If no language is specified Anaconda will default to en_US.UTF-8. + +.. NOTE:: + Atomic installations always run in single language mode. + .. inst.geoloc: inst.geoloc @@ -449,10 +477,10 @@ Locations may be specified using any of the formats allowed for ``inst.repo``. For any format the ```` component defaults to ``/updates.img`` if it is omitted. -.. nokill: +.. inst.nokill: -nokill -^^^^^^ +inst.nokill +^^^^^^^^^^^ A debugging option that prevents anaconda from and rebooting when a fatal error occurs or at the end of the installation process. @@ -582,6 +610,36 @@ Also note that while SELinux is running in the installation environment by default, it is running in permissive mode so disabling it there does not make much sense. +.. inst.nosave + +inst.nosave +^^^^^^^^^^^ + +Controls what installation results should not be saved to the installed system, +valid values are: "input_ks", "output_ks", "all_ks", "logs" and "all". + +``input_ks`` + Disables saving of the input kickstart (if any). + +``output_ks`` + Disables saving of the output kickstart generated by Anaconda. + +``all_ks`` + Disables saving of both input and output kickstarts. + +``logs`` + Disables saving of all installation logs. + +``all`` + Disables saving of all kickstarts and all logs. + +Multiple values can be combined as a comma separated list, for example: ``input_ks,logs`` + +.. NOTE:: + The nosave option is meant for excluding files from the installed system that *can't* + be removed by a kickstart %post script, such as logs and input/output kickstarts. + + Third-party options ^^^^^^^^^^^^^^^^^^^ diff --git a/anaconda/docs/conf.py b/anaconda/docs/conf.py index 3b90bd0..d14dd8a 100644 --- a/anaconda/docs/conf.py +++ b/anaconda/docs/conf.py @@ -11,9 +11,6 @@ # All configuration values have a default; values that are commented out # serve to show the default. -# Ignore any interruptible calls -# pylint: disable=interruptible-system-call - import sys, os # If extensions (or modules to document with autodoc) are in another directory, @@ -21,6 +18,13 @@ import sys, os # documentation root, use os.path.abspath to make it absolute, like shown here. sys.path.insert(0, os.path.abspath('..')) +# configuration required to import test modules +for path in ["../pyanaconda/isys/.libs", "../pyanaconda", "../tests", "../tests/lib", "../dracut", "../widgets"]: + sys.path.append(os.path.abspath(path)) +if not 'ANACONDA_INSTALL_CLASSES' in os.environ: + # pylint: disable=environment-modify + os.environ['ANACONDA_INSTALL_CLASSES'] = os.path.abspath('../pyanaconda/installclasses') + # -- General configuration ----------------------------------------------------- # If your documentation needs a minimal Sphinx version, state it here. diff --git a/anaconda/docs/gettext.txt b/anaconda/docs/gettext.txt deleted file mode 100644 index c048b7b..0000000 --- a/anaconda/docs/gettext.txt +++ /dev/null @@ -1,91 +0,0 @@ -gettext, i18n, and the po/ subdirectory -26-Nov-2013 -David Cantrell -David Shea ---------------------------------------- - -I have attempted to clean up our po/ subdirectory and bring it in to -conformance with GNU gettext tools as well as hook it in to GNU autoconf and -GNU automake. The gettext software has templates set up for this already, -so I'm just using those. - -From time to time, we may have to update our gettext template files and or -expand or reduce the information in the files. How do you know what files -do what? Here's an explanation: - -ABOUT-NLS -config.rpath -m4/gettext.m4 -m4/iconv.m4 -m4/nls.m4 -m4/po.m4 -m4/... -po/Makefile.in.in -po/Makevars.template -po/Rules-quot -po/boldquot.sed -po/en@boldquot.header -po/en@quot.header -po/insert-header.sin -po/quot.sed -po/remove-potcdate.sin - - These files are copied in when 'autopoint' is run on the source - project, which happens as part of autogen.sh. In general, we should never - need to touch these files. - - The autopoint tool depends on two macros in configure.ac: AM_GNU_GETTEXT, - and AM_GNU_GETTEXT_VERSION([]). From time to time we may need to - update the set of gettext files that we use. To do so, update the gettext - version number in AM_GNU_GETTEXT_VERSION and run autogen.sh. Be sure to - also update the required gettext version in the spec file. - -po/Makevars - - Should be updated when we update gettext files from autopoint with a new - gettext version. A file called po/Makevars.template will appear and we - can move over our values to the new file and commit it. We do not need to - change this file on a regular basis. - -po/POTFILES.in - - This file contains a listing of all source files in the project that - have translatable strings. - - Some files can't be handled by gettext directly, such as the GNOME desktop - files and anything without a clear filename extension. For these types of - files, add a rule to po/Rules-extract to create a file that gettext can - handle, and add the name of the generated file to po/POTFILES.in. - -po/LINGUAS - - Space-delimited list of languages available. If a new language is - added, it should be added to this file. - -po/Rules-extract - - Extra Makefile rules to process files that gettext can't handle on its - own. - - Currently there are two types of files handled in Rules-extract: files in - a language that gettext doesn't know, and files in a language that gettext - can't figure out from the filename. For the first type of file (.desktop - files, consolehelper files), we use intltool-extract to create a C-style - header file containing the translatable strings, and for the second we - manually run xgettext, forcing a --language setting, and generate an - intermediate .po file. - - In both cases, the name of the generated file is what goes in - po/POTFILES.in. - -po/anaconda.pot - - This is the template file built by xgettext containing all of the - translatable strings. The file is updated and committed to git as part of - building a release. - -po/*.po - - Actual translated strings, as maintained by the translation team(s). These - files are not stored in git. The po-pull target will pull the latest - translations from Transifex. diff --git a/anaconda/docs/html/_images/inheritance-011bfc5d3f8254e8b60a419c7703e46838507552.png b/anaconda/docs/html/_images/inheritance-011bfc5d3f8254e8b60a419c7703e46838507552.png new file mode 100755 index 0000000..0c3f021 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-011bfc5d3f8254e8b60a419c7703e46838507552.png differ diff --git a/anaconda/docs/html/_images/inheritance-011bfc5d3f8254e8b60a419c7703e46838507552.png.map b/anaconda/docs/html/_images/inheritance-011bfc5d3f8254e8b60a419c7703e46838507552.png.map new file mode 100755 index 0000000..f2e5a80 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-011bfc5d3f8254e8b60a419c7703e46838507552.png.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-05bb863d49d29dd4f9a03ce185b23cbd8da18fe1.png b/anaconda/docs/html/_images/inheritance-05bb863d49d29dd4f9a03ce185b23cbd8da18fe1.png new file mode 100755 index 0000000..613cb6a Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-05bb863d49d29dd4f9a03ce185b23cbd8da18fe1.png differ diff --git a/anaconda/docs/html/_images/inheritance-05bb863d49d29dd4f9a03ce185b23cbd8da18fe1.png.map b/anaconda/docs/html/_images/inheritance-05bb863d49d29dd4f9a03ce185b23cbd8da18fe1.png.map new file mode 100755 index 0000000..f403cf1 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-05bb863d49d29dd4f9a03ce185b23cbd8da18fe1.png.map @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-07babb28e08545fe62a0a33eaf1124fc7d0b0a13.png b/anaconda/docs/html/_images/inheritance-07babb28e08545fe62a0a33eaf1124fc7d0b0a13.png new file mode 100755 index 0000000..ea71f2a Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-07babb28e08545fe62a0a33eaf1124fc7d0b0a13.png differ diff --git a/anaconda/docs/html/_images/inheritance-07babb28e08545fe62a0a33eaf1124fc7d0b0a13.png.map b/anaconda/docs/html/_images/inheritance-07babb28e08545fe62a0a33eaf1124fc7d0b0a13.png.map new file mode 100755 index 0000000..2fe428c --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-07babb28e08545fe62a0a33eaf1124fc7d0b0a13.png.map @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-0890e31536926a7233c4f6ac4ba7dde2638b4aea.png b/anaconda/docs/html/_images/inheritance-0890e31536926a7233c4f6ac4ba7dde2638b4aea.png new file mode 100644 index 0000000..ff654d1 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-0890e31536926a7233c4f6ac4ba7dde2638b4aea.png differ diff --git a/anaconda/docs/html/_images/inheritance-0890e31536926a7233c4f6ac4ba7dde2638b4aea.png.map b/anaconda/docs/html/_images/inheritance-0890e31536926a7233c4f6ac4ba7dde2638b4aea.png.map new file mode 100644 index 0000000..b6dacbd --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-0890e31536926a7233c4f6ac4ba7dde2638b4aea.png.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-0957e6745137f485064296a0ea4f2d3500d3bede.png b/anaconda/docs/html/_images/inheritance-0957e6745137f485064296a0ea4f2d3500d3bede.png new file mode 100755 index 0000000..5949541 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-0957e6745137f485064296a0ea4f2d3500d3bede.png differ diff --git a/anaconda/docs/html/_images/inheritance-0957e6745137f485064296a0ea4f2d3500d3bede.png.map b/anaconda/docs/html/_images/inheritance-0957e6745137f485064296a0ea4f2d3500d3bede.png.map new file mode 100755 index 0000000..9240c6c --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-0957e6745137f485064296a0ea4f2d3500d3bede.png.map @@ -0,0 +1,5 @@ + + + + + diff --git a/anaconda/docs/html/_images/inheritance-09bdf98f93b516dc6aae39871b6089f3191eac59.png b/anaconda/docs/html/_images/inheritance-09bdf98f93b516dc6aae39871b6089f3191eac59.png new file mode 100755 index 0000000..88ce5eb Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-09bdf98f93b516dc6aae39871b6089f3191eac59.png differ diff --git a/anaconda/docs/html/_images/inheritance-09bdf98f93b516dc6aae39871b6089f3191eac59.png.map b/anaconda/docs/html/_images/inheritance-09bdf98f93b516dc6aae39871b6089f3191eac59.png.map new file mode 100755 index 0000000..8c26c70 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-09bdf98f93b516dc6aae39871b6089f3191eac59.png.map @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-0a7ac2a49a38eaf1aa285351fdfd84a8096f019c.png b/anaconda/docs/html/_images/inheritance-0a7ac2a49a38eaf1aa285351fdfd84a8096f019c.png new file mode 100644 index 0000000..f584bd6 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-0a7ac2a49a38eaf1aa285351fdfd84a8096f019c.png differ diff --git a/anaconda/docs/html/_images/inheritance-0a7ac2a49a38eaf1aa285351fdfd84a8096f019c.png.map b/anaconda/docs/html/_images/inheritance-0a7ac2a49a38eaf1aa285351fdfd84a8096f019c.png.map new file mode 100644 index 0000000..d15e33d --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-0a7ac2a49a38eaf1aa285351fdfd84a8096f019c.png.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-0c81ff0fbce06523300dd5b26080daee4c191155.png b/anaconda/docs/html/_images/inheritance-0c81ff0fbce06523300dd5b26080daee4c191155.png new file mode 100755 index 0000000..ea71f2a Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-0c81ff0fbce06523300dd5b26080daee4c191155.png differ diff --git a/anaconda/docs/html/_images/inheritance-0c81ff0fbce06523300dd5b26080daee4c191155.png.map b/anaconda/docs/html/_images/inheritance-0c81ff0fbce06523300dd5b26080daee4c191155.png.map new file mode 100755 index 0000000..2fe428c --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-0c81ff0fbce06523300dd5b26080daee4c191155.png.map @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-0cc3cf553b0ad287a431ac07ad0a9e820e620ac4.png b/anaconda/docs/html/_images/inheritance-0cc3cf553b0ad287a431ac07ad0a9e820e620ac4.png new file mode 100755 index 0000000..384739f Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-0cc3cf553b0ad287a431ac07ad0a9e820e620ac4.png differ diff --git a/anaconda/docs/html/_images/inheritance-0cc3cf553b0ad287a431ac07ad0a9e820e620ac4.png.map b/anaconda/docs/html/_images/inheritance-0cc3cf553b0ad287a431ac07ad0a9e820e620ac4.png.map new file mode 100755 index 0000000..d15e33d --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-0cc3cf553b0ad287a431ac07ad0a9e820e620ac4.png.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-0d08fa0a1202cb1448b62cc8680bbe306b85106e.png b/anaconda/docs/html/_images/inheritance-0d08fa0a1202cb1448b62cc8680bbe306b85106e.png new file mode 100755 index 0000000..ecd1d69 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-0d08fa0a1202cb1448b62cc8680bbe306b85106e.png differ diff --git a/anaconda/docs/html/_images/inheritance-0d08fa0a1202cb1448b62cc8680bbe306b85106e.png.map b/anaconda/docs/html/_images/inheritance-0d08fa0a1202cb1448b62cc8680bbe306b85106e.png.map new file mode 100755 index 0000000..d80def8 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-0d08fa0a1202cb1448b62cc8680bbe306b85106e.png.map @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-0ed742c2200a1b4666fe0e6c649270b8cf4d3dfb.png b/anaconda/docs/html/_images/inheritance-0ed742c2200a1b4666fe0e6c649270b8cf4d3dfb.png new file mode 100755 index 0000000..93ccb50 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-0ed742c2200a1b4666fe0e6c649270b8cf4d3dfb.png differ diff --git a/anaconda/docs/html/_images/inheritance-0ed742c2200a1b4666fe0e6c649270b8cf4d3dfb.png.map b/anaconda/docs/html/_images/inheritance-0ed742c2200a1b4666fe0e6c649270b8cf4d3dfb.png.map new file mode 100755 index 0000000..a728298 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-0ed742c2200a1b4666fe0e6c649270b8cf4d3dfb.png.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-0ee962ec54e4ce5cff92ceb8af7235e941487a5c.png b/anaconda/docs/html/_images/inheritance-0ee962ec54e4ce5cff92ceb8af7235e941487a5c.png new file mode 100755 index 0000000..96b3e48 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-0ee962ec54e4ce5cff92ceb8af7235e941487a5c.png differ diff --git a/anaconda/docs/html/_images/inheritance-0ee962ec54e4ce5cff92ceb8af7235e941487a5c.png.map b/anaconda/docs/html/_images/inheritance-0ee962ec54e4ce5cff92ceb8af7235e941487a5c.png.map new file mode 100755 index 0000000..bdf1c0a --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-0ee962ec54e4ce5cff92ceb8af7235e941487a5c.png.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-0fd5e6e2335c40006d15eedaaf3fe64be4b82272.png b/anaconda/docs/html/_images/inheritance-0fd5e6e2335c40006d15eedaaf3fe64be4b82272.png new file mode 100755 index 0000000..a4fd6ee Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-0fd5e6e2335c40006d15eedaaf3fe64be4b82272.png differ diff --git a/anaconda/docs/html/_images/inheritance-0fd5e6e2335c40006d15eedaaf3fe64be4b82272.png.map b/anaconda/docs/html/_images/inheritance-0fd5e6e2335c40006d15eedaaf3fe64be4b82272.png.map new file mode 100755 index 0000000..90cad97 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-0fd5e6e2335c40006d15eedaaf3fe64be4b82272.png.map @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-1132c057e58a204eea0bc262d66d58cb85777bc7.png b/anaconda/docs/html/_images/inheritance-1132c057e58a204eea0bc262d66d58cb85777bc7.png new file mode 100755 index 0000000..af395c8 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-1132c057e58a204eea0bc262d66d58cb85777bc7.png differ diff --git a/anaconda/docs/html/_images/inheritance-1132c057e58a204eea0bc262d66d58cb85777bc7.png.map b/anaconda/docs/html/_images/inheritance-1132c057e58a204eea0bc262d66d58cb85777bc7.png.map new file mode 100755 index 0000000..2cf1f2c --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-1132c057e58a204eea0bc262d66d58cb85777bc7.png.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-119eed7ba895873ea9b04ff871c214a6c6b58a25.png b/anaconda/docs/html/_images/inheritance-119eed7ba895873ea9b04ff871c214a6c6b58a25.png new file mode 100755 index 0000000..79e09c1 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-119eed7ba895873ea9b04ff871c214a6c6b58a25.png differ diff --git a/anaconda/docs/html/_images/inheritance-119eed7ba895873ea9b04ff871c214a6c6b58a25.png.map b/anaconda/docs/html/_images/inheritance-119eed7ba895873ea9b04ff871c214a6c6b58a25.png.map new file mode 100755 index 0000000..049b8b4 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-119eed7ba895873ea9b04ff871c214a6c6b58a25.png.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-12b42b027e1c5298909f65b7aa48a2878635c286.png b/anaconda/docs/html/_images/inheritance-12b42b027e1c5298909f65b7aa48a2878635c286.png new file mode 100755 index 0000000..8613eff Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-12b42b027e1c5298909f65b7aa48a2878635c286.png differ diff --git a/anaconda/docs/html/_images/inheritance-12b42b027e1c5298909f65b7aa48a2878635c286.png.map b/anaconda/docs/html/_images/inheritance-12b42b027e1c5298909f65b7aa48a2878635c286.png.map new file mode 100755 index 0000000..f3a9dac --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-12b42b027e1c5298909f65b7aa48a2878635c286.png.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-12d37715aed8027f3503ff7953afde235a9c01f2.png b/anaconda/docs/html/_images/inheritance-12d37715aed8027f3503ff7953afde235a9c01f2.png new file mode 100755 index 0000000..837d994 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-12d37715aed8027f3503ff7953afde235a9c01f2.png differ diff --git a/anaconda/docs/html/_images/inheritance-12d37715aed8027f3503ff7953afde235a9c01f2.png.map b/anaconda/docs/html/_images/inheritance-12d37715aed8027f3503ff7953afde235a9c01f2.png.map new file mode 100755 index 0000000..9240c6c --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-12d37715aed8027f3503ff7953afde235a9c01f2.png.map @@ -0,0 +1,5 @@ + + + + + diff --git a/anaconda/docs/html/_images/inheritance-130fbcb182e0d9c80281967594c086d1efb87935.png b/anaconda/docs/html/_images/inheritance-130fbcb182e0d9c80281967594c086d1efb87935.png new file mode 100644 index 0000000..ec1eef9 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-130fbcb182e0d9c80281967594c086d1efb87935.png differ diff --git a/anaconda/docs/html/_images/inheritance-130fbcb182e0d9c80281967594c086d1efb87935.png.map b/anaconda/docs/html/_images/inheritance-130fbcb182e0d9c80281967594c086d1efb87935.png.map new file mode 100644 index 0000000..b91e61d --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-130fbcb182e0d9c80281967594c086d1efb87935.png.map @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-1358be4935c3d5b1cb58ac7023446e2006f77018.png b/anaconda/docs/html/_images/inheritance-1358be4935c3d5b1cb58ac7023446e2006f77018.png new file mode 100755 index 0000000..92d6ea2 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-1358be4935c3d5b1cb58ac7023446e2006f77018.png differ diff --git a/anaconda/docs/html/_images/inheritance-1358be4935c3d5b1cb58ac7023446e2006f77018.png.map b/anaconda/docs/html/_images/inheritance-1358be4935c3d5b1cb58ac7023446e2006f77018.png.map new file mode 100755 index 0000000..9be0864 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-1358be4935c3d5b1cb58ac7023446e2006f77018.png.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-154d1a82035439d4c1599575447dda2abeb58aed.png b/anaconda/docs/html/_images/inheritance-154d1a82035439d4c1599575447dda2abeb58aed.png new file mode 100644 index 0000000..513dbed Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-154d1a82035439d4c1599575447dda2abeb58aed.png differ diff --git a/anaconda/docs/html/_images/inheritance-154d1a82035439d4c1599575447dda2abeb58aed.png.map b/anaconda/docs/html/_images/inheritance-154d1a82035439d4c1599575447dda2abeb58aed.png.map new file mode 100644 index 0000000..69ae92b --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-154d1a82035439d4c1599575447dda2abeb58aed.png.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-1ac28076448f2fc3d824be73d5ce5d48dfaafe36.png b/anaconda/docs/html/_images/inheritance-1ac28076448f2fc3d824be73d5ce5d48dfaafe36.png new file mode 100755 index 0000000..ea71f2a Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-1ac28076448f2fc3d824be73d5ce5d48dfaafe36.png differ diff --git a/anaconda/docs/html/_images/inheritance-1ac28076448f2fc3d824be73d5ce5d48dfaafe36.png.map b/anaconda/docs/html/_images/inheritance-1ac28076448f2fc3d824be73d5ce5d48dfaafe36.png.map new file mode 100755 index 0000000..2fe428c --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-1ac28076448f2fc3d824be73d5ce5d48dfaafe36.png.map @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-1b740d9d83464505e53e6430e7fe4fd8032f2a09.png b/anaconda/docs/html/_images/inheritance-1b740d9d83464505e53e6430e7fe4fd8032f2a09.png new file mode 100755 index 0000000..d059582 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-1b740d9d83464505e53e6430e7fe4fd8032f2a09.png differ diff --git a/anaconda/docs/html/_images/inheritance-1b740d9d83464505e53e6430e7fe4fd8032f2a09.png.map b/anaconda/docs/html/_images/inheritance-1b740d9d83464505e53e6430e7fe4fd8032f2a09.png.map new file mode 100755 index 0000000..0484e1c --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-1b740d9d83464505e53e6430e7fe4fd8032f2a09.png.map @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-1d7c1cf733af6620429e983b01b824e89b889a8a.png b/anaconda/docs/html/_images/inheritance-1d7c1cf733af6620429e983b01b824e89b889a8a.png new file mode 100755 index 0000000..384739f Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-1d7c1cf733af6620429e983b01b824e89b889a8a.png differ diff --git a/anaconda/docs/html/_images/inheritance-1d7c1cf733af6620429e983b01b824e89b889a8a.png.map b/anaconda/docs/html/_images/inheritance-1d7c1cf733af6620429e983b01b824e89b889a8a.png.map new file mode 100755 index 0000000..d15e33d --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-1d7c1cf733af6620429e983b01b824e89b889a8a.png.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-217dda445089bf384d5d36f410619cad216b237c.png b/anaconda/docs/html/_images/inheritance-217dda445089bf384d5d36f410619cad216b237c.png new file mode 100644 index 0000000..ee5a7e4 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-217dda445089bf384d5d36f410619cad216b237c.png differ diff --git a/anaconda/docs/html/_images/inheritance-217dda445089bf384d5d36f410619cad216b237c.png.map b/anaconda/docs/html/_images/inheritance-217dda445089bf384d5d36f410619cad216b237c.png.map new file mode 100644 index 0000000..24b04dd --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-217dda445089bf384d5d36f410619cad216b237c.png.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-219e21898d35eb4cb080c425dbd134e4ceef527e.png b/anaconda/docs/html/_images/inheritance-219e21898d35eb4cb080c425dbd134e4ceef527e.png new file mode 100755 index 0000000..abf8b3b Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-219e21898d35eb4cb080c425dbd134e4ceef527e.png differ diff --git a/anaconda/docs/html/_images/inheritance-219e21898d35eb4cb080c425dbd134e4ceef527e.png.map b/anaconda/docs/html/_images/inheritance-219e21898d35eb4cb080c425dbd134e4ceef527e.png.map new file mode 100755 index 0000000..f46de10 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-219e21898d35eb4cb080c425dbd134e4ceef527e.png.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-2272f90cd7e166ae0286303f6cc6b986021b2f29.png b/anaconda/docs/html/_images/inheritance-2272f90cd7e166ae0286303f6cc6b986021b2f29.png new file mode 100755 index 0000000..ba33b07 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-2272f90cd7e166ae0286303f6cc6b986021b2f29.png differ diff --git a/anaconda/docs/html/_images/inheritance-2272f90cd7e166ae0286303f6cc6b986021b2f29.png.map b/anaconda/docs/html/_images/inheritance-2272f90cd7e166ae0286303f6cc6b986021b2f29.png.map new file mode 100755 index 0000000..dcbdef2 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-2272f90cd7e166ae0286303f6cc6b986021b2f29.png.map @@ -0,0 +1,5 @@ + + + + + diff --git a/anaconda/docs/html/_images/inheritance-26c77b82cf80217ae4bc1a5232b3a8a60db2c900.png b/anaconda/docs/html/_images/inheritance-26c77b82cf80217ae4bc1a5232b3a8a60db2c900.png new file mode 100644 index 0000000..472ebdf Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-26c77b82cf80217ae4bc1a5232b3a8a60db2c900.png differ diff --git a/anaconda/docs/html/_images/inheritance-26c77b82cf80217ae4bc1a5232b3a8a60db2c900.png.map b/anaconda/docs/html/_images/inheritance-26c77b82cf80217ae4bc1a5232b3a8a60db2c900.png.map new file mode 100644 index 0000000..bab33fd --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-26c77b82cf80217ae4bc1a5232b3a8a60db2c900.png.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-2808d150f0c327a9b331c150b0adadc8f61138bd.png b/anaconda/docs/html/_images/inheritance-2808d150f0c327a9b331c150b0adadc8f61138bd.png new file mode 100755 index 0000000..669fdaa Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-2808d150f0c327a9b331c150b0adadc8f61138bd.png differ diff --git a/anaconda/docs/html/_images/inheritance-2808d150f0c327a9b331c150b0adadc8f61138bd.png.map b/anaconda/docs/html/_images/inheritance-2808d150f0c327a9b331c150b0adadc8f61138bd.png.map new file mode 100755 index 0000000..89fbfdd --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-2808d150f0c327a9b331c150b0adadc8f61138bd.png.map @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-291cd1d002ce5360473e2155567b779950994b7a.png b/anaconda/docs/html/_images/inheritance-291cd1d002ce5360473e2155567b779950994b7a.png new file mode 100755 index 0000000..f1ea796 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-291cd1d002ce5360473e2155567b779950994b7a.png differ diff --git a/anaconda/docs/html/_images/inheritance-291cd1d002ce5360473e2155567b779950994b7a.png.map b/anaconda/docs/html/_images/inheritance-291cd1d002ce5360473e2155567b779950994b7a.png.map new file mode 100755 index 0000000..395cb99 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-291cd1d002ce5360473e2155567b779950994b7a.png.map @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-298bc50b9ee3619b8ce203c1cbf312d90bec8a87.png b/anaconda/docs/html/_images/inheritance-298bc50b9ee3619b8ce203c1cbf312d90bec8a87.png new file mode 100644 index 0000000..47d1df0 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-298bc50b9ee3619b8ce203c1cbf312d90bec8a87.png differ diff --git a/anaconda/docs/html/_images/inheritance-298bc50b9ee3619b8ce203c1cbf312d90bec8a87.png.map b/anaconda/docs/html/_images/inheritance-298bc50b9ee3619b8ce203c1cbf312d90bec8a87.png.map new file mode 100644 index 0000000..d80def8 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-298bc50b9ee3619b8ce203c1cbf312d90bec8a87.png.map @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-2a51394d4bb6676359b08ccdd49e745404145901.png b/anaconda/docs/html/_images/inheritance-2a51394d4bb6676359b08ccdd49e745404145901.png new file mode 100644 index 0000000..d943705 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-2a51394d4bb6676359b08ccdd49e745404145901.png differ diff --git a/anaconda/docs/html/_images/inheritance-2a51394d4bb6676359b08ccdd49e745404145901.png.map b/anaconda/docs/html/_images/inheritance-2a51394d4bb6676359b08ccdd49e745404145901.png.map new file mode 100644 index 0000000..fafd151 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-2a51394d4bb6676359b08ccdd49e745404145901.png.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-2c94f220d2046ca050a520c3362c9bd8a0a28aa9.png b/anaconda/docs/html/_images/inheritance-2c94f220d2046ca050a520c3362c9bd8a0a28aa9.png new file mode 100755 index 0000000..8613eff Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-2c94f220d2046ca050a520c3362c9bd8a0a28aa9.png differ diff --git a/anaconda/docs/html/_images/inheritance-2c94f220d2046ca050a520c3362c9bd8a0a28aa9.png.map b/anaconda/docs/html/_images/inheritance-2c94f220d2046ca050a520c3362c9bd8a0a28aa9.png.map new file mode 100755 index 0000000..f3a9dac --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-2c94f220d2046ca050a520c3362c9bd8a0a28aa9.png.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-2d101f4a17a22ef005ef5218ced8f6be9bcf9cf9.png b/anaconda/docs/html/_images/inheritance-2d101f4a17a22ef005ef5218ced8f6be9bcf9cf9.png new file mode 100755 index 0000000..61278d4 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-2d101f4a17a22ef005ef5218ced8f6be9bcf9cf9.png differ diff --git a/anaconda/docs/html/_images/inheritance-2d101f4a17a22ef005ef5218ced8f6be9bcf9cf9.png.map b/anaconda/docs/html/_images/inheritance-2d101f4a17a22ef005ef5218ced8f6be9bcf9cf9.png.map new file mode 100755 index 0000000..2c6f30b --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-2d101f4a17a22ef005ef5218ced8f6be9bcf9cf9.png.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-2d418f579ccd7ac406e887830f1e9c2699f0c635.png b/anaconda/docs/html/_images/inheritance-2d418f579ccd7ac406e887830f1e9c2699f0c635.png new file mode 100644 index 0000000..25e3197 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-2d418f579ccd7ac406e887830f1e9c2699f0c635.png differ diff --git a/anaconda/docs/html/_images/inheritance-2d418f579ccd7ac406e887830f1e9c2699f0c635.png.map b/anaconda/docs/html/_images/inheritance-2d418f579ccd7ac406e887830f1e9c2699f0c635.png.map new file mode 100644 index 0000000..82cdd63 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-2d418f579ccd7ac406e887830f1e9c2699f0c635.png.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-2d4aad1549a77a0a9fb0e60f947b6364b7a0bf50.png b/anaconda/docs/html/_images/inheritance-2d4aad1549a77a0a9fb0e60f947b6364b7a0bf50.png new file mode 100755 index 0000000..384739f Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-2d4aad1549a77a0a9fb0e60f947b6364b7a0bf50.png differ diff --git a/anaconda/docs/html/_images/inheritance-2d4aad1549a77a0a9fb0e60f947b6364b7a0bf50.png.map b/anaconda/docs/html/_images/inheritance-2d4aad1549a77a0a9fb0e60f947b6364b7a0bf50.png.map new file mode 100755 index 0000000..d15e33d --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-2d4aad1549a77a0a9fb0e60f947b6364b7a0bf50.png.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-2d62f62573a83c9b3640d1c5da14d7185455feb9.png b/anaconda/docs/html/_images/inheritance-2d62f62573a83c9b3640d1c5da14d7185455feb9.png new file mode 100755 index 0000000..570f490 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-2d62f62573a83c9b3640d1c5da14d7185455feb9.png differ diff --git a/anaconda/docs/html/_images/inheritance-2d62f62573a83c9b3640d1c5da14d7185455feb9.png.map b/anaconda/docs/html/_images/inheritance-2d62f62573a83c9b3640d1c5da14d7185455feb9.png.map new file mode 100755 index 0000000..b30cc46 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-2d62f62573a83c9b3640d1c5da14d7185455feb9.png.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-300bcd52d03d06f1f45001d99a05891d817ff743.png b/anaconda/docs/html/_images/inheritance-300bcd52d03d06f1f45001d99a05891d817ff743.png new file mode 100755 index 0000000..ba33b07 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-300bcd52d03d06f1f45001d99a05891d817ff743.png differ diff --git a/anaconda/docs/html/_images/inheritance-300bcd52d03d06f1f45001d99a05891d817ff743.png.map b/anaconda/docs/html/_images/inheritance-300bcd52d03d06f1f45001d99a05891d817ff743.png.map new file mode 100755 index 0000000..dcbdef2 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-300bcd52d03d06f1f45001d99a05891d817ff743.png.map @@ -0,0 +1,5 @@ + + + + + diff --git a/anaconda/docs/html/_images/inheritance-30b4c09ce76185b90db51adb5b5ee8c46275ca30.png b/anaconda/docs/html/_images/inheritance-30b4c09ce76185b90db51adb5b5ee8c46275ca30.png new file mode 100755 index 0000000..934ad5f Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-30b4c09ce76185b90db51adb5b5ee8c46275ca30.png differ diff --git a/anaconda/docs/html/_images/inheritance-30b4c09ce76185b90db51adb5b5ee8c46275ca30.png.map b/anaconda/docs/html/_images/inheritance-30b4c09ce76185b90db51adb5b5ee8c46275ca30.png.map new file mode 100755 index 0000000..24b04dd --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-30b4c09ce76185b90db51adb5b5ee8c46275ca30.png.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-3100a51780eed3008fc789520368fee9d041619b.png b/anaconda/docs/html/_images/inheritance-3100a51780eed3008fc789520368fee9d041619b.png new file mode 100755 index 0000000..6ff23e9 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-3100a51780eed3008fc789520368fee9d041619b.png differ diff --git a/anaconda/docs/html/_images/inheritance-3100a51780eed3008fc789520368fee9d041619b.png.map b/anaconda/docs/html/_images/inheritance-3100a51780eed3008fc789520368fee9d041619b.png.map new file mode 100755 index 0000000..980d684 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-3100a51780eed3008fc789520368fee9d041619b.png.map @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-33a8881f797efc0d1ccfba6edf535c4a573fdd3f.png b/anaconda/docs/html/_images/inheritance-33a8881f797efc0d1ccfba6edf535c4a573fdd3f.png new file mode 100755 index 0000000..c26090d Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-33a8881f797efc0d1ccfba6edf535c4a573fdd3f.png differ diff --git a/anaconda/docs/html/_images/inheritance-33a8881f797efc0d1ccfba6edf535c4a573fdd3f.png.map b/anaconda/docs/html/_images/inheritance-33a8881f797efc0d1ccfba6edf535c4a573fdd3f.png.map new file mode 100755 index 0000000..044f5a7 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-33a8881f797efc0d1ccfba6edf535c4a573fdd3f.png.map @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-3547662e726023caf8f380abf22bea639a9a6b95.png b/anaconda/docs/html/_images/inheritance-3547662e726023caf8f380abf22bea639a9a6b95.png new file mode 100755 index 0000000..669fdaa Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-3547662e726023caf8f380abf22bea639a9a6b95.png differ diff --git a/anaconda/docs/html/_images/inheritance-3547662e726023caf8f380abf22bea639a9a6b95.png.map b/anaconda/docs/html/_images/inheritance-3547662e726023caf8f380abf22bea639a9a6b95.png.map new file mode 100755 index 0000000..89fbfdd --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-3547662e726023caf8f380abf22bea639a9a6b95.png.map @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-37bc11ac2fc62e929a646ce42706babbe20e0381.png b/anaconda/docs/html/_images/inheritance-37bc11ac2fc62e929a646ce42706babbe20e0381.png new file mode 100644 index 0000000..073287c Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-37bc11ac2fc62e929a646ce42706babbe20e0381.png differ diff --git a/anaconda/docs/html/_images/inheritance-37bc11ac2fc62e929a646ce42706babbe20e0381.png.map b/anaconda/docs/html/_images/inheritance-37bc11ac2fc62e929a646ce42706babbe20e0381.png.map new file mode 100644 index 0000000..395cb99 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-37bc11ac2fc62e929a646ce42706babbe20e0381.png.map @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-38b1f59c3e8f3ecf9914372b81e1cdb1f46c0544.png b/anaconda/docs/html/_images/inheritance-38b1f59c3e8f3ecf9914372b81e1cdb1f46c0544.png new file mode 100755 index 0000000..c20e530 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-38b1f59c3e8f3ecf9914372b81e1cdb1f46c0544.png differ diff --git a/anaconda/docs/html/_images/inheritance-38b1f59c3e8f3ecf9914372b81e1cdb1f46c0544.png.map b/anaconda/docs/html/_images/inheritance-38b1f59c3e8f3ecf9914372b81e1cdb1f46c0544.png.map new file mode 100755 index 0000000..23534ba --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-38b1f59c3e8f3ecf9914372b81e1cdb1f46c0544.png.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-39c7ac5a9fdf606c2a46bab53c2929453f54c671.png b/anaconda/docs/html/_images/inheritance-39c7ac5a9fdf606c2a46bab53c2929453f54c671.png new file mode 100755 index 0000000..c31ecba Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-39c7ac5a9fdf606c2a46bab53c2929453f54c671.png differ diff --git a/anaconda/docs/html/_images/inheritance-39c7ac5a9fdf606c2a46bab53c2929453f54c671.png.map b/anaconda/docs/html/_images/inheritance-39c7ac5a9fdf606c2a46bab53c2929453f54c671.png.map new file mode 100755 index 0000000..f25c58a --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-39c7ac5a9fdf606c2a46bab53c2929453f54c671.png.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-39e577b7a5173d3668d43fcc8d12b187670ce950.png b/anaconda/docs/html/_images/inheritance-39e577b7a5173d3668d43fcc8d12b187670ce950.png new file mode 100755 index 0000000..acd4049 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-39e577b7a5173d3668d43fcc8d12b187670ce950.png differ diff --git a/anaconda/docs/html/_images/inheritance-39e577b7a5173d3668d43fcc8d12b187670ce950.png.map b/anaconda/docs/html/_images/inheritance-39e577b7a5173d3668d43fcc8d12b187670ce950.png.map new file mode 100755 index 0000000..a554873 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-39e577b7a5173d3668d43fcc8d12b187670ce950.png.map @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-3b8049ec67d90a10377030019ef883f3c6d864fa.png b/anaconda/docs/html/_images/inheritance-3b8049ec67d90a10377030019ef883f3c6d864fa.png new file mode 100755 index 0000000..dc20a13 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-3b8049ec67d90a10377030019ef883f3c6d864fa.png differ diff --git a/anaconda/docs/html/_images/inheritance-3b8049ec67d90a10377030019ef883f3c6d864fa.png.map b/anaconda/docs/html/_images/inheritance-3b8049ec67d90a10377030019ef883f3c6d864fa.png.map new file mode 100755 index 0000000..8e2379f --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-3b8049ec67d90a10377030019ef883f3c6d864fa.png.map @@ -0,0 +1,5 @@ + + + + + diff --git a/anaconda/docs/html/_images/inheritance-3b81144efe48326d6d39a1fcead973d2dc688063.png b/anaconda/docs/html/_images/inheritance-3b81144efe48326d6d39a1fcead973d2dc688063.png new file mode 100755 index 0000000..ba33b07 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-3b81144efe48326d6d39a1fcead973d2dc688063.png differ diff --git a/anaconda/docs/html/_images/inheritance-3b81144efe48326d6d39a1fcead973d2dc688063.png.map b/anaconda/docs/html/_images/inheritance-3b81144efe48326d6d39a1fcead973d2dc688063.png.map new file mode 100755 index 0000000..dcbdef2 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-3b81144efe48326d6d39a1fcead973d2dc688063.png.map @@ -0,0 +1,5 @@ + + + + + diff --git a/anaconda/docs/html/_images/inheritance-3cb729cd15d051101777d62c29de13b83cb84302.png b/anaconda/docs/html/_images/inheritance-3cb729cd15d051101777d62c29de13b83cb84302.png new file mode 100755 index 0000000..5586f79 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-3cb729cd15d051101777d62c29de13b83cb84302.png differ diff --git a/anaconda/docs/html/_images/inheritance-3cb729cd15d051101777d62c29de13b83cb84302.png.map b/anaconda/docs/html/_images/inheritance-3cb729cd15d051101777d62c29de13b83cb84302.png.map new file mode 100755 index 0000000..2c6f30b --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-3cb729cd15d051101777d62c29de13b83cb84302.png.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-3e55415f242b8a8d2cabfefced88b59a5209be8b.png b/anaconda/docs/html/_images/inheritance-3e55415f242b8a8d2cabfefced88b59a5209be8b.png new file mode 100755 index 0000000..5949541 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-3e55415f242b8a8d2cabfefced88b59a5209be8b.png differ diff --git a/anaconda/docs/html/_images/inheritance-3e55415f242b8a8d2cabfefced88b59a5209be8b.png.map b/anaconda/docs/html/_images/inheritance-3e55415f242b8a8d2cabfefced88b59a5209be8b.png.map new file mode 100755 index 0000000..9240c6c --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-3e55415f242b8a8d2cabfefced88b59a5209be8b.png.map @@ -0,0 +1,5 @@ + + + + + diff --git a/anaconda/docs/html/_images/inheritance-3efb14096b122a5ef5c037ef65fe3368c412d9fe.png b/anaconda/docs/html/_images/inheritance-3efb14096b122a5ef5c037ef65fe3368c412d9fe.png new file mode 100755 index 0000000..1ce0ceb Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-3efb14096b122a5ef5c037ef65fe3368c412d9fe.png differ diff --git a/anaconda/docs/html/_images/inheritance-3efb14096b122a5ef5c037ef65fe3368c412d9fe.png.map b/anaconda/docs/html/_images/inheritance-3efb14096b122a5ef5c037ef65fe3368c412d9fe.png.map new file mode 100755 index 0000000..b6dacbd --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-3efb14096b122a5ef5c037ef65fe3368c412d9fe.png.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-3fa2fda99ee69418ba3f13992836eb5675aecf74.png b/anaconda/docs/html/_images/inheritance-3fa2fda99ee69418ba3f13992836eb5675aecf74.png new file mode 100644 index 0000000..1e0bb7f Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-3fa2fda99ee69418ba3f13992836eb5675aecf74.png differ diff --git a/anaconda/docs/html/_images/inheritance-3fa2fda99ee69418ba3f13992836eb5675aecf74.png.map b/anaconda/docs/html/_images/inheritance-3fa2fda99ee69418ba3f13992836eb5675aecf74.png.map new file mode 100644 index 0000000..23534ba --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-3fa2fda99ee69418ba3f13992836eb5675aecf74.png.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-41aea7835e76d9a3eec63fb5d8840cc322172b79.png b/anaconda/docs/html/_images/inheritance-41aea7835e76d9a3eec63fb5d8840cc322172b79.png new file mode 100755 index 0000000..b6ca587 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-41aea7835e76d9a3eec63fb5d8840cc322172b79.png differ diff --git a/anaconda/docs/html/_images/inheritance-41aea7835e76d9a3eec63fb5d8840cc322172b79.png.map b/anaconda/docs/html/_images/inheritance-41aea7835e76d9a3eec63fb5d8840cc322172b79.png.map new file mode 100755 index 0000000..06f908d --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-41aea7835e76d9a3eec63fb5d8840cc322172b79.png.map @@ -0,0 +1,4 @@ + + + + diff --git a/anaconda/docs/html/_images/inheritance-41cf270b9b9736f78768d31651493a35cc51cba3.png b/anaconda/docs/html/_images/inheritance-41cf270b9b9736f78768d31651493a35cc51cba3.png new file mode 100755 index 0000000..acd4049 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-41cf270b9b9736f78768d31651493a35cc51cba3.png differ diff --git a/anaconda/docs/html/_images/inheritance-41cf270b9b9736f78768d31651493a35cc51cba3.png.map b/anaconda/docs/html/_images/inheritance-41cf270b9b9736f78768d31651493a35cc51cba3.png.map new file mode 100755 index 0000000..a554873 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-41cf270b9b9736f78768d31651493a35cc51cba3.png.map @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-422ff74987db72c6e7573f50c660e808378bdf30.png b/anaconda/docs/html/_images/inheritance-422ff74987db72c6e7573f50c660e808378bdf30.png new file mode 100755 index 0000000..934ad5f Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-422ff74987db72c6e7573f50c660e808378bdf30.png differ diff --git a/anaconda/docs/html/_images/inheritance-422ff74987db72c6e7573f50c660e808378bdf30.png.map b/anaconda/docs/html/_images/inheritance-422ff74987db72c6e7573f50c660e808378bdf30.png.map new file mode 100755 index 0000000..24b04dd --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-422ff74987db72c6e7573f50c660e808378bdf30.png.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-42893068ece89fe7ceb4079197ff6ffc97a53999.png b/anaconda/docs/html/_images/inheritance-42893068ece89fe7ceb4079197ff6ffc97a53999.png new file mode 100755 index 0000000..47d1df0 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-42893068ece89fe7ceb4079197ff6ffc97a53999.png differ diff --git a/anaconda/docs/html/_images/inheritance-42893068ece89fe7ceb4079197ff6ffc97a53999.png.map b/anaconda/docs/html/_images/inheritance-42893068ece89fe7ceb4079197ff6ffc97a53999.png.map new file mode 100755 index 0000000..d80def8 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-42893068ece89fe7ceb4079197ff6ffc97a53999.png.map @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-42ec36e4d5400229329f50463f8046fe7ce85f89.png b/anaconda/docs/html/_images/inheritance-42ec36e4d5400229329f50463f8046fe7ce85f89.png new file mode 100755 index 0000000..08d141d Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-42ec36e4d5400229329f50463f8046fe7ce85f89.png differ diff --git a/anaconda/docs/html/_images/inheritance-42ec36e4d5400229329f50463f8046fe7ce85f89.png.map b/anaconda/docs/html/_images/inheritance-42ec36e4d5400229329f50463f8046fe7ce85f89.png.map new file mode 100755 index 0000000..bdf1c0a --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-42ec36e4d5400229329f50463f8046fe7ce85f89.png.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-4369b2aa2804e6f41784c06ce1784aac40c1729d.png b/anaconda/docs/html/_images/inheritance-4369b2aa2804e6f41784c06ce1784aac40c1729d.png new file mode 100755 index 0000000..1ce0ceb Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-4369b2aa2804e6f41784c06ce1784aac40c1729d.png differ diff --git a/anaconda/docs/html/_images/inheritance-4369b2aa2804e6f41784c06ce1784aac40c1729d.png.map b/anaconda/docs/html/_images/inheritance-4369b2aa2804e6f41784c06ce1784aac40c1729d.png.map new file mode 100755 index 0000000..b6dacbd --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-4369b2aa2804e6f41784c06ce1784aac40c1729d.png.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-45a3aaad7e9dd2d37895a48579ba42d644c806ee.png b/anaconda/docs/html/_images/inheritance-45a3aaad7e9dd2d37895a48579ba42d644c806ee.png new file mode 100755 index 0000000..f70e4e8 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-45a3aaad7e9dd2d37895a48579ba42d644c806ee.png differ diff --git a/anaconda/docs/html/_images/inheritance-45a3aaad7e9dd2d37895a48579ba42d644c806ee.png.map b/anaconda/docs/html/_images/inheritance-45a3aaad7e9dd2d37895a48579ba42d644c806ee.png.map new file mode 100755 index 0000000..b91e61d --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-45a3aaad7e9dd2d37895a48579ba42d644c806ee.png.map @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-45a69cc12e8478d9a4274b7bc89d96d0796e7755.png b/anaconda/docs/html/_images/inheritance-45a69cc12e8478d9a4274b7bc89d96d0796e7755.png new file mode 100755 index 0000000..f70e4e8 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-45a69cc12e8478d9a4274b7bc89d96d0796e7755.png differ diff --git a/anaconda/docs/html/_images/inheritance-45a69cc12e8478d9a4274b7bc89d96d0796e7755.png.map b/anaconda/docs/html/_images/inheritance-45a69cc12e8478d9a4274b7bc89d96d0796e7755.png.map new file mode 100755 index 0000000..b91e61d --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-45a69cc12e8478d9a4274b7bc89d96d0796e7755.png.map @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-4679dc2f7316aaf4856ef8ac068b8fc331a88de0.png b/anaconda/docs/html/_images/inheritance-4679dc2f7316aaf4856ef8ac068b8fc331a88de0.png new file mode 100755 index 0000000..e94ac0e Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-4679dc2f7316aaf4856ef8ac068b8fc331a88de0.png differ diff --git a/anaconda/docs/html/_images/inheritance-4679dc2f7316aaf4856ef8ac068b8fc331a88de0.png.map b/anaconda/docs/html/_images/inheritance-4679dc2f7316aaf4856ef8ac068b8fc331a88de0.png.map new file mode 100755 index 0000000..fafd151 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-4679dc2f7316aaf4856ef8ac068b8fc331a88de0.png.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-478efce8fa4e5a1b8c22972a489a50804d94803b.png b/anaconda/docs/html/_images/inheritance-478efce8fa4e5a1b8c22972a489a50804d94803b.png new file mode 100755 index 0000000..1e0bb7f Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-478efce8fa4e5a1b8c22972a489a50804d94803b.png differ diff --git a/anaconda/docs/html/_images/inheritance-478efce8fa4e5a1b8c22972a489a50804d94803b.png.map b/anaconda/docs/html/_images/inheritance-478efce8fa4e5a1b8c22972a489a50804d94803b.png.map new file mode 100755 index 0000000..23534ba --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-478efce8fa4e5a1b8c22972a489a50804d94803b.png.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-48c398e171e3db673336bfacc197729e96c4521e.png b/anaconda/docs/html/_images/inheritance-48c398e171e3db673336bfacc197729e96c4521e.png new file mode 100755 index 0000000..0c3f021 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-48c398e171e3db673336bfacc197729e96c4521e.png differ diff --git a/anaconda/docs/html/_images/inheritance-48c398e171e3db673336bfacc197729e96c4521e.png.map b/anaconda/docs/html/_images/inheritance-48c398e171e3db673336bfacc197729e96c4521e.png.map new file mode 100755 index 0000000..f2e5a80 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-48c398e171e3db673336bfacc197729e96c4521e.png.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-4930a940fd26ea65479e9eff2bceb2a10724be05.png b/anaconda/docs/html/_images/inheritance-4930a940fd26ea65479e9eff2bceb2a10724be05.png new file mode 100755 index 0000000..a2af30b Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-4930a940fd26ea65479e9eff2bceb2a10724be05.png differ diff --git a/anaconda/docs/html/_images/inheritance-4930a940fd26ea65479e9eff2bceb2a10724be05.png.map b/anaconda/docs/html/_images/inheritance-4930a940fd26ea65479e9eff2bceb2a10724be05.png.map new file mode 100755 index 0000000..90cad97 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-4930a940fd26ea65479e9eff2bceb2a10724be05.png.map @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-4b86743716b355a920da54ae6958b2cfa2e37470.png b/anaconda/docs/html/_images/inheritance-4b86743716b355a920da54ae6958b2cfa2e37470.png new file mode 100755 index 0000000..f323a06 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-4b86743716b355a920da54ae6958b2cfa2e37470.png differ diff --git a/anaconda/docs/html/_images/inheritance-4b86743716b355a920da54ae6958b2cfa2e37470.png.map b/anaconda/docs/html/_images/inheritance-4b86743716b355a920da54ae6958b2cfa2e37470.png.map new file mode 100755 index 0000000..ff6ec80 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-4b86743716b355a920da54ae6958b2cfa2e37470.png.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-4ce03fd533d877701c98747d9db1e1dc26816ded.png b/anaconda/docs/html/_images/inheritance-4ce03fd533d877701c98747d9db1e1dc26816ded.png new file mode 100755 index 0000000..96b3e48 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-4ce03fd533d877701c98747d9db1e1dc26816ded.png differ diff --git a/anaconda/docs/html/_images/inheritance-4ce03fd533d877701c98747d9db1e1dc26816ded.png.map b/anaconda/docs/html/_images/inheritance-4ce03fd533d877701c98747d9db1e1dc26816ded.png.map new file mode 100755 index 0000000..bdf1c0a --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-4ce03fd533d877701c98747d9db1e1dc26816ded.png.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-4d8887bef5131c35ccce19b46339020698da594f.png b/anaconda/docs/html/_images/inheritance-4d8887bef5131c35ccce19b46339020698da594f.png new file mode 100755 index 0000000..472ebdf Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-4d8887bef5131c35ccce19b46339020698da594f.png differ diff --git a/anaconda/docs/html/_images/inheritance-4d8887bef5131c35ccce19b46339020698da594f.png.map b/anaconda/docs/html/_images/inheritance-4d8887bef5131c35ccce19b46339020698da594f.png.map new file mode 100755 index 0000000..bab33fd --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-4d8887bef5131c35ccce19b46339020698da594f.png.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-4e1b7ab87563974535ad63304d8ac2221f598ec6.png b/anaconda/docs/html/_images/inheritance-4e1b7ab87563974535ad63304d8ac2221f598ec6.png new file mode 100755 index 0000000..930e158 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-4e1b7ab87563974535ad63304d8ac2221f598ec6.png differ diff --git a/anaconda/docs/html/_images/inheritance-4e1b7ab87563974535ad63304d8ac2221f598ec6.png.map b/anaconda/docs/html/_images/inheritance-4e1b7ab87563974535ad63304d8ac2221f598ec6.png.map new file mode 100755 index 0000000..2cf1f2c --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-4e1b7ab87563974535ad63304d8ac2221f598ec6.png.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-4e615f6943fd69c14496aef7807eb790ac909c21.png b/anaconda/docs/html/_images/inheritance-4e615f6943fd69c14496aef7807eb790ac909c21.png new file mode 100755 index 0000000..25e3197 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-4e615f6943fd69c14496aef7807eb790ac909c21.png differ diff --git a/anaconda/docs/html/_images/inheritance-4e615f6943fd69c14496aef7807eb790ac909c21.png.map b/anaconda/docs/html/_images/inheritance-4e615f6943fd69c14496aef7807eb790ac909c21.png.map new file mode 100755 index 0000000..82cdd63 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-4e615f6943fd69c14496aef7807eb790ac909c21.png.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-4f12958b2cd7531ee7aa341991b28ebd7afae8ae.png b/anaconda/docs/html/_images/inheritance-4f12958b2cd7531ee7aa341991b28ebd7afae8ae.png new file mode 100755 index 0000000..f584bd6 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-4f12958b2cd7531ee7aa341991b28ebd7afae8ae.png differ diff --git a/anaconda/docs/html/_images/inheritance-4f12958b2cd7531ee7aa341991b28ebd7afae8ae.png.map b/anaconda/docs/html/_images/inheritance-4f12958b2cd7531ee7aa341991b28ebd7afae8ae.png.map new file mode 100755 index 0000000..d15e33d --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-4f12958b2cd7531ee7aa341991b28ebd7afae8ae.png.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-4f29a4a451cde3ca71b7ec59a7cc8a5b1cc4c320.png b/anaconda/docs/html/_images/inheritance-4f29a4a451cde3ca71b7ec59a7cc8a5b1cc4c320.png new file mode 100755 index 0000000..60429d5 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-4f29a4a451cde3ca71b7ec59a7cc8a5b1cc4c320.png differ diff --git a/anaconda/docs/html/_images/inheritance-4f29a4a451cde3ca71b7ec59a7cc8a5b1cc4c320.png.map b/anaconda/docs/html/_images/inheritance-4f29a4a451cde3ca71b7ec59a7cc8a5b1cc4c320.png.map new file mode 100755 index 0000000..4bbe885 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-4f29a4a451cde3ca71b7ec59a7cc8a5b1cc4c320.png.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-4f75bcee6aa4cdc78c953860c81bc3c8c08ea18b.png b/anaconda/docs/html/_images/inheritance-4f75bcee6aa4cdc78c953860c81bc3c8c08ea18b.png new file mode 100644 index 0000000..88ce0c8 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-4f75bcee6aa4cdc78c953860c81bc3c8c08ea18b.png differ diff --git a/anaconda/docs/html/_images/inheritance-4f75bcee6aa4cdc78c953860c81bc3c8c08ea18b.png.map b/anaconda/docs/html/_images/inheritance-4f75bcee6aa4cdc78c953860c81bc3c8c08ea18b.png.map new file mode 100644 index 0000000..dcbdef2 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-4f75bcee6aa4cdc78c953860c81bc3c8c08ea18b.png.map @@ -0,0 +1,5 @@ + + + + + diff --git a/anaconda/docs/html/_images/inheritance-524e979912e04ab807d46fd5286550daeb98d451.png b/anaconda/docs/html/_images/inheritance-524e979912e04ab807d46fd5286550daeb98d451.png new file mode 100644 index 0000000..930e158 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-524e979912e04ab807d46fd5286550daeb98d451.png differ diff --git a/anaconda/docs/html/_images/inheritance-524e979912e04ab807d46fd5286550daeb98d451.png.map b/anaconda/docs/html/_images/inheritance-524e979912e04ab807d46fd5286550daeb98d451.png.map new file mode 100644 index 0000000..2cf1f2c --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-524e979912e04ab807d46fd5286550daeb98d451.png.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-54fca908139888a1f29b6fb418060641224d057c.png b/anaconda/docs/html/_images/inheritance-54fca908139888a1f29b6fb418060641224d057c.png new file mode 100755 index 0000000..d760a2e Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-54fca908139888a1f29b6fb418060641224d057c.png differ diff --git a/anaconda/docs/html/_images/inheritance-54fca908139888a1f29b6fb418060641224d057c.png.map b/anaconda/docs/html/_images/inheritance-54fca908139888a1f29b6fb418060641224d057c.png.map new file mode 100755 index 0000000..041f9d3 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-54fca908139888a1f29b6fb418060641224d057c.png.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-5615c1e02dde6e6dad2001b11fd75ce1cbef04a1.png b/anaconda/docs/html/_images/inheritance-5615c1e02dde6e6dad2001b11fd75ce1cbef04a1.png new file mode 100755 index 0000000..1cc265b Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-5615c1e02dde6e6dad2001b11fd75ce1cbef04a1.png differ diff --git a/anaconda/docs/html/_images/inheritance-5615c1e02dde6e6dad2001b11fd75ce1cbef04a1.png.map b/anaconda/docs/html/_images/inheritance-5615c1e02dde6e6dad2001b11fd75ce1cbef04a1.png.map new file mode 100755 index 0000000..69ae92b --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-5615c1e02dde6e6dad2001b11fd75ce1cbef04a1.png.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-56e1e663baba0e69366531fa3480f7ff5c550e40.png b/anaconda/docs/html/_images/inheritance-56e1e663baba0e69366531fa3480f7ff5c550e40.png new file mode 100755 index 0000000..acd4049 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-56e1e663baba0e69366531fa3480f7ff5c550e40.png differ diff --git a/anaconda/docs/html/_images/inheritance-56e1e663baba0e69366531fa3480f7ff5c550e40.png.map b/anaconda/docs/html/_images/inheritance-56e1e663baba0e69366531fa3480f7ff5c550e40.png.map new file mode 100755 index 0000000..a554873 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-56e1e663baba0e69366531fa3480f7ff5c550e40.png.map @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-570d6ff4fad26c7d3a59778a44e91d3c373d8f11.png b/anaconda/docs/html/_images/inheritance-570d6ff4fad26c7d3a59778a44e91d3c373d8f11.png new file mode 100755 index 0000000..93ccb50 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-570d6ff4fad26c7d3a59778a44e91d3c373d8f11.png differ diff --git a/anaconda/docs/html/_images/inheritance-570d6ff4fad26c7d3a59778a44e91d3c373d8f11.png.map b/anaconda/docs/html/_images/inheritance-570d6ff4fad26c7d3a59778a44e91d3c373d8f11.png.map new file mode 100755 index 0000000..a728298 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-570d6ff4fad26c7d3a59778a44e91d3c373d8f11.png.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-582cec9345a33ad03ccf2fab6cb7e51acabb83b9.png b/anaconda/docs/html/_images/inheritance-582cec9345a33ad03ccf2fab6cb7e51acabb83b9.png new file mode 100755 index 0000000..cbfa866 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-582cec9345a33ad03ccf2fab6cb7e51acabb83b9.png differ diff --git a/anaconda/docs/html/_images/inheritance-582cec9345a33ad03ccf2fab6cb7e51acabb83b9.png.map b/anaconda/docs/html/_images/inheritance-582cec9345a33ad03ccf2fab6cb7e51acabb83b9.png.map new file mode 100755 index 0000000..89fbfdd --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-582cec9345a33ad03ccf2fab6cb7e51acabb83b9.png.map @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-5a611d100637676b0d080727c3f109964176ae75.png b/anaconda/docs/html/_images/inheritance-5a611d100637676b0d080727c3f109964176ae75.png new file mode 100644 index 0000000..2231d77 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-5a611d100637676b0d080727c3f109964176ae75.png differ diff --git a/anaconda/docs/html/_images/inheritance-5a611d100637676b0d080727c3f109964176ae75.png.map b/anaconda/docs/html/_images/inheritance-5a611d100637676b0d080727c3f109964176ae75.png.map new file mode 100644 index 0000000..f3a9dac --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-5a611d100637676b0d080727c3f109964176ae75.png.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-5b50a10a6c16e0ba6e4b7986165f87ac74810d93.png b/anaconda/docs/html/_images/inheritance-5b50a10a6c16e0ba6e4b7986165f87ac74810d93.png new file mode 100755 index 0000000..ee87a9e Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-5b50a10a6c16e0ba6e4b7986165f87ac74810d93.png differ diff --git a/anaconda/docs/html/_images/inheritance-5b50a10a6c16e0ba6e4b7986165f87ac74810d93.png.map b/anaconda/docs/html/_images/inheritance-5b50a10a6c16e0ba6e4b7986165f87ac74810d93.png.map new file mode 100755 index 0000000..8c26c70 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-5b50a10a6c16e0ba6e4b7986165f87ac74810d93.png.map @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-5d4cba45557c9421c0864f7d5b68838335a68868.png b/anaconda/docs/html/_images/inheritance-5d4cba45557c9421c0864f7d5b68838335a68868.png new file mode 100755 index 0000000..2dedb7c Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-5d4cba45557c9421c0864f7d5b68838335a68868.png differ diff --git a/anaconda/docs/html/_images/inheritance-5d4cba45557c9421c0864f7d5b68838335a68868.png.map b/anaconda/docs/html/_images/inheritance-5d4cba45557c9421c0864f7d5b68838335a68868.png.map new file mode 100755 index 0000000..044f5a7 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-5d4cba45557c9421c0864f7d5b68838335a68868.png.map @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-5d754615c723bcc2f074b8e0a4481295c014bc45.png b/anaconda/docs/html/_images/inheritance-5d754615c723bcc2f074b8e0a4481295c014bc45.png new file mode 100755 index 0000000..3092e35 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-5d754615c723bcc2f074b8e0a4481295c014bc45.png differ diff --git a/anaconda/docs/html/_images/inheritance-5d754615c723bcc2f074b8e0a4481295c014bc45.png.map b/anaconda/docs/html/_images/inheritance-5d754615c723bcc2f074b8e0a4481295c014bc45.png.map new file mode 100755 index 0000000..049b8b4 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-5d754615c723bcc2f074b8e0a4481295c014bc45.png.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-607ecd63e40ff0ed90a5eefac7615cb040544e05.png b/anaconda/docs/html/_images/inheritance-607ecd63e40ff0ed90a5eefac7615cb040544e05.png new file mode 100755 index 0000000..6090a74 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-607ecd63e40ff0ed90a5eefac7615cb040544e05.png differ diff --git a/anaconda/docs/html/_images/inheritance-607ecd63e40ff0ed90a5eefac7615cb040544e05.png.map b/anaconda/docs/html/_images/inheritance-607ecd63e40ff0ed90a5eefac7615cb040544e05.png.map new file mode 100755 index 0000000..f25c58a --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-607ecd63e40ff0ed90a5eefac7615cb040544e05.png.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-61a0e0574639a5cf1c548195a821f3ca8601e862.png b/anaconda/docs/html/_images/inheritance-61a0e0574639a5cf1c548195a821f3ca8601e862.png new file mode 100755 index 0000000..2dedb7c Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-61a0e0574639a5cf1c548195a821f3ca8601e862.png differ diff --git a/anaconda/docs/html/_images/inheritance-61a0e0574639a5cf1c548195a821f3ca8601e862.png.map b/anaconda/docs/html/_images/inheritance-61a0e0574639a5cf1c548195a821f3ca8601e862.png.map new file mode 100755 index 0000000..044f5a7 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-61a0e0574639a5cf1c548195a821f3ca8601e862.png.map @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-62a1a4fdcdb43f4d60c83dfaa340698f841aa70e.png b/anaconda/docs/html/_images/inheritance-62a1a4fdcdb43f4d60c83dfaa340698f841aa70e.png new file mode 100755 index 0000000..d2df516 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-62a1a4fdcdb43f4d60c83dfaa340698f841aa70e.png differ diff --git a/anaconda/docs/html/_images/inheritance-62a1a4fdcdb43f4d60c83dfaa340698f841aa70e.png.map b/anaconda/docs/html/_images/inheritance-62a1a4fdcdb43f4d60c83dfaa340698f841aa70e.png.map new file mode 100755 index 0000000..bf20704 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-62a1a4fdcdb43f4d60c83dfaa340698f841aa70e.png.map @@ -0,0 +1,5 @@ + + + + + diff --git a/anaconda/docs/html/_images/inheritance-62fb7e2adb220786534786e428641656113a5f29.png b/anaconda/docs/html/_images/inheritance-62fb7e2adb220786534786e428641656113a5f29.png new file mode 100755 index 0000000..a4fd6ee Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-62fb7e2adb220786534786e428641656113a5f29.png differ diff --git a/anaconda/docs/html/_images/inheritance-62fb7e2adb220786534786e428641656113a5f29.png.map b/anaconda/docs/html/_images/inheritance-62fb7e2adb220786534786e428641656113a5f29.png.map new file mode 100755 index 0000000..90cad97 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-62fb7e2adb220786534786e428641656113a5f29.png.map @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-672b3da242001fb533ae624b47f885ff0a9ab1a9.png b/anaconda/docs/html/_images/inheritance-672b3da242001fb533ae624b47f885ff0a9ab1a9.png new file mode 100755 index 0000000..61278d4 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-672b3da242001fb533ae624b47f885ff0a9ab1a9.png differ diff --git a/anaconda/docs/html/_images/inheritance-672b3da242001fb533ae624b47f885ff0a9ab1a9.png.map b/anaconda/docs/html/_images/inheritance-672b3da242001fb533ae624b47f885ff0a9ab1a9.png.map new file mode 100755 index 0000000..2c6f30b --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-672b3da242001fb533ae624b47f885ff0a9ab1a9.png.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-678d22cf30414f97633cad02d4391116582d906b.png b/anaconda/docs/html/_images/inheritance-678d22cf30414f97633cad02d4391116582d906b.png new file mode 100644 index 0000000..14dac41 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-678d22cf30414f97633cad02d4391116582d906b.png differ diff --git a/anaconda/docs/html/_images/inheritance-678d22cf30414f97633cad02d4391116582d906b.png.map b/anaconda/docs/html/_images/inheritance-678d22cf30414f97633cad02d4391116582d906b.png.map new file mode 100644 index 0000000..06f908d --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-678d22cf30414f97633cad02d4391116582d906b.png.map @@ -0,0 +1,4 @@ + + + + diff --git a/anaconda/docs/html/_images/inheritance-68235dfface4c6100bec1d857bc80074b9b79f48.png b/anaconda/docs/html/_images/inheritance-68235dfface4c6100bec1d857bc80074b9b79f48.png new file mode 100755 index 0000000..a4fd6ee Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-68235dfface4c6100bec1d857bc80074b9b79f48.png differ diff --git a/anaconda/docs/html/_images/inheritance-68235dfface4c6100bec1d857bc80074b9b79f48.png.map b/anaconda/docs/html/_images/inheritance-68235dfface4c6100bec1d857bc80074b9b79f48.png.map new file mode 100755 index 0000000..90cad97 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-68235dfface4c6100bec1d857bc80074b9b79f48.png.map @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-6a79a7b6c6b4aedfe6be2618157e6e23a73c296b.png b/anaconda/docs/html/_images/inheritance-6a79a7b6c6b4aedfe6be2618157e6e23a73c296b.png new file mode 100755 index 0000000..60429d5 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-6a79a7b6c6b4aedfe6be2618157e6e23a73c296b.png differ diff --git a/anaconda/docs/html/_images/inheritance-6a79a7b6c6b4aedfe6be2618157e6e23a73c296b.png.map b/anaconda/docs/html/_images/inheritance-6a79a7b6c6b4aedfe6be2618157e6e23a73c296b.png.map new file mode 100755 index 0000000..4bbe885 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-6a79a7b6c6b4aedfe6be2618157e6e23a73c296b.png.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-6b7264ba70efda3efd6984cca9dff64dba8472d0.png b/anaconda/docs/html/_images/inheritance-6b7264ba70efda3efd6984cca9dff64dba8472d0.png new file mode 100755 index 0000000..b6ca587 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-6b7264ba70efda3efd6984cca9dff64dba8472d0.png differ diff --git a/anaconda/docs/html/_images/inheritance-6b7264ba70efda3efd6984cca9dff64dba8472d0.png.map b/anaconda/docs/html/_images/inheritance-6b7264ba70efda3efd6984cca9dff64dba8472d0.png.map new file mode 100755 index 0000000..06f908d --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-6b7264ba70efda3efd6984cca9dff64dba8472d0.png.map @@ -0,0 +1,4 @@ + + + + diff --git a/anaconda/docs/html/_images/inheritance-6be14bfa83817272a671138b73118393ec82ab6f.png b/anaconda/docs/html/_images/inheritance-6be14bfa83817272a671138b73118393ec82ab6f.png new file mode 100755 index 0000000..686a883 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-6be14bfa83817272a671138b73118393ec82ab6f.png differ diff --git a/anaconda/docs/html/_images/inheritance-6be14bfa83817272a671138b73118393ec82ab6f.png.map b/anaconda/docs/html/_images/inheritance-6be14bfa83817272a671138b73118393ec82ab6f.png.map new file mode 100755 index 0000000..82cdd63 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-6be14bfa83817272a671138b73118393ec82ab6f.png.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-6c3f0c674b1c9808488059e504e3d5a4255332c7.png b/anaconda/docs/html/_images/inheritance-6c3f0c674b1c9808488059e504e3d5a4255332c7.png new file mode 100755 index 0000000..741a791 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-6c3f0c674b1c9808488059e504e3d5a4255332c7.png differ diff --git a/anaconda/docs/html/_images/inheritance-6c3f0c674b1c9808488059e504e3d5a4255332c7.png.map b/anaconda/docs/html/_images/inheritance-6c3f0c674b1c9808488059e504e3d5a4255332c7.png.map new file mode 100755 index 0000000..041f9d3 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-6c3f0c674b1c9808488059e504e3d5a4255332c7.png.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-6c9957c29f820ddb6cd5474b97ac7253e349f54b.png b/anaconda/docs/html/_images/inheritance-6c9957c29f820ddb6cd5474b97ac7253e349f54b.png new file mode 100755 index 0000000..d059582 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-6c9957c29f820ddb6cd5474b97ac7253e349f54b.png differ diff --git a/anaconda/docs/html/_images/inheritance-6c9957c29f820ddb6cd5474b97ac7253e349f54b.png.map b/anaconda/docs/html/_images/inheritance-6c9957c29f820ddb6cd5474b97ac7253e349f54b.png.map new file mode 100755 index 0000000..0484e1c --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-6c9957c29f820ddb6cd5474b97ac7253e349f54b.png.map @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-6d18ad6360a410fbd7f1cd9f23833421c78a40be.png b/anaconda/docs/html/_images/inheritance-6d18ad6360a410fbd7f1cd9f23833421c78a40be.png new file mode 100755 index 0000000..30997b4 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-6d18ad6360a410fbd7f1cd9f23833421c78a40be.png differ diff --git a/anaconda/docs/html/_images/inheritance-6d18ad6360a410fbd7f1cd9f23833421c78a40be.png.map b/anaconda/docs/html/_images/inheritance-6d18ad6360a410fbd7f1cd9f23833421c78a40be.png.map new file mode 100755 index 0000000..1bae0d3 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-6d18ad6360a410fbd7f1cd9f23833421c78a40be.png.map @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-6d19f1182bed040c84c0ba9e3abb817cbcadb14a.png b/anaconda/docs/html/_images/inheritance-6d19f1182bed040c84c0ba9e3abb817cbcadb14a.png new file mode 100755 index 0000000..ecd1d69 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-6d19f1182bed040c84c0ba9e3abb817cbcadb14a.png differ diff --git a/anaconda/docs/html/_images/inheritance-6d19f1182bed040c84c0ba9e3abb817cbcadb14a.png.map b/anaconda/docs/html/_images/inheritance-6d19f1182bed040c84c0ba9e3abb817cbcadb14a.png.map new file mode 100755 index 0000000..d80def8 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-6d19f1182bed040c84c0ba9e3abb817cbcadb14a.png.map @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-6d5cf7196008b8dc09613aa31ae5d097ed19cc63.png b/anaconda/docs/html/_images/inheritance-6d5cf7196008b8dc09613aa31ae5d097ed19cc63.png new file mode 100755 index 0000000..f1effee Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-6d5cf7196008b8dc09613aa31ae5d097ed19cc63.png differ diff --git a/anaconda/docs/html/_images/inheritance-6d5cf7196008b8dc09613aa31ae5d097ed19cc63.png.map b/anaconda/docs/html/_images/inheritance-6d5cf7196008b8dc09613aa31ae5d097ed19cc63.png.map new file mode 100755 index 0000000..9be0864 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-6d5cf7196008b8dc09613aa31ae5d097ed19cc63.png.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-6e2d0a72f6173b0257a7fb2821c838a14e35b86f.png b/anaconda/docs/html/_images/inheritance-6e2d0a72f6173b0257a7fb2821c838a14e35b86f.png new file mode 100755 index 0000000..93ccb50 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-6e2d0a72f6173b0257a7fb2821c838a14e35b86f.png differ diff --git a/anaconda/docs/html/_images/inheritance-6e2d0a72f6173b0257a7fb2821c838a14e35b86f.png.map b/anaconda/docs/html/_images/inheritance-6e2d0a72f6173b0257a7fb2821c838a14e35b86f.png.map new file mode 100755 index 0000000..a728298 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-6e2d0a72f6173b0257a7fb2821c838a14e35b86f.png.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-6eac54f73f8db95ddd3283002859b5c94d5d7d71.png b/anaconda/docs/html/_images/inheritance-6eac54f73f8db95ddd3283002859b5c94d5d7d71.png new file mode 100755 index 0000000..3080cf3 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-6eac54f73f8db95ddd3283002859b5c94d5d7d71.png differ diff --git a/anaconda/docs/html/_images/inheritance-6eac54f73f8db95ddd3283002859b5c94d5d7d71.png.map b/anaconda/docs/html/_images/inheritance-6eac54f73f8db95ddd3283002859b5c94d5d7d71.png.map new file mode 100755 index 0000000..bf20704 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-6eac54f73f8db95ddd3283002859b5c94d5d7d71.png.map @@ -0,0 +1,5 @@ + + + + + diff --git a/anaconda/docs/html/_images/inheritance-6f8a3f6c627f2e9d50e18fe49a045039c90e0767.png b/anaconda/docs/html/_images/inheritance-6f8a3f6c627f2e9d50e18fe49a045039c90e0767.png new file mode 100755 index 0000000..ff654d1 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-6f8a3f6c627f2e9d50e18fe49a045039c90e0767.png differ diff --git a/anaconda/docs/html/_images/inheritance-6f8a3f6c627f2e9d50e18fe49a045039c90e0767.png.map b/anaconda/docs/html/_images/inheritance-6f8a3f6c627f2e9d50e18fe49a045039c90e0767.png.map new file mode 100755 index 0000000..b6dacbd --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-6f8a3f6c627f2e9d50e18fe49a045039c90e0767.png.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-701d56a34b45875925623200b0ad07da05536829.png b/anaconda/docs/html/_images/inheritance-701d56a34b45875925623200b0ad07da05536829.png new file mode 100755 index 0000000..84186d8 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-701d56a34b45875925623200b0ad07da05536829.png differ diff --git a/anaconda/docs/html/_images/inheritance-701d56a34b45875925623200b0ad07da05536829.png.map b/anaconda/docs/html/_images/inheritance-701d56a34b45875925623200b0ad07da05536829.png.map new file mode 100755 index 0000000..f82316a --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-701d56a34b45875925623200b0ad07da05536829.png.map @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-718a44dd14150518e38c2da93be2a29c0b2bfe7b.png b/anaconda/docs/html/_images/inheritance-718a44dd14150518e38c2da93be2a29c0b2bfe7b.png new file mode 100644 index 0000000..c26090d Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-718a44dd14150518e38c2da93be2a29c0b2bfe7b.png differ diff --git a/anaconda/docs/html/_images/inheritance-718a44dd14150518e38c2da93be2a29c0b2bfe7b.png.map b/anaconda/docs/html/_images/inheritance-718a44dd14150518e38c2da93be2a29c0b2bfe7b.png.map new file mode 100644 index 0000000..044f5a7 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-718a44dd14150518e38c2da93be2a29c0b2bfe7b.png.map @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-73859d6d019c829f0f53ecadf527dc82feb4faff.png b/anaconda/docs/html/_images/inheritance-73859d6d019c829f0f53ecadf527dc82feb4faff.png new file mode 100644 index 0000000..360aac3 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-73859d6d019c829f0f53ecadf527dc82feb4faff.png differ diff --git a/anaconda/docs/html/_images/inheritance-73859d6d019c829f0f53ecadf527dc82feb4faff.png.map b/anaconda/docs/html/_images/inheritance-73859d6d019c829f0f53ecadf527dc82feb4faff.png.map new file mode 100644 index 0000000..1bae0d3 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-73859d6d019c829f0f53ecadf527dc82feb4faff.png.map @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-764e21ee28231b029689b0809790c8c3407264a0.png b/anaconda/docs/html/_images/inheritance-764e21ee28231b029689b0809790c8c3407264a0.png new file mode 100755 index 0000000..79e09c1 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-764e21ee28231b029689b0809790c8c3407264a0.png differ diff --git a/anaconda/docs/html/_images/inheritance-764e21ee28231b029689b0809790c8c3407264a0.png.map b/anaconda/docs/html/_images/inheritance-764e21ee28231b029689b0809790c8c3407264a0.png.map new file mode 100755 index 0000000..049b8b4 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-764e21ee28231b029689b0809790c8c3407264a0.png.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-78b6bdfab54fdf4185033cc7eaeaff00017ffe89.png b/anaconda/docs/html/_images/inheritance-78b6bdfab54fdf4185033cc7eaeaff00017ffe89.png new file mode 100755 index 0000000..bebfeaf Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-78b6bdfab54fdf4185033cc7eaeaff00017ffe89.png differ diff --git a/anaconda/docs/html/_images/inheritance-78b6bdfab54fdf4185033cc7eaeaff00017ffe89.png.map b/anaconda/docs/html/_images/inheritance-78b6bdfab54fdf4185033cc7eaeaff00017ffe89.png.map new file mode 100755 index 0000000..bab33fd --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-78b6bdfab54fdf4185033cc7eaeaff00017ffe89.png.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-79612a209e2524f4d80d6bb7f4d096aaa022b29e.png b/anaconda/docs/html/_images/inheritance-79612a209e2524f4d80d6bb7f4d096aaa022b29e.png new file mode 100755 index 0000000..669fdaa Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-79612a209e2524f4d80d6bb7f4d096aaa022b29e.png differ diff --git a/anaconda/docs/html/_images/inheritance-79612a209e2524f4d80d6bb7f4d096aaa022b29e.png.map b/anaconda/docs/html/_images/inheritance-79612a209e2524f4d80d6bb7f4d096aaa022b29e.png.map new file mode 100755 index 0000000..89fbfdd --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-79612a209e2524f4d80d6bb7f4d096aaa022b29e.png.map @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-7ecc13e0fc3fbe255f160bb8e235439455a1946b.png b/anaconda/docs/html/_images/inheritance-7ecc13e0fc3fbe255f160bb8e235439455a1946b.png new file mode 100755 index 0000000..2231d77 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-7ecc13e0fc3fbe255f160bb8e235439455a1946b.png differ diff --git a/anaconda/docs/html/_images/inheritance-7ecc13e0fc3fbe255f160bb8e235439455a1946b.png.map b/anaconda/docs/html/_images/inheritance-7ecc13e0fc3fbe255f160bb8e235439455a1946b.png.map new file mode 100755 index 0000000..f3a9dac --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-7ecc13e0fc3fbe255f160bb8e235439455a1946b.png.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-7f8d6a7eaf18ecc185a1588b37119a3e274e05cc.png b/anaconda/docs/html/_images/inheritance-7f8d6a7eaf18ecc185a1588b37119a3e274e05cc.png new file mode 100755 index 0000000..dc20a13 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-7f8d6a7eaf18ecc185a1588b37119a3e274e05cc.png differ diff --git a/anaconda/docs/html/_images/inheritance-7f8d6a7eaf18ecc185a1588b37119a3e274e05cc.png.map b/anaconda/docs/html/_images/inheritance-7f8d6a7eaf18ecc185a1588b37119a3e274e05cc.png.map new file mode 100755 index 0000000..8e2379f --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-7f8d6a7eaf18ecc185a1588b37119a3e274e05cc.png.map @@ -0,0 +1,5 @@ + + + + + diff --git a/anaconda/docs/html/_images/inheritance-80893a187ddf6e3bfda59379c08ce2426d297975.png b/anaconda/docs/html/_images/inheritance-80893a187ddf6e3bfda59379c08ce2426d297975.png new file mode 100755 index 0000000..d562f90 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-80893a187ddf6e3bfda59379c08ce2426d297975.png differ diff --git a/anaconda/docs/html/_images/inheritance-80893a187ddf6e3bfda59379c08ce2426d297975.png.map b/anaconda/docs/html/_images/inheritance-80893a187ddf6e3bfda59379c08ce2426d297975.png.map new file mode 100755 index 0000000..f403cf1 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-80893a187ddf6e3bfda59379c08ce2426d297975.png.map @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-809e4bb00733a416b97786f8f48c219e7b79e13c.png b/anaconda/docs/html/_images/inheritance-809e4bb00733a416b97786f8f48c219e7b79e13c.png new file mode 100755 index 0000000..f323a06 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-809e4bb00733a416b97786f8f48c219e7b79e13c.png differ diff --git a/anaconda/docs/html/_images/inheritance-809e4bb00733a416b97786f8f48c219e7b79e13c.png.map b/anaconda/docs/html/_images/inheritance-809e4bb00733a416b97786f8f48c219e7b79e13c.png.map new file mode 100755 index 0000000..ff6ec80 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-809e4bb00733a416b97786f8f48c219e7b79e13c.png.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-80aabd5ed29e3b24bc9b4f1381107fa09466efa3.png b/anaconda/docs/html/_images/inheritance-80aabd5ed29e3b24bc9b4f1381107fa09466efa3.png new file mode 100644 index 0000000..3080cf3 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-80aabd5ed29e3b24bc9b4f1381107fa09466efa3.png differ diff --git a/anaconda/docs/html/_images/inheritance-80aabd5ed29e3b24bc9b4f1381107fa09466efa3.png.map b/anaconda/docs/html/_images/inheritance-80aabd5ed29e3b24bc9b4f1381107fa09466efa3.png.map new file mode 100644 index 0000000..bf20704 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-80aabd5ed29e3b24bc9b4f1381107fa09466efa3.png.map @@ -0,0 +1,5 @@ + + + + + diff --git a/anaconda/docs/html/_images/inheritance-83d5d2b392f7b96f2e49ccb61c6deb124d6f20cf.png b/anaconda/docs/html/_images/inheritance-83d5d2b392f7b96f2e49ccb61c6deb124d6f20cf.png new file mode 100644 index 0000000..0fdda86 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-83d5d2b392f7b96f2e49ccb61c6deb124d6f20cf.png differ diff --git a/anaconda/docs/html/_images/inheritance-83d5d2b392f7b96f2e49ccb61c6deb124d6f20cf.png.map b/anaconda/docs/html/_images/inheritance-83d5d2b392f7b96f2e49ccb61c6deb124d6f20cf.png.map new file mode 100644 index 0000000..b30cc46 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-83d5d2b392f7b96f2e49ccb61c6deb124d6f20cf.png.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-85c5429fe58f0bfb46c37a6e34e2719b57bad32b.png b/anaconda/docs/html/_images/inheritance-85c5429fe58f0bfb46c37a6e34e2719b57bad32b.png new file mode 100755 index 0000000..e94ac0e Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-85c5429fe58f0bfb46c37a6e34e2719b57bad32b.png differ diff --git a/anaconda/docs/html/_images/inheritance-85c5429fe58f0bfb46c37a6e34e2719b57bad32b.png.map b/anaconda/docs/html/_images/inheritance-85c5429fe58f0bfb46c37a6e34e2719b57bad32b.png.map new file mode 100755 index 0000000..fafd151 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-85c5429fe58f0bfb46c37a6e34e2719b57bad32b.png.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-861ecd20f31b0f56cc2a74f93e12f55fd935bc98.png b/anaconda/docs/html/_images/inheritance-861ecd20f31b0f56cc2a74f93e12f55fd935bc98.png new file mode 100755 index 0000000..0127725 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-861ecd20f31b0f56cc2a74f93e12f55fd935bc98.png differ diff --git a/anaconda/docs/html/_images/inheritance-861ecd20f31b0f56cc2a74f93e12f55fd935bc98.png.map b/anaconda/docs/html/_images/inheritance-861ecd20f31b0f56cc2a74f93e12f55fd935bc98.png.map new file mode 100755 index 0000000..de0d357 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-861ecd20f31b0f56cc2a74f93e12f55fd935bc98.png.map @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-86d715f71d6e7ab99cd22847abfc0456507d08b7.png b/anaconda/docs/html/_images/inheritance-86d715f71d6e7ab99cd22847abfc0456507d08b7.png new file mode 100755 index 0000000..5949541 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-86d715f71d6e7ab99cd22847abfc0456507d08b7.png differ diff --git a/anaconda/docs/html/_images/inheritance-86d715f71d6e7ab99cd22847abfc0456507d08b7.png.map b/anaconda/docs/html/_images/inheritance-86d715f71d6e7ab99cd22847abfc0456507d08b7.png.map new file mode 100755 index 0000000..9240c6c --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-86d715f71d6e7ab99cd22847abfc0456507d08b7.png.map @@ -0,0 +1,5 @@ + + + + + diff --git a/anaconda/docs/html/_images/inheritance-8760b27e0adfcd6c9612a6df0d544dc11c36a0a8.png b/anaconda/docs/html/_images/inheritance-8760b27e0adfcd6c9612a6df0d544dc11c36a0a8.png new file mode 100755 index 0000000..be591f8 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-8760b27e0adfcd6c9612a6df0d544dc11c36a0a8.png differ diff --git a/anaconda/docs/html/_images/inheritance-8760b27e0adfcd6c9612a6df0d544dc11c36a0a8.png.map b/anaconda/docs/html/_images/inheritance-8760b27e0adfcd6c9612a6df0d544dc11c36a0a8.png.map new file mode 100755 index 0000000..8e2379f --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-8760b27e0adfcd6c9612a6df0d544dc11c36a0a8.png.map @@ -0,0 +1,5 @@ + + + + + diff --git a/anaconda/docs/html/_images/inheritance-87cc528bbb7d376855b96fe06b40be36297fe5c6.png b/anaconda/docs/html/_images/inheritance-87cc528bbb7d376855b96fe06b40be36297fe5c6.png new file mode 100755 index 0000000..360aac3 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-87cc528bbb7d376855b96fe06b40be36297fe5c6.png differ diff --git a/anaconda/docs/html/_images/inheritance-87cc528bbb7d376855b96fe06b40be36297fe5c6.png.map b/anaconda/docs/html/_images/inheritance-87cc528bbb7d376855b96fe06b40be36297fe5c6.png.map new file mode 100755 index 0000000..1bae0d3 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-87cc528bbb7d376855b96fe06b40be36297fe5c6.png.map @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-87f9eac8c1b094e546cb9041ee49c785c4c04154.png b/anaconda/docs/html/_images/inheritance-87f9eac8c1b094e546cb9041ee49c785c4c04154.png new file mode 100755 index 0000000..c31ecba Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-87f9eac8c1b094e546cb9041ee49c785c4c04154.png differ diff --git a/anaconda/docs/html/_images/inheritance-87f9eac8c1b094e546cb9041ee49c785c4c04154.png.map b/anaconda/docs/html/_images/inheritance-87f9eac8c1b094e546cb9041ee49c785c4c04154.png.map new file mode 100755 index 0000000..f25c58a --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-87f9eac8c1b094e546cb9041ee49c785c4c04154.png.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-8d4535971fac413f96c9fc5f80e4dc191421fd58.png b/anaconda/docs/html/_images/inheritance-8d4535971fac413f96c9fc5f80e4dc191421fd58.png new file mode 100755 index 0000000..3092e35 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-8d4535971fac413f96c9fc5f80e4dc191421fd58.png differ diff --git a/anaconda/docs/html/_images/inheritance-8d4535971fac413f96c9fc5f80e4dc191421fd58.png.map b/anaconda/docs/html/_images/inheritance-8d4535971fac413f96c9fc5f80e4dc191421fd58.png.map new file mode 100755 index 0000000..049b8b4 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-8d4535971fac413f96c9fc5f80e4dc191421fd58.png.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-91549abe22d86d5387499ec3534c67dd971814e9.png b/anaconda/docs/html/_images/inheritance-91549abe22d86d5387499ec3534c67dd971814e9.png new file mode 100755 index 0000000..9afa8bb Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-91549abe22d86d5387499ec3534c67dd971814e9.png differ diff --git a/anaconda/docs/html/_images/inheritance-91549abe22d86d5387499ec3534c67dd971814e9.png.map b/anaconda/docs/html/_images/inheritance-91549abe22d86d5387499ec3534c67dd971814e9.png.map new file mode 100755 index 0000000..a554873 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-91549abe22d86d5387499ec3534c67dd971814e9.png.map @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-916eba42166abbdd15e3f1e1e05257f9a0d54eef.png b/anaconda/docs/html/_images/inheritance-916eba42166abbdd15e3f1e1e05257f9a0d54eef.png new file mode 100755 index 0000000..ecd1d69 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-916eba42166abbdd15e3f1e1e05257f9a0d54eef.png differ diff --git a/anaconda/docs/html/_images/inheritance-916eba42166abbdd15e3f1e1e05257f9a0d54eef.png.map b/anaconda/docs/html/_images/inheritance-916eba42166abbdd15e3f1e1e05257f9a0d54eef.png.map new file mode 100755 index 0000000..d80def8 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-916eba42166abbdd15e3f1e1e05257f9a0d54eef.png.map @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-91ca315604fbdb5b3f6c94d6460cfb76e077e83a.png b/anaconda/docs/html/_images/inheritance-91ca315604fbdb5b3f6c94d6460cfb76e077e83a.png new file mode 100755 index 0000000..f1ea796 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-91ca315604fbdb5b3f6c94d6460cfb76e077e83a.png differ diff --git a/anaconda/docs/html/_images/inheritance-91ca315604fbdb5b3f6c94d6460cfb76e077e83a.png.map b/anaconda/docs/html/_images/inheritance-91ca315604fbdb5b3f6c94d6460cfb76e077e83a.png.map new file mode 100755 index 0000000..395cb99 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-91ca315604fbdb5b3f6c94d6460cfb76e077e83a.png.map @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-92fb261740114a0a14d95c580c116f114d581fee.png b/anaconda/docs/html/_images/inheritance-92fb261740114a0a14d95c580c116f114d581fee.png new file mode 100755 index 0000000..686a883 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-92fb261740114a0a14d95c580c116f114d581fee.png differ diff --git a/anaconda/docs/html/_images/inheritance-92fb261740114a0a14d95c580c116f114d581fee.png.map b/anaconda/docs/html/_images/inheritance-92fb261740114a0a14d95c580c116f114d581fee.png.map new file mode 100755 index 0000000..82cdd63 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-92fb261740114a0a14d95c580c116f114d581fee.png.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-9485bd789e826043cbf9c8f11ae48e7970777905.png b/anaconda/docs/html/_images/inheritance-9485bd789e826043cbf9c8f11ae48e7970777905.png new file mode 100755 index 0000000..ec1eef9 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-9485bd789e826043cbf9c8f11ae48e7970777905.png differ diff --git a/anaconda/docs/html/_images/inheritance-9485bd789e826043cbf9c8f11ae48e7970777905.png.map b/anaconda/docs/html/_images/inheritance-9485bd789e826043cbf9c8f11ae48e7970777905.png.map new file mode 100755 index 0000000..b91e61d --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-9485bd789e826043cbf9c8f11ae48e7970777905.png.map @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-96215bbcb7caa9250d71cad9d2bbf19f5f383eb5.png b/anaconda/docs/html/_images/inheritance-96215bbcb7caa9250d71cad9d2bbf19f5f383eb5.png new file mode 100755 index 0000000..dc20a13 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-96215bbcb7caa9250d71cad9d2bbf19f5f383eb5.png differ diff --git a/anaconda/docs/html/_images/inheritance-96215bbcb7caa9250d71cad9d2bbf19f5f383eb5.png.map b/anaconda/docs/html/_images/inheritance-96215bbcb7caa9250d71cad9d2bbf19f5f383eb5.png.map new file mode 100755 index 0000000..8e2379f --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-96215bbcb7caa9250d71cad9d2bbf19f5f383eb5.png.map @@ -0,0 +1,5 @@ + + + + + diff --git a/anaconda/docs/html/_images/inheritance-97427eb29316d0995a9a9bd3143d5aff82b92bd9.png b/anaconda/docs/html/_images/inheritance-97427eb29316d0995a9a9bd3143d5aff82b92bd9.png new file mode 100755 index 0000000..d2df516 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-97427eb29316d0995a9a9bd3143d5aff82b92bd9.png differ diff --git a/anaconda/docs/html/_images/inheritance-97427eb29316d0995a9a9bd3143d5aff82b92bd9.png.map b/anaconda/docs/html/_images/inheritance-97427eb29316d0995a9a9bd3143d5aff82b92bd9.png.map new file mode 100755 index 0000000..bf20704 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-97427eb29316d0995a9a9bd3143d5aff82b92bd9.png.map @@ -0,0 +1,5 @@ + + + + + diff --git a/anaconda/docs/html/_images/inheritance-978ba6987dc09980952287ecb895e83ecb1f44f7.png b/anaconda/docs/html/_images/inheritance-978ba6987dc09980952287ecb895e83ecb1f44f7.png new file mode 100755 index 0000000..934ad5f Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-978ba6987dc09980952287ecb895e83ecb1f44f7.png differ diff --git a/anaconda/docs/html/_images/inheritance-978ba6987dc09980952287ecb895e83ecb1f44f7.png.map b/anaconda/docs/html/_images/inheritance-978ba6987dc09980952287ecb895e83ecb1f44f7.png.map new file mode 100755 index 0000000..24b04dd --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-978ba6987dc09980952287ecb895e83ecb1f44f7.png.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-985b9a33001c85a0e4a0358c04b2a911f6917c55.png b/anaconda/docs/html/_images/inheritance-985b9a33001c85a0e4a0358c04b2a911f6917c55.png new file mode 100755 index 0000000..f1effee Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-985b9a33001c85a0e4a0358c04b2a911f6917c55.png differ diff --git a/anaconda/docs/html/_images/inheritance-985b9a33001c85a0e4a0358c04b2a911f6917c55.png.map b/anaconda/docs/html/_images/inheritance-985b9a33001c85a0e4a0358c04b2a911f6917c55.png.map new file mode 100755 index 0000000..9be0864 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-985b9a33001c85a0e4a0358c04b2a911f6917c55.png.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-9add570c222555503082e15d712584c94ead58b5.png b/anaconda/docs/html/_images/inheritance-9add570c222555503082e15d712584c94ead58b5.png new file mode 100644 index 0000000..cbfa866 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-9add570c222555503082e15d712584c94ead58b5.png differ diff --git a/anaconda/docs/html/_images/inheritance-9add570c222555503082e15d712584c94ead58b5.png.map b/anaconda/docs/html/_images/inheritance-9add570c222555503082e15d712584c94ead58b5.png.map new file mode 100644 index 0000000..89fbfdd --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-9add570c222555503082e15d712584c94ead58b5.png.map @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-9c48ce2930cc3b0c4c8b469260b64589e3e1fc03.png b/anaconda/docs/html/_images/inheritance-9c48ce2930cc3b0c4c8b469260b64589e3e1fc03.png new file mode 100644 index 0000000..92d6ea2 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-9c48ce2930cc3b0c4c8b469260b64589e3e1fc03.png differ diff --git a/anaconda/docs/html/_images/inheritance-9c48ce2930cc3b0c4c8b469260b64589e3e1fc03.png.map b/anaconda/docs/html/_images/inheritance-9c48ce2930cc3b0c4c8b469260b64589e3e1fc03.png.map new file mode 100644 index 0000000..9be0864 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-9c48ce2930cc3b0c4c8b469260b64589e3e1fc03.png.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-9d1a913b44b3846ee2313ee2e62c918f55d12f85.png b/anaconda/docs/html/_images/inheritance-9d1a913b44b3846ee2313ee2e62c918f55d12f85.png new file mode 100755 index 0000000..b267aef Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-9d1a913b44b3846ee2313ee2e62c918f55d12f85.png differ diff --git a/anaconda/docs/html/_images/inheritance-9d1a913b44b3846ee2313ee2e62c918f55d12f85.png.map b/anaconda/docs/html/_images/inheritance-9d1a913b44b3846ee2313ee2e62c918f55d12f85.png.map new file mode 100755 index 0000000..f46de10 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-9d1a913b44b3846ee2313ee2e62c918f55d12f85.png.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-9e38ff3ce11009e3f16333272ae4888af24b34d6.png b/anaconda/docs/html/_images/inheritance-9e38ff3ce11009e3f16333272ae4888af24b34d6.png new file mode 100755 index 0000000..d760a2e Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-9e38ff3ce11009e3f16333272ae4888af24b34d6.png differ diff --git a/anaconda/docs/html/_images/inheritance-9e38ff3ce11009e3f16333272ae4888af24b34d6.png.map b/anaconda/docs/html/_images/inheritance-9e38ff3ce11009e3f16333272ae4888af24b34d6.png.map new file mode 100755 index 0000000..041f9d3 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-9e38ff3ce11009e3f16333272ae4888af24b34d6.png.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-9ef4717a030355217aedfee21cd562cf080b5007.png b/anaconda/docs/html/_images/inheritance-9ef4717a030355217aedfee21cd562cf080b5007.png new file mode 100644 index 0000000..7f5ceeb Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-9ef4717a030355217aedfee21cd562cf080b5007.png differ diff --git a/anaconda/docs/html/_images/inheritance-9ef4717a030355217aedfee21cd562cf080b5007.png.map b/anaconda/docs/html/_images/inheritance-9ef4717a030355217aedfee21cd562cf080b5007.png.map new file mode 100644 index 0000000..f2e5a80 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-9ef4717a030355217aedfee21cd562cf080b5007.png.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-9f5c133323133ffc451a6c870cbdabe4d51fa714.png b/anaconda/docs/html/_images/inheritance-9f5c133323133ffc451a6c870cbdabe4d51fa714.png new file mode 100755 index 0000000..0127725 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-9f5c133323133ffc451a6c870cbdabe4d51fa714.png differ diff --git a/anaconda/docs/html/_images/inheritance-9f5c133323133ffc451a6c870cbdabe4d51fa714.png.map b/anaconda/docs/html/_images/inheritance-9f5c133323133ffc451a6c870cbdabe4d51fa714.png.map new file mode 100755 index 0000000..de0d357 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-9f5c133323133ffc451a6c870cbdabe4d51fa714.png.map @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-a08cc58468ee5cb3965dc397c355325352f48cf0.png b/anaconda/docs/html/_images/inheritance-a08cc58468ee5cb3965dc397c355325352f48cf0.png new file mode 100755 index 0000000..96b3e48 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-a08cc58468ee5cb3965dc397c355325352f48cf0.png differ diff --git a/anaconda/docs/html/_images/inheritance-a08cc58468ee5cb3965dc397c355325352f48cf0.png.map b/anaconda/docs/html/_images/inheritance-a08cc58468ee5cb3965dc397c355325352f48cf0.png.map new file mode 100755 index 0000000..bdf1c0a --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-a08cc58468ee5cb3965dc397c355325352f48cf0.png.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-a1ee0523148e1ee0120f0e7ba3184a286070cdd9.png b/anaconda/docs/html/_images/inheritance-a1ee0523148e1ee0120f0e7ba3184a286070cdd9.png new file mode 100644 index 0000000..be591f8 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-a1ee0523148e1ee0120f0e7ba3184a286070cdd9.png differ diff --git a/anaconda/docs/html/_images/inheritance-a1ee0523148e1ee0120f0e7ba3184a286070cdd9.png.map b/anaconda/docs/html/_images/inheritance-a1ee0523148e1ee0120f0e7ba3184a286070cdd9.png.map new file mode 100644 index 0000000..8e2379f --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-a1ee0523148e1ee0120f0e7ba3184a286070cdd9.png.map @@ -0,0 +1,5 @@ + + + + + diff --git a/anaconda/docs/html/_images/inheritance-a44fca98edf530b35f1047a4c126e17e01b03839.png b/anaconda/docs/html/_images/inheritance-a44fca98edf530b35f1047a4c126e17e01b03839.png new file mode 100755 index 0000000..3092e35 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-a44fca98edf530b35f1047a4c126e17e01b03839.png differ diff --git a/anaconda/docs/html/_images/inheritance-a44fca98edf530b35f1047a4c126e17e01b03839.png.map b/anaconda/docs/html/_images/inheritance-a44fca98edf530b35f1047a4c126e17e01b03839.png.map new file mode 100755 index 0000000..049b8b4 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-a44fca98edf530b35f1047a4c126e17e01b03839.png.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-a5e71b5b488c12f1ee3f64121814171ad25c9329.png b/anaconda/docs/html/_images/inheritance-a5e71b5b488c12f1ee3f64121814171ad25c9329.png new file mode 100755 index 0000000..c20e530 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-a5e71b5b488c12f1ee3f64121814171ad25c9329.png differ diff --git a/anaconda/docs/html/_images/inheritance-a5e71b5b488c12f1ee3f64121814171ad25c9329.png.map b/anaconda/docs/html/_images/inheritance-a5e71b5b488c12f1ee3f64121814171ad25c9329.png.map new file mode 100755 index 0000000..23534ba --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-a5e71b5b488c12f1ee3f64121814171ad25c9329.png.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-a787fabf04c825fc2500b7a02598deca49f11692.png b/anaconda/docs/html/_images/inheritance-a787fabf04c825fc2500b7a02598deca49f11692.png new file mode 100755 index 0000000..cd481d1 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-a787fabf04c825fc2500b7a02598deca49f11692.png differ diff --git a/anaconda/docs/html/_images/inheritance-a787fabf04c825fc2500b7a02598deca49f11692.png.map b/anaconda/docs/html/_images/inheritance-a787fabf04c825fc2500b7a02598deca49f11692.png.map new file mode 100755 index 0000000..f82316a --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-a787fabf04c825fc2500b7a02598deca49f11692.png.map @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-a7b34fb8b99537ebc77f6a01ed522a3a172965f1.png b/anaconda/docs/html/_images/inheritance-a7b34fb8b99537ebc77f6a01ed522a3a172965f1.png new file mode 100644 index 0000000..0b31645 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-a7b34fb8b99537ebc77f6a01ed522a3a172965f1.png differ diff --git a/anaconda/docs/html/_images/inheritance-a7b34fb8b99537ebc77f6a01ed522a3a172965f1.png.map b/anaconda/docs/html/_images/inheritance-a7b34fb8b99537ebc77f6a01ed522a3a172965f1.png.map new file mode 100644 index 0000000..980d684 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-a7b34fb8b99537ebc77f6a01ed522a3a172965f1.png.map @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-a89dda98bfecc0e9f1486a41c8e5ff42776f2bbe.png b/anaconda/docs/html/_images/inheritance-a89dda98bfecc0e9f1486a41c8e5ff42776f2bbe.png new file mode 100755 index 0000000..0b31645 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-a89dda98bfecc0e9f1486a41c8e5ff42776f2bbe.png differ diff --git a/anaconda/docs/html/_images/inheritance-a89dda98bfecc0e9f1486a41c8e5ff42776f2bbe.png.map b/anaconda/docs/html/_images/inheritance-a89dda98bfecc0e9f1486a41c8e5ff42776f2bbe.png.map new file mode 100755 index 0000000..980d684 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-a89dda98bfecc0e9f1486a41c8e5ff42776f2bbe.png.map @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-a8bd075332618f3123bbc536a2cefeafa33a99a0.png b/anaconda/docs/html/_images/inheritance-a8bd075332618f3123bbc536a2cefeafa33a99a0.png new file mode 100755 index 0000000..88ce0c8 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-a8bd075332618f3123bbc536a2cefeafa33a99a0.png differ diff --git a/anaconda/docs/html/_images/inheritance-a8bd075332618f3123bbc536a2cefeafa33a99a0.png.map b/anaconda/docs/html/_images/inheritance-a8bd075332618f3123bbc536a2cefeafa33a99a0.png.map new file mode 100755 index 0000000..dcbdef2 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-a8bd075332618f3123bbc536a2cefeafa33a99a0.png.map @@ -0,0 +1,5 @@ + + + + + diff --git a/anaconda/docs/html/_images/inheritance-a9fff58ace607451695f2830e50e121a00a1d23b.png b/anaconda/docs/html/_images/inheritance-a9fff58ace607451695f2830e50e121a00a1d23b.png new file mode 100755 index 0000000..1cc265b Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-a9fff58ace607451695f2830e50e121a00a1d23b.png differ diff --git a/anaconda/docs/html/_images/inheritance-a9fff58ace607451695f2830e50e121a00a1d23b.png.map b/anaconda/docs/html/_images/inheritance-a9fff58ace607451695f2830e50e121a00a1d23b.png.map new file mode 100755 index 0000000..69ae92b --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-a9fff58ace607451695f2830e50e121a00a1d23b.png.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-aa8f4f95f94861511bd45736be6dab249c2b49d1.png b/anaconda/docs/html/_images/inheritance-aa8f4f95f94861511bd45736be6dab249c2b49d1.png new file mode 100755 index 0000000..6ff23e9 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-aa8f4f95f94861511bd45736be6dab249c2b49d1.png differ diff --git a/anaconda/docs/html/_images/inheritance-aa8f4f95f94861511bd45736be6dab249c2b49d1.png.map b/anaconda/docs/html/_images/inheritance-aa8f4f95f94861511bd45736be6dab249c2b49d1.png.map new file mode 100755 index 0000000..980d684 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-aa8f4f95f94861511bd45736be6dab249c2b49d1.png.map @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-ab930ab24f7c2518d0a5688cf020cbf98bd8fbca.png b/anaconda/docs/html/_images/inheritance-ab930ab24f7c2518d0a5688cf020cbf98bd8fbca.png new file mode 100644 index 0000000..79e09c1 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-ab930ab24f7c2518d0a5688cf020cbf98bd8fbca.png differ diff --git a/anaconda/docs/html/_images/inheritance-ab930ab24f7c2518d0a5688cf020cbf98bd8fbca.png.map b/anaconda/docs/html/_images/inheritance-ab930ab24f7c2518d0a5688cf020cbf98bd8fbca.png.map new file mode 100644 index 0000000..049b8b4 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-ab930ab24f7c2518d0a5688cf020cbf98bd8fbca.png.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-ac053de7cacef23f1b4a5cd2babf75f3caf6f2fb.png b/anaconda/docs/html/_images/inheritance-ac053de7cacef23f1b4a5cd2babf75f3caf6f2fb.png new file mode 100755 index 0000000..f1effee Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-ac053de7cacef23f1b4a5cd2babf75f3caf6f2fb.png differ diff --git a/anaconda/docs/html/_images/inheritance-ac053de7cacef23f1b4a5cd2babf75f3caf6f2fb.png.map b/anaconda/docs/html/_images/inheritance-ac053de7cacef23f1b4a5cd2babf75f3caf6f2fb.png.map new file mode 100755 index 0000000..9be0864 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-ac053de7cacef23f1b4a5cd2babf75f3caf6f2fb.png.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-ac8bb3714ca1698089f318f143e333d1510e0100.png b/anaconda/docs/html/_images/inheritance-ac8bb3714ca1698089f318f143e333d1510e0100.png new file mode 100755 index 0000000..b6ca587 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-ac8bb3714ca1698089f318f143e333d1510e0100.png differ diff --git a/anaconda/docs/html/_images/inheritance-ac8bb3714ca1698089f318f143e333d1510e0100.png.map b/anaconda/docs/html/_images/inheritance-ac8bb3714ca1698089f318f143e333d1510e0100.png.map new file mode 100755 index 0000000..06f908d --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-ac8bb3714ca1698089f318f143e333d1510e0100.png.map @@ -0,0 +1,4 @@ + + + + diff --git a/anaconda/docs/html/_images/inheritance-acb603995310884b114b1738709e40c3146f4560.png b/anaconda/docs/html/_images/inheritance-acb603995310884b114b1738709e40c3146f4560.png new file mode 100755 index 0000000..ee5a7e4 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-acb603995310884b114b1738709e40c3146f4560.png differ diff --git a/anaconda/docs/html/_images/inheritance-acb603995310884b114b1738709e40c3146f4560.png.map b/anaconda/docs/html/_images/inheritance-acb603995310884b114b1738709e40c3146f4560.png.map new file mode 100755 index 0000000..24b04dd --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-acb603995310884b114b1738709e40c3146f4560.png.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-ad7378e7f9ec64df1868b1f7e5b7bb9098a17203.png b/anaconda/docs/html/_images/inheritance-ad7378e7f9ec64df1868b1f7e5b7bb9098a17203.png new file mode 100755 index 0000000..0fdda86 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-ad7378e7f9ec64df1868b1f7e5b7bb9098a17203.png differ diff --git a/anaconda/docs/html/_images/inheritance-ad7378e7f9ec64df1868b1f7e5b7bb9098a17203.png.map b/anaconda/docs/html/_images/inheritance-ad7378e7f9ec64df1868b1f7e5b7bb9098a17203.png.map new file mode 100755 index 0000000..b30cc46 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-ad7378e7f9ec64df1868b1f7e5b7bb9098a17203.png.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-ada63d96257c9cdd56bfbefd36f0b08f9b962e68.png b/anaconda/docs/html/_images/inheritance-ada63d96257c9cdd56bfbefd36f0b08f9b962e68.png new file mode 100755 index 0000000..bebfeaf Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-ada63d96257c9cdd56bfbefd36f0b08f9b962e68.png differ diff --git a/anaconda/docs/html/_images/inheritance-ada63d96257c9cdd56bfbefd36f0b08f9b962e68.png.map b/anaconda/docs/html/_images/inheritance-ada63d96257c9cdd56bfbefd36f0b08f9b962e68.png.map new file mode 100755 index 0000000..bab33fd --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-ada63d96257c9cdd56bfbefd36f0b08f9b962e68.png.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-ae8e8c5825cbc8bb6ddf757e4d097ab1aa276a38.png b/anaconda/docs/html/_images/inheritance-ae8e8c5825cbc8bb6ddf757e4d097ab1aa276a38.png new file mode 100755 index 0000000..d2df516 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-ae8e8c5825cbc8bb6ddf757e4d097ab1aa276a38.png differ diff --git a/anaconda/docs/html/_images/inheritance-ae8e8c5825cbc8bb6ddf757e4d097ab1aa276a38.png.map b/anaconda/docs/html/_images/inheritance-ae8e8c5825cbc8bb6ddf757e4d097ab1aa276a38.png.map new file mode 100755 index 0000000..bf20704 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-ae8e8c5825cbc8bb6ddf757e4d097ab1aa276a38.png.map @@ -0,0 +1,5 @@ + + + + + diff --git a/anaconda/docs/html/_images/inheritance-afbdd5ccb9b201b21b8fc12a5b53d0b9712130ab.png b/anaconda/docs/html/_images/inheritance-afbdd5ccb9b201b21b8fc12a5b53d0b9712130ab.png new file mode 100644 index 0000000..9fee0f3 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-afbdd5ccb9b201b21b8fc12a5b53d0b9712130ab.png differ diff --git a/anaconda/docs/html/_images/inheritance-afbdd5ccb9b201b21b8fc12a5b53d0b9712130ab.png.map b/anaconda/docs/html/_images/inheritance-afbdd5ccb9b201b21b8fc12a5b53d0b9712130ab.png.map new file mode 100644 index 0000000..ff6ec80 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-afbdd5ccb9b201b21b8fc12a5b53d0b9712130ab.png.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-b082ff77032fafc1636c6d40b4b7bdaccd3cca3a.png b/anaconda/docs/html/_images/inheritance-b082ff77032fafc1636c6d40b4b7bdaccd3cca3a.png new file mode 100755 index 0000000..073287c Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-b082ff77032fafc1636c6d40b4b7bdaccd3cca3a.png differ diff --git a/anaconda/docs/html/_images/inheritance-b082ff77032fafc1636c6d40b4b7bdaccd3cca3a.png.map b/anaconda/docs/html/_images/inheritance-b082ff77032fafc1636c6d40b4b7bdaccd3cca3a.png.map new file mode 100755 index 0000000..395cb99 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-b082ff77032fafc1636c6d40b4b7bdaccd3cca3a.png.map @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-b27c56f3f8d81568a888e9fce6a4ea7d7d75b546.png b/anaconda/docs/html/_images/inheritance-b27c56f3f8d81568a888e9fce6a4ea7d7d75b546.png new file mode 100755 index 0000000..bebfeaf Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-b27c56f3f8d81568a888e9fce6a4ea7d7d75b546.png differ diff --git a/anaconda/docs/html/_images/inheritance-b27c56f3f8d81568a888e9fce6a4ea7d7d75b546.png.map b/anaconda/docs/html/_images/inheritance-b27c56f3f8d81568a888e9fce6a4ea7d7d75b546.png.map new file mode 100755 index 0000000..bab33fd --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-b27c56f3f8d81568a888e9fce6a4ea7d7d75b546.png.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-b3ba3b62d47bc339e51c83ad16eedf5f262c3fe6.png b/anaconda/docs/html/_images/inheritance-b3ba3b62d47bc339e51c83ad16eedf5f262c3fe6.png new file mode 100644 index 0000000..a576497 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-b3ba3b62d47bc339e51c83ad16eedf5f262c3fe6.png differ diff --git a/anaconda/docs/html/_images/inheritance-b3ba3b62d47bc339e51c83ad16eedf5f262c3fe6.png.map b/anaconda/docs/html/_images/inheritance-b3ba3b62d47bc339e51c83ad16eedf5f262c3fe6.png.map new file mode 100644 index 0000000..2fe428c --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-b3ba3b62d47bc339e51c83ad16eedf5f262c3fe6.png.map @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-b642b36d30efc5c12b8130f5c17ce91dc4a4920e.png b/anaconda/docs/html/_images/inheritance-b642b36d30efc5c12b8130f5c17ce91dc4a4920e.png new file mode 100755 index 0000000..a576497 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-b642b36d30efc5c12b8130f5c17ce91dc4a4920e.png differ diff --git a/anaconda/docs/html/_images/inheritance-b642b36d30efc5c12b8130f5c17ce91dc4a4920e.png.map b/anaconda/docs/html/_images/inheritance-b642b36d30efc5c12b8130f5c17ce91dc4a4920e.png.map new file mode 100755 index 0000000..2fe428c --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-b642b36d30efc5c12b8130f5c17ce91dc4a4920e.png.map @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-b73ac9c8c5ad74d6685f54a5711ce091ab6e0a8a.png b/anaconda/docs/html/_images/inheritance-b73ac9c8c5ad74d6685f54a5711ce091ab6e0a8a.png new file mode 100644 index 0000000..741a791 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-b73ac9c8c5ad74d6685f54a5711ce091ab6e0a8a.png differ diff --git a/anaconda/docs/html/_images/inheritance-b73ac9c8c5ad74d6685f54a5711ce091ab6e0a8a.png.map b/anaconda/docs/html/_images/inheritance-b73ac9c8c5ad74d6685f54a5711ce091ab6e0a8a.png.map new file mode 100644 index 0000000..041f9d3 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-b73ac9c8c5ad74d6685f54a5711ce091ab6e0a8a.png.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-b918a62f8769fdebe647af1427476513aecc43ac.png b/anaconda/docs/html/_images/inheritance-b918a62f8769fdebe647af1427476513aecc43ac.png new file mode 100755 index 0000000..0c3f021 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-b918a62f8769fdebe647af1427476513aecc43ac.png differ diff --git a/anaconda/docs/html/_images/inheritance-b918a62f8769fdebe647af1427476513aecc43ac.png.map b/anaconda/docs/html/_images/inheritance-b918a62f8769fdebe647af1427476513aecc43ac.png.map new file mode 100755 index 0000000..f2e5a80 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-b918a62f8769fdebe647af1427476513aecc43ac.png.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-b9a1349804063cd46680075f40e1e444a47d0403.png b/anaconda/docs/html/_images/inheritance-b9a1349804063cd46680075f40e1e444a47d0403.png new file mode 100644 index 0000000..3ef1686 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-b9a1349804063cd46680075f40e1e444a47d0403.png differ diff --git a/anaconda/docs/html/_images/inheritance-b9a1349804063cd46680075f40e1e444a47d0403.png.map b/anaconda/docs/html/_images/inheritance-b9a1349804063cd46680075f40e1e444a47d0403.png.map new file mode 100644 index 0000000..a728298 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-b9a1349804063cd46680075f40e1e444a47d0403.png.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-baf04ebb79e2792562728e5d6644a1a540f79b4f.png b/anaconda/docs/html/_images/inheritance-baf04ebb79e2792562728e5d6644a1a540f79b4f.png new file mode 100755 index 0000000..f323a06 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-baf04ebb79e2792562728e5d6644a1a540f79b4f.png differ diff --git a/anaconda/docs/html/_images/inheritance-baf04ebb79e2792562728e5d6644a1a540f79b4f.png.map b/anaconda/docs/html/_images/inheritance-baf04ebb79e2792562728e5d6644a1a540f79b4f.png.map new file mode 100755 index 0000000..ff6ec80 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-baf04ebb79e2792562728e5d6644a1a540f79b4f.png.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-bb38fab47c6116decd7b4cb7198d764e6da25a6b.png b/anaconda/docs/html/_images/inheritance-bb38fab47c6116decd7b4cb7198d764e6da25a6b.png new file mode 100755 index 0000000..823810c Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-bb38fab47c6116decd7b4cb7198d764e6da25a6b.png differ diff --git a/anaconda/docs/html/_images/inheritance-bb38fab47c6116decd7b4cb7198d764e6da25a6b.png.map b/anaconda/docs/html/_images/inheritance-bb38fab47c6116decd7b4cb7198d764e6da25a6b.png.map new file mode 100755 index 0000000..4bbe885 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-bb38fab47c6116decd7b4cb7198d764e6da25a6b.png.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-bc5a3227a2361e6a750cf4b6e5ce42697bcf63ca.png b/anaconda/docs/html/_images/inheritance-bc5a3227a2361e6a750cf4b6e5ce42697bcf63ca.png new file mode 100755 index 0000000..ee87a9e Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-bc5a3227a2361e6a750cf4b6e5ce42697bcf63ca.png differ diff --git a/anaconda/docs/html/_images/inheritance-bc5a3227a2361e6a750cf4b6e5ce42697bcf63ca.png.map b/anaconda/docs/html/_images/inheritance-bc5a3227a2361e6a750cf4b6e5ce42697bcf63ca.png.map new file mode 100755 index 0000000..8c26c70 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-bc5a3227a2361e6a750cf4b6e5ce42697bcf63ca.png.map @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-bd0fbd6684dffffd99b046ef4a5a589101f27414.png b/anaconda/docs/html/_images/inheritance-bd0fbd6684dffffd99b046ef4a5a589101f27414.png new file mode 100755 index 0000000..1cc265b Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-bd0fbd6684dffffd99b046ef4a5a589101f27414.png differ diff --git a/anaconda/docs/html/_images/inheritance-bd0fbd6684dffffd99b046ef4a5a589101f27414.png.map b/anaconda/docs/html/_images/inheritance-bd0fbd6684dffffd99b046ef4a5a589101f27414.png.map new file mode 100755 index 0000000..69ae92b --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-bd0fbd6684dffffd99b046ef4a5a589101f27414.png.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-be36ef4f445721079646cf1a7378721969d9d6aa.png b/anaconda/docs/html/_images/inheritance-be36ef4f445721079646cf1a7378721969d9d6aa.png new file mode 100755 index 0000000..14dac41 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-be36ef4f445721079646cf1a7378721969d9d6aa.png differ diff --git a/anaconda/docs/html/_images/inheritance-be36ef4f445721079646cf1a7378721969d9d6aa.png.map b/anaconda/docs/html/_images/inheritance-be36ef4f445721079646cf1a7378721969d9d6aa.png.map new file mode 100755 index 0000000..06f908d --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-be36ef4f445721079646cf1a7378721969d9d6aa.png.map @@ -0,0 +1,4 @@ + + + + diff --git a/anaconda/docs/html/_images/inheritance-bfaeccf52316599f19cd7b49d9d4a9e4105f6aea.png b/anaconda/docs/html/_images/inheritance-bfaeccf52316599f19cd7b49d9d4a9e4105f6aea.png new file mode 100644 index 0000000..cd481d1 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-bfaeccf52316599f19cd7b49d9d4a9e4105f6aea.png differ diff --git a/anaconda/docs/html/_images/inheritance-bfaeccf52316599f19cd7b49d9d4a9e4105f6aea.png.map b/anaconda/docs/html/_images/inheritance-bfaeccf52316599f19cd7b49d9d4a9e4105f6aea.png.map new file mode 100644 index 0000000..f82316a --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-bfaeccf52316599f19cd7b49d9d4a9e4105f6aea.png.map @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-c1b2fc3bb53a76e484c5bef4aabcdc7b0090a622.png b/anaconda/docs/html/_images/inheritance-c1b2fc3bb53a76e484c5bef4aabcdc7b0090a622.png new file mode 100755 index 0000000..af395c8 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-c1b2fc3bb53a76e484c5bef4aabcdc7b0090a622.png differ diff --git a/anaconda/docs/html/_images/inheritance-c1b2fc3bb53a76e484c5bef4aabcdc7b0090a622.png.map b/anaconda/docs/html/_images/inheritance-c1b2fc3bb53a76e484c5bef4aabcdc7b0090a622.png.map new file mode 100755 index 0000000..2cf1f2c --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-c1b2fc3bb53a76e484c5bef4aabcdc7b0090a622.png.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-c23d215dded1bfff25c37301bd899e8a24244d5f.png b/anaconda/docs/html/_images/inheritance-c23d215dded1bfff25c37301bd899e8a24244d5f.png new file mode 100755 index 0000000..84186d8 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-c23d215dded1bfff25c37301bd899e8a24244d5f.png differ diff --git a/anaconda/docs/html/_images/inheritance-c23d215dded1bfff25c37301bd899e8a24244d5f.png.map b/anaconda/docs/html/_images/inheritance-c23d215dded1bfff25c37301bd899e8a24244d5f.png.map new file mode 100755 index 0000000..f82316a --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-c23d215dded1bfff25c37301bd899e8a24244d5f.png.map @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-c27c0b1228884aeed312fa00310b92ecc4ce127d.png b/anaconda/docs/html/_images/inheritance-c27c0b1228884aeed312fa00310b92ecc4ce127d.png new file mode 100755 index 0000000..af395c8 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-c27c0b1228884aeed312fa00310b92ecc4ce127d.png differ diff --git a/anaconda/docs/html/_images/inheritance-c27c0b1228884aeed312fa00310b92ecc4ce127d.png.map b/anaconda/docs/html/_images/inheritance-c27c0b1228884aeed312fa00310b92ecc4ce127d.png.map new file mode 100755 index 0000000..2cf1f2c --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-c27c0b1228884aeed312fa00310b92ecc4ce127d.png.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-c46c655827bc3a99270bfeaaf6f29663a19b5239.png b/anaconda/docs/html/_images/inheritance-c46c655827bc3a99270bfeaaf6f29663a19b5239.png new file mode 100755 index 0000000..60429d5 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-c46c655827bc3a99270bfeaaf6f29663a19b5239.png differ diff --git a/anaconda/docs/html/_images/inheritance-c46c655827bc3a99270bfeaaf6f29663a19b5239.png.map b/anaconda/docs/html/_images/inheritance-c46c655827bc3a99270bfeaaf6f29663a19b5239.png.map new file mode 100755 index 0000000..4bbe885 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-c46c655827bc3a99270bfeaaf6f29663a19b5239.png.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-c4828f567471412a32f6f7174da12d340578044c.png b/anaconda/docs/html/_images/inheritance-c4828f567471412a32f6f7174da12d340578044c.png new file mode 100755 index 0000000..513dbed Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-c4828f567471412a32f6f7174da12d340578044c.png differ diff --git a/anaconda/docs/html/_images/inheritance-c4828f567471412a32f6f7174da12d340578044c.png.map b/anaconda/docs/html/_images/inheritance-c4828f567471412a32f6f7174da12d340578044c.png.map new file mode 100755 index 0000000..69ae92b --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-c4828f567471412a32f6f7174da12d340578044c.png.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-c5a5c8752c544f36f1ae713b118bac7e2bac87b6.png b/anaconda/docs/html/_images/inheritance-c5a5c8752c544f36f1ae713b118bac7e2bac87b6.png new file mode 100755 index 0000000..1ce0ceb Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-c5a5c8752c544f36f1ae713b118bac7e2bac87b6.png differ diff --git a/anaconda/docs/html/_images/inheritance-c5a5c8752c544f36f1ae713b118bac7e2bac87b6.png.map b/anaconda/docs/html/_images/inheritance-c5a5c8752c544f36f1ae713b118bac7e2bac87b6.png.map new file mode 100755 index 0000000..b6dacbd --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-c5a5c8752c544f36f1ae713b118bac7e2bac87b6.png.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-c6e8349cc503998df5e31ec6c8e83028f013f632.png b/anaconda/docs/html/_images/inheritance-c6e8349cc503998df5e31ec6c8e83028f013f632.png new file mode 100755 index 0000000..84186d8 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-c6e8349cc503998df5e31ec6c8e83028f013f632.png differ diff --git a/anaconda/docs/html/_images/inheritance-c6e8349cc503998df5e31ec6c8e83028f013f632.png.map b/anaconda/docs/html/_images/inheritance-c6e8349cc503998df5e31ec6c8e83028f013f632.png.map new file mode 100755 index 0000000..f82316a --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-c6e8349cc503998df5e31ec6c8e83028f013f632.png.map @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-c78dfa3210168bcf347206ab751b5200e4d9260d.png b/anaconda/docs/html/_images/inheritance-c78dfa3210168bcf347206ab751b5200e4d9260d.png new file mode 100755 index 0000000..d760a2e Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-c78dfa3210168bcf347206ab751b5200e4d9260d.png differ diff --git a/anaconda/docs/html/_images/inheritance-c78dfa3210168bcf347206ab751b5200e4d9260d.png.map b/anaconda/docs/html/_images/inheritance-c78dfa3210168bcf347206ab751b5200e4d9260d.png.map new file mode 100755 index 0000000..041f9d3 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-c78dfa3210168bcf347206ab751b5200e4d9260d.png.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-c800b31af085121a9765ec2b98240493eada7b08.png b/anaconda/docs/html/_images/inheritance-c800b31af085121a9765ec2b98240493eada7b08.png new file mode 100755 index 0000000..613cb6a Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-c800b31af085121a9765ec2b98240493eada7b08.png differ diff --git a/anaconda/docs/html/_images/inheritance-c800b31af085121a9765ec2b98240493eada7b08.png.map b/anaconda/docs/html/_images/inheritance-c800b31af085121a9765ec2b98240493eada7b08.png.map new file mode 100755 index 0000000..f403cf1 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-c800b31af085121a9765ec2b98240493eada7b08.png.map @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-c8e42e3f0444b18688603753eba8d62cb343a820.png b/anaconda/docs/html/_images/inheritance-c8e42e3f0444b18688603753eba8d62cb343a820.png new file mode 100755 index 0000000..e94ac0e Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-c8e42e3f0444b18688603753eba8d62cb343a820.png differ diff --git a/anaconda/docs/html/_images/inheritance-c8e42e3f0444b18688603753eba8d62cb343a820.png.map b/anaconda/docs/html/_images/inheritance-c8e42e3f0444b18688603753eba8d62cb343a820.png.map new file mode 100755 index 0000000..fafd151 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-c8e42e3f0444b18688603753eba8d62cb343a820.png.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-c8efc4ba58d41675f4e8029234cba0d3da9cc3f1.png b/anaconda/docs/html/_images/inheritance-c8efc4ba58d41675f4e8029234cba0d3da9cc3f1.png new file mode 100755 index 0000000..c20e530 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-c8efc4ba58d41675f4e8029234cba0d3da9cc3f1.png differ diff --git a/anaconda/docs/html/_images/inheritance-c8efc4ba58d41675f4e8029234cba0d3da9cc3f1.png.map b/anaconda/docs/html/_images/inheritance-c8efc4ba58d41675f4e8029234cba0d3da9cc3f1.png.map new file mode 100755 index 0000000..23534ba --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-c8efc4ba58d41675f4e8029234cba0d3da9cc3f1.png.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-caf8e67a143352c06898b650de35b4136a64749b.png b/anaconda/docs/html/_images/inheritance-caf8e67a143352c06898b650de35b4136a64749b.png new file mode 100644 index 0000000..b278b5c Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-caf8e67a143352c06898b650de35b4136a64749b.png differ diff --git a/anaconda/docs/html/_images/inheritance-caf8e67a143352c06898b650de35b4136a64749b.png.map b/anaconda/docs/html/_images/inheritance-caf8e67a143352c06898b650de35b4136a64749b.png.map new file mode 100644 index 0000000..0484e1c --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-caf8e67a143352c06898b650de35b4136a64749b.png.map @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-cbf9633c4eb4fc98ac2fe86b92318c4073388ec5.png b/anaconda/docs/html/_images/inheritance-cbf9633c4eb4fc98ac2fe86b92318c4073388ec5.png new file mode 100755 index 0000000..f70e4e8 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-cbf9633c4eb4fc98ac2fe86b92318c4073388ec5.png differ diff --git a/anaconda/docs/html/_images/inheritance-cbf9633c4eb4fc98ac2fe86b92318c4073388ec5.png.map b/anaconda/docs/html/_images/inheritance-cbf9633c4eb4fc98ac2fe86b92318c4073388ec5.png.map new file mode 100755 index 0000000..b91e61d --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-cbf9633c4eb4fc98ac2fe86b92318c4073388ec5.png.map @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-ce237f46a5cda829f0d515316057c43328450de8.png b/anaconda/docs/html/_images/inheritance-ce237f46a5cda829f0d515316057c43328450de8.png new file mode 100755 index 0000000..c16403a Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-ce237f46a5cda829f0d515316057c43328450de8.png differ diff --git a/anaconda/docs/html/_images/inheritance-ce237f46a5cda829f0d515316057c43328450de8.png.map b/anaconda/docs/html/_images/inheritance-ce237f46a5cda829f0d515316057c43328450de8.png.map new file mode 100755 index 0000000..604b565 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-ce237f46a5cda829f0d515316057c43328450de8.png.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-cee7a9c228a99ae167d53687527fd06d3f03dd11.png b/anaconda/docs/html/_images/inheritance-cee7a9c228a99ae167d53687527fd06d3f03dd11.png new file mode 100755 index 0000000..61278d4 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-cee7a9c228a99ae167d53687527fd06d3f03dd11.png differ diff --git a/anaconda/docs/html/_images/inheritance-cee7a9c228a99ae167d53687527fd06d3f03dd11.png.map b/anaconda/docs/html/_images/inheritance-cee7a9c228a99ae167d53687527fd06d3f03dd11.png.map new file mode 100755 index 0000000..2c6f30b --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-cee7a9c228a99ae167d53687527fd06d3f03dd11.png.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-d0117b019029fb3ffedc3cdecf85dbda58a2d7f0.png b/anaconda/docs/html/_images/inheritance-d0117b019029fb3ffedc3cdecf85dbda58a2d7f0.png new file mode 100755 index 0000000..d562f90 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-d0117b019029fb3ffedc3cdecf85dbda58a2d7f0.png differ diff --git a/anaconda/docs/html/_images/inheritance-d0117b019029fb3ffedc3cdecf85dbda58a2d7f0.png.map b/anaconda/docs/html/_images/inheritance-d0117b019029fb3ffedc3cdecf85dbda58a2d7f0.png.map new file mode 100755 index 0000000..f403cf1 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-d0117b019029fb3ffedc3cdecf85dbda58a2d7f0.png.map @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-d086abd9f9aad015ff74dc238787068bf45267ba.png b/anaconda/docs/html/_images/inheritance-d086abd9f9aad015ff74dc238787068bf45267ba.png new file mode 100755 index 0000000..6ff23e9 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-d086abd9f9aad015ff74dc238787068bf45267ba.png differ diff --git a/anaconda/docs/html/_images/inheritance-d086abd9f9aad015ff74dc238787068bf45267ba.png.map b/anaconda/docs/html/_images/inheritance-d086abd9f9aad015ff74dc238787068bf45267ba.png.map new file mode 100755 index 0000000..980d684 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-d086abd9f9aad015ff74dc238787068bf45267ba.png.map @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-d3880d09be7b4b3202884b4596f7b64df9140877.png b/anaconda/docs/html/_images/inheritance-d3880d09be7b4b3202884b4596f7b64df9140877.png new file mode 100755 index 0000000..6090a74 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-d3880d09be7b4b3202884b4596f7b64df9140877.png differ diff --git a/anaconda/docs/html/_images/inheritance-d3880d09be7b4b3202884b4596f7b64df9140877.png.map b/anaconda/docs/html/_images/inheritance-d3880d09be7b4b3202884b4596f7b64df9140877.png.map new file mode 100755 index 0000000..f25c58a --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-d3880d09be7b4b3202884b4596f7b64df9140877.png.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-d681b6ae7f59ec39edafb1d71c88aeae53679ae7.png b/anaconda/docs/html/_images/inheritance-d681b6ae7f59ec39edafb1d71c88aeae53679ae7.png new file mode 100755 index 0000000..686a883 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-d681b6ae7f59ec39edafb1d71c88aeae53679ae7.png differ diff --git a/anaconda/docs/html/_images/inheritance-d681b6ae7f59ec39edafb1d71c88aeae53679ae7.png.map b/anaconda/docs/html/_images/inheritance-d681b6ae7f59ec39edafb1d71c88aeae53679ae7.png.map new file mode 100755 index 0000000..82cdd63 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-d681b6ae7f59ec39edafb1d71c88aeae53679ae7.png.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-d74d8a0d11a9a007a7b5153876d519cbdde17c20.png b/anaconda/docs/html/_images/inheritance-d74d8a0d11a9a007a7b5153876d519cbdde17c20.png new file mode 100755 index 0000000..c31ecba Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-d74d8a0d11a9a007a7b5153876d519cbdde17c20.png differ diff --git a/anaconda/docs/html/_images/inheritance-d74d8a0d11a9a007a7b5153876d519cbdde17c20.png.map b/anaconda/docs/html/_images/inheritance-d74d8a0d11a9a007a7b5153876d519cbdde17c20.png.map new file mode 100755 index 0000000..f25c58a --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-d74d8a0d11a9a007a7b5153876d519cbdde17c20.png.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-d8bb9fa46b210b931c165149b7c7c241037e045c.png b/anaconda/docs/html/_images/inheritance-d8bb9fa46b210b931c165149b7c7c241037e045c.png new file mode 100755 index 0000000..d562f90 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-d8bb9fa46b210b931c165149b7c7c241037e045c.png differ diff --git a/anaconda/docs/html/_images/inheritance-d8bb9fa46b210b931c165149b7c7c241037e045c.png.map b/anaconda/docs/html/_images/inheritance-d8bb9fa46b210b931c165149b7c7c241037e045c.png.map new file mode 100755 index 0000000..f403cf1 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-d8bb9fa46b210b931c165149b7c7c241037e045c.png.map @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-d9533a5fb34aecf604d5329a3a04f47795c13188.png b/anaconda/docs/html/_images/inheritance-d9533a5fb34aecf604d5329a3a04f47795c13188.png new file mode 100644 index 0000000..abf8b3b Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-d9533a5fb34aecf604d5329a3a04f47795c13188.png differ diff --git a/anaconda/docs/html/_images/inheritance-d9533a5fb34aecf604d5329a3a04f47795c13188.png.map b/anaconda/docs/html/_images/inheritance-d9533a5fb34aecf604d5329a3a04f47795c13188.png.map new file mode 100644 index 0000000..f46de10 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-d9533a5fb34aecf604d5329a3a04f47795c13188.png.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-daa4e23ade95ea2e342041c71992372464f2981e.png b/anaconda/docs/html/_images/inheritance-daa4e23ade95ea2e342041c71992372464f2981e.png new file mode 100755 index 0000000..570f490 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-daa4e23ade95ea2e342041c71992372464f2981e.png differ diff --git a/anaconda/docs/html/_images/inheritance-daa4e23ade95ea2e342041c71992372464f2981e.png.map b/anaconda/docs/html/_images/inheritance-daa4e23ade95ea2e342041c71992372464f2981e.png.map new file mode 100755 index 0000000..b30cc46 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-daa4e23ade95ea2e342041c71992372464f2981e.png.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-dbdc268ec5196e89b3fcafc8c4a70fe596e9ae66.png b/anaconda/docs/html/_images/inheritance-dbdc268ec5196e89b3fcafc8c4a70fe596e9ae66.png new file mode 100755 index 0000000..30997b4 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-dbdc268ec5196e89b3fcafc8c4a70fe596e9ae66.png differ diff --git a/anaconda/docs/html/_images/inheritance-dbdc268ec5196e89b3fcafc8c4a70fe596e9ae66.png.map b/anaconda/docs/html/_images/inheritance-dbdc268ec5196e89b3fcafc8c4a70fe596e9ae66.png.map new file mode 100755 index 0000000..1bae0d3 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-dbdc268ec5196e89b3fcafc8c4a70fe596e9ae66.png.map @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-ddfa3d941a4a7138fbc8c905281754606afb435c.png b/anaconda/docs/html/_images/inheritance-ddfa3d941a4a7138fbc8c905281754606afb435c.png new file mode 100644 index 0000000..a2af30b Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-ddfa3d941a4a7138fbc8c905281754606afb435c.png differ diff --git a/anaconda/docs/html/_images/inheritance-ddfa3d941a4a7138fbc8c905281754606afb435c.png.map b/anaconda/docs/html/_images/inheritance-ddfa3d941a4a7138fbc8c905281754606afb435c.png.map new file mode 100644 index 0000000..90cad97 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-ddfa3d941a4a7138fbc8c905281754606afb435c.png.map @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-de91631ce6eb53a96280476c546ab72151ce50a5.png b/anaconda/docs/html/_images/inheritance-de91631ce6eb53a96280476c546ab72151ce50a5.png new file mode 100755 index 0000000..25e3197 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-de91631ce6eb53a96280476c546ab72151ce50a5.png differ diff --git a/anaconda/docs/html/_images/inheritance-de91631ce6eb53a96280476c546ab72151ce50a5.png.map b/anaconda/docs/html/_images/inheritance-de91631ce6eb53a96280476c546ab72151ce50a5.png.map new file mode 100755 index 0000000..0db50fe --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-de91631ce6eb53a96280476c546ab72151ce50a5.png.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-df51ae45681d8913dacd0e9b347672f80ccffc34.png b/anaconda/docs/html/_images/inheritance-df51ae45681d8913dacd0e9b347672f80ccffc34.png new file mode 100755 index 0000000..d059582 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-df51ae45681d8913dacd0e9b347672f80ccffc34.png differ diff --git a/anaconda/docs/html/_images/inheritance-df51ae45681d8913dacd0e9b347672f80ccffc34.png.map b/anaconda/docs/html/_images/inheritance-df51ae45681d8913dacd0e9b347672f80ccffc34.png.map new file mode 100755 index 0000000..0484e1c --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-df51ae45681d8913dacd0e9b347672f80ccffc34.png.map @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-e0d4d69a0a3ea2f18bc68f1fe39496aa9d5d87e4.png b/anaconda/docs/html/_images/inheritance-e0d4d69a0a3ea2f18bc68f1fe39496aa9d5d87e4.png new file mode 100755 index 0000000..d943705 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-e0d4d69a0a3ea2f18bc68f1fe39496aa9d5d87e4.png differ diff --git a/anaconda/docs/html/_images/inheritance-e0d4d69a0a3ea2f18bc68f1fe39496aa9d5d87e4.png.map b/anaconda/docs/html/_images/inheritance-e0d4d69a0a3ea2f18bc68f1fe39496aa9d5d87e4.png.map new file mode 100755 index 0000000..fafd151 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-e0d4d69a0a3ea2f18bc68f1fe39496aa9d5d87e4.png.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-e1d54308daca4727de3852f15d6443966f815a18.png b/anaconda/docs/html/_images/inheritance-e1d54308daca4727de3852f15d6443966f815a18.png new file mode 100755 index 0000000..30997b4 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-e1d54308daca4727de3852f15d6443966f815a18.png differ diff --git a/anaconda/docs/html/_images/inheritance-e1d54308daca4727de3852f15d6443966f815a18.png.map b/anaconda/docs/html/_images/inheritance-e1d54308daca4727de3852f15d6443966f815a18.png.map new file mode 100755 index 0000000..1bae0d3 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-e1d54308daca4727de3852f15d6443966f815a18.png.map @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-e286eb4178c6559612b790cfae732abfc1e48d8d.png b/anaconda/docs/html/_images/inheritance-e286eb4178c6559612b790cfae732abfc1e48d8d.png new file mode 100755 index 0000000..b267aef Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-e286eb4178c6559612b790cfae732abfc1e48d8d.png differ diff --git a/anaconda/docs/html/_images/inheritance-e286eb4178c6559612b790cfae732abfc1e48d8d.png.map b/anaconda/docs/html/_images/inheritance-e286eb4178c6559612b790cfae732abfc1e48d8d.png.map new file mode 100755 index 0000000..f46de10 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-e286eb4178c6559612b790cfae732abfc1e48d8d.png.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-e317a9043a49824bb9ce06ea803e7523f7ac6b89.png b/anaconda/docs/html/_images/inheritance-e317a9043a49824bb9ce06ea803e7523f7ac6b89.png new file mode 100644 index 0000000..837d994 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-e317a9043a49824bb9ce06ea803e7523f7ac6b89.png differ diff --git a/anaconda/docs/html/_images/inheritance-e317a9043a49824bb9ce06ea803e7523f7ac6b89.png.map b/anaconda/docs/html/_images/inheritance-e317a9043a49824bb9ce06ea803e7523f7ac6b89.png.map new file mode 100644 index 0000000..9240c6c --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-e317a9043a49824bb9ce06ea803e7523f7ac6b89.png.map @@ -0,0 +1,5 @@ + + + + + diff --git a/anaconda/docs/html/_images/inheritance-e327215610e417024e2004674e447c558d467f5f.png b/anaconda/docs/html/_images/inheritance-e327215610e417024e2004674e447c558d467f5f.png new file mode 100644 index 0000000..613cb6a Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-e327215610e417024e2004674e447c558d467f5f.png differ diff --git a/anaconda/docs/html/_images/inheritance-e327215610e417024e2004674e447c558d467f5f.png.map b/anaconda/docs/html/_images/inheritance-e327215610e417024e2004674e447c558d467f5f.png.map new file mode 100644 index 0000000..f403cf1 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-e327215610e417024e2004674e447c558d467f5f.png.map @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-e41bcd896274903c1af9585b494d16ce52359d1a.png b/anaconda/docs/html/_images/inheritance-e41bcd896274903c1af9585b494d16ce52359d1a.png new file mode 100644 index 0000000..823810c Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-e41bcd896274903c1af9585b494d16ce52359d1a.png differ diff --git a/anaconda/docs/html/_images/inheritance-e41bcd896274903c1af9585b494d16ce52359d1a.png.map b/anaconda/docs/html/_images/inheritance-e41bcd896274903c1af9585b494d16ce52359d1a.png.map new file mode 100644 index 0000000..4bbe885 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-e41bcd896274903c1af9585b494d16ce52359d1a.png.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-e4c77959a4a1a51cfdb3038fd6104792e12fabdc.png b/anaconda/docs/html/_images/inheritance-e4c77959a4a1a51cfdb3038fd6104792e12fabdc.png new file mode 100755 index 0000000..570f490 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-e4c77959a4a1a51cfdb3038fd6104792e12fabdc.png differ diff --git a/anaconda/docs/html/_images/inheritance-e4c77959a4a1a51cfdb3038fd6104792e12fabdc.png.map b/anaconda/docs/html/_images/inheritance-e4c77959a4a1a51cfdb3038fd6104792e12fabdc.png.map new file mode 100755 index 0000000..b30cc46 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-e4c77959a4a1a51cfdb3038fd6104792e12fabdc.png.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-e5cc6e797cccc5c5b32e0a0717d5f2e3464f709b.png b/anaconda/docs/html/_images/inheritance-e5cc6e797cccc5c5b32e0a0717d5f2e3464f709b.png new file mode 100755 index 0000000..f1ea796 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-e5cc6e797cccc5c5b32e0a0717d5f2e3464f709b.png differ diff --git a/anaconda/docs/html/_images/inheritance-e5cc6e797cccc5c5b32e0a0717d5f2e3464f709b.png.map b/anaconda/docs/html/_images/inheritance-e5cc6e797cccc5c5b32e0a0717d5f2e3464f709b.png.map new file mode 100755 index 0000000..395cb99 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-e5cc6e797cccc5c5b32e0a0717d5f2e3464f709b.png.map @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-e63c91335f0b2cd644e6d851408867112232bc6f.png b/anaconda/docs/html/_images/inheritance-e63c91335f0b2cd644e6d851408867112232bc6f.png new file mode 100755 index 0000000..b278b5c Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-e63c91335f0b2cd644e6d851408867112232bc6f.png differ diff --git a/anaconda/docs/html/_images/inheritance-e63c91335f0b2cd644e6d851408867112232bc6f.png.map b/anaconda/docs/html/_images/inheritance-e63c91335f0b2cd644e6d851408867112232bc6f.png.map new file mode 100755 index 0000000..0484e1c --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-e63c91335f0b2cd644e6d851408867112232bc6f.png.map @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-e6e069e4c4805b35fab9264743e494f21f6c01e1.png b/anaconda/docs/html/_images/inheritance-e6e069e4c4805b35fab9264743e494f21f6c01e1.png new file mode 100644 index 0000000..6090a74 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-e6e069e4c4805b35fab9264743e494f21f6c01e1.png differ diff --git a/anaconda/docs/html/_images/inheritance-e6e069e4c4805b35fab9264743e494f21f6c01e1.png.map b/anaconda/docs/html/_images/inheritance-e6e069e4c4805b35fab9264743e494f21f6c01e1.png.map new file mode 100644 index 0000000..f25c58a --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-e6e069e4c4805b35fab9264743e494f21f6c01e1.png.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-e753d60c224bade11dea5b866219a79630a53a84.png b/anaconda/docs/html/_images/inheritance-e753d60c224bade11dea5b866219a79630a53a84.png new file mode 100755 index 0000000..9fee0f3 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-e753d60c224bade11dea5b866219a79630a53a84.png differ diff --git a/anaconda/docs/html/_images/inheritance-e753d60c224bade11dea5b866219a79630a53a84.png.map b/anaconda/docs/html/_images/inheritance-e753d60c224bade11dea5b866219a79630a53a84.png.map new file mode 100755 index 0000000..ff6ec80 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-e753d60c224bade11dea5b866219a79630a53a84.png.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-e77b184ecf186472a6b225931d872435e425d04c.png b/anaconda/docs/html/_images/inheritance-e77b184ecf186472a6b225931d872435e425d04c.png new file mode 100644 index 0000000..08d141d Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-e77b184ecf186472a6b225931d872435e425d04c.png differ diff --git a/anaconda/docs/html/_images/inheritance-e77b184ecf186472a6b225931d872435e425d04c.png.map b/anaconda/docs/html/_images/inheritance-e77b184ecf186472a6b225931d872435e425d04c.png.map new file mode 100644 index 0000000..bdf1c0a --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-e77b184ecf186472a6b225931d872435e425d04c.png.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-ead853d6461d27c6aeb79ee03149bda4ca799ca7.png b/anaconda/docs/html/_images/inheritance-ead853d6461d27c6aeb79ee03149bda4ca799ca7.png new file mode 100755 index 0000000..ee87a9e Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-ead853d6461d27c6aeb79ee03149bda4ca799ca7.png differ diff --git a/anaconda/docs/html/_images/inheritance-ead853d6461d27c6aeb79ee03149bda4ca799ca7.png.map b/anaconda/docs/html/_images/inheritance-ead853d6461d27c6aeb79ee03149bda4ca799ca7.png.map new file mode 100755 index 0000000..8c26c70 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-ead853d6461d27c6aeb79ee03149bda4ca799ca7.png.map @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-ec34bf8ca6a21a9d05fea3f302063653b132322f.png b/anaconda/docs/html/_images/inheritance-ec34bf8ca6a21a9d05fea3f302063653b132322f.png new file mode 100644 index 0000000..88ce5eb Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-ec34bf8ca6a21a9d05fea3f302063653b132322f.png differ diff --git a/anaconda/docs/html/_images/inheritance-ec34bf8ca6a21a9d05fea3f302063653b132322f.png.map b/anaconda/docs/html/_images/inheritance-ec34bf8ca6a21a9d05fea3f302063653b132322f.png.map new file mode 100644 index 0000000..8c26c70 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-ec34bf8ca6a21a9d05fea3f302063653b132322f.png.map @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-ef5d85400d41e1b0f3eedeabd5f3691f654fccb1.png b/anaconda/docs/html/_images/inheritance-ef5d85400d41e1b0f3eedeabd5f3691f654fccb1.png new file mode 100755 index 0000000..01fa321 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-ef5d85400d41e1b0f3eedeabd5f3691f654fccb1.png differ diff --git a/anaconda/docs/html/_images/inheritance-ef5d85400d41e1b0f3eedeabd5f3691f654fccb1.png.map b/anaconda/docs/html/_images/inheritance-ef5d85400d41e1b0f3eedeabd5f3691f654fccb1.png.map new file mode 100755 index 0000000..de0d357 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-ef5d85400d41e1b0f3eedeabd5f3691f654fccb1.png.map @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-eff982ea6db2986f012b4becba8693b79b8d3c7e.png b/anaconda/docs/html/_images/inheritance-eff982ea6db2986f012b4becba8693b79b8d3c7e.png new file mode 100755 index 0000000..2dedb7c Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-eff982ea6db2986f012b4becba8693b79b8d3c7e.png differ diff --git a/anaconda/docs/html/_images/inheritance-eff982ea6db2986f012b4becba8693b79b8d3c7e.png.map b/anaconda/docs/html/_images/inheritance-eff982ea6db2986f012b4becba8693b79b8d3c7e.png.map new file mode 100755 index 0000000..044f5a7 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-eff982ea6db2986f012b4becba8693b79b8d3c7e.png.map @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-f08d3d4d2956a0f7511ffff4a353f849f1067187.png b/anaconda/docs/html/_images/inheritance-f08d3d4d2956a0f7511ffff4a353f849f1067187.png new file mode 100755 index 0000000..5586f79 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-f08d3d4d2956a0f7511ffff4a353f849f1067187.png differ diff --git a/anaconda/docs/html/_images/inheritance-f08d3d4d2956a0f7511ffff4a353f849f1067187.png.map b/anaconda/docs/html/_images/inheritance-f08d3d4d2956a0f7511ffff4a353f849f1067187.png.map new file mode 100755 index 0000000..2c6f30b --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-f08d3d4d2956a0f7511ffff4a353f849f1067187.png.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-f1ce1c09acd760131e9d8bc08c20f17ad31e756a.png b/anaconda/docs/html/_images/inheritance-f1ce1c09acd760131e9d8bc08c20f17ad31e756a.png new file mode 100755 index 0000000..3ef1686 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-f1ce1c09acd760131e9d8bc08c20f17ad31e756a.png differ diff --git a/anaconda/docs/html/_images/inheritance-f1ce1c09acd760131e9d8bc08c20f17ad31e756a.png.map b/anaconda/docs/html/_images/inheritance-f1ce1c09acd760131e9d8bc08c20f17ad31e756a.png.map new file mode 100755 index 0000000..a728298 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-f1ce1c09acd760131e9d8bc08c20f17ad31e756a.png.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-f28f9c3a84882d3e464c580e2c708a2eecb99f3d.png b/anaconda/docs/html/_images/inheritance-f28f9c3a84882d3e464c580e2c708a2eecb99f3d.png new file mode 100755 index 0000000..8613eff Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-f28f9c3a84882d3e464c580e2c708a2eecb99f3d.png differ diff --git a/anaconda/docs/html/_images/inheritance-f28f9c3a84882d3e464c580e2c708a2eecb99f3d.png.map b/anaconda/docs/html/_images/inheritance-f28f9c3a84882d3e464c580e2c708a2eecb99f3d.png.map new file mode 100755 index 0000000..f3a9dac --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-f28f9c3a84882d3e464c580e2c708a2eecb99f3d.png.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-f3d068f22db67633dee634e566d6d675ff237ea6.png b/anaconda/docs/html/_images/inheritance-f3d068f22db67633dee634e566d6d675ff237ea6.png new file mode 100755 index 0000000..0127725 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-f3d068f22db67633dee634e566d6d675ff237ea6.png differ diff --git a/anaconda/docs/html/_images/inheritance-f3d068f22db67633dee634e566d6d675ff237ea6.png.map b/anaconda/docs/html/_images/inheritance-f3d068f22db67633dee634e566d6d675ff237ea6.png.map new file mode 100755 index 0000000..de0d357 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-f3d068f22db67633dee634e566d6d675ff237ea6.png.map @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-f906d5ec70230d9449f4a57e5d4911b7d095848d.png b/anaconda/docs/html/_images/inheritance-f906d5ec70230d9449f4a57e5d4911b7d095848d.png new file mode 100644 index 0000000..5586f79 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-f906d5ec70230d9449f4a57e5d4911b7d095848d.png differ diff --git a/anaconda/docs/html/_images/inheritance-f906d5ec70230d9449f4a57e5d4911b7d095848d.png.map b/anaconda/docs/html/_images/inheritance-f906d5ec70230d9449f4a57e5d4911b7d095848d.png.map new file mode 100644 index 0000000..2c6f30b --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-f906d5ec70230d9449f4a57e5d4911b7d095848d.png.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-f9ea747c8d38177990c0a13af047bbcf06c27a1b.png b/anaconda/docs/html/_images/inheritance-f9ea747c8d38177990c0a13af047bbcf06c27a1b.png new file mode 100644 index 0000000..843d2cd Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-f9ea747c8d38177990c0a13af047bbcf06c27a1b.png differ diff --git a/anaconda/docs/html/_images/inheritance-f9ea747c8d38177990c0a13af047bbcf06c27a1b.png.map b/anaconda/docs/html/_images/inheritance-f9ea747c8d38177990c0a13af047bbcf06c27a1b.png.map new file mode 100644 index 0000000..e5f8f97 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-f9ea747c8d38177990c0a13af047bbcf06c27a1b.png.map @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-fa1d0854c90cc069cab6c198a55fe9cb07c14db5.png b/anaconda/docs/html/_images/inheritance-fa1d0854c90cc069cab6c198a55fe9cb07c14db5.png new file mode 100644 index 0000000..01fa321 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-fa1d0854c90cc069cab6c198a55fe9cb07c14db5.png differ diff --git a/anaconda/docs/html/_images/inheritance-fa1d0854c90cc069cab6c198a55fe9cb07c14db5.png.map b/anaconda/docs/html/_images/inheritance-fa1d0854c90cc069cab6c198a55fe9cb07c14db5.png.map new file mode 100644 index 0000000..de0d357 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-fa1d0854c90cc069cab6c198a55fe9cb07c14db5.png.map @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-fb311ee801123da77984f9942e5e582257563ced.png b/anaconda/docs/html/_images/inheritance-fb311ee801123da77984f9942e5e582257563ced.png new file mode 100755 index 0000000..7f5ceeb Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-fb311ee801123da77984f9942e5e582257563ced.png differ diff --git a/anaconda/docs/html/_images/inheritance-fb311ee801123da77984f9942e5e582257563ced.png.map b/anaconda/docs/html/_images/inheritance-fb311ee801123da77984f9942e5e582257563ced.png.map new file mode 100755 index 0000000..f2e5a80 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-fb311ee801123da77984f9942e5e582257563ced.png.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-fc6d2707a53220d7d9790e1d47ab3c20afb0ee10.png b/anaconda/docs/html/_images/inheritance-fc6d2707a53220d7d9790e1d47ab3c20afb0ee10.png new file mode 100755 index 0000000..b267aef Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-fc6d2707a53220d7d9790e1d47ab3c20afb0ee10.png differ diff --git a/anaconda/docs/html/_images/inheritance-fc6d2707a53220d7d9790e1d47ab3c20afb0ee10.png.map b/anaconda/docs/html/_images/inheritance-fc6d2707a53220d7d9790e1d47ab3c20afb0ee10.png.map new file mode 100755 index 0000000..f46de10 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-fc6d2707a53220d7d9790e1d47ab3c20afb0ee10.png.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-fe1d7cdae6be6261470c03d4936937f46b53f04f.png b/anaconda/docs/html/_images/inheritance-fe1d7cdae6be6261470c03d4936937f46b53f04f.png new file mode 100755 index 0000000..924c213 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-fe1d7cdae6be6261470c03d4936937f46b53f04f.png differ diff --git a/anaconda/docs/html/_images/inheritance-fe1d7cdae6be6261470c03d4936937f46b53f04f.png.map b/anaconda/docs/html/_images/inheritance-fe1d7cdae6be6261470c03d4936937f46b53f04f.png.map new file mode 100755 index 0000000..6f56a8e --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-fe1d7cdae6be6261470c03d4936937f46b53f04f.png.map @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-fe9d8509a9aace6987cec2e708ea4bab6dc2672d.png b/anaconda/docs/html/_images/inheritance-fe9d8509a9aace6987cec2e708ea4bab6dc2672d.png new file mode 100755 index 0000000..472ebdf Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-fe9d8509a9aace6987cec2e708ea4bab6dc2672d.png differ diff --git a/anaconda/docs/html/_images/inheritance-fe9d8509a9aace6987cec2e708ea4bab6dc2672d.png.map b/anaconda/docs/html/_images/inheritance-fe9d8509a9aace6987cec2e708ea4bab6dc2672d.png.map new file mode 100755 index 0000000..bab33fd --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-fe9d8509a9aace6987cec2e708ea4bab6dc2672d.png.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/anaconda/docs/html/_images/inheritance-ff420bde5f98c728d28c82f0a4412b445a364490.png b/anaconda/docs/html/_images/inheritance-ff420bde5f98c728d28c82f0a4412b445a364490.png new file mode 100755 index 0000000..0fdda86 Binary files /dev/null and b/anaconda/docs/html/_images/inheritance-ff420bde5f98c728d28c82f0a4412b445a364490.png differ diff --git a/anaconda/docs/html/_images/inheritance-ff420bde5f98c728d28c82f0a4412b445a364490.png.map b/anaconda/docs/html/_images/inheritance-ff420bde5f98c728d28c82f0a4412b445a364490.png.map new file mode 100755 index 0000000..b30cc46 --- /dev/null +++ b/anaconda/docs/html/_images/inheritance-ff420bde5f98c728d28c82f0a4412b445a364490.png.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/anaconda/docs/html/_static/basic.css b/anaconda/docs/html/_static/basic.css index 967e36c..9fa77d8 100755 --- a/anaconda/docs/html/_static/basic.css +++ b/anaconda/docs/html/_static/basic.css @@ -4,7 +4,7 @@ * * Sphinx stylesheet -- basic theme. * - * :copyright: Copyright 2007-2014 by the Sphinx team, see AUTHORS. + * :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. * :license: BSD, see LICENSE for details. * */ @@ -197,7 +197,10 @@ h3:hover > a.headerlink, h4:hover > a.headerlink, h5:hover > a.headerlink, h6:hover > a.headerlink, -dt:hover > a.headerlink { +dt:hover > a.headerlink, +caption:hover > a.headerlink, +p.caption:hover > a.headerlink, +div.code-block-caption:hover > a.headerlink { visibility: visible; } @@ -314,6 +317,13 @@ table.docutils { border-collapse: collapse; } +table caption span.caption-number { + font-style: italic; +} + +table caption span.caption-text { +} + table.docutils td, table.docutils th { padding: 1px 8px 1px 5px; border-top: 0; @@ -344,6 +354,25 @@ table.citation td { border-bottom: none; } +/* -- figures --------------------------------------------------------------- */ + +div.figure { + margin: 0.5em; + padding: 0.5em; +} + +div.figure p.caption { + padding: 0.3em; +} + +div.figure p.caption span.caption-number { + font-style: italic; +} + +div.figure p.caption span.caption-text { +} + + /* -- other body styles ----------------------------------------------------- */ ol.arabic { @@ -406,6 +435,10 @@ dl.glossary dt { font-size: 1.3em; } +.sig-paren { + font-size: larger; +} + .versionmodified { font-style: italic; } @@ -471,22 +504,51 @@ table.highlighttable td { padding: 0 0.5em 0 0.5em; } -tt.descname { +div.code-block-caption { + padding: 2px 5px; + font-size: small; +} + +div.code-block-caption code { + background-color: transparent; +} + +div.code-block-caption + div > div.highlight > pre { + margin-top: 0; +} + +div.code-block-caption span.caption-number { + padding: 0.1em 0.3em; + font-style: italic; +} + +div.code-block-caption span.caption-text { +} + +div.literal-block-wrapper { + padding: 1em 1em 0; +} + +div.literal-block-wrapper div.highlight { + margin: 0; +} + +code.descname { background-color: transparent; font-weight: bold; font-size: 1.2em; } -tt.descclassname { +code.descclassname { background-color: transparent; } -tt.xref, a tt { +code.xref, a code { background-color: transparent; font-weight: bold; } -h1 tt, h2 tt, h3 tt, h4 tt, h5 tt, h6 tt { +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { background-color: transparent; } diff --git a/anaconda/docs/html/_static/css/theme.css b/anaconda/docs/html/_static/css/theme.css index 57b98fe..7be9339 100755 --- a/anaconda/docs/html/_static/css/theme.css +++ b/anaconda/docs/html/_static/css/theme.css @@ -1,5 +1,5 @@ -*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}audio:not([controls]){display:none}[hidden]{display:none}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a:hover,a:active{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}blockquote{margin:0}dfn{font-style:italic}ins{background:#ff9;color:#000;text-decoration:none}mark{background:#ff0;color:#000;font-style:italic;font-weight:bold}pre,code,.rst-content tt,.rst-content code,kbd,samp{font-family:monospace,serif;_font-family:"courier new",monospace;font-size:1em}pre{white-space:pre}q{quotes:none}q:before,q:after{content:"";content:none}small{font-size:85%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}ul,ol,dl{margin:0;padding:0;list-style:none;list-style-image:none}li{list-style:none}dd{margin:0}img{border:0;-ms-interpolation-mode:bicubic;vertical-align:middle;max-width:100%}svg:not(:root){overflow:hidden}figure{margin:0}form{margin:0}fieldset{border:0;margin:0;padding:0}label{cursor:pointer}legend{border:0;*margin-left:-7px;padding:0;white-space:normal}button,input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}button,input{line-height:normal}button,input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button;*overflow:visible}button[disabled],input[disabled]{cursor:default}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0;*width:13px;*height:13px}input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}textarea{overflow:auto;vertical-align:top;resize:vertical}table{border-collapse:collapse;border-spacing:0}td{vertical-align:top}.chromeframe{margin:0.2em 0;background:#ccc;color:#000;padding:0.2em 0}.ir{display:block;border:0;text-indent:-999em;overflow:hidden;background-color:transparent;background-repeat:no-repeat;text-align:left;direction:ltr;*line-height:0}.ir br{display:none}.hidden{display:none !important;visibility:hidden}.visuallyhidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.visuallyhidden.focusable:active,.visuallyhidden.focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.invisible{visibility:hidden}.relative{position:relative}big,small{font-size:100%}@media print{html,body,section{background:none !important}*{box-shadow:none !important;text-shadow:none !important;filter:none !important;-ms-filter:none !important}a,a:visited{text-decoration:underline}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}@page{margin:0.5cm}p,h2,.rst-content p.caption,h3{orphans:3;widows:3}h2,.rst-content p.caption,h3{page-break-after:avoid}}.fa:before,.wy-menu-vertical li span.toctree-expand:before,.wy-menu-vertical li.on a span.toctree-expand:before,.wy-menu-vertical li.current>a span.toctree-expand:before,.rst-content .admonition-title:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content dl dt .headerlink:before,.rst-content tt.download span:first-child:before,.rst-content code.download span:first-child:before,.icon:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-alert,.rst-content .note,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .warning,.rst-content .seealso,.rst-content .admonition-todo,.btn,input[type="text"],input[type="password"],input[type="email"],input[type="url"],input[type="date"],input[type="month"],input[type="time"],input[type="datetime"],input[type="datetime-local"],input[type="week"],input[type="number"],input[type="search"],input[type="tel"],input[type="color"],select,textarea,.wy-menu-vertical li.on a,.wy-menu-vertical li.current>a,.wy-side-nav-search>a,.wy-side-nav-search .wy-dropdown>a,.wy-nav-top a{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;content:""}.clearfix:after{clear:both}/*! +*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}audio:not([controls]){display:none}[hidden]{display:none}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a:hover,a:active{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}blockquote{margin:0}dfn{font-style:italic}ins{background:#ff9;color:#000;text-decoration:none}mark{background:#ff0;color:#000;font-style:italic;font-weight:bold}pre,code,.rst-content tt,.rst-content code,kbd,samp{font-family:monospace,serif;_font-family:"courier new",monospace;font-size:1em}pre{white-space:pre}q{quotes:none}q:before,q:after{content:"";content:none}small{font-size:85%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}ul,ol,dl{margin:0;padding:0;list-style:none;list-style-image:none}li{list-style:none}dd{margin:0}img{border:0;-ms-interpolation-mode:bicubic;vertical-align:middle;max-width:100%}svg:not(:root){overflow:hidden}figure{margin:0}form{margin:0}fieldset{border:0;margin:0;padding:0}label{cursor:pointer}legend{border:0;*margin-left:-7px;padding:0;white-space:normal}button,input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}button,input{line-height:normal}button,input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button;*overflow:visible}button[disabled],input[disabled]{cursor:default}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0;*width:13px;*height:13px}input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}textarea{overflow:auto;vertical-align:top;resize:vertical}table{border-collapse:collapse;border-spacing:0}td{vertical-align:top}.chromeframe{margin:0.2em 0;background:#ccc;color:#000;padding:0.2em 0}.ir{display:block;border:0;text-indent:-999em;overflow:hidden;background-color:transparent;background-repeat:no-repeat;text-align:left;direction:ltr;*line-height:0}.ir br{display:none}.hidden{display:none !important;visibility:hidden}.visuallyhidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.visuallyhidden.focusable:active,.visuallyhidden.focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.invisible{visibility:hidden}.relative{position:relative}big,small{font-size:100%}@media print{html,body,section{background:none !important}*{box-shadow:none !important;text-shadow:none !important;filter:none !important;-ms-filter:none !important}a,a:visited{text-decoration:underline}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}@page{margin:0.5cm}p,h2,.rst-content .toctree-wrapper p.caption,h3{orphans:3;widows:3}h2,.rst-content .toctree-wrapper p.caption,h3{page-break-after:avoid}}.fa:before,.wy-menu-vertical li span.toctree-expand:before,.wy-menu-vertical li.on a span.toctree-expand:before,.wy-menu-vertical li.current>a span.toctree-expand:before,.rst-content .admonition-title:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content dl dt .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content tt.download span:first-child:before,.rst-content code.download span:first-child:before,.icon:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-alert,.rst-content .note,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .warning,.rst-content .seealso,.rst-content .admonition-todo,.btn,input[type="text"],input[type="password"],input[type="email"],input[type="url"],input[type="date"],input[type="month"],input[type="time"],input[type="datetime"],input[type="datetime-local"],input[type="week"],input[type="number"],input[type="search"],input[type="tel"],input[type="color"],select,textarea,.wy-menu-vertical li.on a,.wy-menu-vertical li.current>a,.wy-side-nav-search>a,.wy-side-nav-search .wy-dropdown>a,.wy-nav-top a{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;content:""}.clearfix:after{clear:both}/*! * Font Awesome 4.2.0 by @davegandy - http://fontawesome.io - @fontawesome * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) - */@font-face{font-family:'FontAwesome';src:url("../fonts/fontawesome-webfont.eot?v=4.2.0");src:url("../fonts/fontawesome-webfont.eot?#iefix&v=4.2.0") format("embedded-opentype"),url("../fonts/fontawesome-webfont.woff?v=4.2.0") format("woff"),url("../fonts/fontawesome-webfont.ttf?v=4.2.0") format("truetype"),url("../fonts/fontawesome-webfont.svg?v=4.2.0#fontawesomeregular") format("svg");font-weight:normal;font-style:normal}.fa,.wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li.current>a span.toctree-expand,.rst-content .admonition-title,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content p.caption .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content dl dt .headerlink,.rst-content tt.download span:first-child,.rst-content code.download span:first-child,.icon{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333em;line-height:0.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14286em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14286em;width:2.14286em;top:0.14286em;text-align:center}.fa-li.fa-lg{left:-1.85714em}.fa-border{padding:.2em .25em .15em;border:solid 0.08em #eee;border-radius:.1em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left,.wy-menu-vertical li span.pull-left.toctree-expand,.wy-menu-vertical li.on a span.pull-left.toctree-expand,.wy-menu-vertical li.current>a span.pull-left.toctree-expand,.rst-content .pull-left.admonition-title,.rst-content h1 .pull-left.headerlink,.rst-content h2 .pull-left.headerlink,.rst-content p.caption .pull-left.headerlink,.rst-content h3 .pull-left.headerlink,.rst-content h4 .pull-left.headerlink,.rst-content h5 .pull-left.headerlink,.rst-content h6 .pull-left.headerlink,.rst-content dl dt .pull-left.headerlink,.rst-content tt.download span.pull-left:first-child,.rst-content code.download span.pull-left:first-child,.pull-left.icon{margin-right:.3em}.fa.pull-right,.wy-menu-vertical li span.pull-right.toctree-expand,.wy-menu-vertical li.on a span.pull-right.toctree-expand,.wy-menu-vertical li.current>a span.pull-right.toctree-expand,.rst-content .pull-right.admonition-title,.rst-content h1 .pull-right.headerlink,.rst-content h2 .pull-right.headerlink,.rst-content p.caption .pull-right.headerlink,.rst-content h3 .pull-right.headerlink,.rst-content h4 .pull-right.headerlink,.rst-content h5 .pull-right.headerlink,.rst-content h6 .pull-right.headerlink,.rst-content dl dt .pull-right.headerlink,.rst-content tt.download span.pull-right:first-child,.rst-content code.download span.pull-right:first-child,.pull-right.icon{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0);-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before,.icon-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-remove:before,.fa-close:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-gear:before,.fa-cog:before{content:""}.fa-trash-o:before{content:""}.fa-home:before,.icon-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before,.rst-content tt.download span:first-child:before,.rst-content code.download span:first-child:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-rotate-right:before,.fa-repeat:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before,.icon-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before{content:""}.fa-check-circle:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.rst-content .admonition-title:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before,.icon-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-warning:before,.fa-exclamation-triangle:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-gears:before,.fa-cogs:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook:before{content:""}.fa-github:before,.icon-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before,.icon-circle-arrow-left:before{content:""}.fa-arrow-circle-right:before,.icon-circle-arrow-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before,.icon-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-save:before,.fa-floppy-o:before{content:""}.fa-square:before{content:""}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before,.wy-dropdown .caret:before,.icon-caret-down:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-unsorted:before,.fa-sort:before{content:""}.fa-sort-down:before,.fa-sort-desc:before{content:""}.fa-sort-up:before,.fa-sort-asc:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-legal:before,.fa-gavel:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-flash:before,.fa-bolt:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-paste:before,.fa-clipboard:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-unlink:before,.fa-chain-broken:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before,.wy-menu-vertical li.on a span.toctree-expand:before,.wy-menu-vertical li.current>a span.toctree-expand:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:""}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:""}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:""}.fa-euro:before,.fa-eur:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-rupee:before,.fa-inr:before{content:""}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:""}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:""}.fa-won:before,.fa-krw:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before,.icon-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-turkish-lira:before,.fa-try:before{content:""}.fa-plus-square-o:before,.wy-menu-vertical li span.toctree-expand:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-institution:before,.fa-bank:before,.fa-university:before{content:""}.fa-mortar-board:before,.fa-graduation-cap:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:""}.fa-file-zip-o:before,.fa-file-archive-o:before{content:""}.fa-file-sound-o:before,.fa-file-audio-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-rebel:before{content:""}.fa-ge:before,.fa-empire:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-hacker-news:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-send:before,.fa-paper-plane:before{content:""}.fa-send-o:before,.fa-paper-plane-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:""}.fa-meanpath:before{content:""}.fa,.wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li.current>a span.toctree-expand,.rst-content .admonition-title,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content p.caption .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content dl dt .headerlink,.rst-content tt.download span:first-child,.rst-content code.download span:first-child,.icon,.wy-dropdown .caret,.wy-inline-validate.wy-inline-validate-success .wy-input-context,.wy-inline-validate.wy-inline-validate-danger .wy-input-context,.wy-inline-validate.wy-inline-validate-warning .wy-input-context,.wy-inline-validate.wy-inline-validate-info .wy-input-context{font-family:inherit}.fa:before,.wy-menu-vertical li span.toctree-expand:before,.wy-menu-vertical li.on a span.toctree-expand:before,.wy-menu-vertical li.current>a span.toctree-expand:before,.rst-content .admonition-title:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content dl dt .headerlink:before,.rst-content tt.download span:first-child:before,.rst-content code.download span:first-child:before,.icon:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before{font-family:"FontAwesome";display:inline-block;font-style:normal;font-weight:normal;line-height:1;text-decoration:inherit}a .fa,a .wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li a span.toctree-expand,.wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li.current>a span.toctree-expand,a .rst-content .admonition-title,.rst-content a .admonition-title,a .rst-content h1 .headerlink,.rst-content h1 a .headerlink,a .rst-content h2 .headerlink,.rst-content h2 a .headerlink,a .rst-content p.caption .headerlink,.rst-content p.caption a .headerlink,a .rst-content h3 .headerlink,.rst-content h3 a .headerlink,a .rst-content h4 .headerlink,.rst-content h4 a .headerlink,a .rst-content h5 .headerlink,.rst-content h5 a .headerlink,a .rst-content h6 .headerlink,.rst-content h6 a .headerlink,a .rst-content dl dt .headerlink,.rst-content dl dt a .headerlink,a .rst-content tt.download span:first-child,.rst-content tt.download a span:first-child,a .rst-content code.download span:first-child,.rst-content code.download a span:first-child,a .icon{display:inline-block;text-decoration:inherit}.btn .fa,.btn .wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li .btn span.toctree-expand,.btn .wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li.on a .btn span.toctree-expand,.btn .wy-menu-vertical li.current>a span.toctree-expand,.wy-menu-vertical li.current>a .btn span.toctree-expand,.btn .rst-content .admonition-title,.rst-content .btn .admonition-title,.btn .rst-content h1 .headerlink,.rst-content h1 .btn .headerlink,.btn .rst-content h2 .headerlink,.rst-content h2 .btn .headerlink,.btn .rst-content p.caption .headerlink,.rst-content p.caption .btn .headerlink,.btn .rst-content h3 .headerlink,.rst-content h3 .btn .headerlink,.btn .rst-content h4 .headerlink,.rst-content h4 .btn .headerlink,.btn .rst-content h5 .headerlink,.rst-content h5 .btn .headerlink,.btn .rst-content h6 .headerlink,.rst-content h6 .btn .headerlink,.btn .rst-content dl dt .headerlink,.rst-content dl dt .btn .headerlink,.btn .rst-content tt.download span:first-child,.rst-content tt.download .btn span:first-child,.btn .rst-content code.download span:first-child,.rst-content code.download .btn span:first-child,.btn .icon,.nav .fa,.nav .wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li .nav span.toctree-expand,.nav .wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li.on a .nav span.toctree-expand,.nav .wy-menu-vertical li.current>a span.toctree-expand,.wy-menu-vertical li.current>a .nav span.toctree-expand,.nav .rst-content .admonition-title,.rst-content .nav .admonition-title,.nav .rst-content h1 .headerlink,.rst-content h1 .nav .headerlink,.nav .rst-content h2 .headerlink,.rst-content h2 .nav .headerlink,.nav .rst-content p.caption .headerlink,.rst-content p.caption .nav .headerlink,.nav .rst-content h3 .headerlink,.rst-content h3 .nav .headerlink,.nav .rst-content h4 .headerlink,.rst-content h4 .nav .headerlink,.nav .rst-content h5 .headerlink,.rst-content h5 .nav .headerlink,.nav .rst-content h6 .headerlink,.rst-content h6 .nav .headerlink,.nav .rst-content dl dt .headerlink,.rst-content dl dt .nav .headerlink,.nav .rst-content tt.download span:first-child,.rst-content tt.download .nav span:first-child,.nav .rst-content code.download span:first-child,.rst-content code.download .nav span:first-child,.nav .icon{display:inline}.btn .fa.fa-large,.btn .wy-menu-vertical li span.fa-large.toctree-expand,.wy-menu-vertical li .btn span.fa-large.toctree-expand,.btn .rst-content .fa-large.admonition-title,.rst-content .btn .fa-large.admonition-title,.btn .rst-content h1 .fa-large.headerlink,.rst-content h1 .btn .fa-large.headerlink,.btn .rst-content h2 .fa-large.headerlink,.rst-content h2 .btn .fa-large.headerlink,.btn .rst-content p.caption .fa-large.headerlink,.rst-content p.caption .btn .fa-large.headerlink,.btn .rst-content h3 .fa-large.headerlink,.rst-content h3 .btn .fa-large.headerlink,.btn .rst-content h4 .fa-large.headerlink,.rst-content h4 .btn .fa-large.headerlink,.btn .rst-content h5 .fa-large.headerlink,.rst-content h5 .btn .fa-large.headerlink,.btn .rst-content h6 .fa-large.headerlink,.rst-content h6 .btn .fa-large.headerlink,.btn .rst-content dl dt .fa-large.headerlink,.rst-content dl dt .btn .fa-large.headerlink,.btn .rst-content tt.download span.fa-large:first-child,.rst-content tt.download .btn span.fa-large:first-child,.btn .rst-content code.download span.fa-large:first-child,.rst-content code.download .btn span.fa-large:first-child,.btn .fa-large.icon,.nav .fa.fa-large,.nav .wy-menu-vertical li span.fa-large.toctree-expand,.wy-menu-vertical li .nav span.fa-large.toctree-expand,.nav .rst-content .fa-large.admonition-title,.rst-content .nav .fa-large.admonition-title,.nav .rst-content h1 .fa-large.headerlink,.rst-content h1 .nav .fa-large.headerlink,.nav .rst-content h2 .fa-large.headerlink,.rst-content h2 .nav .fa-large.headerlink,.nav .rst-content p.caption .fa-large.headerlink,.rst-content p.caption .nav .fa-large.headerlink,.nav .rst-content h3 .fa-large.headerlink,.rst-content h3 .nav .fa-large.headerlink,.nav .rst-content h4 .fa-large.headerlink,.rst-content h4 .nav .fa-large.headerlink,.nav .rst-content h5 .fa-large.headerlink,.rst-content h5 .nav .fa-large.headerlink,.nav .rst-content h6 .fa-large.headerlink,.rst-content h6 .nav .fa-large.headerlink,.nav .rst-content dl dt .fa-large.headerlink,.rst-content dl dt .nav .fa-large.headerlink,.nav .rst-content tt.download span.fa-large:first-child,.rst-content tt.download .nav span.fa-large:first-child,.nav .rst-content code.download span.fa-large:first-child,.rst-content code.download .nav span.fa-large:first-child,.nav .fa-large.icon{line-height:0.9em}.btn .fa.fa-spin,.btn .wy-menu-vertical li span.fa-spin.toctree-expand,.wy-menu-vertical li .btn span.fa-spin.toctree-expand,.btn .rst-content .fa-spin.admonition-title,.rst-content .btn .fa-spin.admonition-title,.btn .rst-content h1 .fa-spin.headerlink,.rst-content h1 .btn .fa-spin.headerlink,.btn .rst-content h2 .fa-spin.headerlink,.rst-content h2 .btn .fa-spin.headerlink,.btn .rst-content p.caption .fa-spin.headerlink,.rst-content p.caption .btn .fa-spin.headerlink,.btn .rst-content h3 .fa-spin.headerlink,.rst-content h3 .btn .fa-spin.headerlink,.btn .rst-content h4 .fa-spin.headerlink,.rst-content h4 .btn .fa-spin.headerlink,.btn .rst-content h5 .fa-spin.headerlink,.rst-content h5 .btn .fa-spin.headerlink,.btn .rst-content h6 .fa-spin.headerlink,.rst-content h6 .btn .fa-spin.headerlink,.btn .rst-content dl dt .fa-spin.headerlink,.rst-content dl dt .btn .fa-spin.headerlink,.btn .rst-content tt.download span.fa-spin:first-child,.rst-content tt.download .btn span.fa-spin:first-child,.btn .rst-content code.download span.fa-spin:first-child,.rst-content code.download .btn span.fa-spin:first-child,.btn .fa-spin.icon,.nav .fa.fa-spin,.nav .wy-menu-vertical li span.fa-spin.toctree-expand,.wy-menu-vertical li .nav span.fa-spin.toctree-expand,.nav .rst-content .fa-spin.admonition-title,.rst-content .nav .fa-spin.admonition-title,.nav .rst-content h1 .fa-spin.headerlink,.rst-content h1 .nav .fa-spin.headerlink,.nav .rst-content h2 .fa-spin.headerlink,.rst-content h2 .nav .fa-spin.headerlink,.nav .rst-content p.caption .fa-spin.headerlink,.rst-content p.caption .nav .fa-spin.headerlink,.nav .rst-content h3 .fa-spin.headerlink,.rst-content h3 .nav .fa-spin.headerlink,.nav .rst-content h4 .fa-spin.headerlink,.rst-content h4 .nav .fa-spin.headerlink,.nav .rst-content h5 .fa-spin.headerlink,.rst-content h5 .nav .fa-spin.headerlink,.nav .rst-content h6 .fa-spin.headerlink,.rst-content h6 .nav .fa-spin.headerlink,.nav .rst-content dl dt .fa-spin.headerlink,.rst-content dl dt .nav .fa-spin.headerlink,.nav .rst-content tt.download span.fa-spin:first-child,.rst-content tt.download .nav span.fa-spin:first-child,.nav .rst-content code.download span.fa-spin:first-child,.rst-content code.download .nav span.fa-spin:first-child,.nav .fa-spin.icon{display:inline-block}.btn.fa:before,.wy-menu-vertical li span.btn.toctree-expand:before,.rst-content .btn.admonition-title:before,.rst-content h1 .btn.headerlink:before,.rst-content h2 .btn.headerlink:before,.rst-content p.caption .btn.headerlink:before,.rst-content h3 .btn.headerlink:before,.rst-content h4 .btn.headerlink:before,.rst-content h5 .btn.headerlink:before,.rst-content h6 .btn.headerlink:before,.rst-content dl dt .btn.headerlink:before,.rst-content tt.download span.btn:first-child:before,.rst-content code.download span.btn:first-child:before,.btn.icon:before{opacity:0.5;-webkit-transition:opacity 0.05s ease-in;-moz-transition:opacity 0.05s ease-in;transition:opacity 0.05s ease-in}.btn.fa:hover:before,.wy-menu-vertical li span.btn.toctree-expand:hover:before,.rst-content .btn.admonition-title:hover:before,.rst-content h1 .btn.headerlink:hover:before,.rst-content h2 .btn.headerlink:hover:before,.rst-content p.caption .btn.headerlink:hover:before,.rst-content h3 .btn.headerlink:hover:before,.rst-content h4 .btn.headerlink:hover:before,.rst-content h5 .btn.headerlink:hover:before,.rst-content h6 .btn.headerlink:hover:before,.rst-content dl dt .btn.headerlink:hover:before,.rst-content tt.download span.btn:first-child:hover:before,.rst-content code.download span.btn:first-child:hover:before,.btn.icon:hover:before{opacity:1}.btn-mini .fa:before,.btn-mini .wy-menu-vertical li span.toctree-expand:before,.wy-menu-vertical li .btn-mini span.toctree-expand:before,.btn-mini .rst-content .admonition-title:before,.rst-content .btn-mini .admonition-title:before,.btn-mini .rst-content h1 .headerlink:before,.rst-content h1 .btn-mini .headerlink:before,.btn-mini .rst-content h2 .headerlink:before,.rst-content h2 .btn-mini .headerlink:before,.btn-mini .rst-content p.caption .headerlink:before,.rst-content p.caption .btn-mini .headerlink:before,.btn-mini .rst-content h3 .headerlink:before,.rst-content h3 .btn-mini .headerlink:before,.btn-mini .rst-content h4 .headerlink:before,.rst-content h4 .btn-mini .headerlink:before,.btn-mini .rst-content h5 .headerlink:before,.rst-content h5 .btn-mini .headerlink:before,.btn-mini .rst-content h6 .headerlink:before,.rst-content h6 .btn-mini .headerlink:before,.btn-mini .rst-content dl dt .headerlink:before,.rst-content dl dt .btn-mini .headerlink:before,.btn-mini .rst-content tt.download span:first-child:before,.rst-content tt.download .btn-mini span:first-child:before,.btn-mini .rst-content code.download span:first-child:before,.rst-content code.download .btn-mini span:first-child:before,.btn-mini .icon:before{font-size:14px;vertical-align:-15%}.wy-alert,.rst-content .note,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .warning,.rst-content .seealso,.rst-content .admonition-todo{padding:12px;line-height:24px;margin-bottom:24px;background:#e7f2fa}.wy-alert-title,.rst-content .admonition-title{color:#fff;font-weight:bold;display:block;color:#fff;background:#6ab0de;margin:-12px;padding:6px 12px;margin-bottom:12px}.wy-alert.wy-alert-danger,.rst-content .wy-alert-danger.note,.rst-content .wy-alert-danger.attention,.rst-content .wy-alert-danger.caution,.rst-content .danger,.rst-content .error,.rst-content .wy-alert-danger.hint,.rst-content .wy-alert-danger.important,.rst-content .wy-alert-danger.tip,.rst-content .wy-alert-danger.warning,.rst-content .wy-alert-danger.seealso,.rst-content .wy-alert-danger.admonition-todo{background:#fdf3f2}.wy-alert.wy-alert-danger .wy-alert-title,.rst-content .wy-alert-danger.note .wy-alert-title,.rst-content .wy-alert-danger.attention .wy-alert-title,.rst-content .wy-alert-danger.caution .wy-alert-title,.rst-content .danger .wy-alert-title,.rst-content .error .wy-alert-title,.rst-content .wy-alert-danger.hint .wy-alert-title,.rst-content .wy-alert-danger.important .wy-alert-title,.rst-content .wy-alert-danger.tip .wy-alert-title,.rst-content .wy-alert-danger.warning .wy-alert-title,.rst-content .wy-alert-danger.seealso .wy-alert-title,.rst-content .wy-alert-danger.admonition-todo .wy-alert-title,.wy-alert.wy-alert-danger .rst-content .admonition-title,.rst-content .wy-alert.wy-alert-danger .admonition-title,.rst-content .wy-alert-danger.note .admonition-title,.rst-content .wy-alert-danger.attention .admonition-title,.rst-content .wy-alert-danger.caution .admonition-title,.rst-content .danger .admonition-title,.rst-content .error .admonition-title,.rst-content .wy-alert-danger.hint .admonition-title,.rst-content .wy-alert-danger.important .admonition-title,.rst-content .wy-alert-danger.tip .admonition-title,.rst-content .wy-alert-danger.warning .admonition-title,.rst-content .wy-alert-danger.seealso .admonition-title,.rst-content .wy-alert-danger.admonition-todo .admonition-title{background:#f29f97}.wy-alert.wy-alert-warning,.rst-content .wy-alert-warning.note,.rst-content .attention,.rst-content .caution,.rst-content .wy-alert-warning.danger,.rst-content .wy-alert-warning.error,.rst-content .wy-alert-warning.hint,.rst-content .wy-alert-warning.important,.rst-content .wy-alert-warning.tip,.rst-content .warning,.rst-content .wy-alert-warning.seealso,.rst-content .admonition-todo{background:#ffedcc}.wy-alert.wy-alert-warning .wy-alert-title,.rst-content .wy-alert-warning.note .wy-alert-title,.rst-content .attention .wy-alert-title,.rst-content .caution .wy-alert-title,.rst-content .wy-alert-warning.danger .wy-alert-title,.rst-content .wy-alert-warning.error .wy-alert-title,.rst-content .wy-alert-warning.hint .wy-alert-title,.rst-content .wy-alert-warning.important .wy-alert-title,.rst-content .wy-alert-warning.tip .wy-alert-title,.rst-content .warning .wy-alert-title,.rst-content .wy-alert-warning.seealso .wy-alert-title,.rst-content .admonition-todo .wy-alert-title,.wy-alert.wy-alert-warning .rst-content .admonition-title,.rst-content .wy-alert.wy-alert-warning .admonition-title,.rst-content .wy-alert-warning.note .admonition-title,.rst-content .attention .admonition-title,.rst-content .caution .admonition-title,.rst-content .wy-alert-warning.danger .admonition-title,.rst-content .wy-alert-warning.error .admonition-title,.rst-content .wy-alert-warning.hint .admonition-title,.rst-content .wy-alert-warning.important .admonition-title,.rst-content .wy-alert-warning.tip .admonition-title,.rst-content .warning .admonition-title,.rst-content .wy-alert-warning.seealso .admonition-title,.rst-content .admonition-todo .admonition-title{background:#f0b37e}.wy-alert.wy-alert-info,.rst-content .note,.rst-content .wy-alert-info.attention,.rst-content .wy-alert-info.caution,.rst-content .wy-alert-info.danger,.rst-content .wy-alert-info.error,.rst-content .wy-alert-info.hint,.rst-content .wy-alert-info.important,.rst-content .wy-alert-info.tip,.rst-content .wy-alert-info.warning,.rst-content .seealso,.rst-content .wy-alert-info.admonition-todo{background:#e7f2fa}.wy-alert.wy-alert-info .wy-alert-title,.rst-content .note .wy-alert-title,.rst-content .wy-alert-info.attention .wy-alert-title,.rst-content .wy-alert-info.caution .wy-alert-title,.rst-content .wy-alert-info.danger .wy-alert-title,.rst-content .wy-alert-info.error .wy-alert-title,.rst-content .wy-alert-info.hint .wy-alert-title,.rst-content .wy-alert-info.important .wy-alert-title,.rst-content .wy-alert-info.tip .wy-alert-title,.rst-content .wy-alert-info.warning .wy-alert-title,.rst-content .seealso .wy-alert-title,.rst-content .wy-alert-info.admonition-todo .wy-alert-title,.wy-alert.wy-alert-info .rst-content .admonition-title,.rst-content .wy-alert.wy-alert-info .admonition-title,.rst-content .note .admonition-title,.rst-content .wy-alert-info.attention .admonition-title,.rst-content .wy-alert-info.caution .admonition-title,.rst-content .wy-alert-info.danger .admonition-title,.rst-content .wy-alert-info.error .admonition-title,.rst-content .wy-alert-info.hint .admonition-title,.rst-content .wy-alert-info.important .admonition-title,.rst-content .wy-alert-info.tip .admonition-title,.rst-content .wy-alert-info.warning .admonition-title,.rst-content .seealso .admonition-title,.rst-content .wy-alert-info.admonition-todo .admonition-title{background:#6ab0de}.wy-alert.wy-alert-success,.rst-content .wy-alert-success.note,.rst-content .wy-alert-success.attention,.rst-content .wy-alert-success.caution,.rst-content .wy-alert-success.danger,.rst-content .wy-alert-success.error,.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .wy-alert-success.warning,.rst-content .wy-alert-success.seealso,.rst-content .wy-alert-success.admonition-todo{background:#dbfaf4}.wy-alert.wy-alert-success .wy-alert-title,.rst-content .wy-alert-success.note .wy-alert-title,.rst-content .wy-alert-success.attention .wy-alert-title,.rst-content .wy-alert-success.caution .wy-alert-title,.rst-content .wy-alert-success.danger .wy-alert-title,.rst-content .wy-alert-success.error .wy-alert-title,.rst-content .hint .wy-alert-title,.rst-content .important .wy-alert-title,.rst-content .tip .wy-alert-title,.rst-content .wy-alert-success.warning .wy-alert-title,.rst-content .wy-alert-success.seealso .wy-alert-title,.rst-content .wy-alert-success.admonition-todo .wy-alert-title,.wy-alert.wy-alert-success .rst-content .admonition-title,.rst-content .wy-alert.wy-alert-success .admonition-title,.rst-content .wy-alert-success.note .admonition-title,.rst-content .wy-alert-success.attention .admonition-title,.rst-content .wy-alert-success.caution .admonition-title,.rst-content .wy-alert-success.danger .admonition-title,.rst-content .wy-alert-success.error .admonition-title,.rst-content .hint .admonition-title,.rst-content .important .admonition-title,.rst-content .tip .admonition-title,.rst-content .wy-alert-success.warning .admonition-title,.rst-content .wy-alert-success.seealso .admonition-title,.rst-content .wy-alert-success.admonition-todo .admonition-title{background:#1abc9c}.wy-alert.wy-alert-neutral,.rst-content .wy-alert-neutral.note,.rst-content .wy-alert-neutral.attention,.rst-content .wy-alert-neutral.caution,.rst-content .wy-alert-neutral.danger,.rst-content .wy-alert-neutral.error,.rst-content .wy-alert-neutral.hint,.rst-content .wy-alert-neutral.important,.rst-content .wy-alert-neutral.tip,.rst-content .wy-alert-neutral.warning,.rst-content .wy-alert-neutral.seealso,.rst-content .wy-alert-neutral.admonition-todo{background:#f3f6f6}.wy-alert.wy-alert-neutral .wy-alert-title,.rst-content .wy-alert-neutral.note .wy-alert-title,.rst-content .wy-alert-neutral.attention .wy-alert-title,.rst-content .wy-alert-neutral.caution .wy-alert-title,.rst-content .wy-alert-neutral.danger .wy-alert-title,.rst-content .wy-alert-neutral.error .wy-alert-title,.rst-content .wy-alert-neutral.hint .wy-alert-title,.rst-content .wy-alert-neutral.important .wy-alert-title,.rst-content .wy-alert-neutral.tip .wy-alert-title,.rst-content .wy-alert-neutral.warning .wy-alert-title,.rst-content .wy-alert-neutral.seealso .wy-alert-title,.rst-content .wy-alert-neutral.admonition-todo .wy-alert-title,.wy-alert.wy-alert-neutral .rst-content .admonition-title,.rst-content .wy-alert.wy-alert-neutral .admonition-title,.rst-content .wy-alert-neutral.note .admonition-title,.rst-content .wy-alert-neutral.attention .admonition-title,.rst-content .wy-alert-neutral.caution .admonition-title,.rst-content .wy-alert-neutral.danger .admonition-title,.rst-content .wy-alert-neutral.error .admonition-title,.rst-content .wy-alert-neutral.hint .admonition-title,.rst-content .wy-alert-neutral.important .admonition-title,.rst-content .wy-alert-neutral.tip .admonition-title,.rst-content .wy-alert-neutral.warning .admonition-title,.rst-content .wy-alert-neutral.seealso .admonition-title,.rst-content .wy-alert-neutral.admonition-todo .admonition-title{color:#404040;background:#e1e4e5}.wy-alert.wy-alert-neutral a,.rst-content .wy-alert-neutral.note a,.rst-content .wy-alert-neutral.attention a,.rst-content .wy-alert-neutral.caution a,.rst-content .wy-alert-neutral.danger a,.rst-content .wy-alert-neutral.error a,.rst-content .wy-alert-neutral.hint a,.rst-content .wy-alert-neutral.important a,.rst-content .wy-alert-neutral.tip a,.rst-content .wy-alert-neutral.warning a,.rst-content .wy-alert-neutral.seealso a,.rst-content .wy-alert-neutral.admonition-todo a{color:#2980B9}.wy-alert p:last-child,.rst-content .note p:last-child,.rst-content .attention p:last-child,.rst-content .caution p:last-child,.rst-content .danger p:last-child,.rst-content .error p:last-child,.rst-content .hint p:last-child,.rst-content .important p:last-child,.rst-content .tip p:last-child,.rst-content .warning p:last-child,.rst-content .seealso p:last-child,.rst-content .admonition-todo p:last-child{margin-bottom:0}.wy-tray-container{position:fixed;bottom:0px;left:0;z-index:600}.wy-tray-container li{display:block;width:300px;background:transparent;color:#fff;text-align:center;box-shadow:0 5px 5px 0 rgba(0,0,0,0.1);padding:0 24px;min-width:20%;opacity:0;height:0;line-height:56px;overflow:hidden;-webkit-transition:all 0.3s ease-in;-moz-transition:all 0.3s ease-in;transition:all 0.3s ease-in}.wy-tray-container li.wy-tray-item-success{background:#27AE60}.wy-tray-container li.wy-tray-item-info{background:#2980B9}.wy-tray-container li.wy-tray-item-warning{background:#E67E22}.wy-tray-container li.wy-tray-item-danger{background:#E74C3C}.wy-tray-container li.on{opacity:1;height:56px}@media screen and (max-width: 768px){.wy-tray-container{bottom:auto;top:0;width:100%}.wy-tray-container li{width:100%}}button{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle;cursor:pointer;line-height:normal;-webkit-appearance:button;*overflow:visible}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}button[disabled]{cursor:default}.btn{display:inline-block;border-radius:2px;line-height:normal;white-space:nowrap;text-align:center;cursor:pointer;font-size:100%;padding:6px 12px 8px 12px;color:#fff;border:1px solid rgba(0,0,0,0.1);background-color:#27AE60;text-decoration:none;font-weight:normal;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;box-shadow:0px 1px 2px -1px rgba(255,255,255,0.5) inset,0px -2px 0px 0px rgba(0,0,0,0.1) inset;outline-none:false;vertical-align:middle;*display:inline;zoom:1;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transition:all 0.1s linear;-moz-transition:all 0.1s linear;transition:all 0.1s linear}.btn-hover{background:#2e8ece;color:#fff}.btn:hover{background:#2cc36b;color:#fff}.btn:focus{background:#2cc36b;outline:0}.btn:active{box-shadow:0px -1px 0px 0px rgba(0,0,0,0.05) inset,0px 2px 0px 0px rgba(0,0,0,0.1) inset;padding:8px 12px 6px 12px}.btn:visited{color:#fff}.btn:disabled{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:0.4;cursor:not-allowed;box-shadow:none}.btn-disabled{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:0.4;cursor:not-allowed;box-shadow:none}.btn-disabled:hover,.btn-disabled:focus,.btn-disabled:active{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:0.4;cursor:not-allowed;box-shadow:none}.btn::-moz-focus-inner{padding:0;border:0}.btn-small{font-size:80%}.btn-info{background-color:#2980B9 !important}.btn-info:hover{background-color:#2e8ece !important}.btn-neutral{background-color:#f3f6f6 !important;color:#404040 !important}.btn-neutral:hover{background-color:#e5ebeb !important;color:#404040}.btn-neutral:visited{color:#404040 !important}.btn-success{background-color:#27AE60 !important}.btn-success:hover{background-color:#295 !important}.btn-danger{background-color:#E74C3C !important}.btn-danger:hover{background-color:#ea6153 !important}.btn-warning{background-color:#E67E22 !important}.btn-warning:hover{background-color:#e98b39 !important}.btn-invert{background-color:#222}.btn-invert:hover{background-color:#2f2f2f !important}.btn-link{background-color:transparent !important;color:#2980B9;box-shadow:none;border-color:transparent !important}.btn-link:hover{background-color:transparent !important;color:#409ad5 !important;box-shadow:none}.btn-link:active{background-color:transparent !important;color:#409ad5 !important;box-shadow:none}.btn-link:visited{color:#9B59B6}.wy-btn-group .btn,.wy-control .btn{vertical-align:middle}.wy-btn-group{margin-bottom:24px;*zoom:1}.wy-btn-group:before,.wy-btn-group:after{display:table;content:""}.wy-btn-group:after{clear:both}.wy-dropdown{position:relative;display:inline-block}.wy-dropdown-active .wy-dropdown-menu{display:block}.wy-dropdown-menu{position:absolute;left:0;display:none;float:left;top:100%;min-width:100%;background:#fcfcfc;z-index:100;border:solid 1px #cfd7dd;box-shadow:0 2px 2px 0 rgba(0,0,0,0.1);padding:12px}.wy-dropdown-menu>dd>a{display:block;clear:both;color:#404040;white-space:nowrap;font-size:90%;padding:0 12px;cursor:pointer}.wy-dropdown-menu>dd>a:hover{background:#2980B9;color:#fff}.wy-dropdown-menu>dd.divider{border-top:solid 1px #cfd7dd;margin:6px 0}.wy-dropdown-menu>dd.search{padding-bottom:12px}.wy-dropdown-menu>dd.search input[type="search"]{width:100%}.wy-dropdown-menu>dd.call-to-action{background:#e3e3e3;text-transform:uppercase;font-weight:500;font-size:80%}.wy-dropdown-menu>dd.call-to-action:hover{background:#e3e3e3}.wy-dropdown-menu>dd.call-to-action .btn{color:#fff}.wy-dropdown.wy-dropdown-up .wy-dropdown-menu{bottom:100%;top:auto;left:auto;right:0}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu{background:#fcfcfc;margin-top:2px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a{padding:6px 12px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a:hover{background:#2980B9;color:#fff}.wy-dropdown.wy-dropdown-left .wy-dropdown-menu{right:0;left:auto;text-align:right}.wy-dropdown-arrow:before{content:" ";border-bottom:5px solid #f5f5f5;border-left:5px solid transparent;border-right:5px solid transparent;position:absolute;display:block;top:-4px;left:50%;margin-left:-3px}.wy-dropdown-arrow.wy-dropdown-arrow-left:before{left:11px}.wy-form-stacked select{display:block}.wy-form-aligned input,.wy-form-aligned textarea,.wy-form-aligned select,.wy-form-aligned .wy-help-inline,.wy-form-aligned label{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-form-aligned .wy-control-group>label{display:inline-block;vertical-align:middle;width:10em;margin:6px 12px 0 0;float:left}.wy-form-aligned .wy-control{float:left}.wy-form-aligned .wy-control label{display:block}.wy-form-aligned .wy-control select{margin-top:6px}fieldset{border:0;margin:0;padding:0}legend{display:block;width:100%;border:0;padding:0;white-space:normal;margin-bottom:24px;font-size:150%;*margin-left:-7px}label{display:block;margin:0 0 0.3125em 0;color:#333;font-size:90%}input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}.wy-control-group{margin-bottom:24px;*zoom:1;max-width:68em;margin-left:auto;margin-right:auto;*zoom:1}.wy-control-group:before,.wy-control-group:after{display:table;content:""}.wy-control-group:after{clear:both}.wy-control-group:before,.wy-control-group:after{display:table;content:""}.wy-control-group:after{clear:both}.wy-control-group.wy-control-group-required>label:after{content:" *";color:#E74C3C}.wy-control-group .wy-form-full,.wy-control-group .wy-form-halves,.wy-control-group .wy-form-thirds{padding-bottom:12px}.wy-control-group .wy-form-full select,.wy-control-group .wy-form-halves select,.wy-control-group .wy-form-thirds select{width:100%}.wy-control-group .wy-form-full input[type="text"],.wy-control-group .wy-form-full input[type="password"],.wy-control-group .wy-form-full input[type="email"],.wy-control-group .wy-form-full input[type="url"],.wy-control-group .wy-form-full input[type="date"],.wy-control-group .wy-form-full input[type="month"],.wy-control-group .wy-form-full input[type="time"],.wy-control-group .wy-form-full input[type="datetime"],.wy-control-group .wy-form-full input[type="datetime-local"],.wy-control-group .wy-form-full input[type="week"],.wy-control-group .wy-form-full input[type="number"],.wy-control-group .wy-form-full input[type="search"],.wy-control-group .wy-form-full input[type="tel"],.wy-control-group .wy-form-full input[type="color"],.wy-control-group .wy-form-halves input[type="text"],.wy-control-group .wy-form-halves input[type="password"],.wy-control-group .wy-form-halves input[type="email"],.wy-control-group .wy-form-halves input[type="url"],.wy-control-group .wy-form-halves input[type="date"],.wy-control-group .wy-form-halves input[type="month"],.wy-control-group .wy-form-halves input[type="time"],.wy-control-group .wy-form-halves input[type="datetime"],.wy-control-group .wy-form-halves input[type="datetime-local"],.wy-control-group .wy-form-halves input[type="week"],.wy-control-group .wy-form-halves input[type="number"],.wy-control-group .wy-form-halves input[type="search"],.wy-control-group .wy-form-halves input[type="tel"],.wy-control-group .wy-form-halves input[type="color"],.wy-control-group .wy-form-thirds input[type="text"],.wy-control-group .wy-form-thirds input[type="password"],.wy-control-group .wy-form-thirds input[type="email"],.wy-control-group .wy-form-thirds input[type="url"],.wy-control-group .wy-form-thirds input[type="date"],.wy-control-group .wy-form-thirds input[type="month"],.wy-control-group .wy-form-thirds input[type="time"],.wy-control-group .wy-form-thirds input[type="datetime"],.wy-control-group .wy-form-thirds input[type="datetime-local"],.wy-control-group .wy-form-thirds input[type="week"],.wy-control-group .wy-form-thirds input[type="number"],.wy-control-group .wy-form-thirds input[type="search"],.wy-control-group .wy-form-thirds input[type="tel"],.wy-control-group .wy-form-thirds input[type="color"]{width:100%}.wy-control-group .wy-form-full{float:left;display:block;margin-right:2.35765%;width:100%;margin-right:0}.wy-control-group .wy-form-full:last-child{margin-right:0}.wy-control-group .wy-form-halves{float:left;display:block;margin-right:2.35765%;width:48.82117%}.wy-control-group .wy-form-halves:last-child{margin-right:0}.wy-control-group .wy-form-halves:nth-of-type(2n){margin-right:0}.wy-control-group .wy-form-halves:nth-of-type(2n+1){clear:left}.wy-control-group .wy-form-thirds{float:left;display:block;margin-right:2.35765%;width:31.76157%}.wy-control-group .wy-form-thirds:last-child{margin-right:0}.wy-control-group .wy-form-thirds:nth-of-type(3n){margin-right:0}.wy-control-group .wy-form-thirds:nth-of-type(3n+1){clear:left}.wy-control-group.wy-control-group-no-input .wy-control{margin:6px 0 0 0;font-size:90%}.wy-control-no-input{display:inline-block;margin:6px 0 0 0;font-size:90%}.wy-control-group.fluid-input input[type="text"],.wy-control-group.fluid-input input[type="password"],.wy-control-group.fluid-input input[type="email"],.wy-control-group.fluid-input input[type="url"],.wy-control-group.fluid-input input[type="date"],.wy-control-group.fluid-input input[type="month"],.wy-control-group.fluid-input input[type="time"],.wy-control-group.fluid-input input[type="datetime"],.wy-control-group.fluid-input input[type="datetime-local"],.wy-control-group.fluid-input input[type="week"],.wy-control-group.fluid-input input[type="number"],.wy-control-group.fluid-input input[type="search"],.wy-control-group.fluid-input input[type="tel"],.wy-control-group.fluid-input input[type="color"]{width:100%}.wy-form-message-inline{display:inline-block;padding-left:0.3em;color:#666;vertical-align:middle;font-size:90%}.wy-form-message{display:block;color:#999;font-size:70%;margin-top:0.3125em;font-style:italic}.wy-form-message p{font-size:inherit;font-style:italic;margin-bottom:6px}.wy-form-message p:last-child{margin-bottom:0}input{line-height:normal}input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;*overflow:visible}input[type="text"],input[type="password"],input[type="email"],input[type="url"],input[type="date"],input[type="month"],input[type="time"],input[type="datetime"],input[type="datetime-local"],input[type="week"],input[type="number"],input[type="search"],input[type="tel"],input[type="color"]{-webkit-appearance:none;padding:6px;display:inline-block;border:1px solid #ccc;font-size:80%;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;box-shadow:inset 0 1px 3px #ddd;border-radius:0;-webkit-transition:border 0.3s linear;-moz-transition:border 0.3s linear;transition:border 0.3s linear}input[type="datetime-local"]{padding:0.34375em 0.625em}input[disabled]{cursor:default}input[type="checkbox"],input[type="radio"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0;margin-right:0.3125em;*height:13px;*width:13px}input[type="search"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}input[type="text"]:focus,input[type="password"]:focus,input[type="email"]:focus,input[type="url"]:focus,input[type="date"]:focus,input[type="month"]:focus,input[type="time"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="week"]:focus,input[type="number"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="color"]:focus{outline:0;outline:thin dotted \9;border-color:#333}input.no-focus:focus{border-color:#ccc !important}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:1px auto #129FEA}input[type="text"][disabled],input[type="password"][disabled],input[type="email"][disabled],input[type="url"][disabled],input[type="date"][disabled],input[type="month"][disabled],input[type="time"][disabled],input[type="datetime"][disabled],input[type="datetime-local"][disabled],input[type="week"][disabled],input[type="number"][disabled],input[type="search"][disabled],input[type="tel"][disabled],input[type="color"][disabled]{cursor:not-allowed;background-color:#fafafa}input:focus:invalid,textarea:focus:invalid,select:focus:invalid{color:#E74C3C;border:1px solid #E74C3C}input:focus:invalid:focus,textarea:focus:invalid:focus,select:focus:invalid:focus{border-color:#E74C3C}input[type="file"]:focus:invalid:focus,input[type="radio"]:focus:invalid:focus,input[type="checkbox"]:focus:invalid:focus{outline-color:#E74C3C}input.wy-input-large{padding:12px;font-size:100%}textarea{overflow:auto;vertical-align:top;width:100%;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif}select,textarea{padding:0.5em 0.625em;display:inline-block;border:1px solid #ccc;font-size:80%;box-shadow:inset 0 1px 3px #ddd;-webkit-transition:border 0.3s linear;-moz-transition:border 0.3s linear;transition:border 0.3s linear}select{border:1px solid #ccc;background-color:#fff}select[multiple]{height:auto}select:focus,textarea:focus{outline:0}select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{cursor:not-allowed;background-color:#fafafa}input[type="radio"][disabled],input[type="checkbox"][disabled]{cursor:not-allowed}.wy-checkbox,.wy-radio{margin:6px 0;color:#404040;display:block}.wy-checkbox input,.wy-radio input{vertical-align:baseline}.wy-form-message-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-input-prefix,.wy-input-suffix{white-space:nowrap;padding:6px}.wy-input-prefix .wy-input-context,.wy-input-suffix .wy-input-context{line-height:27px;padding:0 8px;display:inline-block;font-size:80%;background-color:#f3f6f6;border:solid 1px #ccc;color:#999}.wy-input-suffix .wy-input-context{border-left:0}.wy-input-prefix .wy-input-context{border-right:0}.wy-switch{width:36px;height:12px;margin:12px 0;position:relative;border-radius:4px;background:#ccc;cursor:pointer;-webkit-transition:all 0.2s ease-in-out;-moz-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out}.wy-switch:before{position:absolute;content:"";display:block;width:18px;height:18px;border-radius:4px;background:#999;left:-3px;top:-3px;-webkit-transition:all 0.2s ease-in-out;-moz-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out}.wy-switch:after{content:"false";position:absolute;left:48px;display:block;font-size:12px;color:#ccc}.wy-switch.active{background:#1e8449}.wy-switch.active:before{left:24px;background:#27AE60}.wy-switch.active:after{content:"true"}.wy-switch.disabled,.wy-switch.active.disabled{cursor:not-allowed}.wy-control-group.wy-control-group-error .wy-form-message,.wy-control-group.wy-control-group-error>label{color:#E74C3C}.wy-control-group.wy-control-group-error input[type="text"],.wy-control-group.wy-control-group-error input[type="password"],.wy-control-group.wy-control-group-error input[type="email"],.wy-control-group.wy-control-group-error input[type="url"],.wy-control-group.wy-control-group-error input[type="date"],.wy-control-group.wy-control-group-error input[type="month"],.wy-control-group.wy-control-group-error input[type="time"],.wy-control-group.wy-control-group-error input[type="datetime"],.wy-control-group.wy-control-group-error input[type="datetime-local"],.wy-control-group.wy-control-group-error input[type="week"],.wy-control-group.wy-control-group-error input[type="number"],.wy-control-group.wy-control-group-error input[type="search"],.wy-control-group.wy-control-group-error input[type="tel"],.wy-control-group.wy-control-group-error input[type="color"]{border:solid 1px #E74C3C}.wy-control-group.wy-control-group-error textarea{border:solid 1px #E74C3C}.wy-inline-validate{white-space:nowrap}.wy-inline-validate .wy-input-context{padding:0.5em 0.625em;display:inline-block;font-size:80%}.wy-inline-validate.wy-inline-validate-success .wy-input-context{color:#27AE60}.wy-inline-validate.wy-inline-validate-danger .wy-input-context{color:#E74C3C}.wy-inline-validate.wy-inline-validate-warning .wy-input-context{color:#E67E22}.wy-inline-validate.wy-inline-validate-info .wy-input-context{color:#2980B9}.rotate-90{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.rotate-180{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.rotate-270{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.mirror{-webkit-transform:scaleX(-1);-moz-transform:scaleX(-1);-ms-transform:scaleX(-1);-o-transform:scaleX(-1);transform:scaleX(-1)}.mirror.rotate-90{-webkit-transform:scaleX(-1) rotate(90deg);-moz-transform:scaleX(-1) rotate(90deg);-ms-transform:scaleX(-1) rotate(90deg);-o-transform:scaleX(-1) rotate(90deg);transform:scaleX(-1) rotate(90deg)}.mirror.rotate-180{-webkit-transform:scaleX(-1) rotate(180deg);-moz-transform:scaleX(-1) rotate(180deg);-ms-transform:scaleX(-1) rotate(180deg);-o-transform:scaleX(-1) rotate(180deg);transform:scaleX(-1) rotate(180deg)}.mirror.rotate-270{-webkit-transform:scaleX(-1) rotate(270deg);-moz-transform:scaleX(-1) rotate(270deg);-ms-transform:scaleX(-1) rotate(270deg);-o-transform:scaleX(-1) rotate(270deg);transform:scaleX(-1) rotate(270deg)}@media only screen and (max-width: 480px){.wy-form button[type="submit"]{margin:0.7em 0 0}.wy-form input[type="text"],.wy-form input[type="password"],.wy-form input[type="email"],.wy-form input[type="url"],.wy-form input[type="date"],.wy-form input[type="month"],.wy-form input[type="time"],.wy-form input[type="datetime"],.wy-form input[type="datetime-local"],.wy-form input[type="week"],.wy-form input[type="number"],.wy-form input[type="search"],.wy-form input[type="tel"],.wy-form input[type="color"]{margin-bottom:0.3em;display:block}.wy-form label{margin-bottom:0.3em;display:block}.wy-form input[type="password"],.wy-form input[type="email"],.wy-form input[type="url"],.wy-form input[type="date"],.wy-form input[type="month"],.wy-form input[type="time"],.wy-form input[type="datetime"],.wy-form input[type="datetime-local"],.wy-form input[type="week"],.wy-form input[type="number"],.wy-form input[type="search"],.wy-form input[type="tel"],.wy-form input[type="color"]{margin-bottom:0}.wy-form-aligned .wy-control-group label{margin-bottom:0.3em;text-align:left;display:block;width:100%}.wy-form-aligned .wy-control{margin:1.5em 0 0 0}.wy-form .wy-help-inline,.wy-form-message-inline,.wy-form-message{display:block;font-size:80%;padding:6px 0}}@media screen and (max-width: 768px){.tablet-hide{display:none}}@media screen and (max-width: 480px){.mobile-hide{display:none}}.float-left{float:left}.float-right{float:right}.full-width{width:100%}.wy-table,.rst-content table.docutils,.rst-content table.field-list{border-collapse:collapse;border-spacing:0;empty-cells:show;margin-bottom:24px}.wy-table caption,.rst-content table.docutils caption,.rst-content table.field-list caption{color:#000;font:italic 85%/1 arial,sans-serif;padding:1em 0;text-align:center}.wy-table td,.rst-content table.docutils td,.rst-content table.field-list td,.wy-table th,.rst-content table.docutils th,.rst-content table.field-list th{font-size:90%;margin:0;overflow:visible;padding:8px 16px}.wy-table td:first-child,.rst-content table.docutils td:first-child,.rst-content table.field-list td:first-child,.wy-table th:first-child,.rst-content table.docutils th:first-child,.rst-content table.field-list th:first-child{border-left-width:0}.wy-table thead,.rst-content table.docutils thead,.rst-content table.field-list thead{color:#000;text-align:left;vertical-align:bottom;white-space:nowrap}.wy-table thead th,.rst-content table.docutils thead th,.rst-content table.field-list thead th{font-weight:bold;border-bottom:solid 2px #e1e4e5}.wy-table td,.rst-content table.docutils td,.rst-content table.field-list td{background-color:transparent;vertical-align:middle}.wy-table td p,.rst-content table.docutils td p,.rst-content table.field-list td p{line-height:18px}.wy-table td p:last-child,.rst-content table.docutils td p:last-child,.rst-content table.field-list td p:last-child{margin-bottom:0}.wy-table .wy-table-cell-min,.rst-content table.docutils .wy-table-cell-min,.rst-content table.field-list .wy-table-cell-min{width:1%;padding-right:0}.wy-table .wy-table-cell-min input[type=checkbox],.rst-content table.docutils .wy-table-cell-min input[type=checkbox],.rst-content table.field-list .wy-table-cell-min input[type=checkbox],.wy-table .wy-table-cell-min input[type=checkbox],.rst-content table.docutils .wy-table-cell-min input[type=checkbox],.rst-content table.field-list .wy-table-cell-min input[type=checkbox]{margin:0}.wy-table-secondary{color:gray;font-size:90%}.wy-table-tertiary{color:gray;font-size:80%}.wy-table-odd td,.wy-table-striped tr:nth-child(2n-1) td,.rst-content table.docutils:not(.field-list) tr:nth-child(2n-1) td{background-color:#f3f6f6}.wy-table-backed{background-color:#f3f6f6}.wy-table-bordered-all,.rst-content table.docutils{border:1px solid #e1e4e5}.wy-table-bordered-all td,.rst-content table.docutils td{border-bottom:1px solid #e1e4e5;border-left:1px solid #e1e4e5}.wy-table-bordered-all tbody>tr:last-child td,.rst-content table.docutils tbody>tr:last-child td{border-bottom-width:0}.wy-table-bordered{border:1px solid #e1e4e5}.wy-table-bordered-rows td{border-bottom:1px solid #e1e4e5}.wy-table-bordered-rows tbody>tr:last-child td{border-bottom-width:0}.wy-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.wy-table-horizontal td,.wy-table-horizontal th{border-width:0 0 1px 0;border-bottom:1px solid #e1e4e5}.wy-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.wy-table-responsive{margin-bottom:24px;max-width:100%;overflow:auto}.wy-table-responsive table{margin-bottom:0 !important}.wy-table-responsive table td,.wy-table-responsive table th{white-space:nowrap}a{color:#2980B9;text-decoration:none;cursor:pointer}a:hover{color:#3091d1}a:visited{color:#9B59B6}html{height:100%;overflow-x:hidden}body{font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;font-weight:normal;color:#404040;min-height:100%;overflow-x:hidden;background:#edf0f2}.wy-text-left{text-align:left}.wy-text-center{text-align:center}.wy-text-right{text-align:right}.wy-text-large{font-size:120%}.wy-text-normal{font-size:100%}.wy-text-small,small{font-size:80%}.wy-text-strike{text-decoration:line-through}.wy-text-warning{color:#E67E22 !important}a.wy-text-warning:hover{color:#eb9950 !important}.wy-text-info{color:#2980B9 !important}a.wy-text-info:hover{color:#409ad5 !important}.wy-text-success{color:#27AE60 !important}a.wy-text-success:hover{color:#36d278 !important}.wy-text-danger{color:#E74C3C !important}a.wy-text-danger:hover{color:#ed7669 !important}.wy-text-neutral{color:#404040 !important}a.wy-text-neutral:hover{color:#595959 !important}h1,h2,.rst-content p.caption,h3,h4,h5,h6,legend{margin-top:0;font-weight:700;font-family:"Roboto Slab","ff-tisa-web-pro","Georgia",Arial,sans-serif}p{line-height:24px;margin:0;font-size:16px;margin-bottom:24px}h1{font-size:175%}h2,.rst-content p.caption{font-size:150%}h3{font-size:125%}h4{font-size:115%}h5{font-size:110%}h6{font-size:100%}hr{display:block;height:1px;border:0;border-top:1px solid #e1e4e5;margin:24px 0;padding:0}code,.rst-content tt,.rst-content code{white-space:nowrap;max-width:100%;background:#fff;border:solid 1px #e1e4e5;font-size:75%;padding:0 5px;font-family:Consolas,"Andale Mono WT","Andale Mono","Lucida Console","Lucida Sans Typewriter","DejaVu Sans Mono","Bitstream Vera Sans Mono","Liberation Mono","Nimbus Mono L",Monaco,"Courier New",Courier,monospace;color:#E74C3C;overflow-x:auto}code.code-large,.rst-content tt.code-large{font-size:90%}.wy-plain-list-disc,.rst-content .section ul,.rst-content .toctree-wrapper ul,article ul{list-style:disc;line-height:24px;margin-bottom:24px}.wy-plain-list-disc li,.rst-content .section ul li,.rst-content .toctree-wrapper ul li,article ul li{list-style:disc;margin-left:24px}.wy-plain-list-disc li p:last-child,.rst-content .section ul li p:last-child,.rst-content .toctree-wrapper ul li p:last-child,article ul li p:last-child{margin-bottom:0}.wy-plain-list-disc li ul,.rst-content .section ul li ul,.rst-content .toctree-wrapper ul li ul,article ul li ul{margin-bottom:0}.wy-plain-list-disc li li,.rst-content .section ul li li,.rst-content .toctree-wrapper ul li li,article ul li li{list-style:circle}.wy-plain-list-disc li li li,.rst-content .section ul li li li,.rst-content .toctree-wrapper ul li li li,article ul li li li{list-style:square}.wy-plain-list-disc li ol li,.rst-content .section ul li ol li,.rst-content .toctree-wrapper ul li ol li,article ul li ol li{list-style:decimal}.wy-plain-list-decimal,.rst-content .section ol,.rst-content ol.arabic,article ol{list-style:decimal;line-height:24px;margin-bottom:24px}.wy-plain-list-decimal li,.rst-content .section ol li,.rst-content ol.arabic li,article ol li{list-style:decimal;margin-left:24px}.wy-plain-list-decimal li p:last-child,.rst-content .section ol li p:last-child,.rst-content ol.arabic li p:last-child,article ol li p:last-child{margin-bottom:0}.wy-plain-list-decimal li ul,.rst-content .section ol li ul,.rst-content ol.arabic li ul,article ol li ul{margin-bottom:0}.wy-plain-list-decimal li ul li,.rst-content .section ol li ul li,.rst-content ol.arabic li ul li,article ol li ul li{list-style:disc}.codeblock-example{border:1px solid #e1e4e5;border-bottom:none;padding:24px;padding-top:48px;font-weight:500;background:#fff;position:relative}.codeblock-example:after{content:"Example";position:absolute;top:0px;left:0px;background:#9B59B6;color:#fff;padding:6px 12px}.codeblock-example.prettyprint-example-only{border:1px solid #e1e4e5;margin-bottom:24px}.codeblock,pre.literal-block,.rst-content .literal-block,.rst-content pre.literal-block,div[class^='highlight']{border:1px solid #e1e4e5;padding:0px;overflow-x:auto;background:#fff;margin:1px 0 24px 0}.codeblock div[class^='highlight'],pre.literal-block div[class^='highlight'],.rst-content .literal-block div[class^='highlight'],div[class^='highlight'] div[class^='highlight']{border:none;background:none;margin:0}div[class^='highlight'] td.code{width:100%}.linenodiv pre{border-right:solid 1px #e6e9ea;margin:0;padding:12px 12px;font-family:Consolas,"Andale Mono WT","Andale Mono","Lucida Console","Lucida Sans Typewriter","DejaVu Sans Mono","Bitstream Vera Sans Mono","Liberation Mono","Nimbus Mono L",Monaco,"Courier New",Courier,monospace;font-size:12px;line-height:1.5;color:#d9d9d9}div[class^='highlight'] pre{white-space:pre;margin:0;padding:12px 12px;font-family:Consolas,"Andale Mono WT","Andale Mono","Lucida Console","Lucida Sans Typewriter","DejaVu Sans Mono","Bitstream Vera Sans Mono","Liberation Mono","Nimbus Mono L",Monaco,"Courier New",Courier,monospace;font-size:12px;line-height:1.5;display:block;overflow:auto;color:#404040}@media print{.codeblock,pre.literal-block,.rst-content .literal-block,.rst-content pre.literal-block,div[class^='highlight'],div[class^='highlight'] pre{white-space:pre-wrap}}.hll{background-color:#ffc;margin:0 -12px;padding:0 12px;display:block}.c{color:#998;font-style:italic}.err{color:#a61717;background-color:#e3d2d2}.k{font-weight:bold}.o{font-weight:bold}.cm{color:#998;font-style:italic}.cp{color:#999;font-weight:bold}.c1{color:#998;font-style:italic}.cs{color:#999;font-weight:bold;font-style:italic}.gd{color:#000;background-color:#fdd}.gd .x{color:#000;background-color:#faa}.ge{font-style:italic}.gr{color:#a00}.gh{color:#999}.gi{color:#000;background-color:#dfd}.gi .x{color:#000;background-color:#afa}.go{color:#888}.gp{color:#555}.gs{font-weight:bold}.gu{color:purple;font-weight:bold}.gt{color:#a00}.kc{font-weight:bold}.kd{font-weight:bold}.kn{font-weight:bold}.kp{font-weight:bold}.kr{font-weight:bold}.kt{color:#458;font-weight:bold}.m{color:#099}.s{color:#d14}.n{color:#333}.na{color:teal}.nb{color:#0086b3}.nc{color:#458;font-weight:bold}.no{color:teal}.ni{color:purple}.ne{color:#900;font-weight:bold}.nf{color:#900;font-weight:bold}.nn{color:#555}.nt{color:navy}.nv{color:teal}.ow{font-weight:bold}.w{color:#bbb}.mf{color:#099}.mh{color:#099}.mi{color:#099}.mo{color:#099}.sb{color:#d14}.sc{color:#d14}.sd{color:#d14}.s2{color:#d14}.se{color:#d14}.sh{color:#d14}.si{color:#d14}.sx{color:#d14}.sr{color:#009926}.s1{color:#d14}.ss{color:#990073}.bp{color:#999}.vc{color:teal}.vg{color:teal}.vi{color:teal}.il{color:#099}.gc{color:#999;background-color:#EAF2F5}.wy-breadcrumbs li{display:inline-block}.wy-breadcrumbs li.wy-breadcrumbs-aside{float:right}.wy-breadcrumbs li a{display:inline-block;padding:5px}.wy-breadcrumbs li a:first-child{padding-left:0}.wy-breadcrumbs-extra{margin-bottom:0;color:#b3b3b3;font-size:80%;display:inline-block}@media screen and (max-width: 480px){.wy-breadcrumbs-extra{display:none}.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}@media print{.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}.wy-affix{position:fixed;top:1.618em}.wy-menu a:hover{text-decoration:none}.wy-menu-horiz{*zoom:1}.wy-menu-horiz:before,.wy-menu-horiz:after{display:table;content:""}.wy-menu-horiz:after{clear:both}.wy-menu-horiz ul,.wy-menu-horiz li{display:inline-block}.wy-menu-horiz li:hover{background:rgba(255,255,255,0.1)}.wy-menu-horiz li.divide-left{border-left:solid 1px #404040}.wy-menu-horiz li.divide-right{border-right:solid 1px #404040}.wy-menu-horiz a{height:32px;display:inline-block;line-height:32px;padding:0 16px}.wy-menu-vertical header,.wy-menu-vertical p.caption{height:32px;display:inline-block;line-height:32px;padding:0 1.618em;margin-bottom:0;display:block;font-weight:bold;text-transform:uppercase;font-size:80%;color:#555;white-space:nowrap}.wy-menu-vertical ul{margin-bottom:0}.wy-menu-vertical li.divide-top{border-top:solid 1px #404040}.wy-menu-vertical li.divide-bottom{border-bottom:solid 1px #404040}.wy-menu-vertical li.current{background:#e3e3e3}.wy-menu-vertical li.current a{color:gray;border-right:solid 1px #c9c9c9;padding:0.4045em 2.427em}.wy-menu-vertical li.current a:hover{background:#d6d6d6}.wy-menu-vertical li code,.wy-menu-vertical li .rst-content tt,.rst-content .wy-menu-vertical li tt{border:none;background:inherit;color:inherit;padding-left:0;padding-right:0}.wy-menu-vertical li span.toctree-expand{display:block;float:left;margin-left:-1.2em;font-size:0.8em;line-height:1.6em;color:#4d4d4d}.wy-menu-vertical li.on a,.wy-menu-vertical li.current>a{color:#404040;padding:0.4045em 1.618em;font-weight:bold;position:relative;background:#fcfcfc;border:none;border-bottom:solid 1px #c9c9c9;border-top:solid 1px #c9c9c9;padding-left:1.618em -4px}.wy-menu-vertical li.on a:hover,.wy-menu-vertical li.current>a:hover{background:#fcfcfc}.wy-menu-vertical li.on a:hover span.toctree-expand,.wy-menu-vertical li.current>a:hover span.toctree-expand{color:gray}.wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li.current>a span.toctree-expand{display:block;font-size:0.8em;line-height:1.6em;color:#333}.wy-menu-vertical li.toctree-l1.current li.toctree-l2>ul,.wy-menu-vertical li.toctree-l2.current li.toctree-l3>ul{display:none}.wy-menu-vertical li.toctree-l1.current li.toctree-l2.current>ul,.wy-menu-vertical li.toctree-l2.current li.toctree-l3.current>ul{display:block}.wy-menu-vertical li.toctree-l2.current>a{background:#c9c9c9;padding:0.4045em 2.427em}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{display:block;background:#c9c9c9;padding:0.4045em 4.045em}.wy-menu-vertical li.toctree-l2 a:hover span.toctree-expand{color:gray}.wy-menu-vertical li.toctree-l2 span.toctree-expand{color:#a3a3a3}.wy-menu-vertical li.toctree-l3{font-size:0.9em}.wy-menu-vertical li.toctree-l3.current>a{background:#bdbdbd;padding:0.4045em 4.045em}.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{display:block;background:#bdbdbd;padding:0.4045em 5.663em;border-top:none;border-bottom:none}.wy-menu-vertical li.toctree-l3 a:hover span.toctree-expand{color:gray}.wy-menu-vertical li.toctree-l3 span.toctree-expand{color:#969696}.wy-menu-vertical li.toctree-l4{font-size:0.9em}.wy-menu-vertical li.current ul{display:block}.wy-menu-vertical li ul{margin-bottom:0;display:none}.wy-menu-vertical .local-toc li ul{display:block}.wy-menu-vertical li ul li a{margin-bottom:0;color:#b3b3b3;font-weight:normal}.wy-menu-vertical a{display:inline-block;line-height:18px;padding:0.4045em 1.618em;display:block;position:relative;font-size:90%;color:#b3b3b3}.wy-menu-vertical a:hover{background-color:#4e4a4a;cursor:pointer}.wy-menu-vertical a:hover span.toctree-expand{color:#b3b3b3}.wy-menu-vertical a:active{background-color:#2980B9;cursor:pointer;color:#fff}.wy-menu-vertical a:active span.toctree-expand{color:#fff}.wy-side-nav-search{z-index:200;background-color:#2980B9;text-align:center;padding:0.809em;display:block;color:#fcfcfc;margin-bottom:0.809em}.wy-side-nav-search input[type=text]{width:100%;border-radius:50px;padding:6px 12px;border-color:#2472a4}.wy-side-nav-search img{display:block;margin:auto auto 0.809em auto;height:45px;width:45px;background-color:#2980B9;padding:5px;border-radius:100%}.wy-side-nav-search>a,.wy-side-nav-search .wy-dropdown>a{color:#fcfcfc;font-size:100%;font-weight:bold;display:inline-block;padding:4px 6px;margin-bottom:0.809em}.wy-side-nav-search>a:hover,.wy-side-nav-search .wy-dropdown>a:hover{background:rgba(255,255,255,0.1)}.wy-side-nav-search>a img.logo,.wy-side-nav-search .wy-dropdown>a img.logo{display:block;margin:0 auto;height:auto;width:auto;border-radius:0;max-width:100%;background:transparent}.wy-side-nav-search>a.icon img.logo,.wy-side-nav-search .wy-dropdown>a.icon img.logo{margin-top:0.85em}.wy-nav .wy-menu-vertical header{color:#2980B9}.wy-nav .wy-menu-vertical a{color:#b3b3b3}.wy-nav .wy-menu-vertical a:hover{background-color:#2980B9;color:#fff}[data-menu-wrap]{-webkit-transition:all 0.2s ease-in;-moz-transition:all 0.2s ease-in;transition:all 0.2s ease-in;position:absolute;opacity:1;width:100%;opacity:0}[data-menu-wrap].move-center{left:0;right:auto;opacity:1}[data-menu-wrap].move-left{right:auto;left:-100%;opacity:0}[data-menu-wrap].move-right{right:-100%;left:auto;opacity:0}.wy-body-for-nav{background:left repeat-y #fcfcfc;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoTWFjaW50b3NoKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDoxOERBMTRGRDBFMUUxMUUzODUwMkJCOThDMEVFNURFMCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDoxOERBMTRGRTBFMUUxMUUzODUwMkJCOThDMEVFNURFMCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjE4REExNEZCMEUxRTExRTM4NTAyQkI5OEMwRUU1REUwIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjE4REExNEZDMEUxRTExRTM4NTAyQkI5OEMwRUU1REUwIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+EwrlwAAAAA5JREFUeNpiMDU0BAgwAAE2AJgB9BnaAAAAAElFTkSuQmCC);background-size:300px 1px}.wy-grid-for-nav{position:absolute;width:100%;height:100%}.wy-nav-side{position:fixed;top:0;bottom:0;left:0;padding-bottom:2em;width:300px;overflow-x:hidden;overflow-y:scroll;min-height:100%;background:#343131;z-index:200}.wy-nav-top{display:none;background:#2980B9;color:#fff;padding:0.4045em 0.809em;position:relative;line-height:50px;text-align:center;font-size:100%;*zoom:1}.wy-nav-top:before,.wy-nav-top:after{display:table;content:""}.wy-nav-top:after{clear:both}.wy-nav-top a{color:#fff;font-weight:bold}.wy-nav-top img{margin-right:12px;height:45px;width:45px;background-color:#2980B9;padding:5px;border-radius:100%}.wy-nav-top i{font-size:30px;float:left;cursor:pointer}.wy-nav-content-wrap{margin-left:300px;background:#fcfcfc;min-height:100%}.wy-nav-content{padding:1.618em 3.236em;height:100%;max-width:800px;margin:auto}.wy-body-mask{position:fixed;width:100%;height:100%;background:rgba(0,0,0,0.2);display:none;z-index:499}.wy-body-mask.on{display:block}footer{color:#999}footer p{margin-bottom:12px}.rst-footer-buttons{*zoom:1}.rst-footer-buttons:before,.rst-footer-buttons:after{display:table;content:""}.rst-footer-buttons:after{clear:both}#search-results .search li{margin-bottom:24px;border-bottom:solid 1px #e1e4e5;padding-bottom:24px}#search-results .search li:first-child{border-top:solid 1px #e1e4e5;padding-top:24px}#search-results .search li a{font-size:120%;margin-bottom:12px;display:inline-block}#search-results .context{color:gray;font-size:90%}@media screen and (max-width: 768px){.wy-body-for-nav{background:#fcfcfc}.wy-nav-top{display:block}.wy-nav-side{left:-300px}.wy-nav-side.shift{width:85%;left:0}.wy-nav-content-wrap{margin-left:0}.wy-nav-content-wrap .wy-nav-content{padding:1.618em}.wy-nav-content-wrap.shift{position:fixed;min-width:100%;left:85%;top:0;height:100%;overflow:hidden}}@media screen and (min-width: 1400px){.wy-nav-content-wrap{background:rgba(0,0,0,0.05)}.wy-nav-content{margin:0;background:#fcfcfc}}@media print{.rst-versions,footer,.wy-nav-side{display:none}.wy-nav-content-wrap{margin-left:0}}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;border-top:solid 10px #343131;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;z-index:400}.rst-versions a{color:#2980B9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27AE60;*zoom:1}.rst-versions .rst-current-version:before,.rst-versions .rst-current-version:after{display:table;content:""}.rst-versions .rst-current-version:after{clear:both}.rst-versions .rst-current-version .fa,.rst-versions .rst-current-version .wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li .rst-versions .rst-current-version span.toctree-expand,.rst-versions .rst-current-version .rst-content .admonition-title,.rst-content .rst-versions .rst-current-version .admonition-title,.rst-versions .rst-current-version .rst-content h1 .headerlink,.rst-content h1 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content h2 .headerlink,.rst-content h2 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content p.caption .headerlink,.rst-content p.caption .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content h3 .headerlink,.rst-content h3 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content h4 .headerlink,.rst-content h4 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content h5 .headerlink,.rst-content h5 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content h6 .headerlink,.rst-content h6 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content dl dt .headerlink,.rst-content dl dt .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content tt.download span:first-child,.rst-content tt.download .rst-versions .rst-current-version span:first-child,.rst-versions .rst-current-version .rst-content code.download span:first-child,.rst-content code.download .rst-versions .rst-current-version span:first-child,.rst-versions .rst-current-version .icon{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#E74C3C;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#F1C40F;color:#000}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:gray;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:solid 1px #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px}.rst-versions.rst-badge .icon-book{float:none}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge .rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width: 768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}img{width:100%;height:auto}}.rst-content img{max-width:100%;height:auto !important}.rst-content div.figure{margin-bottom:24px}.rst-content div.figure.align-center{text-align:center}.rst-content .section>img,.rst-content .section>a>img{margin-bottom:24px}.rst-content blockquote{margin-left:24px;line-height:24px;margin-bottom:24px}.rst-content .note .last,.rst-content .attention .last,.rst-content .caution .last,.rst-content .danger .last,.rst-content .error .last,.rst-content .hint .last,.rst-content .important .last,.rst-content .tip .last,.rst-content .warning .last,.rst-content .seealso .last,.rst-content .admonition-todo .last{margin-bottom:0}.rst-content .admonition-title:before{margin-right:4px}.rst-content .admonition table{border-color:rgba(0,0,0,0.1)}.rst-content .admonition table td,.rst-content .admonition table th{background:transparent !important;border-color:rgba(0,0,0,0.1) !important}.rst-content .section ol.loweralpha,.rst-content .section ol.loweralpha li{list-style:lower-alpha}.rst-content .section ol.upperalpha,.rst-content .section ol.upperalpha li{list-style:upper-alpha}.rst-content .section ol p,.rst-content .section ul p{margin-bottom:12px}.rst-content .line-block{margin-left:24px}.rst-content .topic-title{font-weight:bold;margin-bottom:12px}.rst-content .toc-backref{color:#404040}.rst-content .align-right{float:right;margin:0px 0px 24px 24px}.rst-content .align-left{float:left;margin:0px 24px 24px 0px}.rst-content .align-center{margin:auto;display:block}.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content p.caption .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content dl dt .headerlink,.rst-content p.caption .headerlink{display:none;visibility:hidden;font-size:14px}.rst-content h1 .headerlink:after,.rst-content h2 .headerlink:after,.rst-content p.caption .headerlink:after,.rst-content h3 .headerlink:after,.rst-content h4 .headerlink:after,.rst-content h5 .headerlink:after,.rst-content h6 .headerlink:after,.rst-content dl dt .headerlink:after,.rst-content p.caption .headerlink:after{visibility:visible;content:"";font-family:FontAwesome;display:inline-block}.rst-content h1:hover .headerlink,.rst-content h2:hover .headerlink,.rst-content p.caption:hover .headerlink,.rst-content h3:hover .headerlink,.rst-content h4:hover .headerlink,.rst-content h5:hover .headerlink,.rst-content h6:hover .headerlink,.rst-content dl dt:hover .headerlink,.rst-content p.caption:hover .headerlink{display:inline-block}.rst-content .sidebar{float:right;width:40%;display:block;margin:0 0 24px 24px;padding:24px;background:#f3f6f6;border:solid 1px #e1e4e5}.rst-content .sidebar p,.rst-content .sidebar ul,.rst-content .sidebar dl{font-size:90%}.rst-content .sidebar .last{margin-bottom:0}.rst-content .sidebar .sidebar-title{display:block;font-family:"Roboto Slab","ff-tisa-web-pro","Georgia",Arial,sans-serif;font-weight:bold;background:#e1e4e5;padding:6px 12px;margin:-24px;margin-bottom:24px;font-size:100%}.rst-content .highlighted{background:#F1C40F;display:inline-block;font-weight:bold;padding:0 6px}.rst-content .footnote-reference,.rst-content .citation-reference{vertical-align:super;font-size:90%}.rst-content table.docutils.citation,.rst-content table.docutils.footnote{background:none;border:none;color:#999}.rst-content table.docutils.citation td,.rst-content table.docutils.citation tr,.rst-content table.docutils.footnote td,.rst-content table.docutils.footnote tr{border:none;background-color:transparent !important;white-space:normal}.rst-content table.docutils.citation td.label,.rst-content table.docutils.footnote td.label{padding-left:0;padding-right:0;vertical-align:top}.rst-content table.field-list{border:none}.rst-content table.field-list td{border:none;padding-top:5px}.rst-content table.field-list td>strong{display:inline-block;margin-top:3px}.rst-content table.field-list .field-name{padding-right:10px;text-align:left;white-space:nowrap}.rst-content table.field-list .field-body{text-align:left;padding-left:0}.rst-content tt,.rst-content tt,.rst-content code{color:#000}.rst-content tt big,.rst-content tt em,.rst-content tt big,.rst-content code big,.rst-content tt em,.rst-content code em{font-size:100% !important;line-height:normal}.rst-content tt .xref,a .rst-content tt,.rst-content tt .xref,.rst-content code .xref,a .rst-content tt,a .rst-content code{font-weight:bold}.rst-content a tt,.rst-content a tt,.rst-content a code{color:#2980B9}.rst-content dl{margin-bottom:24px}.rst-content dl dt{font-weight:bold}.rst-content dl p,.rst-content dl table,.rst-content dl ul,.rst-content dl ol{margin-bottom:12px !important}.rst-content dl dd{margin:0 0 12px 24px}.rst-content dl:not(.docutils){margin-bottom:24px}.rst-content dl:not(.docutils) dt{display:inline-block;margin:6px 0;font-size:90%;line-height:normal;background:#e7f2fa;color:#2980B9;border-top:solid 3px #6ab0de;padding:6px;position:relative}.rst-content dl:not(.docutils) dt:before{color:#6ab0de}.rst-content dl:not(.docutils) dt .headerlink{color:#404040;font-size:100% !important}.rst-content dl:not(.docutils) dl dt{margin-bottom:6px;border:none;border-left:solid 3px #ccc;background:#f0f0f0;color:gray}.rst-content dl:not(.docutils) dl dt .headerlink{color:#404040;font-size:100% !important}.rst-content dl:not(.docutils) dt:first-child{margin-top:0}.rst-content dl:not(.docutils) tt,.rst-content dl:not(.docutils) tt,.rst-content dl:not(.docutils) code{font-weight:bold}.rst-content dl:not(.docutils) tt.descname,.rst-content dl:not(.docutils) tt.descclassname,.rst-content dl:not(.docutils) tt.descname,.rst-content dl:not(.docutils) code.descname,.rst-content dl:not(.docutils) tt.descclassname,.rst-content dl:not(.docutils) code.descclassname{background-color:transparent;border:none;padding:0;font-size:100% !important}.rst-content dl:not(.docutils) tt.descname,.rst-content dl:not(.docutils) tt.descname,.rst-content dl:not(.docutils) code.descname{font-weight:bold}.rst-content dl:not(.docutils) .optional{display:inline-block;padding:0 4px;color:#000;font-weight:bold}.rst-content dl:not(.docutils) .property{display:inline-block;padding-right:8px}.rst-content .viewcode-link,.rst-content .viewcode-back{display:inline-block;color:#27AE60;font-size:80%;padding-left:24px}.rst-content .viewcode-back{display:block;float:right}.rst-content p.rubric{margin-bottom:12px;font-weight:bold}.rst-content tt.download,.rst-content code.download{background:inherit;padding:inherit;font-family:inherit;font-size:inherit;color:inherit;border:inherit;white-space:inherit}.rst-content tt.download span:first-child:before,.rst-content code.download span:first-child:before{margin-right:4px}@media screen and (max-width: 480px){.rst-content .sidebar{width:100%}}span[id*='MathJax-Span']{color:#404040}.math{text-align:center}@font-face{font-family:"Inconsolata";font-style:normal;font-weight:400;src:local("Inconsolata"),url(../fonts/Inconsolata.ttf) format("truetype")}@font-face{font-family:"Inconsolata";font-style:normal;font-weight:700;src:local("Inconsolata Bold"),local("Inconsolata-Bold"),url(../fonts/Inconsolata-Bold.ttf) format("truetype")}@font-face{font-family:"Lato";font-style:normal;font-weight:400;src:local("Lato Regular"),local("Lato-Regular"),url(../fonts/Lato-Regular.ttf) format("truetype")}@font-face{font-family:"Lato";font-style:normal;font-weight:700;src:local("Lato Bold"),local("Lato-Bold"),url(../fonts/Lato-Bold.ttf) format("truetype")}@font-face{font-family:"Roboto Slab";font-style:normal;font-weight:400;src:local("Roboto Slab Regular"),local("RobotoSlab-Regular"),url(../fonts/RobotoSlab-Regular.ttf) format("truetype")}@font-face{font-family:"Roboto Slab";font-style:normal;font-weight:700;src:local("Roboto Slab Bold"),local("RobotoSlab-Bold"),url(../fonts/RobotoSlab-Bold.ttf) format("truetype")} + */@font-face{font-family:'FontAwesome';src:url("../fonts/fontawesome-webfont.eot?v=4.2.0");src:url("../fonts/fontawesome-webfont.eot?#iefix&v=4.2.0") format("embedded-opentype"),url("../fonts/fontawesome-webfont.woff?v=4.2.0") format("woff"),url("../fonts/fontawesome-webfont.ttf?v=4.2.0") format("truetype"),url("../fonts/fontawesome-webfont.svg?v=4.2.0#fontawesomeregular") format("svg");font-weight:normal;font-style:normal}.fa,.wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li.current>a span.toctree-expand,.rst-content .admonition-title,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content dl dt .headerlink,.rst-content p.caption .headerlink,.rst-content tt.download span:first-child,.rst-content code.download span:first-child,.icon{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333em;line-height:0.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14286em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14286em;width:2.14286em;top:0.14286em;text-align:center}.fa-li.fa-lg{left:-1.85714em}.fa-border{padding:.2em .25em .15em;border:solid 0.08em #eee;border-radius:.1em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left,.wy-menu-vertical li span.pull-left.toctree-expand,.wy-menu-vertical li.on a span.pull-left.toctree-expand,.wy-menu-vertical li.current>a span.pull-left.toctree-expand,.rst-content .pull-left.admonition-title,.rst-content h1 .pull-left.headerlink,.rst-content h2 .pull-left.headerlink,.rst-content h3 .pull-left.headerlink,.rst-content h4 .pull-left.headerlink,.rst-content h5 .pull-left.headerlink,.rst-content h6 .pull-left.headerlink,.rst-content dl dt .pull-left.headerlink,.rst-content p.caption .pull-left.headerlink,.rst-content tt.download span.pull-left:first-child,.rst-content code.download span.pull-left:first-child,.pull-left.icon{margin-right:.3em}.fa.pull-right,.wy-menu-vertical li span.pull-right.toctree-expand,.wy-menu-vertical li.on a span.pull-right.toctree-expand,.wy-menu-vertical li.current>a span.pull-right.toctree-expand,.rst-content .pull-right.admonition-title,.rst-content h1 .pull-right.headerlink,.rst-content h2 .pull-right.headerlink,.rst-content h3 .pull-right.headerlink,.rst-content h4 .pull-right.headerlink,.rst-content h5 .pull-right.headerlink,.rst-content h6 .pull-right.headerlink,.rst-content dl dt .pull-right.headerlink,.rst-content p.caption .pull-right.headerlink,.rst-content tt.download span.pull-right:first-child,.rst-content code.download span.pull-right:first-child,.pull-right.icon{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0);-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before,.icon-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-remove:before,.fa-close:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-gear:before,.fa-cog:before{content:""}.fa-trash-o:before{content:""}.fa-home:before,.icon-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before,.rst-content tt.download span:first-child:before,.rst-content code.download span:first-child:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-rotate-right:before,.fa-repeat:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before,.icon-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before{content:""}.fa-check-circle:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.rst-content .admonition-title:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before,.icon-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-warning:before,.fa-exclamation-triangle:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-gears:before,.fa-cogs:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook:before{content:""}.fa-github:before,.icon-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before,.icon-circle-arrow-left:before{content:""}.fa-arrow-circle-right:before,.icon-circle-arrow-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before,.icon-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-save:before,.fa-floppy-o:before{content:""}.fa-square:before{content:""}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before,.wy-dropdown .caret:before,.icon-caret-down:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-unsorted:before,.fa-sort:before{content:""}.fa-sort-down:before,.fa-sort-desc:before{content:""}.fa-sort-up:before,.fa-sort-asc:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-legal:before,.fa-gavel:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-flash:before,.fa-bolt:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-paste:before,.fa-clipboard:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-unlink:before,.fa-chain-broken:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before,.wy-menu-vertical li.on a span.toctree-expand:before,.wy-menu-vertical li.current>a span.toctree-expand:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:""}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:""}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:""}.fa-euro:before,.fa-eur:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-rupee:before,.fa-inr:before{content:""}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:""}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:""}.fa-won:before,.fa-krw:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before,.icon-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-turkish-lira:before,.fa-try:before{content:""}.fa-plus-square-o:before,.wy-menu-vertical li span.toctree-expand:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-institution:before,.fa-bank:before,.fa-university:before{content:""}.fa-mortar-board:before,.fa-graduation-cap:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:""}.fa-file-zip-o:before,.fa-file-archive-o:before{content:""}.fa-file-sound-o:before,.fa-file-audio-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-rebel:before{content:""}.fa-ge:before,.fa-empire:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-hacker-news:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-send:before,.fa-paper-plane:before{content:""}.fa-send-o:before,.fa-paper-plane-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:""}.fa-meanpath:before{content:""}.fa,.wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li.current>a span.toctree-expand,.rst-content .admonition-title,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content dl dt .headerlink,.rst-content p.caption .headerlink,.rst-content tt.download span:first-child,.rst-content code.download span:first-child,.icon,.wy-dropdown .caret,.wy-inline-validate.wy-inline-validate-success .wy-input-context,.wy-inline-validate.wy-inline-validate-danger .wy-input-context,.wy-inline-validate.wy-inline-validate-warning .wy-input-context,.wy-inline-validate.wy-inline-validate-info .wy-input-context{font-family:inherit}.fa:before,.wy-menu-vertical li span.toctree-expand:before,.wy-menu-vertical li.on a span.toctree-expand:before,.wy-menu-vertical li.current>a span.toctree-expand:before,.rst-content .admonition-title:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content dl dt .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content tt.download span:first-child:before,.rst-content code.download span:first-child:before,.icon:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before{font-family:"FontAwesome";display:inline-block;font-style:normal;font-weight:normal;line-height:1;text-decoration:inherit}a .fa,a .wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li a span.toctree-expand,.wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li.current>a span.toctree-expand,a .rst-content .admonition-title,.rst-content a .admonition-title,a .rst-content h1 .headerlink,.rst-content h1 a .headerlink,a .rst-content h2 .headerlink,.rst-content h2 a .headerlink,a .rst-content h3 .headerlink,.rst-content h3 a .headerlink,a .rst-content h4 .headerlink,.rst-content h4 a .headerlink,a .rst-content h5 .headerlink,.rst-content h5 a .headerlink,a .rst-content h6 .headerlink,.rst-content h6 a .headerlink,a .rst-content dl dt .headerlink,.rst-content dl dt a .headerlink,a .rst-content p.caption .headerlink,.rst-content p.caption a .headerlink,a .rst-content tt.download span:first-child,.rst-content tt.download a span:first-child,a .rst-content code.download span:first-child,.rst-content code.download a span:first-child,a .icon{display:inline-block;text-decoration:inherit}.btn .fa,.btn .wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li .btn span.toctree-expand,.btn .wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li.on a .btn span.toctree-expand,.btn .wy-menu-vertical li.current>a span.toctree-expand,.wy-menu-vertical li.current>a .btn span.toctree-expand,.btn .rst-content .admonition-title,.rst-content .btn .admonition-title,.btn .rst-content h1 .headerlink,.rst-content h1 .btn .headerlink,.btn .rst-content h2 .headerlink,.rst-content h2 .btn .headerlink,.btn .rst-content h3 .headerlink,.rst-content h3 .btn .headerlink,.btn .rst-content h4 .headerlink,.rst-content h4 .btn .headerlink,.btn .rst-content h5 .headerlink,.rst-content h5 .btn .headerlink,.btn .rst-content h6 .headerlink,.rst-content h6 .btn .headerlink,.btn .rst-content dl dt .headerlink,.rst-content dl dt .btn .headerlink,.btn .rst-content p.caption .headerlink,.rst-content p.caption .btn .headerlink,.btn .rst-content tt.download span:first-child,.rst-content tt.download .btn span:first-child,.btn .rst-content code.download span:first-child,.rst-content code.download .btn span:first-child,.btn .icon,.nav .fa,.nav .wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li .nav span.toctree-expand,.nav .wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li.on a .nav span.toctree-expand,.nav .wy-menu-vertical li.current>a span.toctree-expand,.wy-menu-vertical li.current>a .nav span.toctree-expand,.nav .rst-content .admonition-title,.rst-content .nav .admonition-title,.nav .rst-content h1 .headerlink,.rst-content h1 .nav .headerlink,.nav .rst-content h2 .headerlink,.rst-content h2 .nav .headerlink,.nav .rst-content h3 .headerlink,.rst-content h3 .nav .headerlink,.nav .rst-content h4 .headerlink,.rst-content h4 .nav .headerlink,.nav .rst-content h5 .headerlink,.rst-content h5 .nav .headerlink,.nav .rst-content h6 .headerlink,.rst-content h6 .nav .headerlink,.nav .rst-content dl dt .headerlink,.rst-content dl dt .nav .headerlink,.nav .rst-content p.caption .headerlink,.rst-content p.caption .nav .headerlink,.nav .rst-content tt.download span:first-child,.rst-content tt.download .nav span:first-child,.nav .rst-content code.download span:first-child,.rst-content code.download .nav span:first-child,.nav .icon{display:inline}.btn .fa.fa-large,.btn .wy-menu-vertical li span.fa-large.toctree-expand,.wy-menu-vertical li .btn span.fa-large.toctree-expand,.btn .rst-content .fa-large.admonition-title,.rst-content .btn .fa-large.admonition-title,.btn .rst-content h1 .fa-large.headerlink,.rst-content h1 .btn .fa-large.headerlink,.btn .rst-content h2 .fa-large.headerlink,.rst-content h2 .btn .fa-large.headerlink,.btn .rst-content h3 .fa-large.headerlink,.rst-content h3 .btn .fa-large.headerlink,.btn .rst-content h4 .fa-large.headerlink,.rst-content h4 .btn .fa-large.headerlink,.btn .rst-content h5 .fa-large.headerlink,.rst-content h5 .btn .fa-large.headerlink,.btn .rst-content h6 .fa-large.headerlink,.rst-content h6 .btn .fa-large.headerlink,.btn .rst-content dl dt .fa-large.headerlink,.rst-content dl dt .btn .fa-large.headerlink,.btn .rst-content p.caption .fa-large.headerlink,.rst-content p.caption .btn .fa-large.headerlink,.btn .rst-content tt.download span.fa-large:first-child,.rst-content tt.download .btn span.fa-large:first-child,.btn .rst-content code.download span.fa-large:first-child,.rst-content code.download .btn span.fa-large:first-child,.btn .fa-large.icon,.nav .fa.fa-large,.nav .wy-menu-vertical li span.fa-large.toctree-expand,.wy-menu-vertical li .nav span.fa-large.toctree-expand,.nav .rst-content .fa-large.admonition-title,.rst-content .nav .fa-large.admonition-title,.nav .rst-content h1 .fa-large.headerlink,.rst-content h1 .nav .fa-large.headerlink,.nav .rst-content h2 .fa-large.headerlink,.rst-content h2 .nav .fa-large.headerlink,.nav .rst-content h3 .fa-large.headerlink,.rst-content h3 .nav .fa-large.headerlink,.nav .rst-content h4 .fa-large.headerlink,.rst-content h4 .nav .fa-large.headerlink,.nav .rst-content h5 .fa-large.headerlink,.rst-content h5 .nav .fa-large.headerlink,.nav .rst-content h6 .fa-large.headerlink,.rst-content h6 .nav .fa-large.headerlink,.nav .rst-content dl dt .fa-large.headerlink,.rst-content dl dt .nav .fa-large.headerlink,.nav .rst-content p.caption .fa-large.headerlink,.rst-content p.caption .nav .fa-large.headerlink,.nav .rst-content tt.download span.fa-large:first-child,.rst-content tt.download .nav span.fa-large:first-child,.nav .rst-content code.download span.fa-large:first-child,.rst-content code.download .nav span.fa-large:first-child,.nav .fa-large.icon{line-height:0.9em}.btn .fa.fa-spin,.btn .wy-menu-vertical li span.fa-spin.toctree-expand,.wy-menu-vertical li .btn span.fa-spin.toctree-expand,.btn .rst-content .fa-spin.admonition-title,.rst-content .btn .fa-spin.admonition-title,.btn .rst-content h1 .fa-spin.headerlink,.rst-content h1 .btn .fa-spin.headerlink,.btn .rst-content h2 .fa-spin.headerlink,.rst-content h2 .btn .fa-spin.headerlink,.btn .rst-content h3 .fa-spin.headerlink,.rst-content h3 .btn .fa-spin.headerlink,.btn .rst-content h4 .fa-spin.headerlink,.rst-content h4 .btn .fa-spin.headerlink,.btn .rst-content h5 .fa-spin.headerlink,.rst-content h5 .btn .fa-spin.headerlink,.btn .rst-content h6 .fa-spin.headerlink,.rst-content h6 .btn .fa-spin.headerlink,.btn .rst-content dl dt .fa-spin.headerlink,.rst-content dl dt .btn .fa-spin.headerlink,.btn .rst-content p.caption .fa-spin.headerlink,.rst-content p.caption .btn .fa-spin.headerlink,.btn .rst-content tt.download span.fa-spin:first-child,.rst-content tt.download .btn span.fa-spin:first-child,.btn .rst-content code.download span.fa-spin:first-child,.rst-content code.download .btn span.fa-spin:first-child,.btn .fa-spin.icon,.nav .fa.fa-spin,.nav .wy-menu-vertical li span.fa-spin.toctree-expand,.wy-menu-vertical li .nav span.fa-spin.toctree-expand,.nav .rst-content .fa-spin.admonition-title,.rst-content .nav .fa-spin.admonition-title,.nav .rst-content h1 .fa-spin.headerlink,.rst-content h1 .nav .fa-spin.headerlink,.nav .rst-content h2 .fa-spin.headerlink,.rst-content h2 .nav .fa-spin.headerlink,.nav .rst-content h3 .fa-spin.headerlink,.rst-content h3 .nav .fa-spin.headerlink,.nav .rst-content h4 .fa-spin.headerlink,.rst-content h4 .nav .fa-spin.headerlink,.nav .rst-content h5 .fa-spin.headerlink,.rst-content h5 .nav .fa-spin.headerlink,.nav .rst-content h6 .fa-spin.headerlink,.rst-content h6 .nav .fa-spin.headerlink,.nav .rst-content dl dt .fa-spin.headerlink,.rst-content dl dt .nav .fa-spin.headerlink,.nav .rst-content p.caption .fa-spin.headerlink,.rst-content p.caption .nav .fa-spin.headerlink,.nav .rst-content tt.download span.fa-spin:first-child,.rst-content tt.download .nav span.fa-spin:first-child,.nav .rst-content code.download span.fa-spin:first-child,.rst-content code.download .nav span.fa-spin:first-child,.nav .fa-spin.icon{display:inline-block}.btn.fa:before,.wy-menu-vertical li span.btn.toctree-expand:before,.rst-content .btn.admonition-title:before,.rst-content h1 .btn.headerlink:before,.rst-content h2 .btn.headerlink:before,.rst-content h3 .btn.headerlink:before,.rst-content h4 .btn.headerlink:before,.rst-content h5 .btn.headerlink:before,.rst-content h6 .btn.headerlink:before,.rst-content dl dt .btn.headerlink:before,.rst-content p.caption .btn.headerlink:before,.rst-content tt.download span.btn:first-child:before,.rst-content code.download span.btn:first-child:before,.btn.icon:before{opacity:0.5;-webkit-transition:opacity 0.05s ease-in;-moz-transition:opacity 0.05s ease-in;transition:opacity 0.05s ease-in}.btn.fa:hover:before,.wy-menu-vertical li span.btn.toctree-expand:hover:before,.rst-content .btn.admonition-title:hover:before,.rst-content h1 .btn.headerlink:hover:before,.rst-content h2 .btn.headerlink:hover:before,.rst-content h3 .btn.headerlink:hover:before,.rst-content h4 .btn.headerlink:hover:before,.rst-content h5 .btn.headerlink:hover:before,.rst-content h6 .btn.headerlink:hover:before,.rst-content dl dt .btn.headerlink:hover:before,.rst-content p.caption .btn.headerlink:hover:before,.rst-content tt.download span.btn:first-child:hover:before,.rst-content code.download span.btn:first-child:hover:before,.btn.icon:hover:before{opacity:1}.btn-mini .fa:before,.btn-mini .wy-menu-vertical li span.toctree-expand:before,.wy-menu-vertical li .btn-mini span.toctree-expand:before,.btn-mini .rst-content .admonition-title:before,.rst-content .btn-mini .admonition-title:before,.btn-mini .rst-content h1 .headerlink:before,.rst-content h1 .btn-mini .headerlink:before,.btn-mini .rst-content h2 .headerlink:before,.rst-content h2 .btn-mini .headerlink:before,.btn-mini .rst-content h3 .headerlink:before,.rst-content h3 .btn-mini .headerlink:before,.btn-mini .rst-content h4 .headerlink:before,.rst-content h4 .btn-mini .headerlink:before,.btn-mini .rst-content h5 .headerlink:before,.rst-content h5 .btn-mini .headerlink:before,.btn-mini .rst-content h6 .headerlink:before,.rst-content h6 .btn-mini .headerlink:before,.btn-mini .rst-content dl dt .headerlink:before,.rst-content dl dt .btn-mini .headerlink:before,.btn-mini .rst-content p.caption .headerlink:before,.rst-content p.caption .btn-mini .headerlink:before,.btn-mini .rst-content tt.download span:first-child:before,.rst-content tt.download .btn-mini span:first-child:before,.btn-mini .rst-content code.download span:first-child:before,.rst-content code.download .btn-mini span:first-child:before,.btn-mini .icon:before{font-size:14px;vertical-align:-15%}.wy-alert,.rst-content .note,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .warning,.rst-content .seealso,.rst-content .admonition-todo{padding:12px;line-height:24px;margin-bottom:24px;background:#e7f2fa}.wy-alert-title,.rst-content .admonition-title{color:#fff;font-weight:bold;display:block;color:#fff;background:#6ab0de;margin:-12px;padding:6px 12px;margin-bottom:12px}.wy-alert.wy-alert-danger,.rst-content .wy-alert-danger.note,.rst-content .wy-alert-danger.attention,.rst-content .wy-alert-danger.caution,.rst-content .danger,.rst-content .error,.rst-content .wy-alert-danger.hint,.rst-content .wy-alert-danger.important,.rst-content .wy-alert-danger.tip,.rst-content .wy-alert-danger.warning,.rst-content .wy-alert-danger.seealso,.rst-content .wy-alert-danger.admonition-todo{background:#fdf3f2}.wy-alert.wy-alert-danger .wy-alert-title,.rst-content .wy-alert-danger.note .wy-alert-title,.rst-content .wy-alert-danger.attention .wy-alert-title,.rst-content .wy-alert-danger.caution .wy-alert-title,.rst-content .danger .wy-alert-title,.rst-content .error .wy-alert-title,.rst-content .wy-alert-danger.hint .wy-alert-title,.rst-content .wy-alert-danger.important .wy-alert-title,.rst-content .wy-alert-danger.tip .wy-alert-title,.rst-content .wy-alert-danger.warning .wy-alert-title,.rst-content .wy-alert-danger.seealso .wy-alert-title,.rst-content .wy-alert-danger.admonition-todo .wy-alert-title,.wy-alert.wy-alert-danger .rst-content .admonition-title,.rst-content .wy-alert.wy-alert-danger .admonition-title,.rst-content .wy-alert-danger.note .admonition-title,.rst-content .wy-alert-danger.attention .admonition-title,.rst-content .wy-alert-danger.caution .admonition-title,.rst-content .danger .admonition-title,.rst-content .error .admonition-title,.rst-content .wy-alert-danger.hint .admonition-title,.rst-content .wy-alert-danger.important .admonition-title,.rst-content .wy-alert-danger.tip .admonition-title,.rst-content .wy-alert-danger.warning .admonition-title,.rst-content .wy-alert-danger.seealso .admonition-title,.rst-content .wy-alert-danger.admonition-todo .admonition-title{background:#f29f97}.wy-alert.wy-alert-warning,.rst-content .wy-alert-warning.note,.rst-content .attention,.rst-content .caution,.rst-content .wy-alert-warning.danger,.rst-content .wy-alert-warning.error,.rst-content .wy-alert-warning.hint,.rst-content .wy-alert-warning.important,.rst-content .wy-alert-warning.tip,.rst-content .warning,.rst-content .wy-alert-warning.seealso,.rst-content .admonition-todo{background:#ffedcc}.wy-alert.wy-alert-warning .wy-alert-title,.rst-content .wy-alert-warning.note .wy-alert-title,.rst-content .attention .wy-alert-title,.rst-content .caution .wy-alert-title,.rst-content .wy-alert-warning.danger .wy-alert-title,.rst-content .wy-alert-warning.error .wy-alert-title,.rst-content .wy-alert-warning.hint .wy-alert-title,.rst-content .wy-alert-warning.important .wy-alert-title,.rst-content .wy-alert-warning.tip .wy-alert-title,.rst-content .warning .wy-alert-title,.rst-content .wy-alert-warning.seealso .wy-alert-title,.rst-content .admonition-todo .wy-alert-title,.wy-alert.wy-alert-warning .rst-content .admonition-title,.rst-content .wy-alert.wy-alert-warning .admonition-title,.rst-content .wy-alert-warning.note .admonition-title,.rst-content .attention .admonition-title,.rst-content .caution .admonition-title,.rst-content .wy-alert-warning.danger .admonition-title,.rst-content .wy-alert-warning.error .admonition-title,.rst-content .wy-alert-warning.hint .admonition-title,.rst-content .wy-alert-warning.important .admonition-title,.rst-content .wy-alert-warning.tip .admonition-title,.rst-content .warning .admonition-title,.rst-content .wy-alert-warning.seealso .admonition-title,.rst-content .admonition-todo .admonition-title{background:#f0b37e}.wy-alert.wy-alert-info,.rst-content .note,.rst-content .wy-alert-info.attention,.rst-content .wy-alert-info.caution,.rst-content .wy-alert-info.danger,.rst-content .wy-alert-info.error,.rst-content .wy-alert-info.hint,.rst-content .wy-alert-info.important,.rst-content .wy-alert-info.tip,.rst-content .wy-alert-info.warning,.rst-content .seealso,.rst-content .wy-alert-info.admonition-todo{background:#e7f2fa}.wy-alert.wy-alert-info .wy-alert-title,.rst-content .note .wy-alert-title,.rst-content .wy-alert-info.attention .wy-alert-title,.rst-content .wy-alert-info.caution .wy-alert-title,.rst-content .wy-alert-info.danger .wy-alert-title,.rst-content .wy-alert-info.error .wy-alert-title,.rst-content .wy-alert-info.hint .wy-alert-title,.rst-content .wy-alert-info.important .wy-alert-title,.rst-content .wy-alert-info.tip .wy-alert-title,.rst-content .wy-alert-info.warning .wy-alert-title,.rst-content .seealso .wy-alert-title,.rst-content .wy-alert-info.admonition-todo .wy-alert-title,.wy-alert.wy-alert-info .rst-content .admonition-title,.rst-content .wy-alert.wy-alert-info .admonition-title,.rst-content .note .admonition-title,.rst-content .wy-alert-info.attention .admonition-title,.rst-content .wy-alert-info.caution .admonition-title,.rst-content .wy-alert-info.danger .admonition-title,.rst-content .wy-alert-info.error .admonition-title,.rst-content .wy-alert-info.hint .admonition-title,.rst-content .wy-alert-info.important .admonition-title,.rst-content .wy-alert-info.tip .admonition-title,.rst-content .wy-alert-info.warning .admonition-title,.rst-content .seealso .admonition-title,.rst-content .wy-alert-info.admonition-todo .admonition-title{background:#6ab0de}.wy-alert.wy-alert-success,.rst-content .wy-alert-success.note,.rst-content .wy-alert-success.attention,.rst-content .wy-alert-success.caution,.rst-content .wy-alert-success.danger,.rst-content .wy-alert-success.error,.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .wy-alert-success.warning,.rst-content .wy-alert-success.seealso,.rst-content .wy-alert-success.admonition-todo{background:#dbfaf4}.wy-alert.wy-alert-success .wy-alert-title,.rst-content .wy-alert-success.note .wy-alert-title,.rst-content .wy-alert-success.attention .wy-alert-title,.rst-content .wy-alert-success.caution .wy-alert-title,.rst-content .wy-alert-success.danger .wy-alert-title,.rst-content .wy-alert-success.error .wy-alert-title,.rst-content .hint .wy-alert-title,.rst-content .important .wy-alert-title,.rst-content .tip .wy-alert-title,.rst-content .wy-alert-success.warning .wy-alert-title,.rst-content .wy-alert-success.seealso .wy-alert-title,.rst-content .wy-alert-success.admonition-todo .wy-alert-title,.wy-alert.wy-alert-success .rst-content .admonition-title,.rst-content .wy-alert.wy-alert-success .admonition-title,.rst-content .wy-alert-success.note .admonition-title,.rst-content .wy-alert-success.attention .admonition-title,.rst-content .wy-alert-success.caution .admonition-title,.rst-content .wy-alert-success.danger .admonition-title,.rst-content .wy-alert-success.error .admonition-title,.rst-content .hint .admonition-title,.rst-content .important .admonition-title,.rst-content .tip .admonition-title,.rst-content .wy-alert-success.warning .admonition-title,.rst-content .wy-alert-success.seealso .admonition-title,.rst-content .wy-alert-success.admonition-todo .admonition-title{background:#1abc9c}.wy-alert.wy-alert-neutral,.rst-content .wy-alert-neutral.note,.rst-content .wy-alert-neutral.attention,.rst-content .wy-alert-neutral.caution,.rst-content .wy-alert-neutral.danger,.rst-content .wy-alert-neutral.error,.rst-content .wy-alert-neutral.hint,.rst-content .wy-alert-neutral.important,.rst-content .wy-alert-neutral.tip,.rst-content .wy-alert-neutral.warning,.rst-content .wy-alert-neutral.seealso,.rst-content .wy-alert-neutral.admonition-todo{background:#f3f6f6}.wy-alert.wy-alert-neutral .wy-alert-title,.rst-content .wy-alert-neutral.note .wy-alert-title,.rst-content .wy-alert-neutral.attention .wy-alert-title,.rst-content .wy-alert-neutral.caution .wy-alert-title,.rst-content .wy-alert-neutral.danger .wy-alert-title,.rst-content .wy-alert-neutral.error .wy-alert-title,.rst-content .wy-alert-neutral.hint .wy-alert-title,.rst-content .wy-alert-neutral.important .wy-alert-title,.rst-content .wy-alert-neutral.tip .wy-alert-title,.rst-content .wy-alert-neutral.warning .wy-alert-title,.rst-content .wy-alert-neutral.seealso .wy-alert-title,.rst-content .wy-alert-neutral.admonition-todo .wy-alert-title,.wy-alert.wy-alert-neutral .rst-content .admonition-title,.rst-content .wy-alert.wy-alert-neutral .admonition-title,.rst-content .wy-alert-neutral.note .admonition-title,.rst-content .wy-alert-neutral.attention .admonition-title,.rst-content .wy-alert-neutral.caution .admonition-title,.rst-content .wy-alert-neutral.danger .admonition-title,.rst-content .wy-alert-neutral.error .admonition-title,.rst-content .wy-alert-neutral.hint .admonition-title,.rst-content .wy-alert-neutral.important .admonition-title,.rst-content .wy-alert-neutral.tip .admonition-title,.rst-content .wy-alert-neutral.warning .admonition-title,.rst-content .wy-alert-neutral.seealso .admonition-title,.rst-content .wy-alert-neutral.admonition-todo .admonition-title{color:#404040;background:#e1e4e5}.wy-alert.wy-alert-neutral a,.rst-content .wy-alert-neutral.note a,.rst-content .wy-alert-neutral.attention a,.rst-content .wy-alert-neutral.caution a,.rst-content .wy-alert-neutral.danger a,.rst-content .wy-alert-neutral.error a,.rst-content .wy-alert-neutral.hint a,.rst-content .wy-alert-neutral.important a,.rst-content .wy-alert-neutral.tip a,.rst-content .wy-alert-neutral.warning a,.rst-content .wy-alert-neutral.seealso a,.rst-content .wy-alert-neutral.admonition-todo a{color:#2980B9}.wy-alert p:last-child,.rst-content .note p:last-child,.rst-content .attention p:last-child,.rst-content .caution p:last-child,.rst-content .danger p:last-child,.rst-content .error p:last-child,.rst-content .hint p:last-child,.rst-content .important p:last-child,.rst-content .tip p:last-child,.rst-content .warning p:last-child,.rst-content .seealso p:last-child,.rst-content .admonition-todo p:last-child{margin-bottom:0}.wy-tray-container{position:fixed;bottom:0px;left:0;z-index:600}.wy-tray-container li{display:block;width:300px;background:transparent;color:#fff;text-align:center;box-shadow:0 5px 5px 0 rgba(0,0,0,0.1);padding:0 24px;min-width:20%;opacity:0;height:0;line-height:56px;overflow:hidden;-webkit-transition:all 0.3s ease-in;-moz-transition:all 0.3s ease-in;transition:all 0.3s ease-in}.wy-tray-container li.wy-tray-item-success{background:#27AE60}.wy-tray-container li.wy-tray-item-info{background:#2980B9}.wy-tray-container li.wy-tray-item-warning{background:#E67E22}.wy-tray-container li.wy-tray-item-danger{background:#E74C3C}.wy-tray-container li.on{opacity:1;height:56px}@media screen and (max-width: 768px){.wy-tray-container{bottom:auto;top:0;width:100%}.wy-tray-container li{width:100%}}button{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle;cursor:pointer;line-height:normal;-webkit-appearance:button;*overflow:visible}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}button[disabled]{cursor:default}.btn{display:inline-block;border-radius:2px;line-height:normal;white-space:nowrap;text-align:center;cursor:pointer;font-size:100%;padding:6px 12px 8px 12px;color:#fff;border:1px solid rgba(0,0,0,0.1);background-color:#27AE60;text-decoration:none;font-weight:normal;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;box-shadow:0px 1px 2px -1px rgba(255,255,255,0.5) inset,0px -2px 0px 0px rgba(0,0,0,0.1) inset;outline-none:false;vertical-align:middle;*display:inline;zoom:1;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transition:all 0.1s linear;-moz-transition:all 0.1s linear;transition:all 0.1s linear}.btn-hover{background:#2e8ece;color:#fff}.btn:hover{background:#2cc36b;color:#fff}.btn:focus{background:#2cc36b;outline:0}.btn:active{box-shadow:0px -1px 0px 0px rgba(0,0,0,0.05) inset,0px 2px 0px 0px rgba(0,0,0,0.1) inset;padding:8px 12px 6px 12px}.btn:visited{color:#fff}.btn:disabled{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:0.4;cursor:not-allowed;box-shadow:none}.btn-disabled{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:0.4;cursor:not-allowed;box-shadow:none}.btn-disabled:hover,.btn-disabled:focus,.btn-disabled:active{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:0.4;cursor:not-allowed;box-shadow:none}.btn::-moz-focus-inner{padding:0;border:0}.btn-small{font-size:80%}.btn-info{background-color:#2980B9 !important}.btn-info:hover{background-color:#2e8ece !important}.btn-neutral{background-color:#f3f6f6 !important;color:#404040 !important}.btn-neutral:hover{background-color:#e5ebeb !important;color:#404040}.btn-neutral:visited{color:#404040 !important}.btn-success{background-color:#27AE60 !important}.btn-success:hover{background-color:#295 !important}.btn-danger{background-color:#E74C3C !important}.btn-danger:hover{background-color:#ea6153 !important}.btn-warning{background-color:#E67E22 !important}.btn-warning:hover{background-color:#e98b39 !important}.btn-invert{background-color:#222}.btn-invert:hover{background-color:#2f2f2f !important}.btn-link{background-color:transparent !important;color:#2980B9;box-shadow:none;border-color:transparent !important}.btn-link:hover{background-color:transparent !important;color:#409ad5 !important;box-shadow:none}.btn-link:active{background-color:transparent !important;color:#409ad5 !important;box-shadow:none}.btn-link:visited{color:#9B59B6}.wy-btn-group .btn,.wy-control .btn{vertical-align:middle}.wy-btn-group{margin-bottom:24px;*zoom:1}.wy-btn-group:before,.wy-btn-group:after{display:table;content:""}.wy-btn-group:after{clear:both}.wy-dropdown{position:relative;display:inline-block}.wy-dropdown-active .wy-dropdown-menu{display:block}.wy-dropdown-menu{position:absolute;left:0;display:none;float:left;top:100%;min-width:100%;background:#fcfcfc;z-index:100;border:solid 1px #cfd7dd;box-shadow:0 2px 2px 0 rgba(0,0,0,0.1);padding:12px}.wy-dropdown-menu>dd>a{display:block;clear:both;color:#404040;white-space:nowrap;font-size:90%;padding:0 12px;cursor:pointer}.wy-dropdown-menu>dd>a:hover{background:#2980B9;color:#fff}.wy-dropdown-menu>dd.divider{border-top:solid 1px #cfd7dd;margin:6px 0}.wy-dropdown-menu>dd.search{padding-bottom:12px}.wy-dropdown-menu>dd.search input[type="search"]{width:100%}.wy-dropdown-menu>dd.call-to-action{background:#e3e3e3;text-transform:uppercase;font-weight:500;font-size:80%}.wy-dropdown-menu>dd.call-to-action:hover{background:#e3e3e3}.wy-dropdown-menu>dd.call-to-action .btn{color:#fff}.wy-dropdown.wy-dropdown-up .wy-dropdown-menu{bottom:100%;top:auto;left:auto;right:0}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu{background:#fcfcfc;margin-top:2px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a{padding:6px 12px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a:hover{background:#2980B9;color:#fff}.wy-dropdown.wy-dropdown-left .wy-dropdown-menu{right:0;left:auto;text-align:right}.wy-dropdown-arrow:before{content:" ";border-bottom:5px solid #f5f5f5;border-left:5px solid transparent;border-right:5px solid transparent;position:absolute;display:block;top:-4px;left:50%;margin-left:-3px}.wy-dropdown-arrow.wy-dropdown-arrow-left:before{left:11px}.wy-form-stacked select{display:block}.wy-form-aligned input,.wy-form-aligned textarea,.wy-form-aligned select,.wy-form-aligned .wy-help-inline,.wy-form-aligned label{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-form-aligned .wy-control-group>label{display:inline-block;vertical-align:middle;width:10em;margin:6px 12px 0 0;float:left}.wy-form-aligned .wy-control{float:left}.wy-form-aligned .wy-control label{display:block}.wy-form-aligned .wy-control select{margin-top:6px}fieldset{border:0;margin:0;padding:0}legend{display:block;width:100%;border:0;padding:0;white-space:normal;margin-bottom:24px;font-size:150%;*margin-left:-7px}label{display:block;margin:0 0 0.3125em 0;color:#333;font-size:90%}input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}.wy-control-group{margin-bottom:24px;*zoom:1;max-width:68em;margin-left:auto;margin-right:auto;*zoom:1}.wy-control-group:before,.wy-control-group:after{display:table;content:""}.wy-control-group:after{clear:both}.wy-control-group:before,.wy-control-group:after{display:table;content:""}.wy-control-group:after{clear:both}.wy-control-group.wy-control-group-required>label:after{content:" *";color:#E74C3C}.wy-control-group .wy-form-full,.wy-control-group .wy-form-halves,.wy-control-group .wy-form-thirds{padding-bottom:12px}.wy-control-group .wy-form-full select,.wy-control-group .wy-form-halves select,.wy-control-group .wy-form-thirds select{width:100%}.wy-control-group .wy-form-full input[type="text"],.wy-control-group .wy-form-full input[type="password"],.wy-control-group .wy-form-full input[type="email"],.wy-control-group .wy-form-full input[type="url"],.wy-control-group .wy-form-full input[type="date"],.wy-control-group .wy-form-full input[type="month"],.wy-control-group .wy-form-full input[type="time"],.wy-control-group .wy-form-full input[type="datetime"],.wy-control-group .wy-form-full input[type="datetime-local"],.wy-control-group .wy-form-full input[type="week"],.wy-control-group .wy-form-full input[type="number"],.wy-control-group .wy-form-full input[type="search"],.wy-control-group .wy-form-full input[type="tel"],.wy-control-group .wy-form-full input[type="color"],.wy-control-group .wy-form-halves input[type="text"],.wy-control-group .wy-form-halves input[type="password"],.wy-control-group .wy-form-halves input[type="email"],.wy-control-group .wy-form-halves input[type="url"],.wy-control-group .wy-form-halves input[type="date"],.wy-control-group .wy-form-halves input[type="month"],.wy-control-group .wy-form-halves input[type="time"],.wy-control-group .wy-form-halves input[type="datetime"],.wy-control-group .wy-form-halves input[type="datetime-local"],.wy-control-group .wy-form-halves input[type="week"],.wy-control-group .wy-form-halves input[type="number"],.wy-control-group .wy-form-halves input[type="search"],.wy-control-group .wy-form-halves input[type="tel"],.wy-control-group .wy-form-halves input[type="color"],.wy-control-group .wy-form-thirds input[type="text"],.wy-control-group .wy-form-thirds input[type="password"],.wy-control-group .wy-form-thirds input[type="email"],.wy-control-group .wy-form-thirds input[type="url"],.wy-control-group .wy-form-thirds input[type="date"],.wy-control-group .wy-form-thirds input[type="month"],.wy-control-group .wy-form-thirds input[type="time"],.wy-control-group .wy-form-thirds input[type="datetime"],.wy-control-group .wy-form-thirds input[type="datetime-local"],.wy-control-group .wy-form-thirds input[type="week"],.wy-control-group .wy-form-thirds input[type="number"],.wy-control-group .wy-form-thirds input[type="search"],.wy-control-group .wy-form-thirds input[type="tel"],.wy-control-group .wy-form-thirds input[type="color"]{width:100%}.wy-control-group .wy-form-full{float:left;display:block;margin-right:2.35765%;width:100%;margin-right:0}.wy-control-group .wy-form-full:last-child{margin-right:0}.wy-control-group .wy-form-halves{float:left;display:block;margin-right:2.35765%;width:48.82117%}.wy-control-group .wy-form-halves:last-child{margin-right:0}.wy-control-group .wy-form-halves:nth-of-type(2n){margin-right:0}.wy-control-group .wy-form-halves:nth-of-type(2n+1){clear:left}.wy-control-group .wy-form-thirds{float:left;display:block;margin-right:2.35765%;width:31.76157%}.wy-control-group .wy-form-thirds:last-child{margin-right:0}.wy-control-group .wy-form-thirds:nth-of-type(3n){margin-right:0}.wy-control-group .wy-form-thirds:nth-of-type(3n+1){clear:left}.wy-control-group.wy-control-group-no-input .wy-control{margin:6px 0 0 0;font-size:90%}.wy-control-no-input{display:inline-block;margin:6px 0 0 0;font-size:90%}.wy-control-group.fluid-input input[type="text"],.wy-control-group.fluid-input input[type="password"],.wy-control-group.fluid-input input[type="email"],.wy-control-group.fluid-input input[type="url"],.wy-control-group.fluid-input input[type="date"],.wy-control-group.fluid-input input[type="month"],.wy-control-group.fluid-input input[type="time"],.wy-control-group.fluid-input input[type="datetime"],.wy-control-group.fluid-input input[type="datetime-local"],.wy-control-group.fluid-input input[type="week"],.wy-control-group.fluid-input input[type="number"],.wy-control-group.fluid-input input[type="search"],.wy-control-group.fluid-input input[type="tel"],.wy-control-group.fluid-input input[type="color"]{width:100%}.wy-form-message-inline{display:inline-block;padding-left:0.3em;color:#666;vertical-align:middle;font-size:90%}.wy-form-message{display:block;color:#999;font-size:70%;margin-top:0.3125em;font-style:italic}.wy-form-message p{font-size:inherit;font-style:italic;margin-bottom:6px}.wy-form-message p:last-child{margin-bottom:0}input{line-height:normal}input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;*overflow:visible}input[type="text"],input[type="password"],input[type="email"],input[type="url"],input[type="date"],input[type="month"],input[type="time"],input[type="datetime"],input[type="datetime-local"],input[type="week"],input[type="number"],input[type="search"],input[type="tel"],input[type="color"]{-webkit-appearance:none;padding:6px;display:inline-block;border:1px solid #ccc;font-size:80%;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;box-shadow:inset 0 1px 3px #ddd;border-radius:0;-webkit-transition:border 0.3s linear;-moz-transition:border 0.3s linear;transition:border 0.3s linear}input[type="datetime-local"]{padding:0.34375em 0.625em}input[disabled]{cursor:default}input[type="checkbox"],input[type="radio"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0;margin-right:0.3125em;*height:13px;*width:13px}input[type="search"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}input[type="text"]:focus,input[type="password"]:focus,input[type="email"]:focus,input[type="url"]:focus,input[type="date"]:focus,input[type="month"]:focus,input[type="time"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="week"]:focus,input[type="number"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="color"]:focus{outline:0;outline:thin dotted \9;border-color:#333}input.no-focus:focus{border-color:#ccc !important}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:1px auto #129FEA}input[type="text"][disabled],input[type="password"][disabled],input[type="email"][disabled],input[type="url"][disabled],input[type="date"][disabled],input[type="month"][disabled],input[type="time"][disabled],input[type="datetime"][disabled],input[type="datetime-local"][disabled],input[type="week"][disabled],input[type="number"][disabled],input[type="search"][disabled],input[type="tel"][disabled],input[type="color"][disabled]{cursor:not-allowed;background-color:#fafafa}input:focus:invalid,textarea:focus:invalid,select:focus:invalid{color:#E74C3C;border:1px solid #E74C3C}input:focus:invalid:focus,textarea:focus:invalid:focus,select:focus:invalid:focus{border-color:#E74C3C}input[type="file"]:focus:invalid:focus,input[type="radio"]:focus:invalid:focus,input[type="checkbox"]:focus:invalid:focus{outline-color:#E74C3C}input.wy-input-large{padding:12px;font-size:100%}textarea{overflow:auto;vertical-align:top;width:100%;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif}select,textarea{padding:0.5em 0.625em;display:inline-block;border:1px solid #ccc;font-size:80%;box-shadow:inset 0 1px 3px #ddd;-webkit-transition:border 0.3s linear;-moz-transition:border 0.3s linear;transition:border 0.3s linear}select{border:1px solid #ccc;background-color:#fff}select[multiple]{height:auto}select:focus,textarea:focus{outline:0}select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{cursor:not-allowed;background-color:#fafafa}input[type="radio"][disabled],input[type="checkbox"][disabled]{cursor:not-allowed}.wy-checkbox,.wy-radio{margin:6px 0;color:#404040;display:block}.wy-checkbox input,.wy-radio input{vertical-align:baseline}.wy-form-message-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-input-prefix,.wy-input-suffix{white-space:nowrap;padding:6px}.wy-input-prefix .wy-input-context,.wy-input-suffix .wy-input-context{line-height:27px;padding:0 8px;display:inline-block;font-size:80%;background-color:#f3f6f6;border:solid 1px #ccc;color:#999}.wy-input-suffix .wy-input-context{border-left:0}.wy-input-prefix .wy-input-context{border-right:0}.wy-switch{width:36px;height:12px;margin:12px 0;position:relative;border-radius:4px;background:#ccc;cursor:pointer;-webkit-transition:all 0.2s ease-in-out;-moz-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out}.wy-switch:before{position:absolute;content:"";display:block;width:18px;height:18px;border-radius:4px;background:#999;left:-3px;top:-3px;-webkit-transition:all 0.2s ease-in-out;-moz-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out}.wy-switch:after{content:"false";position:absolute;left:48px;display:block;font-size:12px;color:#ccc}.wy-switch.active{background:#1e8449}.wy-switch.active:before{left:24px;background:#27AE60}.wy-switch.active:after{content:"true"}.wy-switch.disabled,.wy-switch.active.disabled{cursor:not-allowed}.wy-control-group.wy-control-group-error .wy-form-message,.wy-control-group.wy-control-group-error>label{color:#E74C3C}.wy-control-group.wy-control-group-error input[type="text"],.wy-control-group.wy-control-group-error input[type="password"],.wy-control-group.wy-control-group-error input[type="email"],.wy-control-group.wy-control-group-error input[type="url"],.wy-control-group.wy-control-group-error input[type="date"],.wy-control-group.wy-control-group-error input[type="month"],.wy-control-group.wy-control-group-error input[type="time"],.wy-control-group.wy-control-group-error input[type="datetime"],.wy-control-group.wy-control-group-error input[type="datetime-local"],.wy-control-group.wy-control-group-error input[type="week"],.wy-control-group.wy-control-group-error input[type="number"],.wy-control-group.wy-control-group-error input[type="search"],.wy-control-group.wy-control-group-error input[type="tel"],.wy-control-group.wy-control-group-error input[type="color"]{border:solid 1px #E74C3C}.wy-control-group.wy-control-group-error textarea{border:solid 1px #E74C3C}.wy-inline-validate{white-space:nowrap}.wy-inline-validate .wy-input-context{padding:0.5em 0.625em;display:inline-block;font-size:80%}.wy-inline-validate.wy-inline-validate-success .wy-input-context{color:#27AE60}.wy-inline-validate.wy-inline-validate-danger .wy-input-context{color:#E74C3C}.wy-inline-validate.wy-inline-validate-warning .wy-input-context{color:#E67E22}.wy-inline-validate.wy-inline-validate-info .wy-input-context{color:#2980B9}.rotate-90{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.rotate-180{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.rotate-270{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.mirror{-webkit-transform:scaleX(-1);-moz-transform:scaleX(-1);-ms-transform:scaleX(-1);-o-transform:scaleX(-1);transform:scaleX(-1)}.mirror.rotate-90{-webkit-transform:scaleX(-1) rotate(90deg);-moz-transform:scaleX(-1) rotate(90deg);-ms-transform:scaleX(-1) rotate(90deg);-o-transform:scaleX(-1) rotate(90deg);transform:scaleX(-1) rotate(90deg)}.mirror.rotate-180{-webkit-transform:scaleX(-1) rotate(180deg);-moz-transform:scaleX(-1) rotate(180deg);-ms-transform:scaleX(-1) rotate(180deg);-o-transform:scaleX(-1) rotate(180deg);transform:scaleX(-1) rotate(180deg)}.mirror.rotate-270{-webkit-transform:scaleX(-1) rotate(270deg);-moz-transform:scaleX(-1) rotate(270deg);-ms-transform:scaleX(-1) rotate(270deg);-o-transform:scaleX(-1) rotate(270deg);transform:scaleX(-1) rotate(270deg)}@media only screen and (max-width: 480px){.wy-form button[type="submit"]{margin:0.7em 0 0}.wy-form input[type="text"],.wy-form input[type="password"],.wy-form input[type="email"],.wy-form input[type="url"],.wy-form input[type="date"],.wy-form input[type="month"],.wy-form input[type="time"],.wy-form input[type="datetime"],.wy-form input[type="datetime-local"],.wy-form input[type="week"],.wy-form input[type="number"],.wy-form input[type="search"],.wy-form input[type="tel"],.wy-form input[type="color"]{margin-bottom:0.3em;display:block}.wy-form label{margin-bottom:0.3em;display:block}.wy-form input[type="password"],.wy-form input[type="email"],.wy-form input[type="url"],.wy-form input[type="date"],.wy-form input[type="month"],.wy-form input[type="time"],.wy-form input[type="datetime"],.wy-form input[type="datetime-local"],.wy-form input[type="week"],.wy-form input[type="number"],.wy-form input[type="search"],.wy-form input[type="tel"],.wy-form input[type="color"]{margin-bottom:0}.wy-form-aligned .wy-control-group label{margin-bottom:0.3em;text-align:left;display:block;width:100%}.wy-form-aligned .wy-control{margin:1.5em 0 0 0}.wy-form .wy-help-inline,.wy-form-message-inline,.wy-form-message{display:block;font-size:80%;padding:6px 0}}@media screen and (max-width: 768px){.tablet-hide{display:none}}@media screen and (max-width: 480px){.mobile-hide{display:none}}.float-left{float:left}.float-right{float:right}.full-width{width:100%}.wy-table,.rst-content table.docutils,.rst-content table.field-list{border-collapse:collapse;border-spacing:0;empty-cells:show;margin-bottom:24px}.wy-table caption,.rst-content table.docutils caption,.rst-content table.field-list caption{color:#000;font:italic 85%/1 arial,sans-serif;padding:1em 0;text-align:center}.wy-table td,.rst-content table.docutils td,.rst-content table.field-list td,.wy-table th,.rst-content table.docutils th,.rst-content table.field-list th{font-size:90%;margin:0;overflow:visible;padding:8px 16px}.wy-table td:first-child,.rst-content table.docutils td:first-child,.rst-content table.field-list td:first-child,.wy-table th:first-child,.rst-content table.docutils th:first-child,.rst-content table.field-list th:first-child{border-left-width:0}.wy-table thead,.rst-content table.docutils thead,.rst-content table.field-list thead{color:#000;text-align:left;vertical-align:bottom;white-space:nowrap}.wy-table thead th,.rst-content table.docutils thead th,.rst-content table.field-list thead th{font-weight:bold;border-bottom:solid 2px #e1e4e5}.wy-table td,.rst-content table.docutils td,.rst-content table.field-list td{background-color:transparent;vertical-align:middle}.wy-table td p,.rst-content table.docutils td p,.rst-content table.field-list td p{line-height:18px}.wy-table td p:last-child,.rst-content table.docutils td p:last-child,.rst-content table.field-list td p:last-child{margin-bottom:0}.wy-table .wy-table-cell-min,.rst-content table.docutils .wy-table-cell-min,.rst-content table.field-list .wy-table-cell-min{width:1%;padding-right:0}.wy-table .wy-table-cell-min input[type=checkbox],.rst-content table.docutils .wy-table-cell-min input[type=checkbox],.rst-content table.field-list .wy-table-cell-min input[type=checkbox],.wy-table .wy-table-cell-min input[type=checkbox],.rst-content table.docutils .wy-table-cell-min input[type=checkbox],.rst-content table.field-list .wy-table-cell-min input[type=checkbox]{margin:0}.wy-table-secondary{color:gray;font-size:90%}.wy-table-tertiary{color:gray;font-size:80%}.wy-table-odd td,.wy-table-striped tr:nth-child(2n-1) td,.rst-content table.docutils:not(.field-list) tr:nth-child(2n-1) td{background-color:#f3f6f6}.wy-table-backed{background-color:#f3f6f6}.wy-table-bordered-all,.rst-content table.docutils{border:1px solid #e1e4e5}.wy-table-bordered-all td,.rst-content table.docutils td{border-bottom:1px solid #e1e4e5;border-left:1px solid #e1e4e5}.wy-table-bordered-all tbody>tr:last-child td,.rst-content table.docutils tbody>tr:last-child td{border-bottom-width:0}.wy-table-bordered{border:1px solid #e1e4e5}.wy-table-bordered-rows td{border-bottom:1px solid #e1e4e5}.wy-table-bordered-rows tbody>tr:last-child td{border-bottom-width:0}.wy-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.wy-table-horizontal td,.wy-table-horizontal th{border-width:0 0 1px 0;border-bottom:1px solid #e1e4e5}.wy-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.wy-table-responsive{margin-bottom:24px;max-width:100%;overflow:auto}.wy-table-responsive table{margin-bottom:0 !important}.wy-table-responsive table td,.wy-table-responsive table th{white-space:nowrap}a{color:#2980B9;text-decoration:none;cursor:pointer}a:hover{color:#3091d1}a:visited{color:#9B59B6}html{height:100%;overflow-x:hidden}body{font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;font-weight:normal;color:#404040;min-height:100%;overflow-x:hidden;background:#edf0f2}.wy-text-left{text-align:left}.wy-text-center{text-align:center}.wy-text-right{text-align:right}.wy-text-large{font-size:120%}.wy-text-normal{font-size:100%}.wy-text-small,small{font-size:80%}.wy-text-strike{text-decoration:line-through}.wy-text-warning{color:#E67E22 !important}a.wy-text-warning:hover{color:#eb9950 !important}.wy-text-info{color:#2980B9 !important}a.wy-text-info:hover{color:#409ad5 !important}.wy-text-success{color:#27AE60 !important}a.wy-text-success:hover{color:#36d278 !important}.wy-text-danger{color:#E74C3C !important}a.wy-text-danger:hover{color:#ed7669 !important}.wy-text-neutral{color:#404040 !important}a.wy-text-neutral:hover{color:#595959 !important}h1,h2,.rst-content .toctree-wrapper p.caption,h3,h4,h5,h6,legend{margin-top:0;font-weight:700;font-family:"Roboto Slab","ff-tisa-web-pro","Georgia",Arial,sans-serif}p{line-height:24px;margin:0;font-size:16px;margin-bottom:24px}h1{font-size:175%}h2,.rst-content .toctree-wrapper p.caption{font-size:150%}h3{font-size:125%}h4{font-size:115%}h5{font-size:110%}h6{font-size:100%}hr{display:block;height:1px;border:0;border-top:1px solid #e1e4e5;margin:24px 0;padding:0}code,.rst-content tt,.rst-content code{white-space:nowrap;max-width:100%;background:#fff;border:solid 1px #e1e4e5;font-size:75%;padding:0 5px;font-family:Consolas,"Andale Mono WT","Andale Mono","Lucida Console","Lucida Sans Typewriter","DejaVu Sans Mono","Bitstream Vera Sans Mono","Liberation Mono","Nimbus Mono L",Monaco,"Courier New",Courier,monospace;color:#E74C3C;overflow-x:auto}code.code-large,.rst-content tt.code-large{font-size:90%}.wy-plain-list-disc,.rst-content .section ul,.rst-content .toctree-wrapper ul,article ul{list-style:disc;line-height:24px;margin-bottom:24px}.wy-plain-list-disc li,.rst-content .section ul li,.rst-content .toctree-wrapper ul li,article ul li{list-style:disc;margin-left:24px}.wy-plain-list-disc li p:last-child,.rst-content .section ul li p:last-child,.rst-content .toctree-wrapper ul li p:last-child,article ul li p:last-child{margin-bottom:0}.wy-plain-list-disc li ul,.rst-content .section ul li ul,.rst-content .toctree-wrapper ul li ul,article ul li ul{margin-bottom:0}.wy-plain-list-disc li li,.rst-content .section ul li li,.rst-content .toctree-wrapper ul li li,article ul li li{list-style:circle}.wy-plain-list-disc li li li,.rst-content .section ul li li li,.rst-content .toctree-wrapper ul li li li,article ul li li li{list-style:square}.wy-plain-list-disc li ol li,.rst-content .section ul li ol li,.rst-content .toctree-wrapper ul li ol li,article ul li ol li{list-style:decimal}.wy-plain-list-decimal,.rst-content .section ol,.rst-content ol.arabic,article ol{list-style:decimal;line-height:24px;margin-bottom:24px}.wy-plain-list-decimal li,.rst-content .section ol li,.rst-content ol.arabic li,article ol li{list-style:decimal;margin-left:24px}.wy-plain-list-decimal li p:last-child,.rst-content .section ol li p:last-child,.rst-content ol.arabic li p:last-child,article ol li p:last-child{margin-bottom:0}.wy-plain-list-decimal li ul,.rst-content .section ol li ul,.rst-content ol.arabic li ul,article ol li ul{margin-bottom:0}.wy-plain-list-decimal li ul li,.rst-content .section ol li ul li,.rst-content ol.arabic li ul li,article ol li ul li{list-style:disc}.codeblock-example{border:1px solid #e1e4e5;border-bottom:none;padding:24px;padding-top:48px;font-weight:500;background:#fff;position:relative}.codeblock-example:after{content:"Example";position:absolute;top:0px;left:0px;background:#9B59B6;color:#fff;padding:6px 12px}.codeblock-example.prettyprint-example-only{border:1px solid #e1e4e5;margin-bottom:24px}.codeblock,pre.literal-block,.rst-content .literal-block,.rst-content pre.literal-block,div[class^='highlight']{border:1px solid #e1e4e5;padding:0px;overflow-x:auto;background:#fff;margin:1px 0 24px 0}.codeblock div[class^='highlight'],pre.literal-block div[class^='highlight'],.rst-content .literal-block div[class^='highlight'],div[class^='highlight'] div[class^='highlight']{border:none;background:none;margin:0}div[class^='highlight'] td.code{width:100%}.linenodiv pre{border-right:solid 1px #e6e9ea;margin:0;padding:12px 12px;font-family:Consolas,"Andale Mono WT","Andale Mono","Lucida Console","Lucida Sans Typewriter","DejaVu Sans Mono","Bitstream Vera Sans Mono","Liberation Mono","Nimbus Mono L",Monaco,"Courier New",Courier,monospace;font-size:12px;line-height:1.5;color:#d9d9d9}div[class^='highlight'] pre{white-space:pre;margin:0;padding:12px 12px;font-family:Consolas,"Andale Mono WT","Andale Mono","Lucida Console","Lucida Sans Typewriter","DejaVu Sans Mono","Bitstream Vera Sans Mono","Liberation Mono","Nimbus Mono L",Monaco,"Courier New",Courier,monospace;font-size:12px;line-height:1.5;display:block;overflow:auto;color:#404040}@media print{.codeblock,pre.literal-block,.rst-content .literal-block,.rst-content pre.literal-block,div[class^='highlight'],div[class^='highlight'] pre{white-space:pre-wrap}}.hll{background-color:#ffc;margin:0 -12px;padding:0 12px;display:block}.c{color:#998;font-style:italic}.err{color:#a61717;background-color:#e3d2d2}.k{font-weight:bold}.o{font-weight:bold}.cm{color:#998;font-style:italic}.cp{color:#999;font-weight:bold}.c1{color:#998;font-style:italic}.cs{color:#999;font-weight:bold;font-style:italic}.gd{color:#000;background-color:#fdd}.gd .x{color:#000;background-color:#faa}.ge{font-style:italic}.gr{color:#a00}.gh{color:#999}.gi{color:#000;background-color:#dfd}.gi .x{color:#000;background-color:#afa}.go{color:#888}.gp{color:#555}.gs{font-weight:bold}.gu{color:purple;font-weight:bold}.gt{color:#a00}.kc{font-weight:bold}.kd{font-weight:bold}.kn{font-weight:bold}.kp{font-weight:bold}.kr{font-weight:bold}.kt{color:#458;font-weight:bold}.m{color:#099}.s{color:#d14}.n{color:#333}.na{color:teal}.nb{color:#0086b3}.nc{color:#458;font-weight:bold}.no{color:teal}.ni{color:purple}.ne{color:#900;font-weight:bold}.nf{color:#900;font-weight:bold}.nn{color:#555}.nt{color:navy}.nv{color:teal}.ow{font-weight:bold}.w{color:#bbb}.mf{color:#099}.mh{color:#099}.mi{color:#099}.mo{color:#099}.sb{color:#d14}.sc{color:#d14}.sd{color:#d14}.s2{color:#d14}.se{color:#d14}.sh{color:#d14}.si{color:#d14}.sx{color:#d14}.sr{color:#009926}.s1{color:#d14}.ss{color:#990073}.bp{color:#999}.vc{color:teal}.vg{color:teal}.vi{color:teal}.il{color:#099}.gc{color:#999;background-color:#EAF2F5}.wy-breadcrumbs li{display:inline-block}.wy-breadcrumbs li.wy-breadcrumbs-aside{float:right}.wy-breadcrumbs li a{display:inline-block;padding:5px}.wy-breadcrumbs li a:first-child{padding-left:0}.wy-breadcrumbs li code,.wy-breadcrumbs li .rst-content tt,.rst-content .wy-breadcrumbs li tt{padding:5px;border:none;background:none}.wy-breadcrumbs li code.literal,.wy-breadcrumbs li .rst-content tt.literal,.rst-content .wy-breadcrumbs li tt.literal{color:#404040}.wy-breadcrumbs-extra{margin-bottom:0;color:#b3b3b3;font-size:80%;display:inline-block}@media screen and (max-width: 480px){.wy-breadcrumbs-extra{display:none}.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}@media print{.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}.wy-affix{position:fixed;top:1.618em}.wy-menu a:hover{text-decoration:none}.wy-menu-horiz{*zoom:1}.wy-menu-horiz:before,.wy-menu-horiz:after{display:table;content:""}.wy-menu-horiz:after{clear:both}.wy-menu-horiz ul,.wy-menu-horiz li{display:inline-block}.wy-menu-horiz li:hover{background:rgba(255,255,255,0.1)}.wy-menu-horiz li.divide-left{border-left:solid 1px #404040}.wy-menu-horiz li.divide-right{border-right:solid 1px #404040}.wy-menu-horiz a{height:32px;display:inline-block;line-height:32px;padding:0 16px}.wy-menu-vertical{width:300px}.wy-menu-vertical header,.wy-menu-vertical p.caption{height:32px;display:inline-block;line-height:32px;padding:0 1.618em;margin-bottom:0;display:block;font-weight:bold;text-transform:uppercase;font-size:80%;color:#555;white-space:nowrap}.wy-menu-vertical ul{margin-bottom:0}.wy-menu-vertical li.divide-top{border-top:solid 1px #404040}.wy-menu-vertical li.divide-bottom{border-bottom:solid 1px #404040}.wy-menu-vertical li.current{background:#e3e3e3}.wy-menu-vertical li.current a{color:gray;border-right:solid 1px #c9c9c9;padding:0.4045em 2.427em}.wy-menu-vertical li.current a:hover{background:#d6d6d6}.wy-menu-vertical li code,.wy-menu-vertical li .rst-content tt,.rst-content .wy-menu-vertical li tt{border:none;background:inherit;color:inherit;padding-left:0;padding-right:0}.wy-menu-vertical li span.toctree-expand{display:block;float:left;margin-left:-1.2em;font-size:0.8em;line-height:1.6em;color:#4d4d4d}.wy-menu-vertical li.on a,.wy-menu-vertical li.current>a{color:#404040;padding:0.4045em 1.618em;font-weight:bold;position:relative;background:#fcfcfc;border:none;border-bottom:solid 1px #c9c9c9;border-top:solid 1px #c9c9c9;padding-left:1.618em -4px}.wy-menu-vertical li.on a:hover,.wy-menu-vertical li.current>a:hover{background:#fcfcfc}.wy-menu-vertical li.on a:hover span.toctree-expand,.wy-menu-vertical li.current>a:hover span.toctree-expand{color:gray}.wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li.current>a span.toctree-expand{display:block;font-size:0.8em;line-height:1.6em;color:#333}.wy-menu-vertical li.toctree-l1.current li.toctree-l2>ul,.wy-menu-vertical li.toctree-l2.current li.toctree-l3>ul{display:none}.wy-menu-vertical li.toctree-l1.current li.toctree-l2.current>ul,.wy-menu-vertical li.toctree-l2.current li.toctree-l3.current>ul{display:block}.wy-menu-vertical li.toctree-l2.current>a{background:#c9c9c9;padding:0.4045em 2.427em}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{display:block;background:#c9c9c9;padding:0.4045em 4.045em}.wy-menu-vertical li.toctree-l2 a:hover span.toctree-expand{color:gray}.wy-menu-vertical li.toctree-l2 span.toctree-expand{color:#a3a3a3}.wy-menu-vertical li.toctree-l3{font-size:0.9em}.wy-menu-vertical li.toctree-l3.current>a{background:#bdbdbd;padding:0.4045em 4.045em}.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{display:block;background:#bdbdbd;padding:0.4045em 5.663em;border-top:none;border-bottom:none}.wy-menu-vertical li.toctree-l3 a:hover span.toctree-expand{color:gray}.wy-menu-vertical li.toctree-l3 span.toctree-expand{color:#969696}.wy-menu-vertical li.toctree-l4{font-size:0.9em}.wy-menu-vertical li.current ul{display:block}.wy-menu-vertical li ul{margin-bottom:0;display:none}.wy-menu-vertical .local-toc li ul{display:block}.wy-menu-vertical li ul li a{margin-bottom:0;color:#b3b3b3;font-weight:normal}.wy-menu-vertical a{display:inline-block;line-height:18px;padding:0.4045em 1.618em;display:block;position:relative;font-size:90%;color:#b3b3b3}.wy-menu-vertical a:hover{background-color:#4e4a4a;cursor:pointer}.wy-menu-vertical a:hover span.toctree-expand{color:#b3b3b3}.wy-menu-vertical a:active{background-color:#2980B9;cursor:pointer;color:#fff}.wy-menu-vertical a:active span.toctree-expand{color:#fff}.wy-side-nav-search{display:block;width:300px;padding:0.809em;margin-bottom:0.809em;z-index:200;background-color:#2980B9;text-align:center;padding:0.809em;display:block;color:#fcfcfc;margin-bottom:0.809em}.wy-side-nav-search input[type=text]{width:100%;border-radius:50px;padding:6px 12px;border-color:#2472a4}.wy-side-nav-search img{display:block;margin:auto auto 0.809em auto;height:45px;width:45px;background-color:#2980B9;padding:5px;border-radius:100%}.wy-side-nav-search>a,.wy-side-nav-search .wy-dropdown>a{color:#fcfcfc;font-size:100%;font-weight:bold;display:inline-block;padding:4px 6px;margin-bottom:0.809em}.wy-side-nav-search>a:hover,.wy-side-nav-search .wy-dropdown>a:hover{background:rgba(255,255,255,0.1)}.wy-side-nav-search>a img.logo,.wy-side-nav-search .wy-dropdown>a img.logo{display:block;margin:0 auto;height:auto;width:auto;border-radius:0;max-width:100%;background:transparent}.wy-side-nav-search>a.icon img.logo,.wy-side-nav-search .wy-dropdown>a.icon img.logo{margin-top:0.85em}.wy-side-nav-search>div.version{margin-top:-0.4045em;margin-bottom:0.809em;font-weight:normal;color:rgba(255,255,255,0.3)}.wy-nav .wy-menu-vertical header{color:#2980B9}.wy-nav .wy-menu-vertical a{color:#b3b3b3}.wy-nav .wy-menu-vertical a:hover{background-color:#2980B9;color:#fff}[data-menu-wrap]{-webkit-transition:all 0.2s ease-in;-moz-transition:all 0.2s ease-in;transition:all 0.2s ease-in;position:absolute;opacity:1;width:100%;opacity:0}[data-menu-wrap].move-center{left:0;right:auto;opacity:1}[data-menu-wrap].move-left{right:auto;left:-100%;opacity:0}[data-menu-wrap].move-right{right:-100%;left:auto;opacity:0}.wy-body-for-nav{background:left repeat-y #fcfcfc;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoTWFjaW50b3NoKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDoxOERBMTRGRDBFMUUxMUUzODUwMkJCOThDMEVFNURFMCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDoxOERBMTRGRTBFMUUxMUUzODUwMkJCOThDMEVFNURFMCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjE4REExNEZCMEUxRTExRTM4NTAyQkI5OEMwRUU1REUwIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjE4REExNEZDMEUxRTExRTM4NTAyQkI5OEMwRUU1REUwIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+EwrlwAAAAA5JREFUeNpiMDU0BAgwAAE2AJgB9BnaAAAAAElFTkSuQmCC);background-size:300px 1px}.wy-grid-for-nav{position:absolute;width:100%;height:100%}.wy-nav-side{position:fixed;top:0;bottom:0;left:0;padding-bottom:2em;width:300px;overflow-x:hidden;overflow-y:hidden;min-height:100%;background:#343131;z-index:200}.wy-side-scroll{width:320px;position:relative;overflow-x:hidden;overflow-y:scroll;height:100%}.wy-nav-top{display:none;background:#2980B9;color:#fff;padding:0.4045em 0.809em;position:relative;line-height:50px;text-align:center;font-size:100%;*zoom:1}.wy-nav-top:before,.wy-nav-top:after{display:table;content:""}.wy-nav-top:after{clear:both}.wy-nav-top a{color:#fff;font-weight:bold}.wy-nav-top img{margin-right:12px;height:45px;width:45px;background-color:#2980B9;padding:5px;border-radius:100%}.wy-nav-top i{font-size:30px;float:left;cursor:pointer}.wy-nav-content-wrap{margin-left:300px;background:#fcfcfc;min-height:100%}.wy-nav-content{padding:1.618em 3.236em;height:100%;max-width:800px;margin:auto}.wy-body-mask{position:fixed;width:100%;height:100%;background:rgba(0,0,0,0.2);display:none;z-index:499}.wy-body-mask.on{display:block}footer{color:#999}footer p{margin-bottom:12px}footer span.commit code,footer span.commit .rst-content tt,.rst-content footer span.commit tt{padding:0px;font-family:Consolas,"Andale Mono WT","Andale Mono","Lucida Console","Lucida Sans Typewriter","DejaVu Sans Mono","Bitstream Vera Sans Mono","Liberation Mono","Nimbus Mono L",Monaco,"Courier New",Courier,monospace;font-size:1em;background:none;border:none;color:#999}.rst-footer-buttons{*zoom:1}.rst-footer-buttons:before,.rst-footer-buttons:after{display:table;content:""}.rst-footer-buttons:after{clear:both}#search-results .search li{margin-bottom:24px;border-bottom:solid 1px #e1e4e5;padding-bottom:24px}#search-results .search li:first-child{border-top:solid 1px #e1e4e5;padding-top:24px}#search-results .search li a{font-size:120%;margin-bottom:12px;display:inline-block}#search-results .context{color:gray;font-size:90%}@media screen and (max-width: 768px){.wy-body-for-nav{background:#fcfcfc}.wy-nav-top{display:block}.wy-nav-side{left:-300px}.wy-nav-side.shift{width:85%;left:0}.wy-side-scroll{width:auto}.wy-side-nav-search{width:auto}.wy-menu.wy-menu-vertical{width:auto}.wy-nav-content-wrap{margin-left:0}.wy-nav-content-wrap .wy-nav-content{padding:1.618em}.wy-nav-content-wrap.shift{position:fixed;min-width:100%;left:85%;top:0;height:100%;overflow:hidden}}@media screen and (min-width: 1400px){.wy-nav-content-wrap{background:rgba(0,0,0,0.05)}.wy-nav-content{margin:0;background:#fcfcfc}}@media print{.rst-versions,footer,.wy-nav-side{display:none}.wy-nav-content-wrap{margin-left:0}}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;border-top:solid 10px #343131;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;z-index:400}.rst-versions a{color:#2980B9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27AE60;*zoom:1}.rst-versions .rst-current-version:before,.rst-versions .rst-current-version:after{display:table;content:""}.rst-versions .rst-current-version:after{clear:both}.rst-versions .rst-current-version .fa,.rst-versions .rst-current-version .wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li .rst-versions .rst-current-version span.toctree-expand,.rst-versions .rst-current-version .rst-content .admonition-title,.rst-content .rst-versions .rst-current-version .admonition-title,.rst-versions .rst-current-version .rst-content h1 .headerlink,.rst-content h1 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content h2 .headerlink,.rst-content h2 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content h3 .headerlink,.rst-content h3 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content h4 .headerlink,.rst-content h4 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content h5 .headerlink,.rst-content h5 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content h6 .headerlink,.rst-content h6 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content dl dt .headerlink,.rst-content dl dt .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content p.caption .headerlink,.rst-content p.caption .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content tt.download span:first-child,.rst-content tt.download .rst-versions .rst-current-version span:first-child,.rst-versions .rst-current-version .rst-content code.download span:first-child,.rst-content code.download .rst-versions .rst-current-version span:first-child,.rst-versions .rst-current-version .icon{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#E74C3C;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#F1C40F;color:#000}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:gray;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:solid 1px #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px}.rst-versions.rst-badge .icon-book{float:none}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge .rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width: 768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}img{width:100%;height:auto}}.rst-content img{max-width:100%;height:auto !important}.rst-content div.figure{margin-bottom:24px}.rst-content div.figure p.caption{font-style:italic}.rst-content div.figure.align-center{text-align:center}.rst-content .section>img,.rst-content .section>a>img{margin-bottom:24px}.rst-content blockquote{margin-left:24px;line-height:24px;margin-bottom:24px}.rst-content .note .last,.rst-content .attention .last,.rst-content .caution .last,.rst-content .danger .last,.rst-content .error .last,.rst-content .hint .last,.rst-content .important .last,.rst-content .tip .last,.rst-content .warning .last,.rst-content .seealso .last,.rst-content .admonition-todo .last{margin-bottom:0}.rst-content .admonition-title:before{margin-right:4px}.rst-content .admonition table{border-color:rgba(0,0,0,0.1)}.rst-content .admonition table td,.rst-content .admonition table th{background:transparent !important;border-color:rgba(0,0,0,0.1) !important}.rst-content .section ol.loweralpha,.rst-content .section ol.loweralpha li{list-style:lower-alpha}.rst-content .section ol.upperalpha,.rst-content .section ol.upperalpha li{list-style:upper-alpha}.rst-content .section ol p,.rst-content .section ul p{margin-bottom:12px}.rst-content .line-block{margin-left:24px}.rst-content .topic-title{font-weight:bold;margin-bottom:12px}.rst-content .toc-backref{color:#404040}.rst-content .align-right{float:right;margin:0px 0px 24px 24px}.rst-content .align-left{float:left;margin:0px 24px 24px 0px}.rst-content .align-center{margin:auto;display:block}.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content .toctree-wrapper p.caption .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content dl dt .headerlink,.rst-content p.caption .headerlink{display:none;visibility:hidden;font-size:14px}.rst-content h1 .headerlink:after,.rst-content h2 .headerlink:after,.rst-content .toctree-wrapper p.caption .headerlink:after,.rst-content h3 .headerlink:after,.rst-content h4 .headerlink:after,.rst-content h5 .headerlink:after,.rst-content h6 .headerlink:after,.rst-content dl dt .headerlink:after,.rst-content p.caption .headerlink:after{visibility:visible;content:"";font-family:FontAwesome;display:inline-block}.rst-content h1:hover .headerlink,.rst-content h2:hover .headerlink,.rst-content .toctree-wrapper p.caption:hover .headerlink,.rst-content h3:hover .headerlink,.rst-content h4:hover .headerlink,.rst-content h5:hover .headerlink,.rst-content h6:hover .headerlink,.rst-content dl dt:hover .headerlink,.rst-content p.caption:hover .headerlink{display:inline-block}.rst-content .sidebar{float:right;width:40%;display:block;margin:0 0 24px 24px;padding:24px;background:#f3f6f6;border:solid 1px #e1e4e5}.rst-content .sidebar p,.rst-content .sidebar ul,.rst-content .sidebar dl{font-size:90%}.rst-content .sidebar .last{margin-bottom:0}.rst-content .sidebar .sidebar-title{display:block;font-family:"Roboto Slab","ff-tisa-web-pro","Georgia",Arial,sans-serif;font-weight:bold;background:#e1e4e5;padding:6px 12px;margin:-24px;margin-bottom:24px;font-size:100%}.rst-content .highlighted{background:#F1C40F;display:inline-block;font-weight:bold;padding:0 6px}.rst-content .footnote-reference,.rst-content .citation-reference{vertical-align:super;font-size:90%}.rst-content table.docutils.citation,.rst-content table.docutils.footnote{background:none;border:none;color:#999}.rst-content table.docutils.citation td,.rst-content table.docutils.citation tr,.rst-content table.docutils.footnote td,.rst-content table.docutils.footnote tr{border:none;background-color:transparent !important;white-space:normal}.rst-content table.docutils.citation td.label,.rst-content table.docutils.footnote td.label{padding-left:0;padding-right:0;vertical-align:top}.rst-content table.docutils.citation tt,.rst-content table.docutils.citation code,.rst-content table.docutils.footnote tt,.rst-content table.docutils.footnote code{color:#555}.rst-content table.field-list{border:none}.rst-content table.field-list td{border:none;padding-top:5px}.rst-content table.field-list td>strong{display:inline-block;margin-top:3px}.rst-content table.field-list .field-name{padding-right:10px;text-align:left;white-space:nowrap}.rst-content table.field-list .field-body{text-align:left;padding-left:0}.rst-content tt,.rst-content tt,.rst-content code{color:#000;padding:2px 5px}.rst-content tt big,.rst-content tt em,.rst-content tt big,.rst-content code big,.rst-content tt em,.rst-content code em{font-size:100% !important;line-height:normal}.rst-content tt.literal,.rst-content tt.literal,.rst-content code.literal{color:#E74C3C}.rst-content tt.xref,a .rst-content tt,.rst-content tt.xref,.rst-content code.xref,a .rst-content tt,a .rst-content code{font-weight:bold;color:#404040}.rst-content a tt,.rst-content a tt,.rst-content a code{color:#2980B9}.rst-content dl{margin-bottom:24px}.rst-content dl dt{font-weight:bold}.rst-content dl p,.rst-content dl table,.rst-content dl ul,.rst-content dl ol{margin-bottom:12px !important}.rst-content dl dd{margin:0 0 12px 24px}.rst-content dl:not(.docutils){margin-bottom:24px}.rst-content dl:not(.docutils) dt{display:inline-block;margin:6px 0;font-size:90%;line-height:normal;background:#e7f2fa;color:#2980B9;border-top:solid 3px #6ab0de;padding:6px;position:relative}.rst-content dl:not(.docutils) dt:before{color:#6ab0de}.rst-content dl:not(.docutils) dt .headerlink{color:#404040;font-size:100% !important}.rst-content dl:not(.docutils) dl dt{margin-bottom:6px;border:none;border-left:solid 3px #ccc;background:#f0f0f0;color:#555}.rst-content dl:not(.docutils) dl dt .headerlink{color:#404040;font-size:100% !important}.rst-content dl:not(.docutils) dt:first-child{margin-top:0}.rst-content dl:not(.docutils) tt,.rst-content dl:not(.docutils) tt,.rst-content dl:not(.docutils) code{font-weight:bold}.rst-content dl:not(.docutils) tt.descname,.rst-content dl:not(.docutils) tt.descclassname,.rst-content dl:not(.docutils) tt.descname,.rst-content dl:not(.docutils) code.descname,.rst-content dl:not(.docutils) tt.descclassname,.rst-content dl:not(.docutils) code.descclassname{background-color:transparent;border:none;padding:0;font-size:100% !important}.rst-content dl:not(.docutils) tt.descname,.rst-content dl:not(.docutils) tt.descname,.rst-content dl:not(.docutils) code.descname{font-weight:bold}.rst-content dl:not(.docutils) .optional{display:inline-block;padding:0 4px;color:#000;font-weight:bold}.rst-content dl:not(.docutils) .property{display:inline-block;padding-right:8px}.rst-content .viewcode-link,.rst-content .viewcode-back{display:inline-block;color:#27AE60;font-size:80%;padding-left:24px}.rst-content .viewcode-back{display:block;float:right}.rst-content p.rubric{margin-bottom:12px;font-weight:bold}.rst-content tt.download,.rst-content code.download{background:inherit;padding:inherit;font-family:inherit;font-size:inherit;color:inherit;border:inherit;white-space:inherit}.rst-content tt.download span:first-child:before,.rst-content code.download span:first-child:before{margin-right:4px}@media screen and (max-width: 480px){.rst-content .sidebar{width:100%}}span[id*='MathJax-Span']{color:#404040}.math{text-align:center}@font-face{font-family:"Inconsolata";font-style:normal;font-weight:400;src:local("Inconsolata"),local("Inconsolata-Regular"),url(../fonts/Inconsolata-Regular.ttf) format("truetype")}@font-face{font-family:"Inconsolata";font-style:normal;font-weight:700;src:local("Inconsolata Bold"),local("Inconsolata-Bold"),url(../fonts/Inconsolata-Bold.ttf) format("truetype")}@font-face{font-family:"Lato";font-style:normal;font-weight:400;src:local("Lato Regular"),local("Lato-Regular"),url(../fonts/Lato-Regular.ttf) format("truetype")}@font-face{font-family:"Lato";font-style:normal;font-weight:700;src:local("Lato Bold"),local("Lato-Bold"),url(../fonts/Lato-Bold.ttf) format("truetype")}@font-face{font-family:"Roboto Slab";font-style:normal;font-weight:400;src:local("Roboto Slab Regular"),local("RobotoSlab-Regular"),url(../fonts/RobotoSlab-Regular.ttf) format("truetype")}@font-face{font-family:"Roboto Slab";font-style:normal;font-weight:700;src:local("Roboto Slab Bold"),local("RobotoSlab-Bold"),url(../fonts/RobotoSlab-Bold.ttf) format("truetype")} /*# sourceMappingURL=theme.css.map */ diff --git a/anaconda/docs/html/_static/doctools.js b/anaconda/docs/html/_static/doctools.js index c5455c9..c7bfe76 100755 --- a/anaconda/docs/html/_static/doctools.js +++ b/anaconda/docs/html/_static/doctools.js @@ -4,7 +4,7 @@ * * Sphinx JavaScript utilities for all documentation. * - * :copyright: Copyright 2007-2014 by the Sphinx team, see AUTHORS. + * :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. * :license: BSD, see LICENSE for details. * */ @@ -91,6 +91,30 @@ jQuery.fn.highlightText = function(text, className) { }); }; +/* + * backward compatibility for jQuery.browser + * This will be supported until firefox bug is fixed. + */ +if (!jQuery.browser) { + jQuery.uaMatch = function(ua) { + ua = ua.toLowerCase(); + + var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || + /(webkit)[ \/]([\w.]+)/.exec(ua) || + /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || + /(msie) ([\w.]+)/.exec(ua) || + ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || + []; + + return { + browser: match[ 1 ] || "", + version: match[ 2 ] || "0" + }; + }; + jQuery.browser = {}; + jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true; +} + /** * Small JavaScript module for the documentation. */ @@ -152,9 +176,10 @@ var Documentation = { /** * workaround a firefox stupidity + * see: https://bugzilla.mozilla.org/show_bug.cgi?id=645075 */ fixFirefoxAnchorBug : function() { - if (document.location.hash && $.browser.mozilla) + if (document.location.hash) window.setTimeout(function() { document.location.href += ''; }, 10); diff --git a/anaconda/docs/html/_static/down-pressed.png b/anaconda/docs/html/_static/down-pressed.png index 6f7ad78..7c30d00 100755 Binary files a/anaconda/docs/html/_static/down-pressed.png and b/anaconda/docs/html/_static/down-pressed.png differ diff --git a/anaconda/docs/html/_static/down.png b/anaconda/docs/html/_static/down.png index 3003a88..f48098a 100755 Binary files a/anaconda/docs/html/_static/down.png and b/anaconda/docs/html/_static/down.png differ diff --git a/anaconda/docs/html/_static/file.png b/anaconda/docs/html/_static/file.png index d18082e..254c60b 100755 Binary files a/anaconda/docs/html/_static/file.png and b/anaconda/docs/html/_static/file.png differ diff --git a/anaconda/docs/html/_static/fonts/Inconsolata-Bold.ttf b/anaconda/docs/html/_static/fonts/Inconsolata-Bold.ttf old mode 100644 new mode 100755 index 360a232..58c9fef Binary files a/anaconda/docs/html/_static/fonts/Inconsolata-Bold.ttf and b/anaconda/docs/html/_static/fonts/Inconsolata-Bold.ttf differ diff --git a/anaconda/docs/html/_static/fonts/Inconsolata-Regular.ttf b/anaconda/docs/html/_static/fonts/Inconsolata-Regular.ttf new file mode 100755 index 0000000..a87ffba Binary files /dev/null and b/anaconda/docs/html/_static/fonts/Inconsolata-Regular.ttf differ diff --git a/anaconda/docs/html/_static/fonts/Inconsolata.ttf b/anaconda/docs/html/_static/fonts/Inconsolata.ttf old mode 100644 new mode 100755 diff --git a/anaconda/docs/html/_static/fonts/Lato-Bold.ttf b/anaconda/docs/html/_static/fonts/Lato-Bold.ttf old mode 100644 new mode 100755 index 59c4843..ef5ae3b Binary files a/anaconda/docs/html/_static/fonts/Lato-Bold.ttf and b/anaconda/docs/html/_static/fonts/Lato-Bold.ttf differ diff --git a/anaconda/docs/html/_static/fonts/Lato-Regular.ttf b/anaconda/docs/html/_static/fonts/Lato-Regular.ttf old mode 100644 new mode 100755 index f01f558..adbfc46 Binary files a/anaconda/docs/html/_static/fonts/Lato-Regular.ttf and b/anaconda/docs/html/_static/fonts/Lato-Regular.ttf differ diff --git a/anaconda/docs/html/_static/fonts/RobotoSlab-Bold.ttf b/anaconda/docs/html/_static/fonts/RobotoSlab-Bold.ttf old mode 100644 new mode 100755 index e6ed0de..df5d1df Binary files a/anaconda/docs/html/_static/fonts/RobotoSlab-Bold.ttf and b/anaconda/docs/html/_static/fonts/RobotoSlab-Bold.ttf differ diff --git a/anaconda/docs/html/_static/fonts/RobotoSlab-Regular.ttf b/anaconda/docs/html/_static/fonts/RobotoSlab-Regular.ttf old mode 100644 new mode 100755 index 141d6c0..eb52a79 Binary files a/anaconda/docs/html/_static/fonts/RobotoSlab-Regular.ttf and b/anaconda/docs/html/_static/fonts/RobotoSlab-Regular.ttf differ diff --git a/anaconda/docs/html/_static/fonts/fontawesome-webfont.eot b/anaconda/docs/html/_static/fonts/fontawesome-webfont.eot index 7c79c6a..84677bc 100755 Binary files a/anaconda/docs/html/_static/fonts/fontawesome-webfont.eot and b/anaconda/docs/html/_static/fonts/fontawesome-webfont.eot differ diff --git a/anaconda/docs/html/_static/fonts/fontawesome-webfont.svg b/anaconda/docs/html/_static/fonts/fontawesome-webfont.svg index 7690140..d32830c 100755 --- a/anaconda/docs/html/_static/fonts/fontawesome-webfont.svg +++ b/anaconda/docs/html/_static/fonts/fontawesome-webfont.svg @@ -14,10 +14,11 @@ + - + - + @@ -30,7 +31,7 @@ - + @@ -52,23 +53,23 @@ - + - + - + - - + + @@ -77,11 +78,11 @@ - - - - - + + + + + @@ -99,18 +100,18 @@ - - - + + + - - - + + + - - + + @@ -133,33 +134,33 @@ - + - + - - - - + + + + - + - + - + - + @@ -168,32 +169,32 @@ - + - - + + - + - - + + - + - + - + @@ -210,16 +211,16 @@ - - + + - - + + @@ -247,15 +248,15 @@ - + - + - + @@ -274,7 +275,7 @@ - + @@ -295,13 +296,13 @@ - - + + - - + + @@ -317,12 +318,12 @@ - + - + @@ -332,7 +333,7 @@ - + @@ -345,8 +346,8 @@ - - + + @@ -355,31 +356,31 @@ - - + + - + - - + + - + - - + + - + @@ -388,27 +389,297 @@ - + - + - - + + - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - \ No newline at end of file + \ No newline at end of file diff --git a/anaconda/docs/html/_static/fonts/fontawesome-webfont.ttf b/anaconda/docs/html/_static/fonts/fontawesome-webfont.ttf index 5ec37c4..9d02852 100755 Binary files a/anaconda/docs/html/_static/fonts/fontawesome-webfont.ttf and b/anaconda/docs/html/_static/fonts/fontawesome-webfont.ttf differ diff --git a/anaconda/docs/html/_static/fonts/fontawesome-webfont.woff b/anaconda/docs/html/_static/fonts/fontawesome-webfont.woff index 8c1748a..1b92d42 100755 Binary files a/anaconda/docs/html/_static/fonts/fontawesome-webfont.woff and b/anaconda/docs/html/_static/fonts/fontawesome-webfont.woff differ diff --git a/anaconda/docs/html/_static/jquery-1.11.1.js b/anaconda/docs/html/_static/jquery-1.11.1.js new file mode 100755 index 0000000..d4b67f7 --- /dev/null +++ b/anaconda/docs/html/_static/jquery-1.11.1.js @@ -0,0 +1,10308 @@ +/*! + * jQuery JavaScript Library v1.11.1 + * http://jquery.com/ + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * + * Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2014-05-01T17:42Z + */ + +(function( global, factory ) { + + if ( typeof module === "object" && typeof module.exports === "object" ) { + // For CommonJS and CommonJS-like environments where a proper window is present, + // execute the factory and get jQuery + // For environments that do not inherently posses a window with a document + // (such as Node.js), expose a jQuery-making factory as module.exports + // This accentuates the need for the creation of a real window + // e.g. var jQuery = require("jquery")(window); + // See ticket #14549 for more info + module.exports = global.document ? + factory( global, true ) : + function( w ) { + if ( !w.document ) { + throw new Error( "jQuery requires a window with a document" ); + } + return factory( w ); + }; + } else { + factory( global ); + } + +// Pass this if window is not defined yet +}(typeof window !== "undefined" ? window : this, function( window, noGlobal ) { + +// Can't do this because several apps including ASP.NET trace +// the stack via arguments.caller.callee and Firefox dies if +// you try to trace through "use strict" call chains. (#13335) +// Support: Firefox 18+ +// + +var deletedIds = []; + +var slice = deletedIds.slice; + +var concat = deletedIds.concat; + +var push = deletedIds.push; + +var indexOf = deletedIds.indexOf; + +var class2type = {}; + +var toString = class2type.toString; + +var hasOwn = class2type.hasOwnProperty; + +var support = {}; + + + +var + version = "1.11.1", + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + // The jQuery object is actually just the init constructor 'enhanced' + // Need init if jQuery is called (just allow error to be thrown if not included) + return new jQuery.fn.init( selector, context ); + }, + + // Support: Android<4.1, IE<9 + // Make sure we trim BOM and NBSP + rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, + + // Matches dashed string for camelizing + rmsPrefix = /^-ms-/, + rdashAlpha = /-([\da-z])/gi, + + // Used by jQuery.camelCase as callback to replace() + fcamelCase = function( all, letter ) { + return letter.toUpperCase(); + }; + +jQuery.fn = jQuery.prototype = { + // The current version of jQuery being used + jquery: version, + + constructor: jQuery, + + // Start with an empty selector + selector: "", + + // The default length of a jQuery object is 0 + length: 0, + + toArray: function() { + return slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + return num != null ? + + // Return just the one element from the set + ( num < 0 ? this[ num + this.length ] : this[ num ] ) : + + // Return all the elements in a clean array + slice.call( this ); + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + ret.context = this.context; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + // (You can seed the arguments with an array of args, but this is + // only used internally.) + each: function( callback, args ) { + return jQuery.each( this, callback, args ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map(this, function( elem, i ) { + return callback.call( elem, i, elem ); + })); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] ); + }, + + end: function() { + return this.prevObject || this.constructor(null); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: deletedIds.sort, + splice: deletedIds.splice +}; + +jQuery.extend = jQuery.fn.extend = function() { + var src, copyIsArray, copy, name, options, clone, + target = arguments[0] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + + // skip the boolean and the target + target = arguments[ i ] || {}; + i++; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !jQuery.isFunction(target) ) { + target = {}; + } + + // extend jQuery itself if only one argument is passed + if ( i === length ) { + target = this; + i--; + } + + for ( ; i < length; i++ ) { + // Only deal with non-null/undefined values + if ( (options = arguments[ i ]) != null ) { + // Extend the base object + for ( name in options ) { + src = target[ name ]; + copy = options[ name ]; + + // Prevent never-ending loop + if ( target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) { + if ( copyIsArray ) { + copyIsArray = false; + clone = src && jQuery.isArray(src) ? src : []; + + } else { + clone = src && jQuery.isPlainObject(src) ? src : {}; + } + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend({ + // Unique for each copy of jQuery on the page + expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), + + // Assume jQuery is ready without the ready module + isReady: true, + + error: function( msg ) { + throw new Error( msg ); + }, + + noop: function() {}, + + // See test/unit/core.js for details concerning isFunction. + // Since version 1.3, DOM methods and functions like alert + // aren't supported. They return false on IE (#2968). + isFunction: function( obj ) { + return jQuery.type(obj) === "function"; + }, + + isArray: Array.isArray || function( obj ) { + return jQuery.type(obj) === "array"; + }, + + isWindow: function( obj ) { + /* jshint eqeqeq: false */ + return obj != null && obj == obj.window; + }, + + isNumeric: function( obj ) { + // parseFloat NaNs numeric-cast false positives (null|true|false|"") + // ...but misinterprets leading-number strings, particularly hex literals ("0x...") + // subtraction forces infinities to NaN + return !jQuery.isArray( obj ) && obj - parseFloat( obj ) >= 0; + }, + + isEmptyObject: function( obj ) { + var name; + for ( name in obj ) { + return false; + } + return true; + }, + + isPlainObject: function( obj ) { + var key; + + // Must be an Object. + // Because of IE, we also have to check the presence of the constructor property. + // Make sure that DOM nodes and window objects don't pass through, as well + if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { + return false; + } + + try { + // Not own constructor property must be Object + if ( obj.constructor && + !hasOwn.call(obj, "constructor") && + !hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) { + return false; + } + } catch ( e ) { + // IE8,9 Will throw exceptions on certain host objects #9897 + return false; + } + + // Support: IE<9 + // Handle iteration over inherited properties before own properties. + if ( support.ownLast ) { + for ( key in obj ) { + return hasOwn.call( obj, key ); + } + } + + // Own properties are enumerated firstly, so to speed up, + // if last one is own, then all properties are own. + for ( key in obj ) {} + + return key === undefined || hasOwn.call( obj, key ); + }, + + type: function( obj ) { + if ( obj == null ) { + return obj + ""; + } + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call(obj) ] || "object" : + typeof obj; + }, + + // Evaluates a script in a global context + // Workarounds based on findings by Jim Driscoll + // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context + globalEval: function( data ) { + if ( data && jQuery.trim( data ) ) { + // We use execScript on Internet Explorer + // We use an anonymous function so that context is window + // rather than jQuery in Firefox + ( window.execScript || function( data ) { + window[ "eval" ].call( window, data ); + } )( data ); + } + }, + + // Convert dashed to camelCase; used by the css and data modules + // Microsoft forgot to hump their vendor prefix (#9572) + camelCase: function( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); + }, + + nodeName: function( elem, name ) { + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + }, + + // args is for internal usage only + each: function( obj, callback, args ) { + var value, + i = 0, + length = obj.length, + isArray = isArraylike( obj ); + + if ( args ) { + if ( isArray ) { + for ( ; i < length; i++ ) { + value = callback.apply( obj[ i ], args ); + + if ( value === false ) { + break; + } + } + } else { + for ( i in obj ) { + value = callback.apply( obj[ i ], args ); + + if ( value === false ) { + break; + } + } + } + + // A special, fast, case for the most common use of each + } else { + if ( isArray ) { + for ( ; i < length; i++ ) { + value = callback.call( obj[ i ], i, obj[ i ] ); + + if ( value === false ) { + break; + } + } + } else { + for ( i in obj ) { + value = callback.call( obj[ i ], i, obj[ i ] ); + + if ( value === false ) { + break; + } + } + } + } + + return obj; + }, + + // Support: Android<4.1, IE<9 + trim: function( text ) { + return text == null ? + "" : + ( text + "" ).replace( rtrim, "" ); + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArraylike( Object(arr) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + var len; + + if ( arr ) { + if ( indexOf ) { + return indexOf.call( arr, elem, i ); + } + + len = arr.length; + i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0; + + for ( ; i < len; i++ ) { + // Skip accessing in sparse arrays + if ( i in arr && arr[ i ] === elem ) { + return i; + } + } + } + + return -1; + }, + + merge: function( first, second ) { + var len = +second.length, + j = 0, + i = first.length; + + while ( j < len ) { + first[ i++ ] = second[ j++ ]; + } + + // Support: IE<9 + // Workaround casting of .length to NaN on otherwise arraylike objects (e.g., NodeLists) + if ( len !== len ) { + while ( second[j] !== undefined ) { + first[ i++ ] = second[ j++ ]; + } + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, invert ) { + var callbackInverse, + matches = [], + i = 0, + length = elems.length, + callbackExpect = !invert; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + callbackInverse = !callback( elems[ i ], i ); + if ( callbackInverse !== callbackExpect ) { + matches.push( elems[ i ] ); + } + } + + return matches; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var value, + i = 0, + length = elems.length, + isArray = isArraylike( elems ), + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArray ) { + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + } + + // Flatten any nested arrays + return concat.apply( [], ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // Bind a function to a context, optionally partially applying any + // arguments. + proxy: function( fn, context ) { + var args, proxy, tmp; + + if ( typeof context === "string" ) { + tmp = fn[ context ]; + context = fn; + fn = tmp; + } + + // Quick check to determine if target is callable, in the spec + // this throws a TypeError, but we will just return undefined. + if ( !jQuery.isFunction( fn ) ) { + return undefined; + } + + // Simulated bind + args = slice.call( arguments, 2 ); + proxy = function() { + return fn.apply( context || this, args.concat( slice.call( arguments ) ) ); + }; + + // Set the guid of unique handler to the same of original handler, so it can be removed + proxy.guid = fn.guid = fn.guid || jQuery.guid++; + + return proxy; + }, + + now: function() { + return +( new Date() ); + }, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support +}); + +// Populate the class2type map +jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +}); + +function isArraylike( obj ) { + var length = obj.length, + type = jQuery.type( obj ); + + if ( type === "function" || jQuery.isWindow( obj ) ) { + return false; + } + + if ( obj.nodeType === 1 && length ) { + return true; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; +} +var Sizzle = +/*! + * Sizzle CSS Selector Engine v1.10.19 + * http://sizzlejs.com/ + * + * Copyright 2013 jQuery Foundation, Inc. and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2014-04-18 + */ +(function( window ) { + +var i, + support, + Expr, + getText, + isXML, + tokenize, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + // Local document vars + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + // Instance-specific data + expando = "sizzle" + -(new Date()), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + // General-purpose constants + strundefined = typeof undefined, + MAX_NEGATIVE = 1 << 31, + + // Instance methods + hasOwn = ({}).hasOwnProperty, + arr = [], + pop = arr.pop, + push_native = arr.push, + push = arr.push, + slice = arr.slice, + // Use a stripped-down indexOf if we can't use a native one + indexOf = arr.indexOf || function( elem ) { + var i = 0, + len = this.length; + for ( ; i < len; i++ ) { + if ( this[i] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", + + // Regular expressions + + // Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + // http://www.w3.org/TR/css3-syntax/#characters + characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+", + + // Loosely modeled on CSS identifier characters + // An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors + // Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier + identifier = characterEncoding.replace( "w", "w#" ), + + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + characterEncoding + ")(?:" + whitespace + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + + "*\\]", + + pseudos = ":(" + characterEncoding + ")(?:\\((" + + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: + // 1. quoted (capture 3; capture 4 or capture 5) + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + + // 2. simple (capture 6) + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + + // 3. anything else (capture 2) + ".*" + + ")\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), + + rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + characterEncoding + ")" ), + "CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ), + "TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + rescape = /'|\\/g, + + // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), + funescape = function( _, escaped, escapedWhitespace ) { + var high = "0x" + escaped - 0x10000; + // NaN means non-codepoint + // Support: Firefox<24 + // Workaround erroneous numeric interpretation of +"0x" + return high !== high || escapedWhitespace ? + escaped : + high < 0 ? + // BMP codepoint + String.fromCharCode( high + 0x10000 ) : + // Supplemental Plane codepoint (surrogate pair) + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }; + +// Optimize for push.apply( _, NodeList ) +try { + push.apply( + (arr = slice.call( preferredDoc.childNodes )), + preferredDoc.childNodes + ); + // Support: Android<4.0 + // Detect silently failing push.apply + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + push_native.apply( target, slice.call(els) ); + } : + + // Support: IE<9 + // Otherwise append directly + function( target, els ) { + var j = target.length, + i = 0; + // Can't trust NodeList.length + while ( (target[j++] = els[i++]) ) {} + target.length = j - 1; + } + }; +} + +function Sizzle( selector, context, results, seed ) { + var match, elem, m, nodeType, + // QSA vars + i, groups, old, nid, newContext, newSelector; + + if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { + setDocument( context ); + } + + context = context || document; + results = results || []; + + if ( !selector || typeof selector !== "string" ) { + return results; + } + + if ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) { + return []; + } + + if ( documentIsHTML && !seed ) { + + // Shortcuts + if ( (match = rquickExpr.exec( selector )) ) { + // Speed-up: Sizzle("#ID") + if ( (m = match[1]) ) { + if ( nodeType === 9 ) { + elem = context.getElementById( m ); + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document (jQuery #6963) + if ( elem && elem.parentNode ) { + // Handle the case where IE, Opera, and Webkit return items + // by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + } else { + // Context is not a document + if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) && + contains( context, elem ) && elem.id === m ) { + results.push( elem ); + return results; + } + } + + // Speed-up: Sizzle("TAG") + } else if ( match[2] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Speed-up: Sizzle(".CLASS") + } else if ( (m = match[3]) && support.getElementsByClassName && context.getElementsByClassName ) { + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // QSA path + if ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { + nid = old = expando; + newContext = context; + newSelector = nodeType === 9 && selector; + + // qSA works strangely on Element-rooted queries + // We can work around this by specifying an extra ID on the root + // and working up from there (Thanks to Andrew Dupont for the technique) + // IE 8 doesn't work on object elements + if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) { + groups = tokenize( selector ); + + if ( (old = context.getAttribute("id")) ) { + nid = old.replace( rescape, "\\$&" ); + } else { + context.setAttribute( "id", nid ); + } + nid = "[id='" + nid + "'] "; + + i = groups.length; + while ( i-- ) { + groups[i] = nid + toSelector( groups[i] ); + } + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || context; + newSelector = groups.join(","); + } + + if ( newSelector ) { + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch(qsaError) { + } finally { + if ( !old ) { + context.removeAttribute("id"); + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {Function(string, Object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key + " " ) > Expr.cacheLength ) { + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return (cache[ key + " " ] = value); + } + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created div and expects a boolean result + */ +function assert( fn ) { + var div = document.createElement("div"); + + try { + return !!fn( div ); + } catch (e) { + return false; + } finally { + // Remove from its parent by default + if ( div.parentNode ) { + div.parentNode.removeChild( div ); + } + // release memory in IE + div = null; + } +} + +/** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ +function addHandle( attrs, handler ) { + var arr = attrs.split("|"), + i = attrs.length; + + while ( i-- ) { + Expr.attrHandle[ arr[i] ] = handler; + } +} + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + ( ~b.sourceIndex || MAX_NEGATIVE ) - + ( ~a.sourceIndex || MAX_NEGATIVE ); + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( (cur = cur.nextSibling) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ +function createPositionalPseudo( fn ) { + return markFunction(function( argument ) { + argument = +argument; + return markFunction(function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ (j = matchIndexes[i]) ] ) { + seed[j] = !(matches[j] = seed[j]); + } + } + }); + }); +} + +/** + * Checks a node for validity as a Sizzle context + * @param {Element|Object=} context + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value + */ +function testContext( context ) { + return context && typeof context.getElementsByTagName !== strundefined && context; +} + +// Expose support vars for convenience +support = Sizzle.support = {}; + +/** + * Detects XML nodes + * @param {Element|Object} elem An element or a document + * @returns {Boolean} True iff elem is a non-HTML XML node + */ +isXML = Sizzle.isXML = function( elem ) { + // documentElement is verified for cases where it doesn't yet exist + // (such as loading iframes in IE - #4833) + var documentElement = elem && (elem.ownerDocument || elem).documentElement; + return documentElement ? documentElement.nodeName !== "HTML" : false; +}; + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var hasCompare, + doc = node ? node.ownerDocument || node : preferredDoc, + parent = doc.defaultView; + + // If no document and documentElement is available, return + if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Set our document + document = doc; + docElem = doc.documentElement; + + // Support tests + documentIsHTML = !isXML( doc ); + + // Support: IE>8 + // If iframe document is assigned to "document" variable and if iframe has been reloaded, + // IE will throw "permission denied" error when accessing "document" variable, see jQuery #13936 + // IE6-8 do not support the defaultView property so parent will be undefined + if ( parent && parent !== parent.top ) { + // IE11 does not have attachEvent, so all must suffer + if ( parent.addEventListener ) { + parent.addEventListener( "unload", function() { + setDocument(); + }, false ); + } else if ( parent.attachEvent ) { + parent.attachEvent( "onunload", function() { + setDocument(); + }); + } + } + + /* Attributes + ---------------------------------------------------------------------- */ + + // Support: IE<8 + // Verify that getAttribute really returns attributes and not properties (excepting IE8 booleans) + support.attributes = assert(function( div ) { + div.className = "i"; + return !div.getAttribute("className"); + }); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + // Check if getElementsByTagName("*") returns only elements + support.getElementsByTagName = assert(function( div ) { + div.appendChild( doc.createComment("") ); + return !div.getElementsByTagName("*").length; + }); + + // Check if getElementsByClassName can be trusted + support.getElementsByClassName = rnative.test( doc.getElementsByClassName ) && assert(function( div ) { + div.innerHTML = "
"; + + // Support: Safari<4 + // Catch class over-caching + div.firstChild.className = "i"; + // Support: Opera<10 + // Catch gEBCN failure to find non-leading classes + return div.getElementsByClassName("i").length === 2; + }); + + // Support: IE<10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert(function( div ) { + docElem.appendChild( div ).id = expando; + return !doc.getElementsByName || !doc.getElementsByName( expando ).length; + }); + + // ID find and filter + if ( support.getById ) { + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== strundefined && documentIsHTML ) { + var m = context.getElementById( id ); + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + return m && m.parentNode ? [ m ] : []; + } + }; + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute("id") === attrId; + }; + }; + } else { + // Support: IE6/7 + // getElementById is not reliable as a find shortcut + delete Expr.find["ID"]; + + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id"); + return node && node.value === attrId; + }; + }; + } + + // Tag + Expr.find["TAG"] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== strundefined ) { + return context.getElementsByTagName( tag ); + } + } : + function( tag, context ) { + var elem, + tmp = [], + i = 0, + results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + while ( (elem = results[i++]) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + // Class + Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== strundefined && documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + // QSA and matchesSelector support + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + rbuggyMatches = []; + + // qSa(:focus) reports false when true (Chrome 21) + // We allow this because of a bug in IE8/9 that throws an error + // whenever `document.activeElement` is accessed on an iframe + // So, we allow :focus to pass through QSA all the time to avoid the IE error + // See http://bugs.jquery.com/ticket/13378 + rbuggyQSA = []; + + if ( (support.qsa = rnative.test( doc.querySelectorAll )) ) { + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert(function( div ) { + // Select is set to empty string on purpose + // This is to test IE's treatment of not explicitly + // setting a boolean content attribute, + // since its presence should be enough + // http://bugs.jquery.com/ticket/12359 + div.innerHTML = ""; + + // Support: IE8, Opera 11-12.16 + // Nothing should be selected when empty strings follow ^= or $= or *= + // The test attribute must be unknown in Opera but "safe" for WinRT + // http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section + if ( div.querySelectorAll("[msallowclip^='']").length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + // Support: IE8 + // Boolean attributes and "value" are not treated correctly + if ( !div.querySelectorAll("[selected]").length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here and will not see later tests + if ( !div.querySelectorAll(":checked").length ) { + rbuggyQSA.push(":checked"); + } + }); + + assert(function( div ) { + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + var input = doc.createElement("input"); + input.setAttribute( "type", "hidden" ); + div.appendChild( input ).setAttribute( "name", "D" ); + + // Support: IE8 + // Enforce case-sensitivity of name attribute + if ( div.querySelectorAll("[name=d]").length ) { + rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here and will not see later tests + if ( !div.querySelectorAll(":enabled").length ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Opera 10-11 does not throw on post-comma invalid pseudos + div.querySelectorAll("*,:x"); + rbuggyQSA.push(",.*:"); + }); + } + + if ( (support.matchesSelector = rnative.test( (matches = docElem.matches || + docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector) )) ) { + + assert(function( div ) { + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( div, "div" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( div, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + }); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); + + /* Contains + ---------------------------------------------------------------------- */ + hasCompare = rnative.test( docElem.compareDocumentPosition ); + + // Element contains another + // Purposefully does not implement inclusive descendent + // As in, an element does not contain itself + contains = hasCompare || rnative.test( docElem.contains ) ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + )); + } : + function( a, b ) { + if ( b ) { + while ( (b = b.parentNode) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + /* Sorting + ---------------------------------------------------------------------- */ + + // Document order sorting + sortOrder = hasCompare ? + function( a, b ) { + + // Flag for duplicate removal + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + // Sort on method existence if only one input has compareDocumentPosition + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if ( compare ) { + return compare; + } + + // Calculate position if both inputs belong to the same document + compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ? + a.compareDocumentPosition( b ) : + + // Otherwise we know they are disconnected + 1; + + // Disconnected nodes + if ( compare & 1 || + (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) { + + // Choose the first element that is related to our preferred document + if ( a === doc || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) { + return -1; + } + if ( b === doc || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) { + return 1; + } + + // Maintain original order + return sortInput ? + ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } : + function( a, b ) { + // Exit early if the nodes are identical + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + // Parentless nodes are either documents or disconnected + if ( !aup || !bup ) { + return a === doc ? -1 : + b === doc ? 1 : + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) : + 0; + + // If the nodes are siblings, we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + // Otherwise we need full lists of their ancestors for comparison + cur = a; + while ( (cur = cur.parentNode) ) { + ap.unshift( cur ); + } + cur = b; + while ( (cur = cur.parentNode) ) { + bp.unshift( cur ); + } + + // Walk down the tree looking for a discrepancy + while ( ap[i] === bp[i] ) { + i++; + } + + return i ? + // Do a sibling check if the nodes have a common ancestor + siblingCheck( ap[i], bp[i] ) : + + // Otherwise nodes in our document sort first + ap[i] === preferredDoc ? -1 : + bp[i] === preferredDoc ? 1 : + 0; + }; + + return doc; +}; + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + // Make sure that attribute selectors are quoted + expr = expr.replace( rattributeQuotes, "='$1']" ); + + if ( support.matchesSelector && documentIsHTML && + ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || support.disconnectedMatch || + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch(e) {} + } + + return Sizzle( expr, document, null, [ elem ] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + // Set document vars if needed + if ( ( context.ownerDocument || context ) !== document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + // Don't get fooled by Object.prototype properties (jQuery #13807) + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; + + return val !== undefined ? + val : + support.attributes || !documentIsHTML ? + elem.getAttribute( name ) : + (val = elem.getAttributeNode(name)) && val.specified ? + val.value : + null; +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + // Unless we *know* we can detect duplicates, assume their presence + hasDuplicate = !support.detectDuplicates; + sortInput = !support.sortStable && results.slice( 0 ); + results.sort( sortOrder ); + + if ( hasDuplicate ) { + while ( (elem = results[i++]) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + // Clear input after sorting to release objects + // See https://github.com/jquery/sizzle/pull/225 + sortInput = null; + + return results; +}; + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + // If no nodeType, this is expected to be an array + while ( (node = elem[i++]) ) { + // Do not traverse comment nodes + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + // Use textContent for elements + // innerText usage removed for consistency of new lines (jQuery #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + // Do not include comment or processing instruction nodes + + return ret; +}; + +Expr = Sizzle.selectors = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + attrHandle: {}, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[1] = match[1].replace( runescape, funescape ); + + // Move the given value to match[3] whether quoted or unquoted + match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape ); + + if ( match[2] === "~=" ) { + match[3] = " " + match[3] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[1] = match[1].toLowerCase(); + + if ( match[1].slice( 0, 3 ) === "nth" ) { + // nth-* requires argument + if ( !match[3] ) { + Sizzle.error( match[0] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); + match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); + + // other types prohibit arguments + } else if ( match[3] ) { + Sizzle.error( match[0] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[6] && match[2]; + + if ( matchExpr["CHILD"].test( match[0] ) ) { + return null; + } + + // Accept quoted arguments as-is + if ( match[3] ) { + match[2] = match[4] || match[5] || ""; + + // Strip excess characters from unquoted arguments + } else if ( unquoted && rpseudo.test( unquoted ) && + // Get excess from tokenize (recursively) + (excess = tokenize( unquoted, true )) && + // advance to the next closing parenthesis + (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { + + // excess is a negative index + match[0] = match[0].slice( 0, excess ); + match[2] = unquoted.slice( 0, excess ); + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeNameSelector ) { + var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { return true; } : + function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && + classCache( className, function( elem ) { + return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== strundefined && elem.getAttribute("class") || "" ); + }); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + }; + }, + + "CHILD": function( type, what, argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + // Shortcut for :nth-*(n) + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, context, xml ) { + var cache, outerCache, node, diff, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType; + + if ( parent ) { + + // :(first|last|only)-(child|of-type) + if ( simple ) { + while ( dir ) { + node = elem; + while ( (node = node[ dir ]) ) { + if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) { + return false; + } + } + // Reverse direction for :only-* (if we haven't yet done so) + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + // non-xml :nth-child(...) stores cache data on `parent` + if ( forward && useCache ) { + // Seek `elem` from a previously-cached index + outerCache = parent[ expando ] || (parent[ expando ] = {}); + cache = outerCache[ type ] || []; + nodeIndex = cache[0] === dirruns && cache[1]; + diff = cache[0] === dirruns && cache[2]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( (node = ++nodeIndex && node && node[ dir ] || + + // Fallback to seeking `elem` from the start + (diff = nodeIndex = 0) || start.pop()) ) { + + // When found, cache indexes on `parent` and break + if ( node.nodeType === 1 && ++diff && node === elem ) { + outerCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + // Use previously-cached element index if available + } else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) { + diff = cache[1]; + + // xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...) + } else { + // Use the same loop as above to seek `elem` from the start + while ( (node = ++nodeIndex && node && node[ dir ] || + (diff = nodeIndex = 0) || start.pop()) ) { + + if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) { + // Cache the index of each encountered element + if ( useCache ) { + (node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + + // Incorporate the offset, then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction(function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf.call( seed, matched[i] ); + seed[ idx ] = !( matches[ idx ] = matched[i] ); + } + }) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + // Potentially complex pseudos + "not": markFunction(function( selector ) { + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction(function( seed, matches, context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( (elem = unmatched[i]) ) { + seed[i] = !(matches[i] = elem); + } + } + }) : + function( elem, context, xml ) { + input[0] = elem; + matcher( input, null, xml, results ); + return !results.pop(); + }; + }), + + "has": markFunction(function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + }), + + "contains": markFunction(function( text ) { + return function( elem ) { + return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; + }; + }), + + // "Whether an element is represented by a :lang() selector + // is based solely on the element's language value + // being equal to the identifier C, + // or beginning with the identifier C immediately followed by "-". + // The matching of C against the element's language value is performed case-insensitively. + // The identifier C does not have to be a valid language name." + // http://www.w3.org/TR/selectors/#lang-pseudo + "lang": markFunction( function( lang ) { + // lang value must be a valid identifier + if ( !ridentifier.test(lang || "") ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( (elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); + return false; + }; + }), + + // Miscellaneous + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); + }, + + // Boolean properties + "enabled": function( elem ) { + return elem.disabled === false; + }, + + "disabled": function( elem ) { + return elem.disabled === true; + }, + + "checked": function( elem ) { + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); + }, + + "selected": function( elem ) { + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + // Contents + "empty": function( elem ) { + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), + // but not by others (comment: 8; processing instruction: 7; etc.) + // nodeType < 6 works because attributes (2) do not appear as children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeType < 6 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos["empty"]( elem ); + }, + + // Element/input types + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + + // Support: IE<8 + // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" + ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" ); + }, + + // Position-in-collection + "first": createPositionalPseudo(function() { + return [ 0 ]; + }), + + "last": createPositionalPseudo(function( matchIndexes, length ) { + return [ length - 1 ]; + }), + + "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + }), + + "even": createPositionalPseudo(function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "odd": createPositionalPseudo(function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }) + } +}; + +Expr.pseudos["nth"] = Expr.pseudos["eq"]; + +// Add button/input type pseudos +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} + +// Easy API for creating new setFilters +function setFilters() {} +setFilters.prototype = Expr.filters = Expr.pseudos; +Expr.setFilters = new setFilters(); + +tokenize = Sizzle.tokenize = function( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || (match = rcomma.exec( soFar )) ) { + if ( match ) { + // Don't consume trailing commas as valid + soFar = soFar.slice( match[0].length ) || soFar; + } + groups.push( (tokens = []) ); + } + + matched = false; + + // Combinators + if ( (match = rcombinators.exec( soFar )) ) { + matched = match.shift(); + tokens.push({ + value: matched, + // Cast descendant combinators to space + type: match[0].replace( rtrim, " " ) + }); + soFar = soFar.slice( matched.length ); + } + + // Filters + for ( type in Expr.filter ) { + if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || + (match = preFilters[ type ]( match ))) ) { + matched = match.shift(); + tokens.push({ + value: matched, + type: type, + matches: match + }); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); +}; + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[i].value; + } + return selector; +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + checkNonElements = base && dir === "parentNode", + doneName = done++; + + return combinator.first ? + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var oldCache, outerCache, + newCache = [ dirruns, doneName ]; + + // We can't set arbitrary data on XML nodes, so they don't benefit from dir caching + if ( xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || (elem[ expando ] = {}); + if ( (oldCache = outerCache[ dir ]) && + oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { + + // Assign to newCache so results back-propagate to previous elements + return (newCache[ 2 ] = oldCache[ 2 ]); + } else { + // Reuse newcache so results back-propagate to previous elements + outerCache[ dir ] = newCache; + + // A match means we're done; a fail means we have to keep checking + if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) { + return true; + } + } + } + } + } + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[i]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[0]; +} + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[i], results ); + } + return results; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( (elem = unmatched[i]) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction(function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( (elem = temp[i]) ) { + matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) ) { + // Restore matcherIn since elem is not yet a final match + temp.push( (matcherIn[i] = elem) ); + } + } + postFinder( null, (matcherOut = []), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) && + (temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) { + + seed[temp] = !(results[temp] = elem); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + }); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[0].type ], + implicitRelative = leadingRelative || Expr.relative[" "], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf.call( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + return ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + (checkContext = context).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + } ]; + + for ( ; i < len; i++ ) { + if ( (matcher = Expr.relative[ tokens[i].type ]) ) { + matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; + } else { + matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[j].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + // If the preceding token was a descendant combinator, insert an implicit any-element `*` + tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" }) + ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, outermost ) { + var elem, j, matcher, + matchedCount = 0, + i = "0", + unmatched = seed && [], + setMatched = [], + contextBackup = outermostContext, + // We must always have either seed elements or outermost context + elems = seed || byElement && Expr.find["TAG"]( "*", outermost ), + // Use integer dirruns iff this is the outermost matcher + dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1), + len = elems.length; + + if ( outermost ) { + outermostContext = context !== document && context; + } + + // Add elements passing elementMatchers directly to results + // Keep `i` a string if there are no elements so `matchedCount` will be "00" below + // Support: IE<9, Safari + // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id + for ( ; i !== len && (elem = elems[i]) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + while ( (matcher = elementMatchers[j++]) ) { + if ( matcher( elem, context, xml ) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + // They will have gone through all possible matchers + if ( (elem = !matcher && elem) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // Apply set filters to unmatched elements + matchedCount += i; + if ( bySet && i !== matchedCount ) { + j = 0; + while ( (matcher = setMatchers[j++]) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !(unmatched[i] || setMatched[i]) ) { + setMatched[i] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + // Generate a function of recursive functions that can be used to check each element + if ( !match ) { + match = tokenize( selector ); + } + i = match.length; + while ( i-- ) { + cached = matcherFromTokens( match[i] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); + + // Save selector and tokenization + cached.selector = selector; + } + return cached; +}; + +/** + * A low-level selection function that works with Sizzle's compiled + * selector functions + * @param {String|Function} selector A selector or a pre-compiled + * selector function built with Sizzle.compile + * @param {Element} context + * @param {Array} [results] + * @param {Array} [seed] A set of elements to match against + */ +select = Sizzle.select = function( selector, context, results, seed ) { + var i, tokens, token, type, find, + compiled = typeof selector === "function" && selector, + match = !seed && tokenize( (selector = compiled.selector || selector) ); + + results = results || []; + + // Try to minimize operations if there is no seed and only one group + if ( match.length === 1 ) { + + // Take a shortcut and set the context if the root selector is an ID + tokens = match[0] = match[0].slice( 0 ); + if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && + support.getById && context.nodeType === 9 && documentIsHTML && + Expr.relative[ tokens[1].type ] ) { + + context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0]; + if ( !context ) { + return results; + + // Precompiled matchers will still verify ancestry, so step up a level + } else if ( compiled ) { + context = context.parentNode; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + // Fetch a seed set for right-to-left matching + i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[i]; + + // Abort if we hit a combinator + if ( Expr.relative[ (type = token.type) ] ) { + break; + } + if ( (find = Expr.find[ type ]) ) { + // Search, expanding context for leading sibling combinators + if ( (seed = find( + token.matches[0].replace( runescape, funescape ), + rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context + )) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + + // Compile and execute a filtering function if one is not provided + // Provide `match` to avoid retokenization if we modified the selector above + ( compiled || compile( selector, match ) )( + seed, + context, + !documentIsHTML, + results, + rsibling.test( selector ) && testContext( context.parentNode ) || context + ); + return results; +}; + +// One-time assignments + +// Sort stability +support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; + +// Support: Chrome<14 +// Always assume duplicates if they aren't passed to the comparison function +support.detectDuplicates = !!hasDuplicate; + +// Initialize against the default document +setDocument(); + +// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) +// Detached nodes confoundingly follow *each other* +support.sortDetached = assert(function( div1 ) { + // Should return 1, but returns 4 (following) + return div1.compareDocumentPosition( document.createElement("div") ) & 1; +}); + +// Support: IE<8 +// Prevent attribute/property "interpolation" +// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx +if ( !assert(function( div ) { + div.innerHTML = ""; + return div.firstChild.getAttribute("href") === "#" ; +}) ) { + addHandle( "type|href|height|width", function( elem, name, isXML ) { + if ( !isXML ) { + return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); + } + }); +} + +// Support: IE<9 +// Use defaultValue in place of getAttribute("value") +if ( !support.attributes || !assert(function( div ) { + div.innerHTML = ""; + div.firstChild.setAttribute( "value", "" ); + return div.firstChild.getAttribute( "value" ) === ""; +}) ) { + addHandle( "value", function( elem, name, isXML ) { + if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { + return elem.defaultValue; + } + }); +} + +// Support: IE<9 +// Use getAttributeNode to fetch booleans when getAttribute lies +if ( !assert(function( div ) { + return div.getAttribute("disabled") == null; +}) ) { + addHandle( booleans, function( elem, name, isXML ) { + var val; + if ( !isXML ) { + return elem[ name ] === true ? name.toLowerCase() : + (val = elem.getAttributeNode( name )) && val.specified ? + val.value : + null; + } + }); +} + +return Sizzle; + +})( window ); + + + +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; +jQuery.expr[":"] = jQuery.expr.pseudos; +jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; + + + +var rneedsContext = jQuery.expr.match.needsContext; + +var rsingleTag = (/^<(\w+)\s*\/?>(?:<\/\1>|)$/); + + + +var risSimple = /^.[^:#\[\.,]*$/; + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, not ) { + if ( jQuery.isFunction( qualifier ) ) { + return jQuery.grep( elements, function( elem, i ) { + /* jshint -W018 */ + return !!qualifier.call( elem, i, elem ) !== not; + }); + + } + + if ( qualifier.nodeType ) { + return jQuery.grep( elements, function( elem ) { + return ( elem === qualifier ) !== not; + }); + + } + + if ( typeof qualifier === "string" ) { + if ( risSimple.test( qualifier ) ) { + return jQuery.filter( qualifier, elements, not ); + } + + qualifier = jQuery.filter( qualifier, elements ); + } + + return jQuery.grep( elements, function( elem ) { + return ( jQuery.inArray( elem, qualifier ) >= 0 ) !== not; + }); +} + +jQuery.filter = function( expr, elems, not ) { + var elem = elems[ 0 ]; + + if ( not ) { + expr = ":not(" + expr + ")"; + } + + return elems.length === 1 && elem.nodeType === 1 ? + jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] : + jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { + return elem.nodeType === 1; + })); +}; + +jQuery.fn.extend({ + find: function( selector ) { + var i, + ret = [], + self = this, + len = self.length; + + if ( typeof selector !== "string" ) { + return this.pushStack( jQuery( selector ).filter(function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + }) ); + } + + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, self[ i ], ret ); + } + + // Needed because $( selector, context ) becomes $( context ).find( selector ) + ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret ); + ret.selector = this.selector ? this.selector + " " + selector : selector; + return ret; + }, + filter: function( selector ) { + return this.pushStack( winnow(this, selector || [], false) ); + }, + not: function( selector ) { + return this.pushStack( winnow(this, selector || [], true) ); + }, + is: function( selector ) { + return !!winnow( + this, + + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + typeof selector === "string" && rneedsContext.test( selector ) ? + jQuery( selector ) : + selector || [], + false + ).length; + } +}); + + +// Initialize a jQuery object + + +// A central reference to the root jQuery(document) +var rootjQuery, + + // Use the correct document accordingly with window argument (sandbox) + document = window.document, + + // A simple way to check for HTML strings + // Prioritize #id over to avoid XSS via location.hash (#9521) + // Strict HTML recognition (#11290: must start with <) + rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/, + + init = jQuery.fn.init = function( selector, context ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) { + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && (match[1] || !context) ) { + + // HANDLE: $(html) -> $(array) + if ( match[1] ) { + context = context instanceof jQuery ? context[0] : context; + + // scripts is true for back-compat + // Intentionally let the error be thrown if parseHTML is not present + jQuery.merge( this, jQuery.parseHTML( + match[1], + context && context.nodeType ? context.ownerDocument || context : document, + true + ) ); + + // HANDLE: $(html, props) + if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) { + for ( match in context ) { + // Properties of context are called as methods if possible + if ( jQuery.isFunction( this[ match ] ) ) { + this[ match ]( context[ match ] ); + + // ...and otherwise set as attributes + } else { + this.attr( match, context[ match ] ); + } + } + } + + return this; + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[2] ); + + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + if ( elem && elem.parentNode ) { + // Handle the case where IE and Opera return items + // by name instead of ID + if ( elem.id !== match[2] ) { + return rootjQuery.find( selector ); + } + + // Otherwise, we inject the element directly into the jQuery object + this.length = 1; + this[0] = elem; + } + + this.context = document; + this.selector = selector; + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || rootjQuery ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(DOMElement) + } else if ( selector.nodeType ) { + this.context = this[0] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( jQuery.isFunction( selector ) ) { + return typeof rootjQuery.ready !== "undefined" ? + rootjQuery.ready( selector ) : + // Execute immediately if ready is not present + selector( jQuery ); + } + + if ( selector.selector !== undefined ) { + this.selector = selector.selector; + this.context = selector.context; + } + + return jQuery.makeArray( selector, this ); + }; + +// Give the init function the jQuery prototype for later instantiation +init.prototype = jQuery.fn; + +// Initialize central reference +rootjQuery = jQuery( document ); + + +var rparentsprev = /^(?:parents|prev(?:Until|All))/, + // methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.extend({ + dir: function( elem, dir, until ) { + var matched = [], + cur = elem[ dir ]; + + while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) { + if ( cur.nodeType === 1 ) { + matched.push( cur ); + } + cur = cur[dir]; + } + return matched; + }, + + sibling: function( n, elem ) { + var r = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + r.push( n ); + } + } + + return r; + } +}); + +jQuery.fn.extend({ + has: function( target ) { + var i, + targets = jQuery( target, this ), + len = targets.length; + + return this.filter(function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( this, targets[i] ) ) { + return true; + } + } + }); + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + matched = [], + pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ? + jQuery( selectors, context || this.context ) : + 0; + + for ( ; i < l; i++ ) { + for ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) { + // Always skip document fragments + if ( cur.nodeType < 11 && (pos ? + pos.index(cur) > -1 : + + // Don't pass non-elements to Sizzle + cur.nodeType === 1 && + jQuery.find.matchesSelector(cur, selectors)) ) { + + matched.push( cur ); + break; + } + } + } + + return this.pushStack( matched.length > 1 ? jQuery.unique( matched ) : matched ); + }, + + // Determine the position of an element within + // the matched set of elements + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[0] && this[0].parentNode ) ? this.first().prevAll().length : -1; + } + + // index in selector + if ( typeof elem === "string" ) { + return jQuery.inArray( this[0], jQuery( elem ) ); + } + + // Locate the position of the desired element + return jQuery.inArray( + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[0] : elem, this ); + }, + + add: function( selector, context ) { + return this.pushStack( + jQuery.unique( + jQuery.merge( this.get(), jQuery( selector, context ) ) + ) + ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter(selector) + ); + } +}); + +function sibling( cur, dir ) { + do { + cur = cur[ dir ]; + } while ( cur && cur.nodeType !== 1 ); + + return cur; +} + +jQuery.each({ + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return jQuery.dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, i, until ) { + return jQuery.dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return jQuery.dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return jQuery.dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, i, until ) { + return jQuery.dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, i, until ) { + return jQuery.dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return jQuery.sibling( elem.firstChild ); + }, + contents: function( elem ) { + return jQuery.nodeName( elem, "iframe" ) ? + elem.contentDocument || elem.contentWindow.document : + jQuery.merge( [], elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var ret = jQuery.map( this, fn, until ); + + if ( name.slice( -5 ) !== "Until" ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + ret = jQuery.filter( selector, ret ); + } + + if ( this.length > 1 ) { + // Remove duplicates + if ( !guaranteedUnique[ name ] ) { + ret = jQuery.unique( ret ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + ret = ret.reverse(); + } + } + + return this.pushStack( ret ); + }; +}); +var rnotwhite = (/\S+/g); + + + +// String to Object options format cache +var optionsCache = {}; + +// Convert String-formatted options into Object-formatted ones and store in cache +function createOptions( options ) { + var object = optionsCache[ options ] = {}; + jQuery.each( options.match( rnotwhite ) || [], function( _, flag ) { + object[ flag ] = true; + }); + return object; +} + +/* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + ( optionsCache[ options ] || createOptions( options ) ) : + jQuery.extend( {}, options ); + + var // Flag to know if list is currently firing + firing, + // Last fire value (for non-forgettable lists) + memory, + // Flag to know if list was already fired + fired, + // End of the loop when firing + firingLength, + // Index of currently firing callback (modified by remove if needed) + firingIndex, + // First callback to fire (used internally by add and fireWith) + firingStart, + // Actual callback list + list = [], + // Stack of fire calls for repeatable lists + stack = !options.once && [], + // Fire callbacks + fire = function( data ) { + memory = options.memory && data; + fired = true; + firingIndex = firingStart || 0; + firingStart = 0; + firingLength = list.length; + firing = true; + for ( ; list && firingIndex < firingLength; firingIndex++ ) { + if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) { + memory = false; // To prevent further calls using add + break; + } + } + firing = false; + if ( list ) { + if ( stack ) { + if ( stack.length ) { + fire( stack.shift() ); + } + } else if ( memory ) { + list = []; + } else { + self.disable(); + } + } + }, + // Actual Callbacks object + self = { + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + // First, we save the current length + var start = list.length; + (function add( args ) { + jQuery.each( args, function( _, arg ) { + var type = jQuery.type( arg ); + if ( type === "function" ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && type !== "string" ) { + // Inspect recursively + add( arg ); + } + }); + })( arguments ); + // Do we need to add the callbacks to the + // current firing batch? + if ( firing ) { + firingLength = list.length; + // With memory, if we're not firing then + // we should call right away + } else if ( memory ) { + firingStart = start; + fire( memory ); + } + } + return this; + }, + // Remove a callback from the list + remove: function() { + if ( list ) { + jQuery.each( arguments, function( _, arg ) { + var index; + while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + // Handle firing indexes + if ( firing ) { + if ( index <= firingLength ) { + firingLength--; + } + if ( index <= firingIndex ) { + firingIndex--; + } + } + } + }); + } + return this; + }, + // Check if a given callback is in the list. + // If no argument is given, return whether or not list has callbacks attached. + has: function( fn ) { + return fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length ); + }, + // Remove all callbacks from the list + empty: function() { + list = []; + firingLength = 0; + return this; + }, + // Have the list do nothing anymore + disable: function() { + list = stack = memory = undefined; + return this; + }, + // Is it disabled? + disabled: function() { + return !list; + }, + // Lock the list in its current state + lock: function() { + stack = undefined; + if ( !memory ) { + self.disable(); + } + return this; + }, + // Is it locked? + locked: function() { + return !stack; + }, + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( list && ( !fired || stack ) ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + if ( firing ) { + stack.push( args ); + } else { + fire( args ); + } + } + return this; + }, + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; + + +jQuery.extend({ + + Deferred: function( func ) { + var tuples = [ + // action, add listener, listener list, final state + [ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ], + [ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ], + [ "notify", "progress", jQuery.Callbacks("memory") ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + then: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + return jQuery.Deferred(function( newDefer ) { + jQuery.each( tuples, function( i, tuple ) { + var fn = jQuery.isFunction( fns[ i ] ) && fns[ i ]; + // deferred[ done | fail | progress ] for forwarding actions to newDefer + deferred[ tuple[1] ](function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && jQuery.isFunction( returned.promise ) ) { + returned.promise() + .done( newDefer.resolve ) + .fail( newDefer.reject ) + .progress( newDefer.notify ); + } else { + newDefer[ tuple[ 0 ] + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments ); + } + }); + }); + fns = null; + }).promise(); + }, + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Keep pipe for back-compat + promise.pipe = promise.then; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 3 ]; + + // promise[ done | fail | progress ] = list.add + promise[ tuple[1] ] = list.add; + + // Handle state + if ( stateString ) { + list.add(function() { + // state = [ resolved | rejected ] + state = stateString; + + // [ reject_list | resolve_list ].disable; progress_list.lock + }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock ); + } + + // deferred[ resolve | reject | notify ] + deferred[ tuple[0] ] = function() { + deferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments ); + return this; + }; + deferred[ tuple[0] + "With" ] = list.fireWith; + }); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( subordinate /* , ..., subordinateN */ ) { + var i = 0, + resolveValues = slice.call( arguments ), + length = resolveValues.length, + + // the count of uncompleted subordinates + remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0, + + // the master Deferred. If resolveValues consist of only a single Deferred, just use that. + deferred = remaining === 1 ? subordinate : jQuery.Deferred(), + + // Update function for both resolve and progress values + updateFunc = function( i, contexts, values ) { + return function( value ) { + contexts[ i ] = this; + values[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; + if ( values === progressValues ) { + deferred.notifyWith( contexts, values ); + + } else if ( !(--remaining) ) { + deferred.resolveWith( contexts, values ); + } + }; + }, + + progressValues, progressContexts, resolveContexts; + + // add listeners to Deferred subordinates; treat others as resolved + if ( length > 1 ) { + progressValues = new Array( length ); + progressContexts = new Array( length ); + resolveContexts = new Array( length ); + for ( ; i < length; i++ ) { + if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) { + resolveValues[ i ].promise() + .done( updateFunc( i, resolveContexts, resolveValues ) ) + .fail( deferred.reject ) + .progress( updateFunc( i, progressContexts, progressValues ) ); + } else { + --remaining; + } + } + } + + // if we're not waiting on anything, resolve the master + if ( !remaining ) { + deferred.resolveWith( resolveContexts, resolveValues ); + } + + return deferred.promise(); + } +}); + + +// The deferred used on DOM ready +var readyList; + +jQuery.fn.ready = function( fn ) { + // Add the callback + jQuery.ready.promise().done( fn ); + + return this; +}; + +jQuery.extend({ + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Hold (or release) the ready event + holdReady: function( hold ) { + if ( hold ) { + jQuery.readyWait++; + } else { + jQuery.ready( true ); + } + }, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). + if ( !document.body ) { + return setTimeout( jQuery.ready ); + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + + // Trigger any bound ready events + if ( jQuery.fn.triggerHandler ) { + jQuery( document ).triggerHandler( "ready" ); + jQuery( document ).off( "ready" ); + } + } +}); + +/** + * Clean-up method for dom ready events + */ +function detach() { + if ( document.addEventListener ) { + document.removeEventListener( "DOMContentLoaded", completed, false ); + window.removeEventListener( "load", completed, false ); + + } else { + document.detachEvent( "onreadystatechange", completed ); + window.detachEvent( "onload", completed ); + } +} + +/** + * The ready event handler and self cleanup method + */ +function completed() { + // readyState === "complete" is good enough for us to call the dom ready in oldIE + if ( document.addEventListener || event.type === "load" || document.readyState === "complete" ) { + detach(); + jQuery.ready(); + } +} + +jQuery.ready.promise = function( obj ) { + if ( !readyList ) { + + readyList = jQuery.Deferred(); + + // Catch cases where $(document).ready() is called after the browser event has already occurred. + // we once tried to use readyState "interactive" here, but it caused issues like the one + // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15 + if ( document.readyState === "complete" ) { + // Handle it asynchronously to allow scripts the opportunity to delay ready + setTimeout( jQuery.ready ); + + // Standards-based browsers support DOMContentLoaded + } else if ( document.addEventListener ) { + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed, false ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed, false ); + + // If IE event model is used + } else { + // Ensure firing before onload, maybe late but safe also for iframes + document.attachEvent( "onreadystatechange", completed ); + + // A fallback to window.onload, that will always work + window.attachEvent( "onload", completed ); + + // If IE and not a frame + // continually check to see if the document is ready + var top = false; + + try { + top = window.frameElement == null && document.documentElement; + } catch(e) {} + + if ( top && top.doScroll ) { + (function doScrollCheck() { + if ( !jQuery.isReady ) { + + try { + // Use the trick by Diego Perini + // http://javascript.nwbox.com/IEContentLoaded/ + top.doScroll("left"); + } catch(e) { + return setTimeout( doScrollCheck, 50 ); + } + + // detach all dom ready events + detach(); + + // and execute any waiting functions + jQuery.ready(); + } + })(); + } + } + } + return readyList.promise( obj ); +}; + + +var strundefined = typeof undefined; + + + +// Support: IE<9 +// Iteration over object's inherited properties before its own +var i; +for ( i in jQuery( support ) ) { + break; +} +support.ownLast = i !== "0"; + +// Note: most support tests are defined in their respective modules. +// false until the test is run +support.inlineBlockNeedsLayout = false; + +// Execute ASAP in case we need to set body.style.zoom +jQuery(function() { + // Minified: var a,b,c,d + var val, div, body, container; + + body = document.getElementsByTagName( "body" )[ 0 ]; + if ( !body || !body.style ) { + // Return for frameset docs that don't have a body + return; + } + + // Setup + div = document.createElement( "div" ); + container = document.createElement( "div" ); + container.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px"; + body.appendChild( container ).appendChild( div ); + + if ( typeof div.style.zoom !== strundefined ) { + // Support: IE<8 + // Check if natively block-level elements act like inline-block + // elements when setting their display to 'inline' and giving + // them layout + div.style.cssText = "display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1"; + + support.inlineBlockNeedsLayout = val = div.offsetWidth === 3; + if ( val ) { + // Prevent IE 6 from affecting layout for positioned elements #11048 + // Prevent IE from shrinking the body in IE 7 mode #12869 + // Support: IE<8 + body.style.zoom = 1; + } + } + + body.removeChild( container ); +}); + + + + +(function() { + var div = document.createElement( "div" ); + + // Execute the test only if not already executed in another module. + if (support.deleteExpando == null) { + // Support: IE<9 + support.deleteExpando = true; + try { + delete div.test; + } catch( e ) { + support.deleteExpando = false; + } + } + + // Null elements to avoid leaks in IE. + div = null; +})(); + + +/** + * Determines whether an object can have data + */ +jQuery.acceptData = function( elem ) { + var noData = jQuery.noData[ (elem.nodeName + " ").toLowerCase() ], + nodeType = +elem.nodeType || 1; + + // Do not set data on non-element DOM nodes because it will not be cleared (#8335). + return nodeType !== 1 && nodeType !== 9 ? + false : + + // Nodes accept data unless otherwise specified; rejection can be conditional + !noData || noData !== true && elem.getAttribute("classid") === noData; +}; + + +var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, + rmultiDash = /([A-Z])/g; + +function dataAttr( elem, key, data ) { + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + + var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase(); + + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = data === "true" ? true : + data === "false" ? false : + data === "null" ? null : + // Only convert to a number if it doesn't change the string + +data + "" === data ? +data : + rbrace.test( data ) ? jQuery.parseJSON( data ) : + data; + } catch( e ) {} + + // Make sure we set the data so it isn't changed later + jQuery.data( elem, key, data ); + + } else { + data = undefined; + } + } + + return data; +} + +// checks a cache object for emptiness +function isEmptyDataObject( obj ) { + var name; + for ( name in obj ) { + + // if the public data object is empty, the private is still empty + if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) { + continue; + } + if ( name !== "toJSON" ) { + return false; + } + } + + return true; +} + +function internalData( elem, name, data, pvt /* Internal Use Only */ ) { + if ( !jQuery.acceptData( elem ) ) { + return; + } + + var ret, thisCache, + internalKey = jQuery.expando, + + // We have to handle DOM nodes and JS objects differently because IE6-7 + // can't GC object references properly across the DOM-JS boundary + isNode = elem.nodeType, + + // Only DOM nodes need the global jQuery cache; JS object data is + // attached directly to the object so GC can occur automatically + cache = isNode ? jQuery.cache : elem, + + // Only defining an ID for JS objects if its cache already exists allows + // the code to shortcut on the same path as a DOM node with no cache + id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey; + + // Avoid doing any more work than we need to when trying to get data on an + // object that has no data at all + if ( (!id || !cache[id] || (!pvt && !cache[id].data)) && data === undefined && typeof name === "string" ) { + return; + } + + if ( !id ) { + // Only DOM nodes need a new unique ID for each element since their data + // ends up in the global cache + if ( isNode ) { + id = elem[ internalKey ] = deletedIds.pop() || jQuery.guid++; + } else { + id = internalKey; + } + } + + if ( !cache[ id ] ) { + // Avoid exposing jQuery metadata on plain JS objects when the object + // is serialized using JSON.stringify + cache[ id ] = isNode ? {} : { toJSON: jQuery.noop }; + } + + // An object can be passed to jQuery.data instead of a key/value pair; this gets + // shallow copied over onto the existing cache + if ( typeof name === "object" || typeof name === "function" ) { + if ( pvt ) { + cache[ id ] = jQuery.extend( cache[ id ], name ); + } else { + cache[ id ].data = jQuery.extend( cache[ id ].data, name ); + } + } + + thisCache = cache[ id ]; + + // jQuery data() is stored in a separate object inside the object's internal data + // cache in order to avoid key collisions between internal data and user-defined + // data. + if ( !pvt ) { + if ( !thisCache.data ) { + thisCache.data = {}; + } + + thisCache = thisCache.data; + } + + if ( data !== undefined ) { + thisCache[ jQuery.camelCase( name ) ] = data; + } + + // Check for both converted-to-camel and non-converted data property names + // If a data property was specified + if ( typeof name === "string" ) { + + // First Try to find as-is property data + ret = thisCache[ name ]; + + // Test for null|undefined property data + if ( ret == null ) { + + // Try to find the camelCased property + ret = thisCache[ jQuery.camelCase( name ) ]; + } + } else { + ret = thisCache; + } + + return ret; +} + +function internalRemoveData( elem, name, pvt ) { + if ( !jQuery.acceptData( elem ) ) { + return; + } + + var thisCache, i, + isNode = elem.nodeType, + + // See jQuery.data for more information + cache = isNode ? jQuery.cache : elem, + id = isNode ? elem[ jQuery.expando ] : jQuery.expando; + + // If there is already no cache entry for this object, there is no + // purpose in continuing + if ( !cache[ id ] ) { + return; + } + + if ( name ) { + + thisCache = pvt ? cache[ id ] : cache[ id ].data; + + if ( thisCache ) { + + // Support array or space separated string names for data keys + if ( !jQuery.isArray( name ) ) { + + // try the string as a key before any manipulation + if ( name in thisCache ) { + name = [ name ]; + } else { + + // split the camel cased version by spaces unless a key with the spaces exists + name = jQuery.camelCase( name ); + if ( name in thisCache ) { + name = [ name ]; + } else { + name = name.split(" "); + } + } + } else { + // If "name" is an array of keys... + // When data is initially created, via ("key", "val") signature, + // keys will be converted to camelCase. + // Since there is no way to tell _how_ a key was added, remove + // both plain key and camelCase key. #12786 + // This will only penalize the array argument path. + name = name.concat( jQuery.map( name, jQuery.camelCase ) ); + } + + i = name.length; + while ( i-- ) { + delete thisCache[ name[i] ]; + } + + // If there is no data left in the cache, we want to continue + // and let the cache object itself get destroyed + if ( pvt ? !isEmptyDataObject(thisCache) : !jQuery.isEmptyObject(thisCache) ) { + return; + } + } + } + + // See jQuery.data for more information + if ( !pvt ) { + delete cache[ id ].data; + + // Don't destroy the parent cache unless the internal data object + // had been the only thing left in it + if ( !isEmptyDataObject( cache[ id ] ) ) { + return; + } + } + + // Destroy the cache + if ( isNode ) { + jQuery.cleanData( [ elem ], true ); + + // Use delete when supported for expandos or `cache` is not a window per isWindow (#10080) + /* jshint eqeqeq: false */ + } else if ( support.deleteExpando || cache != cache.window ) { + /* jshint eqeqeq: true */ + delete cache[ id ]; + + // When all else fails, null + } else { + cache[ id ] = null; + } +} + +jQuery.extend({ + cache: {}, + + // The following elements (space-suffixed to avoid Object.prototype collisions) + // throw uncatchable exceptions if you attempt to set expando properties + noData: { + "applet ": true, + "embed ": true, + // ...but Flash objects (which have this classid) *can* handle expandos + "object ": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" + }, + + hasData: function( elem ) { + elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ]; + return !!elem && !isEmptyDataObject( elem ); + }, + + data: function( elem, name, data ) { + return internalData( elem, name, data ); + }, + + removeData: function( elem, name ) { + return internalRemoveData( elem, name ); + }, + + // For internal use only. + _data: function( elem, name, data ) { + return internalData( elem, name, data, true ); + }, + + _removeData: function( elem, name ) { + return internalRemoveData( elem, name, true ); + } +}); + +jQuery.fn.extend({ + data: function( key, value ) { + var i, name, data, + elem = this[0], + attrs = elem && elem.attributes; + + // Special expections of .data basically thwart jQuery.access, + // so implement the relevant behavior ourselves + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = jQuery.data( elem ); + + if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) { + i = attrs.length; + while ( i-- ) { + + // Support: IE11+ + // The attrs elements can be null (#14894) + if ( attrs[ i ] ) { + name = attrs[ i ].name; + if ( name.indexOf( "data-" ) === 0 ) { + name = jQuery.camelCase( name.slice(5) ); + dataAttr( elem, name, data[ name ] ); + } + } + } + jQuery._data( elem, "parsedAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each(function() { + jQuery.data( this, key ); + }); + } + + return arguments.length > 1 ? + + // Sets one value + this.each(function() { + jQuery.data( this, key, value ); + }) : + + // Gets one value + // Try to fetch any internally stored data first + elem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : undefined; + }, + + removeData: function( key ) { + return this.each(function() { + jQuery.removeData( this, key ); + }); + } +}); + + +jQuery.extend({ + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = jQuery._data( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || jQuery.isArray(data) ) { + queue = jQuery._data( elem, type, jQuery.makeArray(data) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // not intended for public consumption - generates a queueHooks object, or returns the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return jQuery._data( elem, key ) || jQuery._data( elem, key, { + empty: jQuery.Callbacks("once memory").add(function() { + jQuery._removeData( elem, type + "queue" ); + jQuery._removeData( elem, key ); + }) + }); + } +}); + +jQuery.fn.extend({ + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[0], type ); + } + + return data === undefined ? + this : + this.each(function() { + var queue = jQuery.queue( this, type, data ); + + // ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[0] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + }); + }, + dequeue: function( type ) { + return this.each(function() { + jQuery.dequeue( this, type ); + }); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while ( i-- ) { + tmp = jQuery._data( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } +}); +var pnum = (/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/).source; + +var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; + +var isHidden = function( elem, el ) { + // isHidden might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem ); + }; + + + +// Multifunctional method to get and set values of a collection +// The value/s can optionally be executed if it's a function +var access = jQuery.access = function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + length = elems.length, + bulk = key == null; + + // Sets many values + if ( jQuery.type( key ) === "object" ) { + chainable = true; + for ( i in key ) { + jQuery.access( elems, fn, i, key[i], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !jQuery.isFunction( value ) ) { + raw = true; + } + + if ( bulk ) { + // Bulk operations run against the entire set + if ( raw ) { + fn.call( elems, value ); + fn = null; + + // ...except when executing function values + } else { + bulk = fn; + fn = function( elem, key, value ) { + return bulk.call( jQuery( elem ), value ); + }; + } + } + + if ( fn ) { + for ( ; i < length; i++ ) { + fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) ); + } + } + } + + return chainable ? + elems : + + // Gets + bulk ? + fn.call( elems ) : + length ? fn( elems[0], key ) : emptyGet; +}; +var rcheckableType = (/^(?:checkbox|radio)$/i); + + + +(function() { + // Minified: var a,b,c + var input = document.createElement( "input" ), + div = document.createElement( "div" ), + fragment = document.createDocumentFragment(); + + // Setup + div.innerHTML = "
a"; + + // IE strips leading whitespace when .innerHTML is used + support.leadingWhitespace = div.firstChild.nodeType === 3; + + // Make sure that tbody elements aren't automatically inserted + // IE will insert them into empty tables + support.tbody = !div.getElementsByTagName( "tbody" ).length; + + // Make sure that link elements get serialized correctly by innerHTML + // This requires a wrapper element in IE + support.htmlSerialize = !!div.getElementsByTagName( "link" ).length; + + // Makes sure cloning an html5 element does not cause problems + // Where outerHTML is undefined, this still works + support.html5Clone = + document.createElement( "nav" ).cloneNode( true ).outerHTML !== "<:nav>"; + + // Check if a disconnected checkbox will retain its checked + // value of true after appended to the DOM (IE6/7) + input.type = "checkbox"; + input.checked = true; + fragment.appendChild( input ); + support.appendChecked = input.checked; + + // Make sure textarea (and checkbox) defaultValue is properly cloned + // Support: IE6-IE11+ + div.innerHTML = ""; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; + + // #11217 - WebKit loses check when the name is after the checked attribute + fragment.appendChild( div ); + div.innerHTML = ""; + + // Support: Safari 5.1, iOS 5.1, Android 4.x, Android 2.3 + // old WebKit doesn't clone checked state correctly in fragments + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE<9 + // Opera does not clone events (and typeof div.attachEvent === undefined). + // IE9-10 clones events bound via attachEvent, but they don't trigger with .click() + support.noCloneEvent = true; + if ( div.attachEvent ) { + div.attachEvent( "onclick", function() { + support.noCloneEvent = false; + }); + + div.cloneNode( true ).click(); + } + + // Execute the test only if not already executed in another module. + if (support.deleteExpando == null) { + // Support: IE<9 + support.deleteExpando = true; + try { + delete div.test; + } catch( e ) { + support.deleteExpando = false; + } + } +})(); + + +(function() { + var i, eventName, + div = document.createElement( "div" ); + + // Support: IE<9 (lack submit/change bubble), Firefox 23+ (lack focusin event) + for ( i in { submit: true, change: true, focusin: true }) { + eventName = "on" + i; + + if ( !(support[ i + "Bubbles" ] = eventName in window) ) { + // Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP) + div.setAttribute( eventName, "t" ); + support[ i + "Bubbles" ] = div.attributes[ eventName ].expando === false; + } + } + + // Null elements to avoid leaks in IE. + div = null; +})(); + + +var rformElems = /^(?:input|select|textarea)$/i, + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|pointer|contextmenu)|click/, + rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + rtypenamespace = /^([^.]*)(?:\.(.+)|)$/; + +function returnTrue() { + return true; +} + +function returnFalse() { + return false; +} + +function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } +} + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + var tmp, events, t, handleObjIn, + special, eventHandle, handleObj, + handlers, type, namespaces, origType, + elemData = jQuery._data( elem ); + + // Don't attach events to noData or text/comment nodes (but allow plain objects) + if ( !elemData ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + if ( !(events = elemData.events) ) { + events = elemData.events = {}; + } + if ( !(eventHandle = elemData.handle) ) { + eventHandle = elemData.handle = function( e ) { + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== strundefined && (!e || jQuery.event.triggered !== e.type) ? + jQuery.event.dispatch.apply( eventHandle.elem, arguments ) : + undefined; + }; + // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events + eventHandle.elem = elem; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( rnotwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[t] ) || []; + type = origType = tmp[1]; + namespaces = ( tmp[2] || "" ).split( "." ).sort(); + + // There *must* be a type, no attaching namespace-only handlers + if ( !type ) { + continue; + } + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend({ + type: type, + origType: origType, + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join(".") + }, handleObjIn ); + + // Init the event handler queue if we're the first + if ( !(handlers = events[ type ]) ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener/attachEvent if the special events handler returns false + if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + // Bind the global event handler to the element + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle, false ); + + } else if ( elem.attachEvent ) { + elem.attachEvent( "on" + type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + // Nullify elem to prevent memory leaks in IE + elem = null; + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + var j, handleObj, tmp, + origCount, t, events, + special, handlers, type, + namespaces, origType, + elemData = jQuery.hasData( elem ) && jQuery._data( elem ); + + if ( !elemData || !(events = elemData.events) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( rnotwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[t] ) || []; + type = origType = tmp[1]; + namespaces = ( tmp[2] || "" ).split( "." ).sort(); + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector ? special.delegateType : special.bindType ) || type; + handlers = events[ type ] || []; + tmp = tmp[2] && new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ); + + // Remove matching events + origCount = j = handlers.length; + while ( j-- ) { + handleObj = handlers[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !tmp || tmp.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) { + handlers.splice( j, 1 ); + + if ( handleObj.selector ) { + handlers.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( origCount && !handlers.length ) { + if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + delete elemData.handle; + + // removeData also checks for emptiness and clears the expando if empty + // so use it instead of delete + jQuery._removeData( elem, "events" ); + } + }, + + trigger: function( event, data, elem, onlyHandlers ) { + var handle, ontype, cur, + bubbleType, special, tmp, i, + eventPath = [ elem || document ], + type = hasOwn.call( event, "type" ) ? event.type : event, + namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : []; + + cur = tmp = elem = elem || document; + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf(".") >= 0 ) { + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split("."); + type = namespaces.shift(); + namespaces.sort(); + } + ontype = type.indexOf(":") < 0 && "on" + type; + + // Caller can pass in a jQuery.Event object, Object, or just an event type string + event = event[ jQuery.expando ] ? + event : + new jQuery.Event( type, typeof event === "object" && event ); + + // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) + event.isTrigger = onlyHandlers ? 2 : 3; + event.namespace = namespaces.join("."); + event.namespace_re = event.namespace ? + new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ) : + null; + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data == null ? + [ event ] : + jQuery.makeArray( data, [ event ] ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + if ( !rfocusMorph.test( bubbleType + type ) ) { + cur = cur.parentNode; + } + for ( ; cur; cur = cur.parentNode ) { + eventPath.push( cur ); + tmp = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( tmp === (elem.ownerDocument || document) ) { + eventPath.push( tmp.defaultView || tmp.parentWindow || window ); + } + } + + // Fire handlers on the event path + i = 0; + while ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) { + + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && handle.apply && jQuery.acceptData( cur ) ) { + event.result = handle.apply( cur, data ); + if ( event.result === false ) { + event.preventDefault(); + } + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( (!special._default || special._default.apply( eventPath.pop(), data ) === false) && + jQuery.acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name name as the event. + // Can't use an .isFunction() check here because IE6/7 fails that test. + // Don't do default actions on window, that's where global variables be (#6170) + if ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + tmp = elem[ ontype ]; + + if ( tmp ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + try { + elem[ type ](); + } catch ( e ) { + // IE<9 dies on focus/blur to hidden element (#1486,#12518) + // only reproducible on winXP IE8 native, not IE9 in IE8 mode + } + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + dispatch: function( event ) { + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( event ); + + var i, ret, handleObj, matched, j, + handlerQueue = [], + args = slice.call( arguments ), + handlers = ( jQuery._data( this, "events" ) || {} )[ event.type ] || [], + special = jQuery.event.special[ event.type ] || {}; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[0] = event; + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); + + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; + + j = 0; + while ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) { + + // Triggered event must either 1) have no namespace, or + // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace). + if ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) { + + event.handleObj = handleObj; + event.data = handleObj.data; + + ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler ) + .apply( matched.elem, args ); + + if ( ret !== undefined ) { + if ( (event.result = ret) === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + handlers: function( event, handlers ) { + var sel, handleObj, matches, i, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Find delegate handlers + // Black-hole SVG instance trees (#13180) + // Avoid non-left-click bubbling in Firefox (#3861) + if ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) { + + /* jshint eqeqeq: false */ + for ( ; cur != this; cur = cur.parentNode || this ) { + /* jshint eqeqeq: true */ + + // Don't check non-elements (#13208) + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.nodeType === 1 && (cur.disabled !== true || event.type !== "click") ) { + matches = []; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matches[ sel ] === undefined ) { + matches[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) >= 0 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matches[ sel ] ) { + matches.push( handleObj ); + } + } + if ( matches.length ) { + handlerQueue.push({ elem: cur, handlers: matches }); + } + } + } + } + + // Add the remaining (directly-bound) handlers + if ( delegateCount < handlers.length ) { + handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) }); + } + + return handlerQueue; + }, + + fix: function( event ) { + if ( event[ jQuery.expando ] ) { + return event; + } + + // Create a writable copy of the event object and normalize some properties + var i, prop, copy, + type = event.type, + originalEvent = event, + fixHook = this.fixHooks[ type ]; + + if ( !fixHook ) { + this.fixHooks[ type ] = fixHook = + rmouseEvent.test( type ) ? this.mouseHooks : + rkeyEvent.test( type ) ? this.keyHooks : + {}; + } + copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props; + + event = new jQuery.Event( originalEvent ); + + i = copy.length; + while ( i-- ) { + prop = copy[ i ]; + event[ prop ] = originalEvent[ prop ]; + } + + // Support: IE<9 + // Fix target property (#1925) + if ( !event.target ) { + event.target = originalEvent.srcElement || document; + } + + // Support: Chrome 23+, Safari? + // Target should not be a text node (#504, #13143) + if ( event.target.nodeType === 3 ) { + event.target = event.target.parentNode; + } + + // Support: IE<9 + // For mouse/key events, metaKey==false if it's undefined (#3368, #11328) + event.metaKey = !!event.metaKey; + + return fixHook.filter ? fixHook.filter( event, originalEvent ) : event; + }, + + // Includes some event props shared by KeyEvent and MouseEvent + props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "), + + fixHooks: {}, + + keyHooks: { + props: "char charCode key keyCode".split(" "), + filter: function( event, original ) { + + // Add which for key events + if ( event.which == null ) { + event.which = original.charCode != null ? original.charCode : original.keyCode; + } + + return event; + } + }, + + mouseHooks: { + props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "), + filter: function( event, original ) { + var body, eventDoc, doc, + button = original.button, + fromElement = original.fromElement; + + // Calculate pageX/Y if missing and clientX/Y available + if ( event.pageX == null && original.clientX != null ) { + eventDoc = event.target.ownerDocument || document; + doc = eventDoc.documentElement; + body = eventDoc.body; + + event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 ); + event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 ); + } + + // Add relatedTarget, if necessary + if ( !event.relatedTarget && fromElement ) { + event.relatedTarget = fromElement === event.target ? original.toElement : fromElement; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + // Note: button is not normalized, so don't use it + if ( !event.which && button !== undefined ) { + event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) ); + } + + return event; + } + }, + + special: { + load: { + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + focus: { + // Fire native event if possible so blur/focus sequence is correct + trigger: function() { + if ( this !== safeActiveElement() && this.focus ) { + try { + this.focus(); + return false; + } catch ( e ) { + // Support: IE<9 + // If we error on focus to hidden element (#1486, #12518), + // let .trigger() run the handlers + } + } + }, + delegateType: "focusin" + }, + blur: { + trigger: function() { + if ( this === safeActiveElement() && this.blur ) { + this.blur(); + return false; + } + }, + delegateType: "focusout" + }, + click: { + // For checkbox, fire native event so checked state will be right + trigger: function() { + if ( jQuery.nodeName( this, "input" ) && this.type === "checkbox" && this.click ) { + this.click(); + return false; + } + }, + + // For cross-browser consistency, don't fire native .click() on links + _default: function( event ) { + return jQuery.nodeName( event.target, "a" ); + } + }, + + beforeunload: { + postDispatch: function( event ) { + + // Support: Firefox 20+ + // Firefox doesn't alert if the returnValue field is not set. + if ( event.result !== undefined && event.originalEvent ) { + event.originalEvent.returnValue = event.result; + } + } + } + }, + + simulate: function( type, elem, event, bubble ) { + // Piggyback on a donor event to simulate a different one. + // Fake originalEvent to avoid donor's stopPropagation, but if the + // simulated event prevents default then we do the same on the donor. + var e = jQuery.extend( + new jQuery.Event(), + event, + { + type: type, + isSimulated: true, + originalEvent: {} + } + ); + if ( bubble ) { + jQuery.event.trigger( e, null, elem ); + } else { + jQuery.event.dispatch.call( elem, e ); + } + if ( e.isDefaultPrevented() ) { + event.preventDefault(); + } + } +}; + +jQuery.removeEvent = document.removeEventListener ? + function( elem, type, handle ) { + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle, false ); + } + } : + function( elem, type, handle ) { + var name = "on" + type; + + if ( elem.detachEvent ) { + + // #8545, #7054, preventing memory leaks for custom events in IE6-8 + // detachEvent needed property on element, by name of that event, to properly expose it to GC + if ( typeof elem[ name ] === strundefined ) { + elem[ name ] = null; + } + + elem.detachEvent( name, handle ); + } + }; + +jQuery.Event = function( src, props ) { + // Allow instantiation without the 'new' keyword + if ( !(this instanceof jQuery.Event) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = src.defaultPrevented || + src.defaultPrevented === undefined && + // Support: IE < 9, Android < 4.0 + src.returnValue === false ? + returnTrue : + returnFalse; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || jQuery.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + if ( !e ) { + return; + } + + // If preventDefault exists, run it on the original event + if ( e.preventDefault ) { + e.preventDefault(); + + // Support: IE + // Otherwise set the returnValue property of the original event to false + } else { + e.returnValue = false; + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + if ( !e ) { + return; + } + // If stopPropagation exists, run it on the original event + if ( e.stopPropagation ) { + e.stopPropagation(); + } + + // Support: IE + // Set the cancelBubble property of the original event to true + e.cancelBubble = true; + }, + stopImmediatePropagation: function() { + var e = this.originalEvent; + + this.isImmediatePropagationStopped = returnTrue; + + if ( e && e.stopImmediatePropagation ) { + e.stopImmediatePropagation(); + } + + this.stopPropagation(); + } +}; + +// Create mouseenter/leave events using mouseover/out and event-time checks +jQuery.each({ + mouseenter: "mouseover", + mouseleave: "mouseout", + pointerenter: "pointerover", + pointerleave: "pointerout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj; + + // For mousenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || (related !== target && !jQuery.contains( target, related )) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +}); + +// IE submit delegation +if ( !support.submitBubbles ) { + + jQuery.event.special.submit = { + setup: function() { + // Only need this for delegated form submit events + if ( jQuery.nodeName( this, "form" ) ) { + return false; + } + + // Lazy-add a submit handler when a descendant form may potentially be submitted + jQuery.event.add( this, "click._submit keypress._submit", function( e ) { + // Node name check avoids a VML-related crash in IE (#9807) + var elem = e.target, + form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined; + if ( form && !jQuery._data( form, "submitBubbles" ) ) { + jQuery.event.add( form, "submit._submit", function( event ) { + event._submit_bubble = true; + }); + jQuery._data( form, "submitBubbles", true ); + } + }); + // return undefined since we don't need an event listener + }, + + postDispatch: function( event ) { + // If form was submitted by the user, bubble the event up the tree + if ( event._submit_bubble ) { + delete event._submit_bubble; + if ( this.parentNode && !event.isTrigger ) { + jQuery.event.simulate( "submit", this.parentNode, event, true ); + } + } + }, + + teardown: function() { + // Only need this for delegated form submit events + if ( jQuery.nodeName( this, "form" ) ) { + return false; + } + + // Remove delegated handlers; cleanData eventually reaps submit handlers attached above + jQuery.event.remove( this, "._submit" ); + } + }; +} + +// IE change delegation and checkbox/radio fix +if ( !support.changeBubbles ) { + + jQuery.event.special.change = { + + setup: function() { + + if ( rformElems.test( this.nodeName ) ) { + // IE doesn't fire change on a check/radio until blur; trigger it on click + // after a propertychange. Eat the blur-change in special.change.handle. + // This still fires onchange a second time for check/radio after blur. + if ( this.type === "checkbox" || this.type === "radio" ) { + jQuery.event.add( this, "propertychange._change", function( event ) { + if ( event.originalEvent.propertyName === "checked" ) { + this._just_changed = true; + } + }); + jQuery.event.add( this, "click._change", function( event ) { + if ( this._just_changed && !event.isTrigger ) { + this._just_changed = false; + } + // Allow triggered, simulated change events (#11500) + jQuery.event.simulate( "change", this, event, true ); + }); + } + return false; + } + // Delegated event; lazy-add a change handler on descendant inputs + jQuery.event.add( this, "beforeactivate._change", function( e ) { + var elem = e.target; + + if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "changeBubbles" ) ) { + jQuery.event.add( elem, "change._change", function( event ) { + if ( this.parentNode && !event.isSimulated && !event.isTrigger ) { + jQuery.event.simulate( "change", this.parentNode, event, true ); + } + }); + jQuery._data( elem, "changeBubbles", true ); + } + }); + }, + + handle: function( event ) { + var elem = event.target; + + // Swallow native change events from checkbox/radio, we already triggered them above + if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) { + return event.handleObj.handler.apply( this, arguments ); + } + }, + + teardown: function() { + jQuery.event.remove( this, "._change" ); + + return !rformElems.test( this.nodeName ); + } + }; +} + +// Create "bubbling" focus and blur events +if ( !support.focusinBubbles ) { + jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler on the document while someone wants focusin/focusout + var handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + var doc = this.ownerDocument || this, + attaches = jQuery._data( doc, fix ); + + if ( !attaches ) { + doc.addEventListener( orig, handler, true ); + } + jQuery._data( doc, fix, ( attaches || 0 ) + 1 ); + }, + teardown: function() { + var doc = this.ownerDocument || this, + attaches = jQuery._data( doc, fix ) - 1; + + if ( !attaches ) { + doc.removeEventListener( orig, handler, true ); + jQuery._removeData( doc, fix ); + } else { + jQuery._data( doc, fix, attaches ); + } + } + }; + }); +} + +jQuery.fn.extend({ + + on: function( types, selector, data, fn, /*INTERNAL*/ one ) { + var type, origFn; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + this.on( type, selector, data, types[ type ], one ); + } + return this; + } + + if ( data == null && fn == null ) { + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return this; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return this.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + }); + }, + one: function( types, selector, data, fn ) { + return this.on( types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each(function() { + jQuery.event.remove( this, types, fn, selector ); + }); + }, + + trigger: function( type, data ) { + return this.each(function() { + jQuery.event.trigger( type, data, this ); + }); + }, + triggerHandler: function( type, data ) { + var elem = this[0]; + if ( elem ) { + return jQuery.event.trigger( type, data, elem, true ); + } + } +}); + + +function createSafeFragment( document ) { + var list = nodeNames.split( "|" ), + safeFrag = document.createDocumentFragment(); + + if ( safeFrag.createElement ) { + while ( list.length ) { + safeFrag.createElement( + list.pop() + ); + } + } + return safeFrag; +} + +var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" + + "header|hgroup|mark|meter|nav|output|progress|section|summary|time|video", + rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g, + rnoshimcache = new RegExp("<(?:" + nodeNames + ")[\\s/>]", "i"), + rleadingWhitespace = /^\s+/, + rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi, + rtagName = /<([\w:]+)/, + rtbody = /\s*$/g, + + // We have to close these tags to support XHTML (#13200) + wrapMap = { + option: [ 1, "" ], + legend: [ 1, "
", "
" ], + area: [ 1, "", "" ], + param: [ 1, "", "" ], + thead: [ 1, "", "
" ], + tr: [ 2, "", "
" ], + col: [ 2, "", "
" ], + td: [ 3, "", "
" ], + + // IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags, + // unless wrapped in a div with non-breaking characters in front of it. + _default: support.htmlSerialize ? [ 0, "", "" ] : [ 1, "X
", "
" ] + }, + safeFragment = createSafeFragment( document ), + fragmentDiv = safeFragment.appendChild( document.createElement("div") ); + +wrapMap.optgroup = wrapMap.option; +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +function getAll( context, tag ) { + var elems, elem, + i = 0, + found = typeof context.getElementsByTagName !== strundefined ? context.getElementsByTagName( tag || "*" ) : + typeof context.querySelectorAll !== strundefined ? context.querySelectorAll( tag || "*" ) : + undefined; + + if ( !found ) { + for ( found = [], elems = context.childNodes || context; (elem = elems[i]) != null; i++ ) { + if ( !tag || jQuery.nodeName( elem, tag ) ) { + found.push( elem ); + } else { + jQuery.merge( found, getAll( elem, tag ) ); + } + } + } + + return tag === undefined || tag && jQuery.nodeName( context, tag ) ? + jQuery.merge( [ context ], found ) : + found; +} + +// Used in buildFragment, fixes the defaultChecked property +function fixDefaultChecked( elem ) { + if ( rcheckableType.test( elem.type ) ) { + elem.defaultChecked = elem.checked; + } +} + +// Support: IE<8 +// Manipulating tables requires a tbody +function manipulationTarget( elem, content ) { + return jQuery.nodeName( elem, "table" ) && + jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ? + + elem.getElementsByTagName("tbody")[0] || + elem.appendChild( elem.ownerDocument.createElement("tbody") ) : + elem; +} + +// Replace/restore the type attribute of script elements for safe DOM manipulation +function disableScript( elem ) { + elem.type = (jQuery.find.attr( elem, "type" ) !== null) + "/" + elem.type; + return elem; +} +function restoreScript( elem ) { + var match = rscriptTypeMasked.exec( elem.type ); + if ( match ) { + elem.type = match[1]; + } else { + elem.removeAttribute("type"); + } + return elem; +} + +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var elem, + i = 0; + for ( ; (elem = elems[i]) != null; i++ ) { + jQuery._data( elem, "globalEval", !refElements || jQuery._data( refElements[i], "globalEval" ) ); + } +} + +function cloneCopyEvent( src, dest ) { + + if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) { + return; + } + + var type, i, l, + oldData = jQuery._data( src ), + curData = jQuery._data( dest, oldData ), + events = oldData.events; + + if ( events ) { + delete curData.handle; + curData.events = {}; + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + + // make the cloned public data object a copy from the original + if ( curData.data ) { + curData.data = jQuery.extend( {}, curData.data ); + } +} + +function fixCloneNodeIssues( src, dest ) { + var nodeName, e, data; + + // We do not need to do anything for non-Elements + if ( dest.nodeType !== 1 ) { + return; + } + + nodeName = dest.nodeName.toLowerCase(); + + // IE6-8 copies events bound via attachEvent when using cloneNode. + if ( !support.noCloneEvent && dest[ jQuery.expando ] ) { + data = jQuery._data( dest ); + + for ( e in data.events ) { + jQuery.removeEvent( dest, e, data.handle ); + } + + // Event data gets referenced instead of copied if the expando gets copied too + dest.removeAttribute( jQuery.expando ); + } + + // IE blanks contents when cloning scripts, and tries to evaluate newly-set text + if ( nodeName === "script" && dest.text !== src.text ) { + disableScript( dest ).text = src.text; + restoreScript( dest ); + + // IE6-10 improperly clones children of object elements using classid. + // IE10 throws NoModificationAllowedError if parent is null, #12132. + } else if ( nodeName === "object" ) { + if ( dest.parentNode ) { + dest.outerHTML = src.outerHTML; + } + + // This path appears unavoidable for IE9. When cloning an object + // element in IE9, the outerHTML strategy above is not sufficient. + // If the src has innerHTML and the destination does not, + // copy the src.innerHTML into the dest.innerHTML. #10324 + if ( support.html5Clone && ( src.innerHTML && !jQuery.trim(dest.innerHTML) ) ) { + dest.innerHTML = src.innerHTML; + } + + } else if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + // IE6-8 fails to persist the checked state of a cloned checkbox + // or radio button. Worse, IE6-7 fail to give the cloned element + // a checked appearance if the defaultChecked value isn't also set + + dest.defaultChecked = dest.checked = src.checked; + + // IE6-7 get confused and end up setting the value of a cloned + // checkbox/radio button to an empty string instead of "on" + if ( dest.value !== src.value ) { + dest.value = src.value; + } + + // IE6-8 fails to return the selected option to the default selected + // state when cloning options + } else if ( nodeName === "option" ) { + dest.defaultSelected = dest.selected = src.defaultSelected; + + // IE6-8 fails to set the defaultValue to the correct value when + // cloning other types of input fields + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } +} + +jQuery.extend({ + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var destElements, node, clone, i, srcElements, + inPage = jQuery.contains( elem.ownerDocument, elem ); + + if ( support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ) { + clone = elem.cloneNode( true ); + + // IE<=8 does not properly clone detached, unknown element nodes + } else { + fragmentDiv.innerHTML = elem.outerHTML; + fragmentDiv.removeChild( clone = fragmentDiv.firstChild ); + } + + if ( (!support.noCloneEvent || !support.noCloneChecked) && + (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) { + + // We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + // Fix all IE cloning issues + for ( i = 0; (node = srcElements[i]) != null; ++i ) { + // Ensure that the destination node is not null; Fixes #9587 + if ( destElements[i] ) { + fixCloneNodeIssues( node, destElements[i] ); + } + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0; (node = srcElements[i]) != null; i++ ) { + cloneCopyEvent( node, destElements[i] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + destElements = srcElements = node = null; + + // Return the cloned set + return clone; + }, + + buildFragment: function( elems, context, scripts, selection ) { + var j, elem, contains, + tmp, tag, tbody, wrap, + l = elems.length, + + // Ensure a safe fragment + safe = createSafeFragment( context ), + + nodes = [], + i = 0; + + for ( ; i < l; i++ ) { + elem = elems[ i ]; + + if ( elem || elem === 0 ) { + + // Add nodes directly + if ( jQuery.type( elem ) === "object" ) { + jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); + + // Convert non-html into a text node + } else if ( !rhtml.test( elem ) ) { + nodes.push( context.createTextNode( elem ) ); + + // Convert html into DOM nodes + } else { + tmp = tmp || safe.appendChild( context.createElement("div") ); + + // Deserialize a standard representation + tag = (rtagName.exec( elem ) || [ "", "" ])[ 1 ].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + + tmp.innerHTML = wrap[1] + elem.replace( rxhtmlTag, "<$1>" ) + wrap[2]; + + // Descend through wrappers to the right content + j = wrap[0]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Manually add leading whitespace removed by IE + if ( !support.leadingWhitespace && rleadingWhitespace.test( elem ) ) { + nodes.push( context.createTextNode( rleadingWhitespace.exec( elem )[0] ) ); + } + + // Remove IE's autoinserted from table fragments + if ( !support.tbody ) { + + // String was a , *may* have spurious + elem = tag === "table" && !rtbody.test( elem ) ? + tmp.firstChild : + + // String was a bare or + wrap[1] === "
" && !rtbody.test( elem ) ? + tmp : + 0; + + j = elem && elem.childNodes.length; + while ( j-- ) { + if ( jQuery.nodeName( (tbody = elem.childNodes[j]), "tbody" ) && !tbody.childNodes.length ) { + elem.removeChild( tbody ); + } + } + } + + jQuery.merge( nodes, tmp.childNodes ); + + // Fix #12392 for WebKit and IE > 9 + tmp.textContent = ""; + + // Fix #12392 for oldIE + while ( tmp.firstChild ) { + tmp.removeChild( tmp.firstChild ); + } + + // Remember the top-level container for proper cleanup + tmp = safe.lastChild; + } + } + } + + // Fix #11356: Clear elements from fragment + if ( tmp ) { + safe.removeChild( tmp ); + } + + // Reset defaultChecked for any radios and checkboxes + // about to be appended to the DOM in IE 6/7 (#8060) + if ( !support.appendChecked ) { + jQuery.grep( getAll( nodes, "input" ), fixDefaultChecked ); + } + + i = 0; + while ( (elem = nodes[ i++ ]) ) { + + // #4087 - If origin and destination elements are the same, and this is + // that element, do not do anything + if ( selection && jQuery.inArray( elem, selection ) !== -1 ) { + continue; + } + + contains = jQuery.contains( elem.ownerDocument, elem ); + + // Append to fragment + tmp = getAll( safe.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( contains ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( (elem = tmp[ j++ ]) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + tmp = null; + + return safe; + }, + + cleanData: function( elems, /* internal */ acceptData ) { + var elem, type, id, data, + i = 0, + internalKey = jQuery.expando, + cache = jQuery.cache, + deleteExpando = support.deleteExpando, + special = jQuery.event.special; + + for ( ; (elem = elems[i]) != null; i++ ) { + if ( acceptData || jQuery.acceptData( elem ) ) { + + id = elem[ internalKey ]; + data = id && cache[ id ]; + + if ( data ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + + // Remove cache only if it was not already removed by jQuery.event.remove + if ( cache[ id ] ) { + + delete cache[ id ]; + + // IE does not allow us to delete expando properties from nodes, + // nor does it have a removeAttribute function on Document nodes; + // we must handle all of these cases + if ( deleteExpando ) { + delete elem[ internalKey ]; + + } else if ( typeof elem.removeAttribute !== strundefined ) { + elem.removeAttribute( internalKey ); + + } else { + elem[ internalKey ] = null; + } + + deletedIds.push( id ); + } + } + } + } + } +}); + +jQuery.fn.extend({ + text: function( value ) { + return access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) ); + }, null, value, arguments.length ); + }, + + append: function() { + return this.domManip( arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + }); + }, + + prepend: function() { + return this.domManip( arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.insertBefore( elem, target.firstChild ); + } + }); + }, + + before: function() { + return this.domManip( arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + }); + }, + + after: function() { + return this.domManip( arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + }); + }, + + remove: function( selector, keepData /* Internal Use Only */ ) { + var elem, + elems = selector ? jQuery.filter( selector, this ) : this, + i = 0; + + for ( ; (elem = elems[i]) != null; i++ ) { + + if ( !keepData && elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem ) ); + } + + if ( elem.parentNode ) { + if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) { + setGlobalEval( getAll( elem, "script" ) ); + } + elem.parentNode.removeChild( elem ); + } + } + + return this; + }, + + empty: function() { + var elem, + i = 0; + + for ( ; (elem = this[i]) != null; i++ ) { + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + } + + // Remove any remaining nodes + while ( elem.firstChild ) { + elem.removeChild( elem.firstChild ); + } + + // If this is a select, ensure that it displays empty (#12336) + // Support: IE<9 + if ( elem.options && jQuery.nodeName( elem, "select" ) ) { + elem.options.length = 0; + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map(function() { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + }); + }, + + html: function( value ) { + return access( this, function( value ) { + var elem = this[ 0 ] || {}, + i = 0, + l = this.length; + + if ( value === undefined ) { + return elem.nodeType === 1 ? + elem.innerHTML.replace( rinlinejQuery, "" ) : + undefined; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + ( support.htmlSerialize || !rnoshimcache.test( value ) ) && + ( support.leadingWhitespace || !rleadingWhitespace.test( value ) ) && + !wrapMap[ (rtagName.exec( value ) || [ "", "" ])[ 1 ].toLowerCase() ] ) { + + value = value.replace( rxhtmlTag, "<$1>" ); + + try { + for (; i < l; i++ ) { + // Remove element nodes and prevent memory leaks + elem = this[i] || {}; + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch(e) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function() { + var arg = arguments[ 0 ]; + + // Make the changes, replacing each context element with the new content + this.domManip( arguments, function( elem ) { + arg = this.parentNode; + + jQuery.cleanData( getAll( this ) ); + + if ( arg ) { + arg.replaceChild( elem, this ); + } + }); + + // Force removal if there was no new content (e.g., from empty arguments) + return arg && (arg.length || arg.nodeType) ? this : this.remove(); + }, + + detach: function( selector ) { + return this.remove( selector, true ); + }, + + domManip: function( args, callback ) { + + // Flatten any nested arrays + args = concat.apply( [], args ); + + var first, node, hasScripts, + scripts, doc, fragment, + i = 0, + l = this.length, + set = this, + iNoClone = l - 1, + value = args[0], + isFunction = jQuery.isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( isFunction || + ( l > 1 && typeof value === "string" && + !support.checkClone && rchecked.test( value ) ) ) { + return this.each(function( index ) { + var self = set.eq( index ); + if ( isFunction ) { + args[0] = value.call( this, index, self.html() ); + } + self.domManip( args, callback ); + }); + } + + if ( l ) { + fragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, this ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + if ( first ) { + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( this[i], node, i ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Reenable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !jQuery._data( node, "globalEval" ) && jQuery.contains( doc, node ) ) { + + if ( node.src ) { + // Optional AJAX dependency, but won't run scripts if not present + if ( jQuery._evalUrl ) { + jQuery._evalUrl( node.src ); + } + } else { + jQuery.globalEval( ( node.text || node.textContent || node.innerHTML || "" ).replace( rcleanScript, "" ) ); + } + } + } + } + + // Fix #11809: Avoid leaking memory + fragment = first = null; + } + } + + return this; + } +}); + +jQuery.each({ + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" +}, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + i = 0, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone(true); + jQuery( insert[i] )[ original ]( elems ); + + // Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get() + push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; +}); + + +var iframe, + elemdisplay = {}; + +/** + * Retrieve the actual display of a element + * @param {String} name nodeName of the element + * @param {Object} doc Document object + */ +// Called only from within defaultDisplay +function actualDisplay( name, doc ) { + var style, + elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ), + + // getDefaultComputedStyle might be reliably used only on attached element + display = window.getDefaultComputedStyle && ( style = window.getDefaultComputedStyle( elem[ 0 ] ) ) ? + + // Use of this method is a temporary fix (more like optmization) until something better comes along, + // since it was removed from specification and supported only in FF + style.display : jQuery.css( elem[ 0 ], "display" ); + + // We don't have any data stored on the element, + // so use "detach" method as fast way to get rid of the element + elem.detach(); + + return display; +} + +/** + * Try to determine the default display value of an element + * @param {String} nodeName + */ +function defaultDisplay( nodeName ) { + var doc = document, + display = elemdisplay[ nodeName ]; + + if ( !display ) { + display = actualDisplay( nodeName, doc ); + + // If the simple way fails, read from inside an iframe + if ( display === "none" || !display ) { + + // Use the already-created iframe if possible + iframe = (iframe || jQuery( "